diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 131c31761c991..21b4e9d308a17 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.40.28 +current_version = 0.40.30 commit = False tag = False parse = (?P\d+)\.(?P\d+)\.(?P\d+)(\-[a-z]+)? diff --git a/.env b/.env index a8a3d5d08c398..93f952831c952 100644 --- a/.env +++ b/.env @@ -10,7 +10,7 @@ ### SHARED ### -VERSION=0.40.28 +VERSION=0.40.30 # When using the airbyte-db via default docker image CONFIG_ROOT=/data @@ -114,4 +114,4 @@ METRIC_CLIENT= OTEL_COLLECTOR_ENDPOINT="http://host.docker.internal:4317" USE_STREAM_CAPABLE_STATE=true -AUTO_DETECT_SCHEMA=false +AUTO_DETECT_SCHEMA=true diff --git a/.env.dev b/.env.dev index 4f25503451fc3..19480e7072f9a 100644 --- a/.env.dev +++ b/.env.dev @@ -28,7 +28,7 @@ SYNC_JOB_MAX_ATTEMPTS=3 SYNC_JOB_MAX_TIMEOUT_DAYS=3 WORKERS_MICRONAUT_ENVIRONMENTS=control-plane CRON_MICRONAUT_ENVIRONMENTS=control-plane -AUTO_DETECT_SCHEMA=false +AUTO_DETECT_SCHEMA=true # Sentry SENTRY_DSN="" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index fc153f7270756..915d4c89fd6db 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -27,33 +27,44 @@ airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/Co airbyte-integrations/connectors/**/build.gradle # ignore gradle files for individual connectors. # Normalization -/airbyte-integrations/bases/base-normalization/ @airbytehq/normalization +/airbyte-integrations/bases/base-normalization/ @airbytehq/destinations -# JDBC-based connectors +# Java-based connectors /airbyte-integrations/bases/base-java/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-jdbc/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-alloydb/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-bigquery/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-clickhouse/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-cockroachdb/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-db2/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-mssql/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-mysql/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-oracle/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-postgres/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-redshift/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-snowflake/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-tidb/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-jdbc/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-azure-blob-storage/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-clickhouse/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-databricks/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-gcs/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-mariadb-columnstore/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-mysql/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-mssql/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-oracle/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-postgres/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-redshift/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/destination-rockset/ @airbytehq/jdbc-connectors -/airbyte-integrations/connectors/source-snowflake/ @airbytehq/jdbc-connectors + +# Java-based source connectors +/airbyte-integrations/bases/debezium-v1-4-2/ @airbytehq/dbsources +/airbyte-integrations/bases/debezium-v1-9-6/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-jdbc/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-alloydb/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-bigquery/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-clickhouse/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-cockroachdb/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-db2/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-mssql/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-mysql/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-oracle/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-postgres/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-redshift/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-snowflake/ @airbytehq/dbsources +/airbyte-integrations/connectors/source-tidb/ @airbytehq/dbsources + +# 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/connectors/destination-bigquery/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-bigquery-denormalized/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-azure-blob-storage/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-clickhouse/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-databricks/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-gcs/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-mariadb-columnstore/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-mysql/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-mssql/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-oracle/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-postgres/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-redshift/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-rockset/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-s3/ @airbytehq/destinations +/airbyte-integrations/connectors/destination-snowflake/ @airbytehq/destinations diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 64e581499f49b..31a52a2adfbf9 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -124,6 +124,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: "3.9" + token: ${{ env.PAT }} - name: Set up CI Gradle Properties run: | @@ -229,6 +230,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: "3.9" + token: ${{ env.PAT }} - name: Install Pyenv run: python3 -m pip install virtualenv==16.7.9 --user @@ -412,6 +414,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: "3.9" + token: ${{ env.PAT }} - name: Set up CI Gradle Properties run: | @@ -535,6 +538,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: "3.9" + token: ${{ env.PAT }} - name: Delete default old docker and replace it with a new one shell: bash @@ -666,6 +670,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: "3.9" + token: ${{ env.PAT }} - uses: actions/setup-node@v3 with: @@ -800,6 +805,7 @@ jobs: if: always() with: python-version: "3.9" + token: ${{ env.PAT }} - name: Publish Platform Test Results uses: EnricoMi/publish-unit-test-result-action@v2 @@ -945,6 +951,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: "3.9" + token: ${{ env.PAT }} - name: Install unzip shell: bash @@ -1021,6 +1028,7 @@ jobs: if: always() with: python-version: "3.9" + token: ${{ env.PAT }} - name: Publish Kube Test Results id: kube-results @@ -1191,6 +1199,7 @@ jobs: - uses: actions/setup-python@v4 with: python-version: "3.9" + token: ${{ env.PAT }} - uses: actions/setup-java@v1 with: diff --git a/.github/workflows/publish-cdk-command-manually.yml b/.github/workflows/publish-cdk-command-manually.yml index c51ffa0bf0ad8..ef3db19ed566e 100644 --- a/.github/workflows/publish-cdk-command-manually.yml +++ b/.github/workflows/publish-cdk-command-manually.yml @@ -20,7 +20,7 @@ on: - patch required: true skip-publish-test: - description: 'By default, the job publishes to Test PyPi. Use "true" to only publish to actual PyPi servers.' + description: 'By default, the job publishes to both Test and actual PyPi. Use "true" to only publish to actual PyPi servers.' required: false changelog-message: description: "Changelog message to be added to CHANGELOG.md" @@ -178,14 +178,14 @@ jobs: "type": "section", "text": { "type": "mrkdwn", - "text": "A new version of Airbyte CDK has been released!\n\n" + "text": "A new version of Airbyte CDK has been released with changelog: ${{ github.event.inputs.changelog-message }}!\n\n" } }, { "type": "section", "text": { "type": "mrkdwn", - "text": "See details on and \n" + "text": "See details on \n" } } ] diff --git a/.github/workflows/run-qa-engine.yml b/.github/workflows/run-qa-engine.yml new file mode 100644 index 0000000000000..d6dce29421ecf --- /dev/null +++ b/.github/workflows/run-qa-engine.yml @@ -0,0 +1,32 @@ +name: Run QA Engine + +on: + workflow_dispatch: + schedule: + # 1pm UTC is 6am PDT. + # same time as Generate Build Report + - cron: "0 13 * * *" + +jobs: + run-qa-engine: + name: "Run QA Engine" + if: github.ref == 'refs/heads/master' + runs-on: ubuntu-latest + steps: + - name: Checkout Airbyte + uses: actions/checkout@v3 + - name: Setup Cloud SDK + uses: google-github-actions/setup-gcloud@v0 + with: + service_account_key: ${{ secrets.PROD_SPEC_CACHE_SA_KEY }} + export_default_credentials: true + - name: Install Python + uses: actions/setup-python@v4 + with: + python-version: "3.9" + - name: Install ci-connector-ops package + run: pip install --quiet -e ./tools/ci_connector_ops + - name: Run QA Engine + env: + QA_ENGINE_AIRBYTE_DATA_PROD_SA: '${{ secrets.QA_ENGINE_AIRBYTE_DATA_PROD_SA }}' + run: run-qa-engine diff --git a/.github/workflows/test-command.yml b/.github/workflows/test-command.yml index 069d1cd46624e..08a7250fc6946 100644 --- a/.github/workflows/test-command.yml +++ b/.github/workflows/test-command.yml @@ -95,19 +95,12 @@ jobs: uses: actions/setup-python@v4 with: python-version: "3.9" - - name: Install Pyenv - run: | - python3 -m pip install --quiet virtualenv==16.7.9 --user - python3 -m virtualenv venv - source venv/bin/activate - name: Install CI scripts # all CI python packages have the prefix "ci_" run: | - source venv/bin/activate pip install --quiet -e ./tools/ci_* - name: Write Integration Test Credentials for ${{ github.event.inputs.connector }} run: | - source venv/bin/activate ci_credentials ${{ github.event.inputs.connector }} write-to-storage # normalization also runs destination-specific tests, so fetch their creds also if [ 'bases/base-normalization' = "${{ github.event.inputs.connector }}" ] || [ 'base-normalization' = "${{ github.event.inputs.connector }}" ]; then @@ -117,7 +110,6 @@ jobs: fi env: GCP_GSM_CREDENTIALS: ${{ secrets.GCP_GSM_CREDENTIALS }} - - name: Test ${{ github.event.inputs.connector }} id: test env: @@ -132,7 +124,6 @@ jobs: - name: Update Integration Test Credentials after test run for ${{ github.event.inputs.connector }} if: always() run: | - source venv/bin/activate ci_credentials ${{ github.event.inputs.connector }} update-secrets # normalization also runs destination-specific tests, so fetch their creds also if [ 'bases/base-normalization' = "${{ github.event.inputs.connector }}" ] || [ 'base-normalization' = "${{ github.event.inputs.connector }}" ]; then @@ -155,7 +146,6 @@ jobs: **/normalization_test_output/**/build/compiled/airbyte_utils/** **/normalization_test_output/**/build/run/airbyte_utils/** **/normalization_test_output/**/models/generated/** - - name: Test coverage reports artifacts if: github.event.inputs.comment-id && success() uses: actions/upload-artifact@v3 @@ -164,10 +154,14 @@ jobs: path: | **/${{ github.event.inputs.connector }}/htmlcov/** retention-days: 3 - + - name: Run QA checks for ${{ github.event.inputs.connector }} + id: qa_checks + if: always() + run: | + run-qa-checks ${{ github.event.inputs.connector }} - name: Report Status if: github.ref == 'refs/heads/master' && always() - run: ./tools/status/report.sh ${{ github.event.inputs.connector }} ${{github.repository}} ${{github.run_id}} ${{steps.test.outcome}} + run: ./tools/status/report.sh ${{ github.event.inputs.connector }} ${{github.repository}} ${{github.run_id}} ${{steps.test.outcome}} ${{steps.qa_checks.outcome}} env: AWS_ACCESS_KEY_ID: ${{ secrets.STATUS_API_AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.STATUS_API_AWS_SECRET_ACCESS_KEY }} diff --git a/.vscode/settings.json b/.vscode/settings.json index e52044ed1069b..b9d43a333b925 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -41,5 +41,6 @@ "editor.codeActionsOnSave": { "source.fixAll.stylelint": true } - } + }, + "typescript.tsdk": "./airbyte-webapp/node_modules/typescript/lib" } diff --git a/airbyte-api/src/main/openapi/config.yaml b/airbyte-api/src/main/openapi/config.yaml index 79ec520942b2c..9d4dd02ce2102 100644 --- a/airbyte-api/src/main/openapi/config.yaml +++ b/airbyte-api/src/main/openapi/config.yaml @@ -754,6 +754,27 @@ paths: $ref: "#/components/responses/NotFoundResponse" "422": $ref: "#/components/responses/InvalidInputResponse" + + /v1/sources/write_discover_catalog_result: + post: + tags: + - source + - internal + summary: Should only called from worker, to write result from discover activity back to DB. + operationId: writeDiscoverCatalogResult + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/SourceDiscoverSchemaWriteRequestBody" + required: true + responses: + "200": + description: Successful Operation + content: + application/json: + schema: + $ref: "#/components/schemas/DiscoverCatalogResult" /v1/destination_definitions/update: post: tags: @@ -1219,7 +1240,7 @@ paths: description: | Apply a patch-style update to a connection. Only fields present on the update request body will be updated. Note that if a catalog is present in the request body, the connection's entire catalog will be replaced - with the catalog from the request. This means that to modify a single stream, the entire new catalog + with the catalog from the request. This means that to modify a single stream, the entire new catalog containing the updated stream needs to be sent. operationId: updateConnection requestBody: @@ -1862,7 +1883,7 @@ paths: connection along with the rest of the operationIds in the request body. Apply a patch-style update to a connection. Only fields present on the update request body will be updated. Note that if a catalog is present in the request body, the connection's entire catalog will be replaced - with the catalog from the request. This means that to modify a single stream, the entire new catalog + with the catalog from the request. This means that to modify a single stream, the entire new catalog containing the updated stream needs to be sent. operationId: webBackendUpdateConnection requestBody: @@ -1931,9 +1952,9 @@ paths: - web_backend description: Returns all available geographies in which a data sync can run. summary: | - Returns available geographies can be selected to run data syncs in a particular geography. - The 'auto' entry indicates that the sync will be automatically assigned to a geography according - to the platform default behavior. Entries other than 'auto' are two-letter country codes that + Returns available geographies can be selected to run data syncs in a particular geography. + The 'auto' entry indicates that the sync will be automatically assigned to a geography according + to the platform default behavior. Entries other than 'auto' are two-letter country codes that follow the ISO 3166-1 alpha-2 standard. operationId: webBackendListGeographies responses: @@ -1989,6 +2010,28 @@ paths: $ref: "#/components/responses/NotFoundResponse" "422": $ref: "#/components/responses/InvalidInputResponse" + /v1/jobs/get_last_replication_job: + post: + tags: + - jobs + operationId: getLastReplicationJob + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ConnectionIdRequestBody" + required: true + responses: + "200": + description: Successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/JobOptionalRead" + "404": + $ref: "#/components/responses/NotFoundResponse" + "422": + $ref: "#/components/responses/InvalidInputResponse" /v1/jobs/get_light: post: tags: @@ -2790,6 +2833,21 @@ components: type: array items: $ref: "#/components/schemas/SourceRead" + SourceDiscoverSchemaWriteRequestBody: + description: to write this requested object to database. + type: object + required: + - catalog + properties: + catalog: + $ref: "#/components/schemas/AirbyteCatalog" + sourceId: + $ref: "#/components/schemas/SourceId" + connectorVersion: + type: string + configurationHash: + type: string + SourceDiscoverSchemaRead: description: Returns the results of a discover catalog job. If the job was not successful, the catalog field will not be present. jobInfo will aways be present and its status be used to determine if the job was successful or not. type: object @@ -3821,7 +3879,10 @@ components: description: Alias name to the stream to be used in the destination type: string selected: - description: If this is true, the stream is selected with all of its properties. + description: If this is true, the stream is selected with all of its properties. For new connections, this considers if the stream is suggested or not + type: boolean + suggested: + description: Does the connector suggest that this stream be enabled by default? type: boolean fieldSelectionEnabled: description: Whether field selection should be enabled. If this is true, only the properties in `selectedFields` will be included. @@ -3907,6 +3968,9 @@ components: updatedAt: type: integer format: int64 + startedAt: + type: integer + format: int64 status: $ref: "#/components/schemas/JobStatus" resetConfig: @@ -4142,6 +4206,11 @@ components: properties: job: $ref: "#/components/schemas/JobRead" + JobOptionalRead: + type: object + properties: + job: + $ref: "#/components/schemas/JobRead" JobDebugInfoRead: type: object required: @@ -4963,6 +5032,14 @@ components: properties: succeeded: type: boolean + DiscoverCatalogResult: + type: object + required: + - catalogId + properties: + catalogId: + type: string + format: uuid AttemptNormalizationStatusReadList: type: object properties: diff --git a/airbyte-bootloader/Dockerfile b/airbyte-bootloader/Dockerfile index ab84c7829c603..54f97849b8c7e 100644 --- a/airbyte-bootloader/Dockerfile +++ b/airbyte-bootloader/Dockerfile @@ -1,7 +1,7 @@ ARG JDK_IMAGE=airbyte/airbyte-base-java-image:1.0 FROM ${JDK_IMAGE} -ARG VERSION=0.40.28 +ARG VERSION=0.40.30 ENV APPLICATION airbyte-bootloader ENV VERSION ${VERSION} diff --git a/airbyte-bootloader/src/test/java/io/airbyte/bootloader/BootloaderTest.java b/airbyte-bootloader/src/test/java/io/airbyte/bootloader/BootloaderTest.java index 4939a3e2ea6b0..032ec01e66c43 100644 --- a/airbyte-bootloader/src/test/java/io/airbyte/bootloader/BootloaderTest.java +++ b/airbyte-bootloader/src/test/java/io/airbyte/bootloader/BootloaderTest.java @@ -82,7 +82,7 @@ class BootloaderTest { // ⚠️ This line should change with every new migration to show that you meant to make a new // migration to the prod database - private static final String CURRENT_MIGRATION_VERSION = "0.40.27.001"; + private static final String CURRENT_MIGRATION_VERSION = "0.40.28.001"; @BeforeEach void setup() { diff --git a/airbyte-cdk/python/.bumpversion.cfg b/airbyte-cdk/python/.bumpversion.cfg index f5b3e4e22b3b6..a503f43197a37 100644 --- a/airbyte-cdk/python/.bumpversion.cfg +++ b/airbyte-cdk/python/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.21.0 +current_version = 0.25.0 commit = False [bumpversion:file:setup.py] diff --git a/airbyte-cdk/python/CHANGELOG.md b/airbyte-cdk/python/CHANGELOG.md index 2499aef31e9a8..97bc82da7605c 100644 --- a/airbyte-cdk/python/CHANGELOG.md +++ b/airbyte-cdk/python/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 0.25.0 +Use dpath.util.values method to parse response with nested lists + +## 0.24.0 +Use dpath.util.values method to parse response with nested lists + +## 0.23.0 +Limiting the number of HTTP requests during a test read + +## 0.22.0 +Surface the resolved manifest in the CDK + ## 0.21.0 Add AvailabilityStrategy concept and use check_availability within CheckStream diff --git a/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py b/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py index 3f9efab8e48f2..a9efc45fb21bc 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/abstract_source.py @@ -2,6 +2,7 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # +import json import logging from abc import ABC, abstractmethod from typing import Any, Dict, Iterator, List, Mapping, MutableMapping, Optional, Tuple, Union @@ -9,10 +10,12 @@ from airbyte_cdk.models import ( AirbyteCatalog, AirbyteConnectionStatus, + AirbyteLogMessage, AirbyteMessage, AirbyteStateMessage, ConfiguredAirbyteCatalog, ConfiguredAirbyteStream, + Level, Status, SyncMode, ) @@ -34,6 +37,8 @@ class AbstractSource(Source, ABC): in this class to create an Airbyte Specification compliant Source. """ + SLICE_LOG_PREFIX = "slice:" + @abstractmethod def check_connection(self, logger: logging.Logger, config: Mapping[str, Any]) -> Tuple[bool, Optional[Any]]: """ @@ -236,7 +241,10 @@ def _read_incremental( has_slices = False for _slice in slices: has_slices = True - logger.debug("Processing stream slice", extra={"slice": _slice}) + if logger.isEnabledFor(logging.DEBUG): + yield AirbyteMessage( + type=MessageType.LOG, log=AirbyteLogMessage(level=Level.INFO, message=f"{self.SLICE_LOG_PREFIX}{json.dumps(_slice)}") + ) records = stream_instance.read_records( sync_mode=SyncMode.incremental, stream_slice=_slice, @@ -285,7 +293,10 @@ def _read_full_refresh( ) total_records_counter = 0 for _slice in slices: - logger.debug("Processing stream slice", extra={"slice": _slice}) + if logger.isEnabledFor(logging.DEBUG): + yield AirbyteMessage( + type=MessageType.LOG, log=AirbyteLogMessage(level=Level.INFO, message=f"{self.SLICE_LOG_PREFIX}{json.dumps(_slice)}") + ) record_data_or_messages = stream_instance.read_records( stream_slice=_slice, sync_mode=SyncMode.full_refresh, diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py index 164161de63e6a..01387c7ad6903 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/extractors/dpath_extractor.py @@ -70,7 +70,10 @@ def extract_records(self, response: requests.Response) -> List[Record]: extracted = response_body else: pointer = [pointer.eval(self.config) for pointer in self.field_pointer] - extracted = dpath.util.get(response_body, pointer, default=[]) + if "*" in pointer: + extracted = dpath.util.values(response_body, pointer) + else: + extracted = dpath.util.get(response_body, pointer, default=[]) if isinstance(extracted, list): return extracted elif extracted: 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 ca010c7782ec9..05d9e74113583 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 @@ -50,7 +50,13 @@ class ManifestDeclarativeSource(DeclarativeSource): VALID_TOP_LEVEL_FIELDS = {"check", "definitions", "schemas", "spec", "streams", "type", "version"} - def __init__(self, source_config: ConnectionDefinition, debug: bool = False, construct_using_pydantic_models: bool = False): + def __init__( + self, + source_config: ConnectionDefinition, + debug: bool = False, + component_factory: ModelToComponentFactory = None, + construct_using_pydantic_models: bool = False, + ): """ :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 @@ -71,7 +77,12 @@ def __init__(self, source_config: ConnectionDefinition, debug: bool = False, con self._legacy_source_config = resolved_source_config self._debug = debug self._legacy_factory = DeclarativeComponentFactory() # Legacy factory used to instantiate declarative components from the manifest - self._constructor = ModelToComponentFactory() # New factory which converts the manifest to Pydantic models to construct components + if component_factory: + self._constructor = component_factory + else: + self._constructor = ( + ModelToComponentFactory() + ) # New factory which converts the manifest to Pydantic models to construct components self._validate_source() @@ -81,6 +92,10 @@ def __init__(self, source_config: ConnectionDefinition, debug: bool = False, con if unknown_fields: raise InvalidConnectorDefinitionException(f"Found unknown top-level fields: {unknown_fields}") + @property + def resolved_manifest(self) -> Mapping[str, Any]: + return self._new_source_config + @property def connection_checker(self) -> ConnectionChecker: check = self._new_source_config["check"] if self.construct_using_pydantic_models else self._legacy_source_config["check"] 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 b8a307ce799c0..8f022f34fa3ad 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 @@ -89,11 +89,11 @@ WaitUntilTimeFromHeaderBackoffStrategy, ) from airbyte_cdk.sources.declarative.requesters.error_handlers.response_action import ResponseAction -from airbyte_cdk.sources.declarative.requesters.paginators import DefaultPaginator, NoPagination +from airbyte_cdk.sources.declarative.requesters.paginators import DefaultPaginator, NoPagination, PaginatorTestReadDecorator from airbyte_cdk.sources.declarative.requesters.paginators.strategies import CursorPaginationStrategy, OffsetIncrement, PageIncrement from airbyte_cdk.sources.declarative.requesters.request_option import RequestOptionType from airbyte_cdk.sources.declarative.requesters.request_options import InterpolatedRequestOptionsProvider -from airbyte_cdk.sources.declarative.retrievers import SimpleRetriever +from airbyte_cdk.sources.declarative.retrievers import SimpleRetriever, SimpleRetrieverTestReadDecorator from airbyte_cdk.sources.declarative.schema import DefaultSchemaLoader, InlineSchemaLoader, JsonFileSchemaLoader from airbyte_cdk.sources.declarative.spec import Spec from airbyte_cdk.sources.declarative.stream_slicers import ( @@ -116,8 +116,71 @@ class ModelToComponentFactory: - @staticmethod - def create_component(model_type: Type[BaseModel], component_definition: ComponentDefinition, config: Config) -> type: + def __init__(self, limit_pages_fetched_per_slice: int = None, limit_slices_fetched: int = None): + self._init_mappings() + self._limit_pages_fetched_per_slice = limit_pages_fetched_per_slice + self._limit_slices_fetched = limit_slices_fetched + + def _init_mappings(self): + self.PYDANTIC_MODEL_TO_CONSTRUCTOR: [Type[BaseModel], Callable] = { + AddedFieldDefinitionModel: self.create_added_field_definition, + AddFieldsModel: self.create_add_fields, + ApiKeyAuthenticatorModel: self.create_api_key_authenticator, + BasicHttpAuthenticatorModel: self.create_basic_http_authenticator, + BearerAuthenticatorModel: self.create_bearer_authenticator, + CheckStreamModel: self.create_check_stream, + CartesianProductStreamSlicerModel: self.create_cartesian_product_slicer, + CompositeErrorHandlerModel: self.create_composite_error_handler, + ConstantBackoffStrategyModel: self.create_constant_backoff_strategy, + CursorPaginationModel: self.create_cursor_pagination, + CustomAuthenticatorModel: self.create_custom_component, + CustomBackoffStrategyModel: self.create_custom_component, + CustomErrorHandlerModel: self.create_custom_component, + CustomRecordExtractorModel: self.create_custom_component, + CustomRequesterModel: self.create_custom_component, + CustomRequestOptionsProviderModel: self.create_custom_component, + # todo: Remove later when we deprecate request providers from interface + CustomRetrieverModel: self.create_custom_component, + CustomPaginationStrategyModel: self.create_custom_component, + CustomStreamSlicerModel: self.create_custom_component, + CustomTransformationModel: self.create_custom_component, + DatetimeStreamSlicerModel: self.create_datetime_stream_slicer, + DeclarativeStreamModel: self.create_declarative_stream, + DefaultErrorHandlerModel: self.create_default_error_handler, + DefaultPaginatorModel: self.create_default_paginator, + DpathExtractorModel: self.create_dpath_extractor, + ExponentialBackoffStrategyModel: self.create_exponential_backoff_strategy, + HttpRequesterModel: self.create_http_requester, + HttpResponseFilterModel: self.create_http_response_filter, + InlineSchemaLoaderModel: self.create_inline_schema_loader, + InterpolatedRequestOptionsProviderModel: self.create_interpolated_request_options_provider, + JsonDecoderModel: self.create_json_decoder, + JsonFileSchemaLoaderModel: self.create_json_file_schema_loader, + ListStreamSlicerModel: self.create_list_stream_slicer, + MinMaxDatetimeModel: self.create_min_max_datetime, + NoAuthModel: self.create_no_auth, + NoPaginationModel: self.create_no_pagination, + OAuthAuthenticatorModel: self.create_oauth_authenticator, + OffsetIncrementModel: self.create_offset_increment, + PageIncrementModel: self.create_page_increment, + ParentStreamConfigModel: self.create_parent_stream_config, + RecordFilterModel: self.create_record_filter, + RecordSelectorModel: self.create_record_selector, + RemoveFieldsModel: self.create_remove_fields, + RequestOptionModel: self.create_request_option, + SessionTokenAuthenticatorModel: self.create_session_token_authenticator, + SimpleRetrieverModel: self.create_simple_retriever, + SingleSliceModel: self.create_single_slice, + SpecModel: self.create_spec, + SubstreamSlicerModel: self.create_substream_slicer, + WaitTimeFromHeaderModel: self.create_wait_time_from_header, + WaitUntilTimeFromHeaderModel: self.create_wait_until_time_from_header, + } + + # Needed for the case where we need to perform a second parse on the fields of a custom component + self.TYPE_NAME_TO_MODEL = {cls.__name__: cls for cls in self.PYDANTIC_MODEL_TO_CONSTRUCTOR} + + def create_component(self, model_type: Type[BaseModel], component_definition: ComponentDefinition, config: Config) -> type: """ Takes a given Pydantic model type and Mapping representing a component definition and creates a declarative component and subcomponents which will be used at runtime. This is done by first parsing the mapping into a Pydantic model and then creating @@ -138,588 +201,541 @@ def create_component(model_type: Type[BaseModel], component_definition: Componen if not isinstance(declarative_component_model, model_type): raise ValueError(f"Expected {model_type.__name__} component, but received {declarative_component_model.__class__.__name__}") - return _create_component_from_model(model=declarative_component_model, config=config) + return self._create_component_from_model(model=declarative_component_model, config=config) + + def _create_component_from_model(self, model: BaseModel, config: Config, **kwargs) -> Any: + if model.__class__ not in self.PYDANTIC_MODEL_TO_CONSTRUCTOR: + raise ValueError(f"{model.__class__} with attributes {model} is not a valid component type") + component_constructor = self.PYDANTIC_MODEL_TO_CONSTRUCTOR.get(model.__class__) + return component_constructor(model=model, config=config, **kwargs) + @staticmethod + def create_added_field_definition(model: AddedFieldDefinitionModel, config: Config, **kwargs) -> AddedFieldDefinition: + interpolated_value = InterpolatedString.create(model.value, options=model.options) + return AddedFieldDefinition(path=model.path, value=interpolated_value, options=model.options) -def _create_component_from_model(model: BaseModel, config: Config, **kwargs) -> Any: - if model.__class__ not in PYDANTIC_MODEL_TO_CONSTRUCTOR: - raise ValueError(f"{model.__class__} with attributes {model} is not a valid component type") - component_constructor = PYDANTIC_MODEL_TO_CONSTRUCTOR.get(model.__class__) - return component_constructor(model=model, config=config, **kwargs) + def create_add_fields(self, model: AddFieldsModel, config: Config, **kwargs) -> AddFields: + added_field_definitions = [ + self._create_component_from_model(model=added_field_definition_model, config=config) + for added_field_definition_model in model.fields + ] + return AddFields(fields=added_field_definitions, options=model.options) + @staticmethod + def create_api_key_authenticator(model: ApiKeyAuthenticatorModel, config: Config, **kwargs) -> ApiKeyAuthenticator: + return ApiKeyAuthenticator(api_token=model.api_token, header=model.header, config=config, options=model.options) -def create_added_field_definition(model: AddedFieldDefinitionModel, config: Config, **kwargs) -> AddedFieldDefinition: - interpolated_value = InterpolatedString.create(model.value, options=model.options) - return AddedFieldDefinition(path=model.path, value=interpolated_value, options=model.options) + @staticmethod + def create_basic_http_authenticator(model: BasicHttpAuthenticatorModel, config: Config, **kwargs) -> BasicHttpAuthenticator: + return BasicHttpAuthenticator(password=model.password, username=model.username, config=config, options=model.options) + + @staticmethod + def create_bearer_authenticator(model: BearerAuthenticatorModel, config: Config, **kwargs) -> BearerAuthenticator: + return BearerAuthenticator( + api_token=model.api_token, + config=config, + options=model.options, + ) + def create_cartesian_product_slicer( + self, model: CartesianProductStreamSlicerModel, config: Config, **kwargs + ) -> CartesianProductStreamSlicer: + stream_slicers = [ + self._create_component_from_model(model=stream_slicer_model, config=config) for stream_slicer_model in model.stream_slicers + ] + return CartesianProductStreamSlicer(stream_slicers=stream_slicers, options=model.options) -def create_add_fields(model: AddFieldsModel, config: Config, **kwargs) -> AddFields: - added_field_definitions = [ - _create_component_from_model(model=added_field_definition_model, config=config) for added_field_definition_model in model.fields - ] - return AddFields(fields=added_field_definitions, options=model.options) + @staticmethod + def create_check_stream(model: CheckStreamModel, config: Config, **kwargs): + return CheckStream(stream_names=model.stream_names, options={}) + def create_composite_error_handler(self, model: CompositeErrorHandlerModel, config: Config, **kwargs) -> CompositeErrorHandler: + error_handlers = [ + self._create_component_from_model(model=error_handler_model, config=config) for error_handler_model in model.error_handlers + ] + return CompositeErrorHandler(error_handlers=error_handlers, options=model.options) -def create_api_key_authenticator(model: ApiKeyAuthenticatorModel, config: Config, **kwargs) -> ApiKeyAuthenticator: - return ApiKeyAuthenticator(api_token=model.api_token, header=model.header, config=config, options=model.options) + @staticmethod + def create_constant_backoff_strategy(model: ConstantBackoffStrategyModel, config: Config, **kwargs) -> ConstantBackoffStrategy: + return ConstantBackoffStrategy( + backoff_time_in_seconds=model.backoff_time_in_seconds, + config=config, + options=model.options, + ) + def create_cursor_pagination(self, model: CursorPaginationModel, config: Config, **kwargs) -> CursorPaginationStrategy: + if model.decoder: + decoder = self._create_component_from_model(model=model.decoder, config=config) + else: + decoder = JsonDecoder(options=model.options) + + return CursorPaginationStrategy( + cursor_value=model.cursor_value, + decoder=decoder, + page_size=model.page_size, + stop_condition=model.stop_condition, + config=config, + options=model.options, + ) -def create_basic_http_authenticator(model: BasicHttpAuthenticatorModel, config: Config, **kwargs) -> BasicHttpAuthenticator: - return BasicHttpAuthenticator(password=model.password, username=model.username, config=config, options=model.options) + def create_custom_component(self, model, config: Config, **kwargs) -> type: + """ + Generically creates a custom component based on the model type and a class_name reference to the custom Python class being + instantiated. Only the model's additional properties that match the custom class definition are passed to the constructor + :param model: The Pydantic model of the custom component being created + :param config: The custom defined connector config + :return: The declarative component built from the Pydantic model to be used at runtime + """ + custom_component_class = self._get_class_from_fully_qualified_class_name(model.class_name) + component_fields = get_type_hints(custom_component_class) + model_args = model.dict() + model_args["config"] = config + + # Pydantic is unable to parse a custom component's fields that are subcomponents into models because their fields and types are not + # defined in the schema. The fields and types are defined within the Python class implementation. Pydantic can only parse down to + # the custom component and this code performs a second parse to convert the sub-fields first into models, then declarative components + for model_field, model_value in model_args.items(): + # If a custom component field doesn't have a type set, we try to use the type hints to infer the type + if isinstance(model_value, dict) and "type" not in model_value and model_field in component_fields: + derived_type = self._derive_component_type_from_type_hints(component_fields.get(model_field)) + if derived_type: + model_value["type"] = derived_type + + if self._is_component(model_value): + model_args[model_field] = self._create_nested_component(model, model_field, model_value, config) + elif isinstance(model_value, list): + vals = [] + for v in model_value: + if isinstance(v, dict) and "type" not in v and model_field in component_fields: + derived_type = self._derive_component_type_from_type_hints(component_fields.get(model_field)) + if derived_type: + v["type"] = derived_type + if self._is_component(v): + vals.append(self._create_nested_component(model, model_field, v, config)) + else: + vals.append(v) + model_args[model_field] = vals + + kwargs = {class_field: model_args[class_field] for class_field in component_fields.keys() if class_field in model_args} + return custom_component_class(**kwargs) -def create_bearer_authenticator(model: BearerAuthenticatorModel, config: Config, **kwargs) -> BearerAuthenticator: - return BearerAuthenticator( - api_token=model.api_token, - config=config, - options=model.options, - ) + @staticmethod + def _get_class_from_fully_qualified_class_name(class_name: str) -> type: + split = class_name.split(".") + module = ".".join(split[:-1]) + class_name = split[-1] + return getattr(importlib.import_module(module), class_name) + @staticmethod + def _derive_component_type_from_type_hints(field_type: str) -> Optional[str]: + interface = field_type + while True: + origin = get_origin(interface) + if origin: + # Unnest types until we reach the raw type + # List[T] -> T + # Optional[List[T]] -> T + args = get_args(interface) + interface = args[0] + else: + break + if isinstance(interface, type) and not ModelToComponentFactory.is_builtin_type(interface): + return interface.__name__ + return None -def create_cartesian_product_slicer(model: CartesianProductStreamSlicerModel, config: Config, **kwargs) -> CartesianProductStreamSlicer: - stream_slicers = [ - _create_component_from_model(model=stream_slicer_model, config=config) for stream_slicer_model in model.stream_slicers - ] - return CartesianProductStreamSlicer(stream_slicers=stream_slicers, options=model.options) - - -def create_check_stream(model: CheckStreamModel, config: Config, **kwargs): - return CheckStream(stream_names=model.stream_names, options={}) - - -def create_composite_error_handler(model: CompositeErrorHandlerModel, config: Config, **kwargs) -> CompositeErrorHandler: - error_handlers = [ - _create_component_from_model(model=error_handler_model, config=config) for error_handler_model in model.error_handlers - ] - return CompositeErrorHandler(error_handlers=error_handlers, options=model.options) - - -def create_constant_backoff_strategy(model: ConstantBackoffStrategyModel, config: Config, **kwargs) -> ConstantBackoffStrategy: - return ConstantBackoffStrategy( - backoff_time_in_seconds=model.backoff_time_in_seconds, - config=config, - options=model.options, - ) - - -def create_cursor_pagination(model: CursorPaginationModel, config: Config, **kwargs) -> CursorPaginationStrategy: - if model.decoder: - decoder = _create_component_from_model(model=model.decoder, config=config) - else: - decoder = JsonDecoder(options=model.options) - - return CursorPaginationStrategy( - cursor_value=model.cursor_value, - decoder=decoder, - page_size=model.page_size, - stop_condition=model.stop_condition, - config=config, - options=model.options, - ) - - -def create_custom_component(model, config: Config, **kwargs) -> type: - """ - Generically creates a custom component based on the model type and a class_name reference to the custom Python class being - instantiated. Only the model's additional properties that match the custom class definition are passed to the constructor - :param model: The Pydantic model of the custom component being created - :param config: The custom defined connector config - :return: The declarative component built from the Pydantic model to be used at runtime - """ - - custom_component_class = _get_class_from_fully_qualified_class_name(model.class_name) - component_fields = get_type_hints(custom_component_class) - model_args = model.dict() - model_args["config"] = config - - # Pydantic is unable to parse a custom component's fields that are subcomponents into models because their fields and types are not - # defined in the schema. The fields and types are defined within the Python class implementation. Pydantic can only parse down to - # the custom component and this code performs a second parse to convert the sub-fields first into models, then declarative components - for model_field, model_value in model_args.items(): - # If a custom component field doesn't have a type set, we try to use the type hints to infer the type - if isinstance(model_value, dict) and "type" not in model_value and model_field in component_fields: - derived_type = _derive_component_type_from_type_hints(component_fields.get(model_field)) - if derived_type: - model_value["type"] = derived_type - - if _is_component(model_value): - model_args[model_field] = _create_nested_component(model, model_field, model_value, config) - elif isinstance(model_value, list): - vals = [] - for v in model_value: - if isinstance(v, dict) and "type" not in v and model_field in component_fields: - derived_type = _derive_component_type_from_type_hints(component_fields.get(model_field)) - if derived_type: - v["type"] = derived_type - if _is_component(v): - vals.append(_create_nested_component(model, model_field, v, config)) - else: - vals.append(v) - model_args[model_field] = vals - - kwargs = {class_field: model_args[class_field] for class_field in component_fields.keys() if class_field in model_args} - return custom_component_class(**kwargs) - - -def _get_class_from_fully_qualified_class_name(class_name: str) -> type: - split = class_name.split(".") - module = ".".join(split[:-1]) - class_name = split[-1] - return getattr(importlib.import_module(module), class_name) - - -def _derive_component_type_from_type_hints(field_type: str) -> Optional[str]: - interface = field_type - while True: - origin = get_origin(interface) - if origin: - # Unnest types until we reach the raw type - # List[T] -> T - # Optional[List[T]] -> T - args = get_args(interface) - interface = args[0] + @staticmethod + def is_builtin_type(cls) -> bool: + if not cls: + return False + return cls.__module__ == "builtins" + + def _create_nested_component(self, model, model_field: str, model_value: Any, config: Config) -> Any: + type_name = model_value.get("type", None) + if not type_name: + # If no type is specified, we can assume this is a dictionary object which can be returned instead of a subcomponent + return model_value + + model_type = self.TYPE_NAME_TO_MODEL.get(type_name, None) + if model_type: + parsed_model = model_type.parse_obj(model_value) + return self._create_component_from_model(model=parsed_model, config=config) else: - break - if isinstance(interface, type) and not is_builtin_type(interface): - return interface.__name__ - return None - - -def is_builtin_type(cls) -> bool: - if not cls: - return False - return cls.__module__ == "builtins" - - -def _create_nested_component(model, model_field: str, model_value: Any, config: Config) -> Any: - type_name = model_value.get("type", None) - if not type_name: - # If no type is specified, we can assume this is a dictionary object which can be returned instead of a subcomponent - return model_value - - model_type = TYPE_NAME_TO_MODEL.get(type_name, None) - if model_type: - parsed_model = model_type.parse_obj(model_value) - return _create_component_from_model(model=parsed_model, config=config) - else: - raise ValueError( - f"Error creating custom component {model.class_name}. Subcomponent creation has not been implemented for '{type_name}'" + raise ValueError( + f"Error creating custom component {model.class_name}. Subcomponent creation has not been implemented for '{type_name}'" + ) + + @staticmethod + def _is_component(model_value: Any) -> bool: + return isinstance(model_value, dict) and model_value.get("type") + + def create_datetime_stream_slicer(self, model: DatetimeStreamSlicerModel, config: Config, **kwargs) -> DatetimeStreamSlicer: + start_datetime = ( + model.start_datetime if isinstance(model.start_datetime, str) else self.create_min_max_datetime(model.start_datetime, config) + ) + end_datetime = ( + model.end_datetime if isinstance(model.end_datetime, str) else self.create_min_max_datetime(model.end_datetime, config) ) + end_time_option = ( + RequestOption( + inject_into=RequestOptionType(model.end_time_option.inject_into.value), + field_name=model.end_time_option.field_name, + options=model.options, + ) + if model.end_time_option + else None + ) + start_time_option = ( + RequestOption( + inject_into=RequestOptionType(model.start_time_option.inject_into.value), + field_name=model.start_time_option.field_name, + options=model.options, + ) + if model.start_time_option + else None + ) -def _is_component(model_value: Any) -> bool: - return isinstance(model_value, dict) and model_value.get("type") + return DatetimeStreamSlicer( + cursor_field=model.cursor_field, + cursor_granularity=model.cursor_granularity, + datetime_format=model.datetime_format, + end_datetime=end_datetime, + start_datetime=start_datetime, + step=model.step, + end_time_option=end_time_option, + lookback_window=model.lookback_window, + start_time_option=start_time_option, + stream_state_field_end=model.stream_state_field_end, + stream_state_field_start=model.stream_state_field_start, + config=config, + options=model.options, + ) + + def create_declarative_stream(self, model: DeclarativeStreamModel, config: Config, **kwargs) -> DeclarativeStream: + retriever = self._create_component_from_model(model=model.retriever, config=config) + + if model.schema_loader: + schema_loader = self._create_component_from_model(model=model.schema_loader, config=config) + else: + options = model.options or {} + if "name" not in options: + options["name"] = model.name + schema_loader = DefaultSchemaLoader(config=config, options=options) + + transformations = [] + if model.transformations: + for transformation_model in model.transformations: + transformations.append(self._create_component_from_model(model=transformation_model, config=config)) + return DeclarativeStream( + checkpoint_interval=model.checkpoint_interval, + name=model.name, + primary_key=model.primary_key, + retriever=retriever, + schema_loader=schema_loader, + stream_cursor_field=model.stream_cursor_field or [], + transformations=transformations, + config=config, + options={}, + ) + def create_default_error_handler(self, model: DefaultErrorHandlerModel, config: Config, **kwargs) -> DefaultErrorHandler: + backoff_strategies = [] + if model.backoff_strategies: + for backoff_strategy_model in model.backoff_strategies: + backoff_strategies.append(self._create_component_from_model(model=backoff_strategy_model, config=config)) + else: + backoff_strategies.append(DEFAULT_BACKOFF_STRATEGY(config=config, options=model.options)) -def create_datetime_stream_slicer(model: DatetimeStreamSlicerModel, config: Config, **kwargs) -> DatetimeStreamSlicer: - start_datetime = ( - model.start_datetime if isinstance(model.start_datetime, str) else create_min_max_datetime(model.start_datetime, config) - ) - end_datetime = model.end_datetime if isinstance(model.end_datetime, str) else create_min_max_datetime(model.end_datetime, config) + response_filters = [] + if model.response_filters: + for response_filter_model in model.response_filters: + response_filters.append(self._create_component_from_model(model=response_filter_model, config=config)) + else: + response_filters.append( + HttpResponseFilter( + ResponseAction.RETRY, http_codes=HttpResponseFilter.DEFAULT_RETRIABLE_ERRORS, config=config, options=model.options + ) + ) + response_filters.append(HttpResponseFilter(ResponseAction.IGNORE, config=config, options=model.options)) - end_time_option = ( - RequestOption( - inject_into=RequestOptionType(model.end_time_option.inject_into.value), - field_name=model.end_time_option.field_name, + return DefaultErrorHandler( + backoff_strategies=backoff_strategies, + max_retries=model.max_retries, + response_filters=response_filters, + config=config, options=model.options, ) - if model.end_time_option - else None - ) - start_time_option = ( - RequestOption( - inject_into=RequestOptionType(model.start_time_option.inject_into.value), - field_name=model.start_time_option.field_name, + + def create_default_paginator(self, model: DefaultPaginatorModel, config: Config, **kwargs) -> DefaultPaginator: + decoder = self._create_component_from_model(model=model.decoder, config=config) if model.decoder else JsonDecoder(options={}) + page_size_option = ( + self._create_component_from_model(model=model.page_size_option, config=config) if model.page_size_option else None + ) + page_token_option = ( + self._create_component_from_model(model=model.page_token_option, config=config) if model.page_token_option else None + ) + pagination_strategy = self._create_component_from_model(model=model.pagination_strategy, config=config) + + paginator = DefaultPaginator( + decoder=decoder, + page_size_option=page_size_option, + page_token_option=page_token_option, + pagination_strategy=pagination_strategy, + url_base=model.url_base, + config=config, options=model.options, ) - if model.start_time_option - else None - ) - - return DatetimeStreamSlicer( - cursor_field=model.cursor_field, - cursor_granularity=model.cursor_granularity, - datetime_format=model.datetime_format, - end_datetime=end_datetime, - start_datetime=start_datetime, - step=model.step, - end_time_option=end_time_option, - lookback_window=model.lookback_window, - start_time_option=start_time_option, - stream_state_field_end=model.stream_state_field_end, - stream_state_field_start=model.stream_state_field_start, - config=config, - options=model.options, - ) - - -def create_declarative_stream(model: DeclarativeStreamModel, config: Config, **kwargs) -> DeclarativeStream: - retriever = _create_component_from_model(model=model.retriever, config=config) - - if model.schema_loader: - schema_loader = _create_component_from_model(model=model.schema_loader, config=config) - else: - schema_loader = DefaultSchemaLoader(config=config, options=model.options) - - transformations = [] - if model.transformations: - for transformation_model in model.transformations: - transformations.append(_create_component_from_model(model=transformation_model, config=config)) - return DeclarativeStream( - checkpoint_interval=model.checkpoint_interval, - name=model.name, - primary_key=model.primary_key, - retriever=retriever, - schema_loader=schema_loader, - stream_cursor_field=model.stream_cursor_field or [], - transformations=transformations, - config=config, - options={}, - ) - - -def create_default_error_handler(model: DefaultErrorHandlerModel, config: Config, **kwargs) -> DefaultErrorHandler: - backoff_strategies = [] - if model.backoff_strategies: - for backoff_strategy_model in model.backoff_strategies: - backoff_strategies.append(_create_component_from_model(model=backoff_strategy_model, config=config)) - else: - backoff_strategies.append(DEFAULT_BACKOFF_STRATEGY(config=config, options=model.options)) - - response_filters = [] - if model.response_filters: - for response_filter_model in model.response_filters: - response_filters.append(_create_component_from_model(model=response_filter_model, config=config)) - else: - response_filters.append( - HttpResponseFilter( - ResponseAction.RETRY, http_codes=HttpResponseFilter.DEFAULT_RETRIABLE_ERRORS, config=config, options=model.options + if self._limit_pages_fetched_per_slice: + return PaginatorTestReadDecorator(paginator, self._limit_pages_fetched_per_slice) + return paginator + + def create_dpath_extractor(self, model: DpathExtractorModel, config: Config, **kwargs) -> DpathExtractor: + decoder = self._create_component_from_model(model.decoder, config=config) if model.decoder else JsonDecoder(options={}) + return DpathExtractor(decoder=decoder, field_pointer=model.field_pointer, config=config, options=model.options) + + @staticmethod + def create_exponential_backoff_strategy(model: ExponentialBackoffStrategyModel, config: Config) -> ExponentialBackoffStrategy: + return ExponentialBackoffStrategy(factor=model.factor, options=model.options, config=config) + + def create_http_requester(self, model: HttpRequesterModel, config: Config, **kwargs) -> HttpRequester: + authenticator = self._create_component_from_model(model=model.authenticator, config=config) if model.authenticator else None + error_handler = ( + self._create_component_from_model(model=model.error_handler, config=config) + if model.error_handler + else DefaultErrorHandler(backoff_strategies=[], response_filters=[], config=config, options=model.options) + ) + request_options_provider = ( + self._create_component_from_model(model=model.request_options_provider, config=config) + if model.request_options_provider + else None + ) + + return HttpRequester( + name=model.name, + url_base=model.url_base, + path=model.path, + authenticator=authenticator, + error_handler=error_handler, + http_method=model.http_method, + request_options_provider=request_options_provider, + config=config, + options=model.options, + ) + + @staticmethod + def create_http_response_filter(model: HttpResponseFilterModel, config: Config, **kwargs) -> HttpResponseFilter: + action = ResponseAction(model.action.value) + http_codes = ( + set(model.http_codes) if model.http_codes else set() + ) # JSON schema notation has no set data type. The schema enforces an array of unique elements + + return HttpResponseFilter( + action=action, + error_message=model.error_message or "", + error_message_contains=model.error_message_contains, + http_codes=http_codes, + predicate=model.predicate or "", + config=config, + options=model.options, + ) + + @staticmethod + def create_inline_schema_loader(model: InlineSchemaLoaderModel, config: Config, **kwargs) -> InlineSchemaLoader: + return InlineSchemaLoader(schema=model.schema_, options={}) + + @staticmethod + def create_interpolated_request_options_provider( + model: InterpolatedRequestOptionsProviderModel, config: Config, **kwargs + ) -> InterpolatedRequestOptionsProvider: + return InterpolatedRequestOptionsProvider( + request_body_data=model.request_body_data, + request_body_json=model.request_body_json, + request_headers=model.request_headers, + request_parameters=model.request_parameters, + config=config, + options=model.options, + ) + + @staticmethod + def create_json_decoder(model: JsonDecoderModel, config: Config, **kwargs) -> JsonDecoder: + return JsonDecoder(options={}) + + @staticmethod + def create_json_file_schema_loader(model: JsonFileSchemaLoaderModel, config: Config, **kwargs) -> JsonFileSchemaLoader: + return JsonFileSchemaLoader(file_path=model.file_path, config=config, options=model.options) + + @staticmethod + def create_list_stream_slicer(model: ListStreamSlicerModel, config: Config, **kwargs) -> ListStreamSlicer: + request_option = ( + RequestOption( + inject_into=RequestOptionType(model.request_option.inject_into.value), + field_name=model.request_option.field_name, + options=model.options, ) + if model.request_option + else None ) - response_filters.append(HttpResponseFilter(ResponseAction.IGNORE, config=config, options=model.options)) - - return DefaultErrorHandler( - backoff_strategies=backoff_strategies, - max_retries=model.max_retries, - response_filters=response_filters, - config=config, - options=model.options, - ) - - -def create_default_paginator(model: DefaultPaginatorModel, config: Config, **kwargs) -> DefaultPaginator: - decoder = _create_component_from_model(model=model.decoder, config=config) if model.decoder else JsonDecoder(options={}) - page_size_option = _create_component_from_model(model=model.page_size_option, config=config) if model.page_size_option else None - page_token_option = _create_component_from_model(model=model.page_token_option, config=config) if model.page_token_option else None - pagination_strategy = _create_component_from_model(model=model.pagination_strategy, config=config) - - return DefaultPaginator( - decoder=decoder, - page_size_option=page_size_option, - page_token_option=page_token_option, - pagination_strategy=pagination_strategy, - url_base=model.url_base, - config=config, - options=model.options, - ) - - -def create_dpath_extractor(model: DpathExtractorModel, config: Config, **kwargs) -> DpathExtractor: - decoder = _create_component_from_model(model.decoder, config=config) if model.decoder else JsonDecoder(options={}) - return DpathExtractor(decoder=decoder, field_pointer=model.field_pointer, config=config, options=model.options) - - -def create_exponential_backoff_strategy(model: ExponentialBackoffStrategyModel, config: Config) -> ExponentialBackoffStrategy: - return ExponentialBackoffStrategy(factor=model.factor, options=model.options, config=config) - - -def create_http_requester(model: HttpRequesterModel, config: Config, **kwargs) -> HttpRequester: - authenticator = _create_component_from_model(model=model.authenticator, config=config) if model.authenticator else None - error_handler = ( - _create_component_from_model(model=model.error_handler, config=config) - if model.error_handler - else DefaultErrorHandler(backoff_strategies=[], response_filters=[], config=config, options=model.options) - ) - request_options_provider = ( - _create_component_from_model(model=model.request_options_provider, config=config) if model.request_options_provider else None - ) - - return HttpRequester( - name=model.name, - url_base=model.url_base, - path=model.path, - authenticator=authenticator, - error_handler=error_handler, - http_method=model.http_method, - request_options_provider=request_options_provider, - config=config, - options=model.options, - ) - - -def create_http_response_filter(model: HttpResponseFilterModel, config: Config, **kwargs) -> HttpResponseFilter: - action = ResponseAction(model.action.value) - http_codes = ( - set(model.http_codes) if model.http_codes else set() - ) # JSON schema notation has no set data type. The schema enforces an array of unique elements - - return HttpResponseFilter( - action=action, - error_message=model.error_message or "", - error_message_contains=model.error_message_contains, - http_codes=http_codes, - predicate=model.predicate or "", - config=config, - options=model.options, - ) - - -def create_inline_schema_loader(model: InlineSchemaLoaderModel, config: Config, **kwargs) -> InlineSchemaLoader: - return InlineSchemaLoader(schema=model.schema_, options={}) - - -def create_interpolated_request_options_provider( - model: InterpolatedRequestOptionsProviderModel, config: Config, **kwargs -) -> InterpolatedRequestOptionsProvider: - return InterpolatedRequestOptionsProvider( - request_body_data=model.request_body_data, - request_body_json=model.request_body_json, - request_headers=model.request_headers, - request_parameters=model.request_parameters, - config=config, - options=model.options, - ) - - -def create_json_decoder(model: JsonDecoderModel, config: Config, **kwargs) -> JsonDecoder: - return JsonDecoder(options={}) - - -def create_json_file_schema_loader(model: JsonFileSchemaLoaderModel, config: Config, **kwargs) -> JsonFileSchemaLoader: - return JsonFileSchemaLoader(file_path=model.file_path, config=config, options=model.options) - - -def create_list_stream_slicer(model: ListStreamSlicerModel, config: Config, **kwargs) -> ListStreamSlicer: - request_option = ( - RequestOption( - inject_into=RequestOptionType(model.request_option.inject_into.value), - field_name=model.request_option.field_name, + return ListStreamSlicer( + cursor_field=model.cursor_field, + request_option=request_option, + slice_values=model.slice_values, + config=config, + options=model.options, + ) + + @staticmethod + def create_min_max_datetime(model: MinMaxDatetimeModel, config: Config, **kwargs) -> MinMaxDatetime: + return MinMaxDatetime( + datetime=model.datetime, + datetime_format=model.datetime_format, + max_datetime=model.max_datetime, + min_datetime=model.min_datetime, + options=model.options, + ) + + @staticmethod + def create_no_auth(model: NoAuthModel, config: Config, **kwargs) -> NoAuth: + return NoAuth(options=model.options) + + @staticmethod + def create_no_pagination(model: NoPaginationModel, config: Config, **kwargs) -> NoPagination: + return NoPagination(options={}) + + @staticmethod + def create_oauth_authenticator(model: OAuthAuthenticatorModel, config: Config, **kwargs) -> DeclarativeOauth2Authenticator: + return DeclarativeOauth2Authenticator( + access_token_name=model.access_token_name, + client_id=model.client_id, + client_secret=model.client_secret, + expires_in_name=model.expires_in_name, + grant_type=model.grant_type, + refresh_request_body=model.refresh_request_body, + refresh_token=model.refresh_token, + scopes=model.scopes, + token_expiry_date=model.token_expiry_date, + token_expiry_date_format=model.token_expiry_date_format, + token_refresh_endpoint=model.token_refresh_endpoint, + config=config, + options=model.options, + ) + + @staticmethod + def create_offset_increment(model: OffsetIncrementModel, config: Config, **kwargs) -> OffsetIncrement: + return OffsetIncrement(page_size=model.page_size, config=config, options=model.options) + + @staticmethod + def create_page_increment(model: PageIncrementModel, config: Config, **kwargs) -> PageIncrement: + return PageIncrement(page_size=model.page_size, start_from_page=model.start_from_page, options=model.options) + + def create_parent_stream_config(self, model: ParentStreamConfigModel, config: Config, **kwargs) -> ParentStreamConfig: + declarative_stream = self._create_component_from_model(model.stream, config=config) + request_option = self._create_component_from_model(model.request_option, config=config) if model.request_option else None + return ParentStreamConfig( + parent_key=model.parent_key, + request_option=request_option, + stream=declarative_stream, + stream_slice_field=model.stream_slice_field, options=model.options, ) - if model.request_option - else None - ) - return ListStreamSlicer( - cursor_field=model.cursor_field, - request_option=request_option, - slice_values=model.slice_values, - config=config, - options=model.options, - ) + @staticmethod + def create_record_filter(model: RecordFilterModel, config: Config, **kwargs) -> RecordFilter: + return RecordFilter(condition=model.condition, config=config, options=model.options) + + @staticmethod + def create_request_option(model: RequestOptionModel, config: Config, **kwargs) -> RequestOption: + inject_into = RequestOptionType(model.inject_into.value) + return RequestOption(field_name=model.field_name, inject_into=inject_into, options={}) + + def create_record_selector(self, model: RecordSelectorModel, config: Config, **kwargs) -> RecordSelector: + extractor = self._create_component_from_model(model=model.extractor, config=config) + record_filter = self._create_component_from_model(model.record_filter, config=config) if model.record_filter else None + + return RecordSelector(extractor=extractor, record_filter=record_filter, options=model.options) -def create_min_max_datetime(model: MinMaxDatetimeModel, config: Config, **kwargs) -> MinMaxDatetime: - return MinMaxDatetime( - datetime=model.datetime, - datetime_format=model.datetime_format, - max_datetime=model.max_datetime, - min_datetime=model.min_datetime, - options=model.options, - ) - - -def create_no_auth(model: NoAuthModel, config: Config, **kwargs) -> NoAuth: - return NoAuth(options=model.options) - - -def create_no_pagination(model: NoPaginationModel, config: Config, **kwargs) -> NoPagination: - return NoPagination(options={}) - - -def create_oauth_authenticator(model: OAuthAuthenticatorModel, config: Config, **kwargs) -> DeclarativeOauth2Authenticator: - return DeclarativeOauth2Authenticator( - access_token_name=model.access_token_name, - client_id=model.client_id, - client_secret=model.client_secret, - expires_in_name=model.expires_in_name, - grant_type=model.grant_type, - refresh_request_body=model.refresh_request_body, - refresh_token=model.refresh_token, - scopes=model.scopes, - token_expiry_date=model.token_expiry_date, - token_expiry_date_format=model.token_expiry_date_format, - token_refresh_endpoint=model.token_refresh_endpoint, - config=config, - options=model.options, - ) - - -def create_offset_increment(model: OffsetIncrementModel, config: Config, **kwargs) -> OffsetIncrement: - return OffsetIncrement(page_size=model.page_size, config=config, options=model.options) - - -def create_page_increment(model: PageIncrementModel, config: Config, **kwargs) -> PageIncrement: - return PageIncrement(page_size=model.page_size, start_from_page=model.start_from_page, options=model.options) - - -def create_parent_stream_config(model: ParentStreamConfigModel, config: Config, **kwargs) -> ParentStreamConfig: - declarative_stream = _create_component_from_model(model.stream, config=config) - request_option = _create_component_from_model(model.request_option, config=config) if model.request_option else None - return ParentStreamConfig( - parent_key=model.parent_key, - request_option=request_option, - stream=declarative_stream, - stream_slice_field=model.stream_slice_field, - options=model.options, - ) - - -def create_record_filter(model: RecordFilterModel, config: Config, **kwargs) -> RecordFilter: - return RecordFilter(condition=model.condition, config=config, options=model.options) - - -def create_request_option(model: RequestOptionModel, config: Config, **kwargs) -> RequestOption: - inject_into = RequestOptionType(model.inject_into.value) - return RequestOption(field_name=model.field_name, inject_into=inject_into, options={}) - - -def create_record_selector(model: RecordSelectorModel, config: Config, **kwargs) -> RecordSelector: - extractor = _create_component_from_model(model=model.extractor, config=config) - record_filter = _create_component_from_model(model.record_filter, config=config) if model.record_filter else None - - return RecordSelector(extractor=extractor, record_filter=record_filter, options=model.options) - - -def create_remove_fields(model: RemoveFieldsModel, config: Config, **kwargs) -> RemoveFields: - return RemoveFields(field_pointers=model.field_pointers, options={}) - - -def create_session_token_authenticator(model: SessionTokenAuthenticatorModel, config: Config, **kwargs) -> SessionTokenAuthenticator: - return SessionTokenAuthenticator( - api_url=model.api_url, - header=model.header, - login_url=model.login_url, - password=model.password, - session_token=model.session_token, - session_token_response_key=model.session_token_response_key, - username=model.username, - validate_session_url=model.validate_session_url, - config=config, - options=model.options, - ) - - -def create_simple_retriever(model: SimpleRetrieverModel, config: Config, **kwargs) -> SimpleRetriever: - requester = _create_component_from_model(model=model.requester, config=config) - record_selector = _create_component_from_model(model=model.record_selector, config=config) - paginator = ( - _create_component_from_model(model=model.paginator, config=config, url_base=model.requester.url_base) - if model.paginator - else NoPagination(options={}) - ) - stream_slicer = ( - _create_component_from_model(model=model.stream_slicer, config=config) if model.stream_slicer else SingleSlice(options={}) - ) - - return SimpleRetriever( - name=model.name, - paginator=paginator, - primary_key=model.primary_key.__root__ if model.primary_key else None, - requester=requester, - record_selector=record_selector, - stream_slicer=stream_slicer, - config=config, - options=model.options, - ) + @staticmethod + def create_remove_fields(model: RemoveFieldsModel, config: Config, **kwargs) -> RemoveFields: + return RemoveFields(field_pointers=model.field_pointers, options={}) - -def create_single_slice(model: SingleSliceModel, config: Config, **kwargs) -> SingleSlice: - return SingleSlice(options={}) - - -def create_spec(model: SpecModel, config: Config, **kwargs) -> Spec: - return Spec(connection_specification=model.connection_specification, documentation_url=model.documentation_url, options={}) - - -def create_substream_slicer(model: SubstreamSlicerModel, config: Config, **kwargs) -> SubstreamSlicer: - parent_stream_configs = [] - if model.parent_stream_configs: - parent_stream_configs.extend( - [ - _create_component_from_model(model=parent_stream_config, config=config) - for parent_stream_config in model.parent_stream_configs - ] + @staticmethod + def create_session_token_authenticator(model: SessionTokenAuthenticatorModel, config: Config, **kwargs) -> SessionTokenAuthenticator: + return SessionTokenAuthenticator( + api_url=model.api_url, + header=model.header, + login_url=model.login_url, + password=model.password, + session_token=model.session_token, + session_token_response_key=model.session_token_response_key, + username=model.username, + validate_session_url=model.validate_session_url, + config=config, + options=model.options, ) - return SubstreamSlicer(parent_stream_configs=parent_stream_configs, options=model.options) - - -def create_wait_time_from_header(model: WaitTimeFromHeaderModel, config: Config, **kwargs) -> WaitTimeFromHeaderBackoffStrategy: - return WaitTimeFromHeaderBackoffStrategy(header=model.header, options=model.options, config=config, regex=model.regex) - - -def create_wait_until_time_from_header( - model: WaitUntilTimeFromHeaderModel, config: Config, **kwargs -) -> WaitUntilTimeFromHeaderBackoffStrategy: - return WaitUntilTimeFromHeaderBackoffStrategy( - header=model.header, options=model.options, config=config, min_wait=model.min_wait, regex=model.regex - ) - - -PYDANTIC_MODEL_TO_CONSTRUCTOR: [Type[BaseModel], Callable] = { - AddedFieldDefinitionModel: create_added_field_definition, - AddFieldsModel: create_add_fields, - ApiKeyAuthenticatorModel: create_api_key_authenticator, - BasicHttpAuthenticatorModel: create_basic_http_authenticator, - BearerAuthenticatorModel: create_bearer_authenticator, - CheckStreamModel: create_check_stream, - CartesianProductStreamSlicerModel: create_cartesian_product_slicer, - CompositeErrorHandlerModel: create_composite_error_handler, - ConstantBackoffStrategyModel: create_constant_backoff_strategy, - CursorPaginationModel: create_cursor_pagination, - CustomAuthenticatorModel: create_custom_component, - CustomBackoffStrategyModel: create_custom_component, - CustomErrorHandlerModel: create_custom_component, - CustomRecordExtractorModel: create_custom_component, - CustomRequesterModel: create_custom_component, - CustomRequestOptionsProviderModel: create_custom_component, # todo: Remove later when we deprecate request providers from interface - CustomRetrieverModel: create_custom_component, - CustomPaginationStrategyModel: create_custom_component, - CustomStreamSlicerModel: create_custom_component, - CustomTransformationModel: create_custom_component, - DatetimeStreamSlicerModel: create_datetime_stream_slicer, - DeclarativeStreamModel: create_declarative_stream, - DefaultErrorHandlerModel: create_default_error_handler, - DefaultPaginatorModel: create_default_paginator, - DpathExtractorModel: create_dpath_extractor, - ExponentialBackoffStrategyModel: create_exponential_backoff_strategy, - HttpRequesterModel: create_http_requester, - HttpResponseFilterModel: create_http_response_filter, - InlineSchemaLoaderModel: create_inline_schema_loader, - InterpolatedRequestOptionsProviderModel: create_interpolated_request_options_provider, - JsonDecoderModel: create_json_decoder, - JsonFileSchemaLoaderModel: create_json_file_schema_loader, - ListStreamSlicerModel: create_list_stream_slicer, - MinMaxDatetimeModel: create_min_max_datetime, - NoAuthModel: create_no_auth, - NoPaginationModel: create_no_pagination, - OAuthAuthenticatorModel: create_oauth_authenticator, - OffsetIncrementModel: create_offset_increment, - PageIncrementModel: create_page_increment, - ParentStreamConfigModel: create_parent_stream_config, - RecordFilterModel: create_record_filter, - RecordSelectorModel: create_record_selector, - RemoveFieldsModel: create_remove_fields, - RequestOptionModel: create_request_option, - SessionTokenAuthenticatorModel: create_session_token_authenticator, - SimpleRetrieverModel: create_simple_retriever, - SingleSliceModel: create_single_slice, - SpecModel: create_spec, - SubstreamSlicerModel: create_substream_slicer, - WaitTimeFromHeaderModel: create_wait_time_from_header, - WaitUntilTimeFromHeaderModel: create_wait_until_time_from_header, -} - - -# Needed for the case where we need to perform a second parse on the fields of a custom component -TYPE_NAME_TO_MODEL = {cls.__name__: cls for cls in PYDANTIC_MODEL_TO_CONSTRUCTOR} + def create_simple_retriever(self, model: SimpleRetrieverModel, config: Config, **kwargs) -> SimpleRetriever: + requester = self._create_component_from_model(model=model.requester, config=config) + record_selector = self._create_component_from_model(model=model.record_selector, config=config) + paginator = ( + self._create_component_from_model(model=model.paginator, config=config, url_base=model.requester.url_base) + if model.paginator + else NoPagination(options={}) + ) + stream_slicer = ( + self._create_component_from_model(model=model.stream_slicer, config=config) if model.stream_slicer else SingleSlice(options={}) + ) + + if self._limit_slices_fetched: + return SimpleRetrieverTestReadDecorator( + name=model.name, + paginator=paginator, + primary_key=model.primary_key.__root__ if model.primary_key else None, + requester=requester, + record_selector=record_selector, + stream_slicer=stream_slicer, + config=config, + maximum_number_of_slices=self._limit_slices_fetched, + options=model.options, + ) + return SimpleRetriever( + name=model.name, + paginator=paginator, + primary_key=model.primary_key.__root__ if model.primary_key else None, + requester=requester, + record_selector=record_selector, + stream_slicer=stream_slicer, + config=config, + options=model.options, + ) + + @staticmethod + def create_single_slice(model: SingleSliceModel, config: Config, **kwargs) -> SingleSlice: + return SingleSlice(options={}) + + @staticmethod + def create_spec(model: SpecModel, config: Config, **kwargs) -> Spec: + return Spec(connection_specification=model.connection_specification, documentation_url=model.documentation_url, options={}) + + def create_substream_slicer(self, model: SubstreamSlicerModel, config: Config, **kwargs) -> SubstreamSlicer: + parent_stream_configs = [] + if model.parent_stream_configs: + parent_stream_configs.extend( + [ + self._create_component_from_model(model=parent_stream_config, config=config) + for parent_stream_config in model.parent_stream_configs + ] + ) + + return SubstreamSlicer(parent_stream_configs=parent_stream_configs, options=model.options) + + @staticmethod + def create_wait_time_from_header(model: WaitTimeFromHeaderModel, config: Config, **kwargs) -> WaitTimeFromHeaderBackoffStrategy: + return WaitTimeFromHeaderBackoffStrategy(header=model.header, options=model.options, config=config, regex=model.regex) + + @staticmethod + def create_wait_until_time_from_header( + model: WaitUntilTimeFromHeaderModel, config: Config, **kwargs + ) -> WaitUntilTimeFromHeaderBackoffStrategy: + return WaitUntilTimeFromHeaderBackoffStrategy( + header=model.header, options=model.options, config=config, min_wait=model.min_wait, regex=model.regex + ) diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py index c8bd6fd13ffdb..cd569f52abcce 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/__init__.py @@ -2,9 +2,9 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # -from airbyte_cdk.sources.declarative.requesters.paginators.default_paginator import DefaultPaginator +from airbyte_cdk.sources.declarative.requesters.paginators.default_paginator import DefaultPaginator, PaginatorTestReadDecorator from airbyte_cdk.sources.declarative.requesters.paginators.no_pagination import NoPagination from airbyte_cdk.sources.declarative.requesters.paginators.paginator import Paginator from airbyte_cdk.sources.declarative.requesters.paginators.strategies.pagination_strategy import PaginationStrategy -__all__ = ["DefaultPaginator", "NoPagination", "PaginationStrategy", "Paginator"] +__all__ = ["DefaultPaginator", "NoPagination", "PaginationStrategy", "Paginator", "PaginatorTestReadDecorator"] diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py index 2ef4fcd9d672a..ed87e6a070874 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/default_paginator.py @@ -160,3 +160,69 @@ def _get_request_options(self, option_type: RequestOptionType) -> Mapping[str, A if option_type != RequestOptionType.path: options[self.page_size_option.field_name] = self.pagination_strategy.get_page_size() return options + + +class PaginatorTestReadDecorator(Paginator): + """ + In some cases, we want to limit the number of requests that are made to the backend source. This class allows for limiting the number of + pages that are queried throughout a read command. + """ + + _PAGE_COUNT_BEFORE_FIRST_NEXT_CALL = 1 + + def __init__(self, decorated, maximum_number_of_pages: int = 5): + if maximum_number_of_pages and maximum_number_of_pages < 1: + raise ValueError(f"The maximum number of pages on a test read needs to be strictly positive. Got {maximum_number_of_pages}") + self._maximum_number_of_pages = maximum_number_of_pages + self._decorated = decorated + self._page_count = self._PAGE_COUNT_BEFORE_FIRST_NEXT_CALL + + def next_page_token(self, response: requests.Response, last_records: List[Mapping[str, Any]]) -> Optional[Mapping[str, Any]]: + if self._page_count >= self._maximum_number_of_pages: + return None + + self._page_count += 1 + return self._decorated.next_page_token(response, last_records) + + def path(self): + return self._decorated.path() + + def get_request_params( + self, + *, + stream_state: Optional[StreamState] = None, + stream_slice: Optional[StreamSlice] = None, + next_page_token: Optional[Mapping[str, Any]] = None, + ) -> Mapping[str, Any]: + return self._decorated.get_request_params(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) + + def get_request_headers( + self, + *, + stream_state: Optional[StreamState] = None, + stream_slice: Optional[StreamSlice] = None, + next_page_token: Optional[Mapping[str, Any]] = None, + ) -> Mapping[str, str]: + return self._decorated.get_request_headers(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) + + def get_request_body_data( + self, + *, + stream_state: Optional[StreamState] = None, + stream_slice: Optional[StreamSlice] = None, + next_page_token: Optional[Mapping[str, Any]] = None, + ) -> Mapping[str, Any]: + return self._decorated.get_request_body_data(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) + + def get_request_body_json( + self, + *, + stream_state: Optional[StreamState] = None, + stream_slice: Optional[StreamSlice] = None, + next_page_token: Optional[Mapping[str, Any]] = None, + ) -> Mapping[str, Any]: + return self._decorated.get_request_body_json(stream_state=stream_state, stream_slice=stream_slice, next_page_token=next_page_token) + + def reset(self): + self._decorated.reset() + self._page_count = self._PAGE_COUNT_BEFORE_FIRST_NEXT_CALL diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py index bd96fc27b153e..01d8d01e768bf 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/requesters/paginators/paginator.py @@ -2,7 +2,7 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # -from abc import abstractmethod +from abc import ABC, abstractmethod from dataclasses import dataclass from typing import Any, List, Mapping, Optional @@ -12,7 +12,7 @@ @dataclass -class Paginator(RequestOptionsProvider, JsonSchemaMixin): +class Paginator(ABC, RequestOptionsProvider, JsonSchemaMixin): """ Defines the token to use to fetch the next page of records from the API. diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/retrievers/__init__.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/retrievers/__init__.py index 9c47818b3e725..a160e9d27da7b 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/retrievers/__init__.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/retrievers/__init__.py @@ -3,6 +3,6 @@ # from airbyte_cdk.sources.declarative.retrievers.retriever import Retriever -from airbyte_cdk.sources.declarative.retrievers.simple_retriever import SimpleRetriever +from airbyte_cdk.sources.declarative.retrievers.simple_retriever import SimpleRetriever, SimpleRetrieverTestReadDecorator -__all__ = ["Retriever", "SimpleRetriever"] +__all__ = ["Retriever", "SimpleRetriever", "SimpleRetrieverTestReadDecorator"] diff --git a/airbyte-cdk/python/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py b/airbyte-cdk/python/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py index 65128a3494832..049b4af70a476 100644 --- a/airbyte-cdk/python/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py +++ b/airbyte-cdk/python/airbyte_cdk/sources/declarative/retrievers/simple_retriever.py @@ -5,6 +5,7 @@ import json import logging from dataclasses import InitVar, dataclass, field +from itertools import islice from json import JSONDecodeError from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Union @@ -416,6 +417,28 @@ def _parse_records_and_emit_request_and_responses(self, request, response, strea yield from self.parse_response(response, stream_slice=stream_slice, stream_state=stream_state) +@dataclass +class SimpleRetrieverTestReadDecorator(SimpleRetriever): + """ + In some cases, we want to limit the number of requests that are made to the backend source. This class allows for limiting the number of + slices that are queried throughout a read command. + """ + + maximum_number_of_slices: int = 5 + + def __post_init__(self, options: Mapping[str, Any]): + super().__post_init__(options) + if self.maximum_number_of_slices and self.maximum_number_of_slices < 1: + raise ValueError( + f"The maximum number of slices on a test read needs to be strictly positive. Got {self.maximum_number_of_slices}" + ) + + def stream_slices( + self, *, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Optional[StreamState] = None + ) -> Iterable[Optional[Mapping[str, Any]]]: + return islice(super().stream_slices(sync_mode=sync_mode, stream_state=stream_state), self.maximum_number_of_slices) + + def _prepared_request_to_airbyte_message(request: requests.PreparedRequest) -> AirbyteMessage: # FIXME: this should return some sort of trace message request_dict = { diff --git a/airbyte-cdk/python/bin/validate-yaml-schema.sh b/airbyte-cdk/python/bin/validate-yaml-schema.sh index 8593426b3534e..bc3bbf448115c 100755 --- a/airbyte-cdk/python/bin/validate-yaml-schema.sh +++ b/airbyte-cdk/python/bin/validate-yaml-schema.sh @@ -8,7 +8,7 @@ CDK_DIR=$ROOT_DIR/airbyte-cdk/python/ for directory in $CONNECTORS_DIR/source-* ; do MANIFEST_DIRECTORY=$(basename $directory | tr - _) SOURCE_NAME=${MANIFEST_DIRECTORY#source_} - if test -f "$directory/source_$SOURCE_NAME/$SOURCE_NAME.yaml"; then + if test -f "$directory/$MANIFEST_DIRECTORY/manifest.yaml"; then cd $directory rm -rf .venv diff --git a/airbyte-cdk/python/setup.py b/airbyte-cdk/python/setup.py index 780ae48a81d3f..87c2f75ec45de 100644 --- a/airbyte-cdk/python/setup.py +++ b/airbyte-cdk/python/setup.py @@ -15,7 +15,7 @@ setup( name="airbyte-cdk", - version="0.21.0", + version="0.25.0", description="A framework for writing Airbyte Connectors.", long_description=README, long_description_content_type="text/markdown", diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/extractors/test_dpath_extractor.py b/airbyte-cdk/python/unit_tests/sources/declarative/extractors/test_dpath_extractor.py index 5b15fb5fbb6af..4e9c575ad957e 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/extractors/test_dpath_extractor.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/extractors/test_dpath_extractor.py @@ -26,6 +26,8 @@ ("test_field_in_config", ["{{ config['field'] }}"], {"record_array": [{"id": 1}, {"id": 2}]}, [{"id": 1}, {"id": 2}]), ("test_field_in_options", ["{{ options['options_field'] }}"], {"record_array": [{"id": 1}, {"id": 2}]}, [{"id": 1}, {"id": 2}]), ("test_field_does_not_exist", ["record"], {"id": 1}, []), + ("test_nested_list", ["list", "*", "item"], {"list": [{"item": {"id": "1"}}]}, [{"id": "1"}]), + ("test_complex_nested_list", ['data', '*', 'list', 'data2', '*'], {"data": [{"list": {"data2": [{"id": 1}, {"id": 2}]}},{"list": {"data2": [{"id": 3}, {"id": 4}]}}]}, [{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}]) ], ) def test_dpath_extractor(test_name, field_pointer, body, expected_records): 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 ab01d46692b38..9c3abb9acd0fe 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 @@ -1011,3 +1011,37 @@ def test_add_fields(self): ) ] assert stream.transformations == expected + + def test_default_schema_loader(self): + component_definition = { + "type": "DeclarativeStream", + "name": "test", + "primary_key": [], + "retriever": { + "type": "SimpleRetriever", + "name": "test", + "primary_key": [], + "requester": { + "type": "HttpRequester", + "name": "test", + "url_base": "http://localhost:6767/", + "path": "items/", + "request_options_provider": { + "request_parameters": {}, + "request_headers": {}, + "request_body_json": {}, + "type": "InterpolatedRequestOptionsProvider", + }, + "authenticator": {"type": "BearerAuthenticator", "api_token": "{{ config['api_key'] }}"}, + }, + "record_selector": {"type": "RecordSelector", "extractor": {"type": "DpathExtractor", "field_pointer": ["items"]}}, + "paginator": {"type": "NoPagination"}, + }, + } + resolved_manifest = resolver.preprocess_manifest(component_definition) + propagated_source_config = ManifestComponentTransformer().propagate_types_and_options("", resolved_manifest, {}) + stream = factory.create_component( + model_type=DeclarativeStreamModel, component_definition=propagated_source_config, config=input_config + ) + schema_loader = stream.schema_loader + assert schema_loader.default_loader._get_json_filepath().split("/")[-1] == f"{stream.name}.json" diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py index 8aec567318bbf..a55726e992276 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/requesters/paginators/test_default_paginator.py @@ -9,7 +9,12 @@ import requests from airbyte_cdk.sources.declarative.decoders.json_decoder import JsonDecoder from airbyte_cdk.sources.declarative.interpolation.interpolated_boolean import InterpolatedBoolean -from airbyte_cdk.sources.declarative.requesters.paginators.default_paginator import DefaultPaginator, RequestOption, RequestOptionType +from airbyte_cdk.sources.declarative.requesters.paginators.default_paginator import ( + DefaultPaginator, + PaginatorTestReadDecorator, + RequestOption, + RequestOptionType, +) from airbyte_cdk.sources.declarative.requesters.paginators.strategies.cursor_pagination_strategy import CursorPaginationStrategy @@ -202,3 +207,25 @@ def test_reset(): strategy = MagicMock() DefaultPaginator(strategy, config, url_base, options={}, page_size_option=page_size_request_option, page_token_option=page_token_request_option).reset() assert strategy.reset.called + + +def test_limit_page_fetched(): + maximum_number_of_pages = 5 + number_of_next_performed = maximum_number_of_pages - 1 + paginator = PaginatorTestReadDecorator( + DefaultPaginator( + page_size_option=MagicMock(), + page_token_option=MagicMock(), + pagination_strategy=MagicMock(), + config=MagicMock(), + url_base=MagicMock(), + options={}, + ), + maximum_number_of_pages + ) + + for _ in range(number_of_next_performed): + last_token = paginator.next_page_token(MagicMock(), MagicMock()) + assert last_token + + assert not paginator.next_page_token(MagicMock(), MagicMock()) diff --git a/airbyte-cdk/python/unit_tests/sources/declarative/retrievers/test_simple_retriever.py b/airbyte-cdk/python/unit_tests/sources/declarative/retrievers/test_simple_retriever.py index abb33bf3ca377..1a8db7a368bfb 100644 --- a/airbyte-cdk/python/unit_tests/sources/declarative/retrievers/test_simple_retriever.py +++ b/airbyte-cdk/python/unit_tests/sources/declarative/retrievers/test_simple_retriever.py @@ -15,6 +15,7 @@ from airbyte_cdk.sources.declarative.requesters.requester import HttpMethod from airbyte_cdk.sources.declarative.retrievers.simple_retriever import ( SimpleRetriever, + SimpleRetrieverTestReadDecorator, _prepared_request_to_airbyte_message, _response_to_airbyte_message, ) @@ -629,3 +630,28 @@ def test_response_to_airbyte_message(test_name, response_body, response_headers, actual_airbyte_message = _response_to_airbyte_message(response) assert expected_airbyte_message == actual_airbyte_message + + +def test_limit_stream_slices(): + maximum_number_of_slices = 4 + stream_slicer = MagicMock() + stream_slicer.stream_slices.return_value = _generate_slices(maximum_number_of_slices * 2) + retriever = SimpleRetrieverTestReadDecorator( + name="stream_name", + primary_key=primary_key, + requester=MagicMock(), + paginator=MagicMock(), + record_selector=MagicMock(), + stream_slicer=stream_slicer, + maximum_number_of_slices=maximum_number_of_slices, + options={}, + config={}, + ) + + truncated_slices = list(retriever.stream_slices(sync_mode=SyncMode.incremental, stream_state=None)) + + assert truncated_slices == _generate_slices(maximum_number_of_slices) + + +def _generate_slices(number_of_slices): + return [{"date": f"2022-01-0{day + 1}"} for day in range(number_of_slices)] 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 01faf5c25c44e..7d22e1cb7674f 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 @@ -6,6 +6,7 @@ import logging import os import sys +from unittest.mock import patch import pytest import yaml @@ -541,6 +542,94 @@ def test_manifest_without_at_least_one_stream(self, construct_using_pydantic_mod with pytest.raises(ValidationError): ManifestDeclarativeSource(source_config=manifest, construct_using_pydantic_models=construct_using_pydantic_models) + @patch("airbyte_cdk.sources.declarative.declarative_source.DeclarativeSource.read") + def test_given_debug_when_read_then_set_log_level(self, declarative_source_read): + any_valid_manifest = { + "version": "version", + "definitions": { + "schema_loader": {"name": "{{ options.stream_name }}", "file_path": "./source_sendgrid/schemas/{{ options.name }}.yaml"}, + "retriever": { + "paginator": { + "type": "DefaultPaginator", + "page_size": 10, + "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, + "page_token_option": {"inject_into": "path"}, + "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}"}, + }, + "requester": { + "path": "/v3/marketing/lists", + "authenticator": {"type": "BearerAuthenticator", "api_token": "{{ config.apikey }}"}, + "request_parameters": {"page_size": 10}, + }, + "record_selector": {"extractor": {"field_pointer": ["result"]}}, + }, + }, + "streams": [ + { + "type": "DeclarativeStream", + "$options": {"name": "lists", "primary_key": "id", "url_base": "https://api.sendgrid.com"}, + "schema_loader": { + "name": "{{ options.stream_name }}", + "file_path": "./source_sendgrid/schemas/{{ options.name }}.yaml", + }, + "retriever": { + "paginator": { + "type": "DefaultPaginator", + "page_size": 10, + "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, + "page_token_option": {"inject_into": "path"}, + "pagination_strategy": { + "type": "CursorPagination", + "cursor_value": "{{ response._metadata.next }}", + "page_size": 10, + }, + }, + "requester": { + "path": "/v3/marketing/lists", + "authenticator": {"type": "BearerAuthenticator", "api_token": "{{ config.apikey }}"}, + "request_parameters": {"page_size": 10}, + }, + "record_selector": {"extractor": {"field_pointer": ["result"]}}, + }, + }, + { + "type": "DeclarativeStream", + "$options": {"name": "stream_with_custom_requester", "primary_key": "id", "url_base": "https://api.sendgrid.com"}, + "schema_loader": { + "name": "{{ options.stream_name }}", + "file_path": "./source_sendgrid/schemas/{{ options.name }}.yaml", + }, + "retriever": { + "paginator": { + "type": "DefaultPaginator", + "page_size": 10, + "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, + "page_token_option": {"inject_into": "path"}, + "pagination_strategy": { + "type": "CursorPagination", + "cursor_value": "{{ response._metadata.next }}", + "page_size": 10, + }, + }, + "requester": { + "type": "CustomRequester", + "class_name": "unit_tests.sources.declarative.external_component.SampleCustomComponent", + "path": "/v3/marketing/lists", + "custom_request_parameters": {"page_size": 10}, + }, + "record_selector": {"extractor": {"field_pointer": ["result"]}}, + }, + }, + ], + "check": {"type": "CheckStream", "stream_names": ["lists"]}, + } + source = ManifestDeclarativeSource(source_config=any_valid_manifest, debug=True, construct_using_pydantic_models=True) + + debug_logger = logging.getLogger("logger.debug") + list(source.read(debug_logger, {}, {}, {})) + + assert debug_logger.isEnabledFor(logging.DEBUG) + def test_generate_schema(): schema_str = ManifestDeclarativeSource.generate_schema() diff --git a/airbyte-cdk/python/unit_tests/sources/test_abstract_source.py b/airbyte-cdk/python/unit_tests/sources/test_abstract_source.py index bbb808a0ec747..b7747bc5f0d00 100644 --- a/airbyte-cdk/python/unit_tests/sources/test_abstract_source.py +++ b/airbyte-cdk/python/unit_tests/sources/test_abstract_source.py @@ -331,6 +331,57 @@ def test_valid_full_refresh_read_with_slices(mocker): assert expected == messages +def test_read_full_refresh_with_slices_sends_slice_messages(mocker): + """Given the logger is debug and a full refresh, AirbyteMessages are sent for slices""" + debug_logger = logging.getLogger("airbyte.debug") + debug_logger.setLevel(logging.DEBUG) + slices = [{"1": "1"}, {"2": "2"}] + stream = MockStream( + [({"sync_mode": SyncMode.full_refresh, "stream_slice": s}, [s]) for s in slices], + name="s1", + ) + + mocker.patch.object(MockStream, "get_json_schema", return_value={}) + mocker.patch.object(MockStream, "stream_slices", return_value=slices) + + src = MockSource(streams=[stream]) + catalog = ConfiguredAirbyteCatalog( + streams=[ + _configured_stream(stream, SyncMode.full_refresh), + ] + ) + + messages = src.read(debug_logger, {}, catalog) + + assert 2 == len(list(filter(lambda message: message.log and message.log.message.startswith("slice:"), messages))) + + +def test_read_incremental_with_slices_sends_slice_messages(mocker): + """Given the logger is debug and a incremental, AirbyteMessages are sent for slices""" + debug_logger = logging.getLogger("airbyte.debug") + debug_logger.setLevel(logging.DEBUG) + slices = [{"1": "1"}, {"2": "2"}] + stream = MockStream( + [({"sync_mode": SyncMode.incremental, "stream_slice": s, 'stream_state': {}}, [s]) for s in slices], + name="s1", + ) + + MockStream.supports_incremental = mocker.PropertyMock(return_value=True) + mocker.patch.object(MockStream, "get_json_schema", return_value={}) + mocker.patch.object(MockStream, "stream_slices", return_value=slices) + + src = MockSource(streams=[stream]) + catalog = ConfiguredAirbyteCatalog( + streams=[ + _configured_stream(stream, SyncMode.incremental), + ] + ) + + messages = src.read(debug_logger, {}, catalog) + + assert 2 == len(list(filter(lambda message: message.log and message.log.message.startswith("slice:"), messages))) + + class TestIncrementalRead: @pytest.mark.parametrize( "use_legacy", diff --git a/airbyte-cdk/python/unit_tests/sources/test_source.py b/airbyte-cdk/python/unit_tests/sources/test_source.py index 0cae909b2f083..b8a8291058e82 100644 --- a/airbyte-cdk/python/unit_tests/sources/test_source.py +++ b/airbyte-cdk/python/unit_tests/sources/test_source.py @@ -401,6 +401,7 @@ def test_internal_config_limit(mocker, abstract_source, catalog): logger_mock.level = logging.DEBUG del catalog.streams[1] STREAM_LIMIT = 2 + SLICE_DEBUG_LOG_COUNT = 1 FULL_RECORDS_NUMBER = 3 streams = abstract_source.streams(None) http_stream = streams[0] @@ -409,7 +410,7 @@ def test_internal_config_limit(mocker, abstract_source, catalog): catalog.streams[0].sync_mode = SyncMode.full_refresh records = [r for r in abstract_source.read(logger=logger_mock, config=internal_config, catalog=catalog, state={})] - assert len(records) == STREAM_LIMIT + assert len(records) == STREAM_LIMIT + SLICE_DEBUG_LOG_COUNT logger_info_args = [call[0][0] for call in logger_mock.info.call_args_list] # Check if log line matches number of limit read_log_record = [_l for _l in logger_info_args if _l.startswith("Read")] @@ -418,13 +419,13 @@ def test_internal_config_limit(mocker, abstract_source, catalog): # No limit, check if state record produced for incremental stream catalog.streams[0].sync_mode = SyncMode.incremental records = [r for r in abstract_source.read(logger=logger_mock, config={}, catalog=catalog, state={})] - assert len(records) == FULL_RECORDS_NUMBER + 1 + assert len(records) == FULL_RECORDS_NUMBER + SLICE_DEBUG_LOG_COUNT + 1 assert records[-1].type == Type.STATE # Set limit and check if state is produced when limit is set for incremental stream logger_mock.reset_mock() records = [r for r in abstract_source.read(logger=logger_mock, config=internal_config, catalog=catalog, state={})] - assert len(records) == STREAM_LIMIT + 1 + assert len(records) == STREAM_LIMIT + SLICE_DEBUG_LOG_COUNT + 1 assert records[-1].type == Type.STATE logger_info_args = [call[0][0] for call in logger_mock.info.call_args_list] read_log_record = [_l for _l in logger_info_args if _l.startswith("Read")] @@ -435,6 +436,7 @@ def test_internal_config_limit(mocker, abstract_source, catalog): def test_source_config_no_transform(mocker, abstract_source, catalog): + SLICE_DEBUG_LOG_COUNT = 1 logger_mock = mocker.MagicMock() logger_mock.level = logging.DEBUG streams = abstract_source.streams(None) @@ -442,8 +444,8 @@ def test_source_config_no_transform(mocker, abstract_source, catalog): http_stream.get_json_schema.return_value = non_http_stream.get_json_schema.return_value = SCHEMA http_stream.read_records.return_value, non_http_stream.read_records.return_value = [[{"value": 23}] * 5] * 2 records = [r for r in abstract_source.read(logger=logger_mock, config={}, catalog=catalog, state={})] - assert len(records) == 2 * 5 - assert [r.record.data for r in records] == [{"value": 23}] * 2 * 5 + assert len(records) == 2 * (5 + SLICE_DEBUG_LOG_COUNT) + assert [r.record.data for r in records if r.type == Type.RECORD] == [{"value": 23}] * 2 * 5 assert http_stream.get_json_schema.call_count == 5 assert non_http_stream.get_json_schema.call_count == 5 @@ -451,6 +453,7 @@ def test_source_config_no_transform(mocker, abstract_source, catalog): def test_source_config_transform(mocker, abstract_source, catalog): logger_mock = mocker.MagicMock() logger_mock.level = logging.DEBUG + SLICE_DEBUG_LOG_COUNT = 2 streams = abstract_source.streams(None) http_stream, non_http_stream = streams http_stream.transformer = TypeTransformer(TransformConfig.DefaultSchemaNormalization) @@ -458,21 +461,22 @@ def test_source_config_transform(mocker, abstract_source, catalog): http_stream.get_json_schema.return_value = non_http_stream.get_json_schema.return_value = SCHEMA http_stream.read_records.return_value, non_http_stream.read_records.return_value = [{"value": 23}], [{"value": 23}] records = [r for r in abstract_source.read(logger=logger_mock, config={}, catalog=catalog, state={})] - assert len(records) == 2 - assert [r.record.data for r in records] == [{"value": "23"}] * 2 + assert len(records) == 2 + SLICE_DEBUG_LOG_COUNT + assert [r.record.data for r in records if r.type == Type.RECORD] == [{"value": "23"}] * 2 def test_source_config_transform_and_no_transform(mocker, abstract_source, catalog): logger_mock = mocker.MagicMock() logger_mock.level = logging.DEBUG + SLICE_DEBUG_LOG_COUNT = 2 streams = abstract_source.streams(None) http_stream, non_http_stream = streams http_stream.transformer = TypeTransformer(TransformConfig.DefaultSchemaNormalization) http_stream.get_json_schema.return_value = non_http_stream.get_json_schema.return_value = SCHEMA http_stream.read_records.return_value, non_http_stream.read_records.return_value = [{"value": 23}], [{"value": 23}] records = [r for r in abstract_source.read(logger=logger_mock, config={}, catalog=catalog, state={})] - assert len(records) == 2 - assert [r.record.data for r in records] == [{"value": "23"}, {"value": 23}] + assert len(records) == 2 + SLICE_DEBUG_LOG_COUNT + assert [r.record.data for r in records if r.type == Type.RECORD] == [{"value": "23"}, {"value": 23}] def test_read_default_http_availability_strategy_stream_available(catalog, mocker): diff --git a/airbyte-commons-server/build.gradle b/airbyte-commons-server/build.gradle new file mode 100644 index 0000000000000..f0ea82dcb4e5f --- /dev/null +++ b/airbyte-commons-server/build.gradle @@ -0,0 +1,69 @@ +plugins { + id "java-library" +} + +dependencies { + annotationProcessor platform(libs.micronaut.bom) + annotationProcessor libs.bundles.micronaut.annotation.processor + annotationProcessor libs.micronaut.jaxrs.processor + + implementation platform(libs.micronaut.bom) + implementation libs.bundles.micronaut + implementation libs.micronaut.jaxrs.server + + // Ensure that the versions defined in deps.toml are used + // instead of versions from transitive dependencies + implementation(libs.flyway.core) { + force = true + } + implementation(libs.s3) { + // Force to avoid updated version brought in transitively from Micronaut 3.8+ + // that is incompatible with our current Helm setup + force = true + } + implementation(libs.aws.java.sdk.s3) { + // Force to avoid updated version brought in transitively from Micronaut 3.8+ + // that is incompatible with our current Helm setup + force = true + } + + implementation project(':airbyte-analytics') + implementation project(':airbyte-api') + implementation project(':airbyte-commons-docker') + implementation project(':airbyte-commons-temporal') + implementation project(':airbyte-commons-worker') + implementation project(':airbyte-config:init') + implementation project(':airbyte-config:config-models') + implementation project(':airbyte-config:config-persistence') + implementation project(':airbyte-config:specs') + implementation project(':airbyte-metrics:metrics-lib') + implementation project(':airbyte-db:db-lib') + implementation project(":airbyte-json-validation") + implementation project(':airbyte-notification') + implementation project(':airbyte-oauth') + implementation project(':airbyte-protocol:protocol-models') + implementation project(':airbyte-persistence:job-persistence') + + implementation 'com.github.slugify:slugify:2.4' + implementation 'commons-cli:commons-cli:1.4' + implementation libs.temporal.sdk + implementation 'org.apache.cxf:cxf-core:3.4.2' + implementation 'org.eclipse.jetty:jetty-server:9.4.31.v20200723' + implementation 'org.eclipse.jetty:jetty-servlet:9.4.31.v20200723' + implementation 'org.glassfish.jaxb:jaxb-runtime:3.0.2' + implementation 'org.glassfish.jersey.containers:jersey-container-servlet' + implementation 'org.glassfish.jersey.inject:jersey-hk2' + implementation 'org.glassfish.jersey.media:jersey-media-json-jackson' + implementation 'org.glassfish.jersey.ext:jersey-bean-validation' + implementation 'org.quartz-scheduler:quartz:2.3.2' + implementation 'io.sentry:sentry:6.3.1' + implementation 'io.swagger:swagger-annotations:1.6.2' + + testImplementation project(':airbyte-test-utils') + testImplementation libs.postgresql + testImplementation libs.platform.testcontainers.postgresql + testImplementation 'com.squareup.okhttp3:mockwebserver:4.9.1' + testImplementation 'org.mockito:mockito-inline:4.7.0' +} + +Task publishArtifactsTask = getPublishArtifactsTask("$rootProject.ext.version", project) \ No newline at end of file diff --git a/airbyte-server/src/main/java/io/airbyte/server/RequestLogger.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/RequestLogger.java similarity index 99% rename from airbyte-server/src/main/java/io/airbyte/server/RequestLogger.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/RequestLogger.java index 6406d6b860262..2d43ff574a2c4 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/RequestLogger.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/RequestLogger.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server; +package io.airbyte.commons.server; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/airbyte-server/src/main/java/io/airbyte/server/ServerConstants.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/ServerConstants.java similarity index 81% rename from airbyte-server/src/main/java/io/airbyte/server/ServerConstants.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/ServerConstants.java index 6c40fc37ba917..6c8a3ececc294 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/ServerConstants.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/ServerConstants.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server; +package io.airbyte.commons.server; public class ServerConstants { diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/ApiPojoConverters.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/ApiPojoConverters.java similarity index 99% rename from airbyte-server/src/main/java/io/airbyte/server/converters/ApiPojoConverters.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/ApiPojoConverters.java index 9b85de35c34b0..ea63090306765 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/ApiPojoConverters.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/ApiPojoConverters.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import io.airbyte.api.model.generated.ActorDefinitionResourceRequirements; import io.airbyte.api.model.generated.ConnectionRead; @@ -18,10 +18,10 @@ import io.airbyte.api.model.generated.NormalizationDestinationDefinitionConfig; import io.airbyte.api.model.generated.ResourceRequirements; import io.airbyte.commons.enums.Enums; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; import io.airbyte.config.BasicSchedule; import io.airbyte.config.Schedule; import io.airbyte.config.StandardSync; -import io.airbyte.server.handlers.helpers.CatalogConverter; import java.util.stream.Collectors; public class ApiPojoConverters { diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/CatalogDiffConverters.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/CatalogDiffConverters.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/converters/CatalogDiffConverters.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/CatalogDiffConverters.java index 181be5454880e..7b14abe1f2be4 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/CatalogDiffConverters.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/CatalogDiffConverters.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import io.airbyte.api.model.generated.FieldAdd; import io.airbyte.api.model.generated.FieldRemove; diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/ConfigurationUpdate.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/ConfigurationUpdate.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/converters/ConfigurationUpdate.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/ConfigurationUpdate.java index 8eaf31178ac71..0b0fc05be5b49 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/ConfigurationUpdate.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/ConfigurationUpdate.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import com.fasterxml.jackson.databind.JsonNode; import io.airbyte.commons.json.Jsons; diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/JobConverter.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/JobConverter.java similarity index 95% rename from airbyte-server/src/main/java/io/airbyte/server/converters/JobConverter.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/JobConverter.java index 289d1458003e0..ad138b919c3d3 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/JobConverter.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/JobConverter.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import io.airbyte.api.model.generated.AttemptFailureOrigin; import io.airbyte.api.model.generated.AttemptFailureReason; @@ -19,6 +19,7 @@ import io.airbyte.api.model.generated.JobDebugRead; import io.airbyte.api.model.generated.JobInfoLightRead; import io.airbyte.api.model.generated.JobInfoRead; +import io.airbyte.api.model.generated.JobOptionalRead; import io.airbyte.api.model.generated.JobRead; import io.airbyte.api.model.generated.JobStatus; import io.airbyte.api.model.generated.JobWithAttemptsRead; @@ -27,6 +28,8 @@ import io.airbyte.api.model.generated.SourceDefinitionRead; import io.airbyte.api.model.generated.SynchronousJobRead; import io.airbyte.commons.enums.Enums; +import io.airbyte.commons.server.scheduler.SynchronousJobMetadata; +import io.airbyte.commons.server.scheduler.SynchronousResponse; import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs.WorkerEnvironment; import io.airbyte.config.JobConfig.ConfigType; @@ -41,8 +44,6 @@ import io.airbyte.persistence.job.models.Attempt; import io.airbyte.persistence.job.models.AttemptNormalizationStatus; import io.airbyte.persistence.job.models.Job; -import io.airbyte.server.scheduler.SynchronousJobMetadata; -import io.airbyte.server.scheduler.SynchronousResponse; import io.airbyte.workers.helper.ProtocolConverters; import jakarta.inject.Singleton; import java.io.IOException; @@ -72,6 +73,10 @@ public JobInfoLightRead getJobInfoLightRead(final Job job) { return new JobInfoLightRead().job(getJobRead(job)); } + public JobOptionalRead getJobOptionalRead(final Job job) { + return new JobOptionalRead().job(getJobRead(job)); + } + public static JobDebugRead getDebugJobInfoRead(final JobInfoRead jobInfoRead, final SourceDefinitionRead sourceDefinitionRead, final DestinationDefinitionRead destinationDefinitionRead, @@ -103,6 +108,7 @@ public static JobRead getJobRead(final Job job) { .resetConfig(extractResetConfigIfReset(job).orElse(null)) .createdAt(job.getCreatedAtInSecond()) .updatedAt(job.getUpdatedAtInSecond()) + .startedAt(job.getStartedAtInSecond().isPresent() ? job.getStartedAtInSecond().get() : null) .status(Enums.convertTo(job.getStatus(), JobStatus.class)); } diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/NotificationConverter.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/NotificationConverter.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/converters/NotificationConverter.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/NotificationConverter.java index c24346a123f58..50fc1a1f36013 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/NotificationConverter.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/NotificationConverter.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import io.airbyte.commons.enums.Enums; import java.util.Collections; diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/OauthModelConverter.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/OauthModelConverter.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/converters/OauthModelConverter.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/OauthModelConverter.java index 78c44bcda3d18..86220d17a7bff 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/OauthModelConverter.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/OauthModelConverter.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import io.airbyte.api.model.generated.AdvancedAuth; import io.airbyte.api.model.generated.AdvancedAuth.AuthFlowTypeEnum; diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/OperationsConverter.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/OperationsConverter.java similarity index 99% rename from airbyte-server/src/main/java/io/airbyte/server/converters/OperationsConverter.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/OperationsConverter.java index 9862ba52b6111..b390f51f486d9 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/OperationsConverter.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/OperationsConverter.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import static io.airbyte.api.model.generated.OperatorWebhook.WebhookTypeEnum.DBTCLOUD; diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/SpecFetcher.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/SpecFetcher.java similarity index 82% rename from airbyte-server/src/main/java/io/airbyte/server/converters/SpecFetcher.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/SpecFetcher.java index 5934e6fb7756f..6c46d76499905 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/SpecFetcher.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/SpecFetcher.java @@ -2,11 +2,11 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import com.google.common.base.Preconditions; +import io.airbyte.commons.server.scheduler.SynchronousResponse; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.scheduler.SynchronousResponse; public class SpecFetcher { diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/WorkflowStateConverter.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/WorkflowStateConverter.java similarity index 90% rename from airbyte-server/src/main/java/io/airbyte/server/converters/WorkflowStateConverter.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/WorkflowStateConverter.java index 76bd67ab20675..4f0d8a526734d 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/WorkflowStateConverter.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/WorkflowStateConverter.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import io.airbyte.api.model.generated.WorkflowStateRead; import io.airbyte.commons.temporal.scheduling.state.WorkflowState; diff --git a/airbyte-server/src/main/java/io/airbyte/server/converters/WorkspaceWebhookConfigsConverter.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/WorkspaceWebhookConfigsConverter.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/converters/WorkspaceWebhookConfigsConverter.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/WorkspaceWebhookConfigsConverter.java index a8a86b838d2b8..68826e525fef1 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/converters/WorkspaceWebhookConfigsConverter.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/converters/WorkspaceWebhookConfigsConverter.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import com.fasterxml.jackson.databind.JsonNode; import io.airbyte.api.model.generated.WebhookConfigRead; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/ApplicationErrorKnownException.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ApplicationErrorKnownException.java similarity index 90% rename from airbyte-server/src/main/java/io/airbyte/server/errors/ApplicationErrorKnownException.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ApplicationErrorKnownException.java index 69f3c86c58581..371601e85d49e 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/ApplicationErrorKnownException.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ApplicationErrorKnownException.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; public class ApplicationErrorKnownException extends KnownException { diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/BadObjectSchemaKnownException.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/BadObjectSchemaKnownException.java similarity index 90% rename from airbyte-server/src/main/java/io/airbyte/server/errors/BadObjectSchemaKnownException.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/BadObjectSchemaKnownException.java index 5e880ba3483fe..34b455a6e4a55 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/BadObjectSchemaKnownException.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/BadObjectSchemaKnownException.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; public class BadObjectSchemaKnownException extends KnownException { diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/ConnectFailureKnownException.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ConnectFailureKnownException.java similarity index 90% rename from airbyte-server/src/main/java/io/airbyte/server/errors/ConnectFailureKnownException.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ConnectFailureKnownException.java index 1b3c462d90e47..5997ce894a8d9 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/ConnectFailureKnownException.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ConnectFailureKnownException.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; public class ConnectFailureKnownException extends KnownException { diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/IdNotFoundExceptionMapper.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/IdNotFoundExceptionMapper.java similarity index 96% rename from airbyte-server/src/main/java/io/airbyte/server/errors/IdNotFoundExceptionMapper.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/IdNotFoundExceptionMapper.java index 4cd9b709cf040..0dfc234bee286 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/IdNotFoundExceptionMapper.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/IdNotFoundExceptionMapper.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import io.micronaut.context.annotation.Requires; import io.micronaut.http.HttpRequest; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/IdNotFoundKnownException.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/IdNotFoundKnownException.java similarity index 96% rename from airbyte-server/src/main/java/io/airbyte/server/errors/IdNotFoundKnownException.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/IdNotFoundKnownException.java index 460e48dc13390..76699cceb8d82 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/IdNotFoundKnownException.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/IdNotFoundKnownException.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import io.airbyte.api.model.generated.NotFoundKnownExceptionInfo; import org.apache.logging.log4j.core.util.Throwables; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/InternalServerKnownException.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InternalServerKnownException.java similarity index 90% rename from airbyte-server/src/main/java/io/airbyte/server/errors/InternalServerKnownException.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InternalServerKnownException.java index 7900e02f24513..4b9fd4b28419b 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/InternalServerKnownException.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InternalServerKnownException.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; public class InternalServerKnownException extends KnownException { diff --git a/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidInputExceptionMapper.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidInputExceptionMapper.java new file mode 100644 index 0000000000000..fd8b0b368a698 --- /dev/null +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidInputExceptionMapper.java @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.commons.server.errors; + +import io.airbyte.api.model.generated.InvalidInputExceptionInfo; +import io.airbyte.api.model.generated.InvalidInputProperty; +import io.airbyte.commons.json.Jsons; +import java.util.ArrayList; +import java.util.List; +import javax.validation.ConstraintViolation; +import javax.validation.ConstraintViolationException; +import javax.ws.rs.core.Response; +import javax.ws.rs.ext.ExceptionMapper; +import javax.ws.rs.ext.Provider; +import org.apache.logging.log4j.core.util.Throwables; + +@Provider +public class InvalidInputExceptionMapper implements ExceptionMapper { + + public static InvalidInputExceptionInfo infoFromConstraints(final ConstraintViolationException cve) { + final InvalidInputExceptionInfo exceptionInfo = new InvalidInputExceptionInfo() + .exceptionClassName(cve.getClass().getName()) + .message("Some properties contained invalid input.") + .exceptionStack(Throwables.toStringList(cve)); + + final List props = new ArrayList(); + for (final ConstraintViolation cv : cve.getConstraintViolations()) { + props.add(new InvalidInputProperty() + .propertyPath(cv.getPropertyPath().toString()) + .message(cv.getMessage()) + .invalidValue(cv.getInvalidValue() != null ? cv.getInvalidValue().toString() : "null")); + } + exceptionInfo.validationErrors(props); + return exceptionInfo; + } + + @Override + public Response toResponse(final ConstraintViolationException e) { + return Response.status(Response.Status.BAD_REQUEST) + .entity(Jsons.serialize(InvalidInputExceptionMapper.infoFromConstraints(e))) + .type("application/json") + .build(); + } + +} diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonExceptionMapper.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidJsonExceptionMapper.java similarity index 93% rename from airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonExceptionMapper.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidJsonExceptionMapper.java index c126f12993254..a073c369aca57 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonExceptionMapper.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidJsonExceptionMapper.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import com.fasterxml.jackson.core.JsonParseException; import javax.ws.rs.core.Response; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonInputExceptionMapper.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidJsonInputExceptionMapper.java similarity index 94% rename from airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonInputExceptionMapper.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidJsonInputExceptionMapper.java index 90700f7717821..d504333c4f0eb 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonInputExceptionMapper.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/InvalidJsonInputExceptionMapper.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import com.fasterxml.jackson.databind.JsonMappingException; import io.airbyte.commons.json.Jsons; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/KnownException.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/KnownException.java similarity index 96% rename from airbyte-server/src/main/java/io/airbyte/server/errors/KnownException.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/KnownException.java index d9b5716a8c6c4..2067e3d872996 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/KnownException.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/KnownException.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import io.airbyte.api.model.generated.KnownExceptionInfo; import org.apache.logging.log4j.core.util.Throwables; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/KnownExceptionMapper.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/KnownExceptionMapper.java similarity index 95% rename from airbyte-server/src/main/java/io/airbyte/server/errors/KnownExceptionMapper.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/KnownExceptionMapper.java index 9d81a3fc7174c..5ead770ad91c3 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/KnownExceptionMapper.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/KnownExceptionMapper.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import io.airbyte.commons.json.Jsons; import io.micronaut.context.annotation.Requires; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/NotFoundExceptionMapper.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/NotFoundExceptionMapper.java similarity index 96% rename from airbyte-server/src/main/java/io/airbyte/server/errors/NotFoundExceptionMapper.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/NotFoundExceptionMapper.java index 0317cdf952cb4..93a430472a6b0 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/NotFoundExceptionMapper.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/NotFoundExceptionMapper.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import io.airbyte.commons.json.Jsons; import javax.ws.rs.NotFoundException; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/UncaughtExceptionMapper.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/UncaughtExceptionMapper.java similarity index 95% rename from airbyte-server/src/main/java/io/airbyte/server/errors/UncaughtExceptionMapper.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/UncaughtExceptionMapper.java index 3aac5522570e7..8057734d660af 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/UncaughtExceptionMapper.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/UncaughtExceptionMapper.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import io.airbyte.api.model.generated.KnownExceptionInfo; import io.airbyte.commons.json.Jsons; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/UnsupportedProtocolVersionException.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/UnsupportedProtocolVersionException.java similarity index 94% rename from airbyte-server/src/main/java/io/airbyte/server/errors/UnsupportedProtocolVersionException.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/UnsupportedProtocolVersionException.java index 5b83844a54c1b..661e7e40a4855 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/UnsupportedProtocolVersionException.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/UnsupportedProtocolVersionException.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; import io.airbyte.commons.version.Version; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/ValueConflictKnownException.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ValueConflictKnownException.java similarity index 90% rename from airbyte-server/src/main/java/io/airbyte/server/errors/ValueConflictKnownException.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ValueConflictKnownException.java index b84ed0da6472c..c6ac8dbe92ef3 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/ValueConflictKnownException.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/errors/ValueConflictKnownException.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.errors; +package io.airbyte.commons.server.errors; public class ValueConflictKnownException extends KnownException { diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/AttemptHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/AttemptHandler.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/AttemptHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/AttemptHandler.java index 6a07ff3044083..c7132665fe927 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/AttemptHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/AttemptHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import io.airbyte.api.model.generated.InternalOperationResult; import io.airbyte.api.model.generated.SaveStatsRequestBody; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/ConnectionsHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/ConnectionsHandler.java similarity index 96% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/ConnectionsHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/ConnectionsHandler.java index ba32bfeb380ea..3efb3e68dfd71 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/ConnectionsHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/ConnectionsHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; @@ -26,6 +26,14 @@ import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.enums.Enums; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.converters.ApiPojoConverters; +import io.airbyte.commons.server.converters.CatalogDiffConverters; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; +import io.airbyte.commons.server.handlers.helpers.ConnectionMatcher; +import io.airbyte.commons.server.handlers.helpers.ConnectionScheduleHelper; +import io.airbyte.commons.server.handlers.helpers.DestinationMatcher; +import io.airbyte.commons.server.handlers.helpers.SourceMatcher; +import io.airbyte.commons.server.scheduler.EventRunner; import io.airbyte.config.ActorCatalog; import io.airbyte.config.BasicSchedule; import io.airbyte.config.DestinationConnection; @@ -46,14 +54,6 @@ import io.airbyte.persistence.job.WorkspaceHelper; import io.airbyte.protocol.models.CatalogHelpers; import io.airbyte.protocol.models.ConfiguredAirbyteCatalog; -import io.airbyte.server.converters.ApiPojoConverters; -import io.airbyte.server.converters.CatalogDiffConverters; -import io.airbyte.server.handlers.helpers.CatalogConverter; -import io.airbyte.server.handlers.helpers.ConnectionMatcher; -import io.airbyte.server.handlers.helpers.ConnectionScheduleHelper; -import io.airbyte.server.handlers.helpers.DestinationMatcher; -import io.airbyte.server.handlers.helpers.SourceMatcher; -import io.airbyte.server.scheduler.EventRunner; import io.airbyte.validation.json.JsonValidationException; import io.airbyte.workers.helper.ConnectionHelper; import jakarta.inject.Singleton; @@ -160,7 +160,7 @@ public ConnectionRead createConnection(final ConnectionCreate connectionCreate) // TODO Undesirable behavior: sending a null configured catalog should not be valid? if (connectionCreate.getSyncCatalog() != null) { - standardSync.withCatalog(CatalogConverter.toProtocol(connectionCreate.getSyncCatalog())); + standardSync.withCatalog(CatalogConverter.toConfiguredProtocol(connectionCreate.getSyncCatalog())); standardSync.withFieldSelectionData(CatalogConverter.getFieldSelectionData(connectionCreate.getSyncCatalog())); } else { standardSync.withCatalog(new ConfiguredAirbyteCatalog().withStreams(Collections.emptyList())); @@ -318,7 +318,7 @@ private static void applyPatchToStandardSync(final StandardSync sync, final Conn // in the patch. Otherwise, leave the field unchanged. if (patch.getSyncCatalog() != null) { - sync.setCatalog(CatalogConverter.toProtocol(patch.getSyncCatalog())); + sync.setCatalog(CatalogConverter.toConfiguredProtocol(patch.getSyncCatalog())); sync.withFieldSelectionData(CatalogConverter.getFieldSelectionData(patch.getSyncCatalog())); } @@ -519,8 +519,9 @@ public Optional getConnectionAirbyteCatalog(final UUID connectio return Optional.empty(); } final ActorCatalog catalog = configRepository.getActorCatalogById(connection.getSourceCatalogId()); - return Optional.of(CatalogConverter.toApi(Jsons.object(catalog.getCatalog(), - io.airbyte.protocol.models.AirbyteCatalog.class))); + final StandardSourceDefinition sourceDefinition = configRepository.getSourceDefinitionFromSource(connection.getSourceId()); + final io.airbyte.protocol.models.AirbyteCatalog jsonCatalog = Jsons.object(catalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); + return Optional.of(CatalogConverter.toApi(jsonCatalog, sourceDefinition)); } public ConnectionReadList searchConnections(final ConnectionSearch connectionSearch) diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/DestinationDefinitionsHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/DestinationDefinitionsHandler.java similarity index 96% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/DestinationDefinitionsHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/DestinationDefinitionsHandler.java index 8dbd84014459c..813cda084b555 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/DestinationDefinitionsHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/DestinationDefinitionsHandler.java @@ -2,9 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; - -import static io.airbyte.server.ServerConstants.DEV_IMAGE_TAG; +package io.airbyte.commons.server.handlers; import com.google.common.annotations.VisibleForTesting; import io.airbyte.api.model.generated.CustomDestinationDefinitionCreate; @@ -21,6 +19,15 @@ import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.docker.DockerUtils; import io.airbyte.commons.resources.MoreResources; +import io.airbyte.commons.server.ServerConstants; +import io.airbyte.commons.server.converters.ApiPojoConverters; +import io.airbyte.commons.server.converters.SpecFetcher; +import io.airbyte.commons.server.errors.IdNotFoundKnownException; +import io.airbyte.commons.server.errors.InternalServerKnownException; +import io.airbyte.commons.server.errors.UnsupportedProtocolVersionException; +import io.airbyte.commons.server.scheduler.SynchronousResponse; +import io.airbyte.commons.server.scheduler.SynchronousSchedulerClient; +import io.airbyte.commons.server.services.AirbyteGithubStore; import io.airbyte.commons.util.MoreLists; import io.airbyte.commons.version.AirbyteProtocolVersion; import io.airbyte.commons.version.AirbyteProtocolVersionRange; @@ -29,14 +36,6 @@ import io.airbyte.config.persistence.ConfigNotFoundException; import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.converters.ApiPojoConverters; -import io.airbyte.server.converters.SpecFetcher; -import io.airbyte.server.errors.IdNotFoundKnownException; -import io.airbyte.server.errors.InternalServerKnownException; -import io.airbyte.server.errors.UnsupportedProtocolVersionException; -import io.airbyte.server.scheduler.SynchronousResponse; -import io.airbyte.server.scheduler.SynchronousSchedulerClient; -import io.airbyte.server.services.AirbyteGithubStore; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Singleton; import java.io.IOException; @@ -240,7 +239,7 @@ public DestinationDefinitionRead updateDestinationDefinition(final DestinationDe // specs are re-fetched from the container if the image tag has changed, or if the tag is "dev", // to allow for easier iteration of dev images final boolean specNeedsUpdate = !currentDestination.getDockerImageTag().equals(destinationDefinitionUpdate.getDockerImageTag()) - || destinationDefinitionUpdate.getDockerImageTag().equals(DEV_IMAGE_TAG); + || ServerConstants.DEV_IMAGE_TAG.equals(destinationDefinitionUpdate.getDockerImageTag()); final ConnectorSpecification spec = specNeedsUpdate ? getSpecForImage(currentDestination.getDockerRepository(), destinationDefinitionUpdate.getDockerImageTag(), currentDestination.getCustom()) : currentDestination.getSpec(); diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/DestinationHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/DestinationHandler.java similarity index 99% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/DestinationHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/DestinationHandler.java index d105a514e0ec5..4a5fa21e52572 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/DestinationHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/DestinationHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.annotations.VisibleForTesting; @@ -20,6 +20,7 @@ import io.airbyte.api.model.generated.DestinationUpdate; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.converters.ConfigurationUpdate; import io.airbyte.config.DestinationConnection; import io.airbyte.config.StandardDestinationDefinition; import io.airbyte.config.persistence.ConfigNotFoundException; @@ -29,7 +30,6 @@ import io.airbyte.config.persistence.split_secrets.JsonSecretsProcessor; import io.airbyte.persistence.job.factory.OAuthConfigSupplier; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.converters.ConfigurationUpdate; import io.airbyte.validation.json.JsonSchemaValidator; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Inject; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/HealthCheckHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/HealthCheckHandler.java similarity index 92% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/HealthCheckHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/HealthCheckHandler.java index 2843fbc2c09d6..bd96e2df625fa 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/HealthCheckHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/HealthCheckHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import io.airbyte.api.model.generated.HealthCheckRead; import io.airbyte.config.persistence.ConfigRepository; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/JobHistoryHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/JobHistoryHandler.java similarity index 95% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/JobHistoryHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/JobHistoryHandler.java index d12fdad8a77cc..65fddab329572 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/JobHistoryHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/JobHistoryHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import com.google.common.base.Preconditions; import io.airbyte.api.model.generated.AttemptInfoRead; @@ -10,6 +10,7 @@ import io.airbyte.api.model.generated.AttemptRead; import io.airbyte.api.model.generated.AttemptStats; import io.airbyte.api.model.generated.AttemptStreamStats; +import io.airbyte.api.model.generated.ConnectionIdRequestBody; import io.airbyte.api.model.generated.ConnectionRead; import io.airbyte.api.model.generated.DestinationDefinitionIdRequestBody; import io.airbyte.api.model.generated.DestinationDefinitionRead; @@ -21,6 +22,7 @@ import io.airbyte.api.model.generated.JobInfoLightRead; import io.airbyte.api.model.generated.JobInfoRead; import io.airbyte.api.model.generated.JobListRequestBody; +import io.airbyte.api.model.generated.JobOptionalRead; import io.airbyte.api.model.generated.JobRead; import io.airbyte.api.model.generated.JobReadList; import io.airbyte.api.model.generated.JobWithAttemptsRead; @@ -29,6 +31,8 @@ import io.airbyte.api.model.generated.SourceIdRequestBody; import io.airbyte.api.model.generated.SourceRead; import io.airbyte.commons.enums.Enums; +import io.airbyte.commons.server.converters.JobConverter; +import io.airbyte.commons.server.converters.WorkflowStateConverter; import io.airbyte.commons.temporal.TemporalClient; import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs.WorkerEnvironment; @@ -40,8 +44,6 @@ import io.airbyte.persistence.job.JobPersistence.JobAttemptPair; import io.airbyte.persistence.job.models.Job; import io.airbyte.persistence.job.models.JobStatus; -import io.airbyte.server.converters.JobConverter; -import io.airbyte.server.converters.WorkflowStateConverter; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Singleton; import java.io.IOException; @@ -194,6 +196,16 @@ public JobInfoLightRead getJobInfoLight(final JobIdRequestBody jobIdRequestBody) return jobConverter.getJobInfoLightRead(job); } + public JobOptionalRead getLastReplicationJob(final ConnectionIdRequestBody connectionIdRequestBody) throws IOException { + Optional job = jobPersistence.getLastReplicationJob(connectionIdRequestBody.getConnectionId()); + if (job.isEmpty()) { + return new JobOptionalRead(); + } else { + return jobConverter.getJobOptionalRead(job.get()); + } + + } + public JobDebugInfoRead getJobDebugInfo(final JobIdRequestBody jobIdRequestBody) throws ConfigNotFoundException, IOException, JsonValidationException { final Job job = jobPersistence.getJob(jobIdRequestBody.getId()); diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/LogsHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/LogsHandler.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/LogsHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/LogsHandler.java index b9ac2378aca4d..4fb5ce2f8d66d 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/LogsHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/LogsHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import io.airbyte.api.model.generated.LogsRequestBody; import io.airbyte.config.Configs; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/OAuthHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OAuthHandler.java similarity index 99% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/OAuthHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OAuthHandler.java index 6823d6d5a8f60..8a4cb5089d504 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/OAuthHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OAuthHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static io.airbyte.metrics.lib.ApmTraceConstants.Tags.DESTINATION_DEFINITION_ID_KEY; import static io.airbyte.metrics.lib.ApmTraceConstants.Tags.SOURCE_DEFINITION_ID_KEY; @@ -22,6 +22,7 @@ import io.airbyte.commons.constants.AirbyteSecretConstants; import io.airbyte.commons.json.JsonPaths; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.handlers.helpers.OAuthPathExtractor; import io.airbyte.config.DestinationConnection; import io.airbyte.config.DestinationOAuthParameter; import io.airbyte.config.SourceConnection; @@ -37,7 +38,6 @@ import io.airbyte.persistence.job.factory.OAuthConfigSupplier; import io.airbyte.persistence.job.tracker.TrackingMetadata; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.handlers.helpers.OAuthPathExtractor; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Singleton; import java.io.IOException; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/OpenApiConfigHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OpenApiConfigHandler.java similarity index 93% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/OpenApiConfigHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OpenApiConfigHandler.java index e9d4b3614ec89..4192ff00dbb58 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/OpenApiConfigHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OpenApiConfigHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import io.airbyte.commons.resources.MoreResources; import jakarta.inject.Singleton; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/OperationsHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OperationsHandler.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/OperationsHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OperationsHandler.java index 7e6c45140508b..7510b26cc846d 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/OperationsHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/OperationsHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; @@ -17,13 +17,13 @@ import io.airbyte.api.model.generated.OperationUpdate; import io.airbyte.api.model.generated.OperatorConfiguration; import io.airbyte.commons.enums.Enums; +import io.airbyte.commons.server.converters.OperationsConverter; import io.airbyte.config.ConfigSchema; import io.airbyte.config.StandardSync; import io.airbyte.config.StandardSyncOperation; import io.airbyte.config.StandardSyncOperation.OperatorType; import io.airbyte.config.persistence.ConfigNotFoundException; import io.airbyte.config.persistence.ConfigRepository; -import io.airbyte.server.converters.OperationsConverter; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Inject; import jakarta.inject.Singleton; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/SchedulerHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SchedulerHandler.java similarity index 96% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/SchedulerHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SchedulerHandler.java index d2270ccf172b7..e0bd34451a7cd 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/SchedulerHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SchedulerHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Charsets; @@ -45,6 +45,15 @@ import io.airbyte.commons.enums.Enums; import io.airbyte.commons.features.FeatureFlags; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.converters.ConfigurationUpdate; +import io.airbyte.commons.server.converters.JobConverter; +import io.airbyte.commons.server.converters.OauthModelConverter; +import io.airbyte.commons.server.errors.ValueConflictKnownException; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; +import io.airbyte.commons.server.scheduler.EventRunner; +import io.airbyte.commons.server.scheduler.SynchronousJobMetadata; +import io.airbyte.commons.server.scheduler.SynchronousResponse; +import io.airbyte.commons.server.scheduler.SynchronousSchedulerClient; import io.airbyte.commons.temporal.ErrorCode; import io.airbyte.commons.temporal.TemporalClient.ManualOperationResult; import io.airbyte.commons.version.Version; @@ -65,15 +74,6 @@ import io.airbyte.persistence.job.models.Job; import io.airbyte.protocol.models.AirbyteCatalog; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.converters.ConfigurationUpdate; -import io.airbyte.server.converters.JobConverter; -import io.airbyte.server.converters.OauthModelConverter; -import io.airbyte.server.errors.ValueConflictKnownException; -import io.airbyte.server.handlers.helpers.CatalogConverter; -import io.airbyte.server.scheduler.EventRunner; -import io.airbyte.server.scheduler.SynchronousJobMetadata; -import io.airbyte.server.scheduler.SynchronousResponse; -import io.airbyte.server.scheduler.SynchronousSchedulerClient; import io.airbyte.validation.json.JsonSchemaValidator; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Singleton; @@ -267,7 +267,7 @@ public SourceDiscoverSchemaRead discoverSchemaForSourceFromSourceId(final Source connectorVersion, new Version(sourceDef.getProtocolVersion()), isCustomConnector); - final SourceDiscoverSchemaRead discoveredSchema = retrieveDiscoveredSchema(persistedCatalogId); + final SourceDiscoverSchemaRead discoveredSchema = retrieveDiscoveredSchema(persistedCatalogId, sourceDef); if (discoverSchemaRequestBody.getConnectionId() != null) { // modify discoveredSchema object to add CatalogDiff, containsBreakingChange, and connectionStatus @@ -286,7 +286,7 @@ public SourceDiscoverSchemaRead discoverSchemaForSourceFromSourceId(final Source .logs(new LogRead().logLines(new ArrayList<>())) .succeeded(true); return new SourceDiscoverSchemaRead() - .catalog(CatalogConverter.toApi(airbyteCatalog)) + .catalog(CatalogConverter.toApi(airbyteCatalog, sourceDef)) .jobInfo(emptyJob) .catalogId(currentCatalog.get().getId()); } @@ -313,10 +313,11 @@ public SourceDiscoverSchemaRead discoverSchemaForSourceFromSourceCreate(final So new Version( sourceDef.getProtocolVersion()), isCustomConnector); - return retrieveDiscoveredSchema(response); + return retrieveDiscoveredSchema(response, sourceDef); } - private SourceDiscoverSchemaRead retrieveDiscoveredSchema(final SynchronousResponse response) throws ConfigNotFoundException, IOException { + private SourceDiscoverSchemaRead retrieveDiscoveredSchema(final SynchronousResponse response, final StandardSourceDefinition sourceDef) + throws ConfigNotFoundException, IOException { final SourceDiscoverSchemaRead sourceDiscoverSchemaRead = new SourceDiscoverSchemaRead() .jobInfo(jobConverter.getSynchronousJobRead(response)); @@ -324,7 +325,7 @@ private SourceDiscoverSchemaRead retrieveDiscoveredSchema(final SynchronousRespo final ActorCatalog catalog = configRepository.getActorCatalogById(response.getOutput()); final AirbyteCatalog persistenceCatalog = Jsons.object(catalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); - sourceDiscoverSchemaRead.catalog(CatalogConverter.toApi(persistenceCatalog)); + sourceDiscoverSchemaRead.catalog(CatalogConverter.toApi(persistenceCatalog, sourceDef)); sourceDiscoverSchemaRead.catalogId(response.getOutput()); } @@ -404,7 +405,7 @@ private void generateCatalogDiffsAndDisableConnectionsIfNeeded(final SourceDisco connectionRead.getSyncCatalog(); final CatalogDiff diff = connectionsHandler.getDiff(catalogUsedToMakeConfiguredCatalog.orElse(currentAirbyteCatalog), discoveredSchema.getCatalog(), - CatalogConverter.toProtocol(currentAirbyteCatalog)); + CatalogConverter.toConfiguredProtocol(currentAirbyteCatalog)); final boolean containsBreakingChange = containsBreakingChange(diff); final ConnectionUpdate updateObject = new ConnectionUpdate().breakingChange(containsBreakingChange).connectionId(connectionRead.getConnectionId()); diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/SourceDefinitionsHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SourceDefinitionsHandler.java similarity index 95% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/SourceDefinitionsHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SourceDefinitionsHandler.java index 578d8398153ad..9ee876cba701e 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/SourceDefinitionsHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SourceDefinitionsHandler.java @@ -2,9 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; - -import static io.airbyte.server.ServerConstants.DEV_IMAGE_TAG; +package io.airbyte.commons.server.handlers; import com.google.common.annotations.VisibleForTesting; import io.airbyte.api.model.generated.CustomSourceDefinitionCreate; @@ -22,6 +20,15 @@ import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.docker.DockerUtils; import io.airbyte.commons.resources.MoreResources; +import io.airbyte.commons.server.ServerConstants; +import io.airbyte.commons.server.converters.ApiPojoConverters; +import io.airbyte.commons.server.converters.SpecFetcher; +import io.airbyte.commons.server.errors.IdNotFoundKnownException; +import io.airbyte.commons.server.errors.InternalServerKnownException; +import io.airbyte.commons.server.errors.UnsupportedProtocolVersionException; +import io.airbyte.commons.server.scheduler.SynchronousResponse; +import io.airbyte.commons.server.scheduler.SynchronousSchedulerClient; +import io.airbyte.commons.server.services.AirbyteGithubStore; import io.airbyte.commons.util.MoreLists; import io.airbyte.commons.version.AirbyteProtocolVersion; import io.airbyte.commons.version.AirbyteProtocolVersionRange; @@ -30,14 +37,6 @@ import io.airbyte.config.persistence.ConfigNotFoundException; import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.converters.ApiPojoConverters; -import io.airbyte.server.converters.SpecFetcher; -import io.airbyte.server.errors.IdNotFoundKnownException; -import io.airbyte.server.errors.InternalServerKnownException; -import io.airbyte.server.errors.UnsupportedProtocolVersionException; -import io.airbyte.server.scheduler.SynchronousResponse; -import io.airbyte.server.scheduler.SynchronousSchedulerClient; -import io.airbyte.server.services.AirbyteGithubStore; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Inject; import jakarta.inject.Singleton; @@ -242,7 +241,7 @@ public SourceDefinitionRead updateSourceDefinition(final SourceDefinitionUpdate // specs are re-fetched from the container if the image tag has changed, or if the tag is "dev", // to allow for easier iteration of dev images final boolean specNeedsUpdate = !currentSourceDefinition.getDockerImageTag().equals(sourceDefinitionUpdate.getDockerImageTag()) - || sourceDefinitionUpdate.getDockerImageTag().equals(DEV_IMAGE_TAG); + || ServerConstants.DEV_IMAGE_TAG.equals(sourceDefinitionUpdate.getDockerImageTag()); final ConnectorSpecification spec = specNeedsUpdate ? getSpecForImage(currentSourceDefinition.getDockerRepository(), sourceDefinitionUpdate.getDockerImageTag(), currentSourceDefinition.getCustom()) diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/SourceHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SourceHandler.java similarity index 94% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/SourceHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SourceHandler.java index cfb0fb278b8c6..fe95cf6ec1c36 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/SourceHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/SourceHandler.java @@ -2,16 +2,18 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.Lists; import io.airbyte.api.model.generated.ActorCatalogWithUpdatedAt; import io.airbyte.api.model.generated.ConnectionRead; +import io.airbyte.api.model.generated.DiscoverCatalogResult; import io.airbyte.api.model.generated.SourceCloneConfiguration; import io.airbyte.api.model.generated.SourceCloneRequestBody; import io.airbyte.api.model.generated.SourceCreate; import io.airbyte.api.model.generated.SourceDefinitionIdRequestBody; +import io.airbyte.api.model.generated.SourceDiscoverSchemaWriteRequestBody; import io.airbyte.api.model.generated.SourceIdRequestBody; import io.airbyte.api.model.generated.SourceRead; import io.airbyte.api.model.generated.SourceReadList; @@ -19,6 +21,8 @@ import io.airbyte.api.model.generated.SourceSnippetRead; import io.airbyte.api.model.generated.SourceUpdate; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; +import io.airbyte.commons.server.converters.ConfigurationUpdate; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; import io.airbyte.config.SourceConnection; import io.airbyte.config.StandardSourceDefinition; import io.airbyte.config.persistence.ConfigNotFoundException; @@ -27,8 +31,8 @@ import io.airbyte.config.persistence.SecretsRepositoryWriter; import io.airbyte.config.persistence.split_secrets.JsonSecretsProcessor; import io.airbyte.persistence.job.factory.OAuthConfigSupplier; +import io.airbyte.protocol.models.AirbyteCatalog; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.converters.ConfigurationUpdate; import io.airbyte.validation.json.JsonSchemaValidator; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Inject; @@ -261,6 +265,17 @@ public void deleteSource(final SourceRead source) spec); } + public DiscoverCatalogResult writeDiscoverCatalogResult(final SourceDiscoverSchemaWriteRequestBody request) + throws JsonValidationException, IOException { + final AirbyteCatalog persistenceCatalog = CatalogConverter.toProtocol(request.getCatalog()); + UUID catalogId = configRepository.writeActorCatalogFetchEvent( + persistenceCatalog, + request.getSourceId(), + request.getConnectorVersion(), + request.getConfigurationHash()); + return new DiscoverCatalogResult().catalogId(catalogId); + } + private SourceRead buildSourceRead(final UUID sourceId) throws ConfigNotFoundException, IOException, JsonValidationException { // read configuration from db diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/StateHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/StateHandler.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/StateHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/StateHandler.java index 977f95813aadf..8bc2a8f68e125 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/StateHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/StateHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import io.airbyte.api.model.generated.ConnectionIdRequestBody; import io.airbyte.api.model.generated.ConnectionState; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendCheckUpdatesHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendCheckUpdatesHandler.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendCheckUpdatesHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendCheckUpdatesHandler.java index 7c51e26c5494f..13a2c0d3cd2a8 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendCheckUpdatesHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendCheckUpdatesHandler.java @@ -2,13 +2,13 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import io.airbyte.api.model.generated.WebBackendCheckUpdatesRead; +import io.airbyte.commons.server.services.AirbyteGithubStore; import io.airbyte.config.StandardDestinationDefinition; import io.airbyte.config.StandardSourceDefinition; import io.airbyte.config.persistence.ConfigRepository; -import io.airbyte.server.services.AirbyteGithubStore; import jakarta.inject.Singleton; import java.io.IOException; import java.util.List; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendConnectionsHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendConnectionsHandler.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendConnectionsHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendConnectionsHandler.java index 99303a29f615a..106a892ab38c1 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendConnectionsHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendConnectionsHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static java.util.stream.Collectors.toMap; @@ -49,16 +49,17 @@ import io.airbyte.commons.enums.Enums; import io.airbyte.commons.json.Jsons; import io.airbyte.commons.lang.MoreBooleans; +import io.airbyte.commons.server.converters.ApiPojoConverters; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; +import io.airbyte.commons.server.scheduler.EventRunner; import io.airbyte.config.ActorCatalog; import io.airbyte.config.ActorCatalogFetchEvent; +import io.airbyte.config.StandardSourceDefinition; import io.airbyte.config.StandardSync; import io.airbyte.config.persistence.ConfigNotFoundException; import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.config.persistence.ConfigRepository.StandardSyncQuery; import io.airbyte.protocol.models.ConfiguredAirbyteCatalog; -import io.airbyte.server.converters.ApiPojoConverters; -import io.airbyte.server.handlers.helpers.CatalogConverter; -import io.airbyte.server.scheduler.EventRunner; import io.airbyte.validation.json.JsonValidationException; import io.airbyte.workers.helper.ProtocolConverters; import jakarta.inject.Singleton; @@ -544,9 +545,10 @@ public WebBackendConnectionRead webBackendUpdateConnection(final WebBackendConne if (mostRecentActorCatalog.isPresent()) { final io.airbyte.protocol.models.AirbyteCatalog mostRecentAirbyteCatalog = Jsons.object(mostRecentActorCatalog.get().getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); + final StandardSourceDefinition sourceDefinition = configRepository.getSourceDefinitionFromSource(originalConnectionRead.getSourceId()); final CatalogDiff catalogDiff = - connectionsHandler.getDiff(newAirbyteCatalog, CatalogConverter.toApi(mostRecentAirbyteCatalog), - CatalogConverter.toProtocol(newAirbyteCatalog)); + connectionsHandler.getDiff(newAirbyteCatalog, CatalogConverter.toApi(mostRecentAirbyteCatalog, sourceDefinition), + CatalogConverter.toConfiguredProtocol(newAirbyteCatalog)); breakingChange = containsBreakingChange(catalogDiff); } } @@ -602,7 +604,7 @@ private void resetStreamsIfNeeded(final WebBackendConnectionUpdate webBackendCon CatalogConverter.getFieldSelectionData(oldConnectionRead.getSyncCatalog())); final AirbyteCatalog upToDateAirbyteCatalog = updatedConnectionRead.getSyncCatalog(); final CatalogDiff catalogDiff = - connectionsHandler.getDiff(apiExistingCatalog, upToDateAirbyteCatalog, CatalogConverter.toProtocol(upToDateAirbyteCatalog)); + connectionsHandler.getDiff(apiExistingCatalog, upToDateAirbyteCatalog, CatalogConverter.toConfiguredProtocol(upToDateAirbyteCatalog)); final List apiStreamsToReset = getStreamsToReset(catalogDiff); final Set changedConfigStreamDescriptors = connectionsHandler.getConfigurationDiff(apiExistingCatalog, upToDateAirbyteCatalog); diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendGeographiesHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendGeographiesHandler.java similarity index 95% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendGeographiesHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendGeographiesHandler.java index 3d39209098f15..7e33d5374e7ec 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/WebBackendGeographiesHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WebBackendGeographiesHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import io.airbyte.api.model.generated.Geography; import io.airbyte.api.model.generated.WebBackendGeographiesListResult; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/WorkspacesHandler.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WorkspacesHandler.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/WorkspacesHandler.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WorkspacesHandler.java index 6829747a30140..29b739ffe8d3f 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/WorkspacesHandler.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/WorkspacesHandler.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import com.github.slugify.Slugify; import com.google.common.annotations.VisibleForTesting; @@ -26,17 +26,17 @@ import io.airbyte.api.model.generated.WorkspaceUpdate; import io.airbyte.api.model.generated.WorkspaceUpdateName; import io.airbyte.commons.enums.Enums; +import io.airbyte.commons.server.converters.ApiPojoConverters; +import io.airbyte.commons.server.converters.NotificationConverter; +import io.airbyte.commons.server.converters.WorkspaceWebhookConfigsConverter; +import io.airbyte.commons.server.errors.IdNotFoundKnownException; +import io.airbyte.commons.server.errors.InternalServerKnownException; +import io.airbyte.commons.server.errors.ValueConflictKnownException; import io.airbyte.config.StandardWorkspace; import io.airbyte.config.persistence.ConfigNotFoundException; import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.config.persistence.SecretsRepositoryWriter; import io.airbyte.notification.NotificationClient; -import io.airbyte.server.converters.ApiPojoConverters; -import io.airbyte.server.converters.NotificationConverter; -import io.airbyte.server.converters.WorkspaceWebhookConfigsConverter; -import io.airbyte.server.errors.IdNotFoundKnownException; -import io.airbyte.server.errors.InternalServerKnownException; -import io.airbyte.server.errors.ValueConflictKnownException; import io.airbyte.validation.json.JsonValidationException; import jakarta.inject.Inject; import jakarta.inject.Singleton; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/CatalogConverter.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/CatalogConverter.java similarity index 76% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/CatalogConverter.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/CatalogConverter.java index fb0bcd3dc7618..75fb0eda27f08 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/CatalogConverter.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/CatalogConverter.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers.helpers; +package io.airbyte.commons.server.handlers.helpers; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -18,6 +18,7 @@ import io.airbyte.commons.json.Jsons; import io.airbyte.commons.text.Names; import io.airbyte.config.FieldSelectionData; +import io.airbyte.config.StandardSourceDefinition; import io.airbyte.protocol.models.ConfiguredAirbyteCatalog; import io.airbyte.validation.json.JsonValidationException; import java.util.ArrayList; @@ -48,7 +49,7 @@ private static io.airbyte.api.model.generated.AirbyteStream toApi(final io.airby } @SuppressWarnings("PMD.AvoidLiteralsInIfCondition") - private static io.airbyte.protocol.models.AirbyteStream toProtocol(final AirbyteStream stream, AirbyteStreamConfiguration config) + private static io.airbyte.protocol.models.AirbyteStream toConfiguredProtocol(final AirbyteStream stream, AirbyteStreamConfiguration config) throws JsonValidationException { if (config.getFieldSelectionEnabled() != null && config.getFieldSelectionEnabled()) { // Validate the selected field paths. @@ -69,16 +70,21 @@ private static io.airbyte.protocol.models.AirbyteStream toProtocol(final Airbyte } } // Only include the selected fields. + // NOTE: we verified above that each selected field has at least one element in the field path. final Set selectedFieldNames = config.getSelectedFields().stream().map((field) -> field.getFieldPath().get(0)).collect(Collectors.toSet()); // TODO(mfsiega-airbyte): we only check the top level of the cursor/primary key fields because we // don't support filtering nested fields yet. - if (!selectedFieldNames.contains(config.getCursorField().get(0)) && config.getSyncMode().equals(SyncMode.INCREMENTAL)) { + if (config.getSyncMode().equals(SyncMode.INCREMENTAL) // INCREMENTAL sync mode, AND + && !config.getCursorField().isEmpty() // There is a cursor configured, AND + && !selectedFieldNames.contains(config.getCursorField().get(0))) { // The cursor isn't in the selected fields. throw new JsonValidationException("Cursor field cannot be de-selected in INCREMENTAL syncs"); } - for (final List primaryKeyComponent : config.getPrimaryKey()) { - if (!selectedFieldNames.contains(primaryKeyComponent.get(0)) && config.getDestinationSyncMode().equals(DestinationSyncMode.APPEND_DEDUP)) { - throw new JsonValidationException("Primary key field cannot be de-selected in DEDUP mode"); + if (config.getDestinationSyncMode().equals(DestinationSyncMode.APPEND_DEDUP)) { + for (final List primaryKeyComponent : config.getPrimaryKey()) { + if (!selectedFieldNames.contains(primaryKeyComponent.get(0))) { + throw new JsonValidationException("Primary key field cannot be de-selected in DEDUP mode"); + } } } for (final String selectedFieldName : selectedFieldNames) { @@ -98,29 +104,57 @@ private static io.airbyte.protocol.models.AirbyteStream toProtocol(final Airbyte .withNamespace(stream.getNamespace()); } - public static io.airbyte.api.model.generated.AirbyteCatalog toApi(final io.airbyte.protocol.models.AirbyteCatalog catalog) { + public static io.airbyte.api.model.generated.AirbyteCatalog toApi(final io.airbyte.protocol.models.AirbyteCatalog catalog, + StandardSourceDefinition sourceDefinition) { + List suggestedStreams = new ArrayList<>(); + Boolean suggestingStreams; + + // There are occasions in tests where we have not seeded the sourceDefinition fully. This is to + // prevent those tests from failing + if (sourceDefinition != null) { + suggestingStreams = sourceDefinition.getSuggestedStreams() != null; + if (suggestingStreams) { + suggestedStreams.addAll(sourceDefinition.getSuggestedStreams().getStreams()); + } + } else { + suggestingStreams = false; + } + return new io.airbyte.api.model.generated.AirbyteCatalog() .streams(catalog.getStreams() .stream() .map(CatalogConverter::toApi) .map(s -> new io.airbyte.api.model.generated.AirbyteStreamAndConfiguration() .stream(s) - .config(generateDefaultConfiguration(s))) + .config(generateDefaultConfiguration(s, suggestingStreams, suggestedStreams))) .collect(Collectors.toList())); } - private static io.airbyte.api.model.generated.AirbyteStreamConfiguration generateDefaultConfiguration(final io.airbyte.api.model.generated.AirbyteStream stream) { + private static io.airbyte.api.model.generated.AirbyteStreamConfiguration generateDefaultConfiguration(final io.airbyte.api.model.generated.AirbyteStream stream, + Boolean suggestingStreams, + List suggestedStreams) { final io.airbyte.api.model.generated.AirbyteStreamConfiguration result = new io.airbyte.api.model.generated.AirbyteStreamConfiguration() .aliasName(Names.toAlphanumericAndUnderscore(stream.getName())) .cursorField(stream.getDefaultCursorField()) .destinationSyncMode(io.airbyte.api.model.generated.DestinationSyncMode.APPEND) .primaryKey(stream.getSourceDefinedPrimaryKey()) - .selected(true); + .selected(!suggestingStreams) + .suggested(true); + + if (suggestingStreams) { + if (suggestedStreams.contains(stream.getName())) { + result.setSelected(true); + } else { + result.setSuggested(false); + } + } + if (stream.getSupportedSyncModes().size() > 0) { result.setSyncMode(stream.getSupportedSyncModes().get(0)); } else { result.setSyncMode(io.airbyte.api.model.generated.SyncMode.INCREMENTAL); } + return result; } @@ -168,7 +202,8 @@ private static Boolean getStreamHasFieldSelectionEnabled(FieldSelectionData fiel /** * Converts the API catalog model into a protocol catalog. Note: returns all streams, regardless of * selected status. See - * {@link CatalogConverter#toProtocol(AirbyteStream, AirbyteStreamConfiguration)} for context. + * {@link CatalogConverter#toConfiguredProtocol(AirbyteStream, AirbyteStreamConfiguration)} for + * context. * * @param catalog api catalog * @return protocol catalog @@ -178,7 +213,35 @@ public static io.airbyte.protocol.models.ConfiguredAirbyteCatalog toProtocolKeep throws JsonValidationException { final AirbyteCatalog clone = Jsons.clone(catalog); clone.getStreams().forEach(stream -> stream.getConfig().setSelected(true)); - return toProtocol(clone); + return toConfiguredProtocol(clone); + } + + /** + * To convert AirbyteCatalog from APIs to model. This is to differentiate between + * toConfiguredProtocol as the other one converts to ConfiguredAirbyteCatalog object instead. + */ + public static io.airbyte.protocol.models.AirbyteCatalog toProtocol( + final io.airbyte.api.model.generated.AirbyteCatalog catalog) + throws JsonValidationException { + final ArrayList errors = new ArrayList<>(); + + io.airbyte.protocol.models.AirbyteCatalog protoCatalog = + new io.airbyte.protocol.models.AirbyteCatalog(); + var airbyteStream = catalog.getStreams().stream().map(stream -> { + try { + return toConfiguredProtocol(stream.getStream(), stream.getConfig()); + } catch (JsonValidationException e) { + LOGGER.error("Error parsing catalog: {}", e); + errors.add(e); + return null; + } + }).collect(Collectors.toList()); + + if (!errors.isEmpty()) { + throw errors.get(0); + } + protoCatalog.withStreams(airbyteStream); + return protoCatalog; } /** @@ -191,7 +254,7 @@ public static io.airbyte.protocol.models.ConfiguredAirbyteCatalog toProtocolKeep * @param catalog api catalog * @return protocol catalog */ - public static io.airbyte.protocol.models.ConfiguredAirbyteCatalog toProtocol(final io.airbyte.api.model.generated.AirbyteCatalog catalog) + public static io.airbyte.protocol.models.ConfiguredAirbyteCatalog toConfiguredProtocol(final io.airbyte.api.model.generated.AirbyteCatalog catalog) throws JsonValidationException { final ArrayList errors = new ArrayList<>(); final List streams = catalog.getStreams() @@ -200,7 +263,7 @@ public static io.airbyte.protocol.models.ConfiguredAirbyteCatalog toProtocol(fin .map(s -> { try { return new io.airbyte.protocol.models.ConfiguredAirbyteStream() - .withStream(toProtocol(s.getStream(), s.getConfig())) + .withStream(toConfiguredProtocol(s.getStream(), s.getConfig())) .withSyncMode(Enums.convertTo(s.getConfig().getSyncMode(), io.airbyte.protocol.models.SyncMode.class)) .withCursorField(s.getConfig().getCursorField()) .withDestinationSyncMode(Enums.convertTo(s.getConfig().getDestinationSyncMode(), diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/ConnectionMatcher.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/ConnectionMatcher.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/ConnectionMatcher.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/ConnectionMatcher.java index 2afaf63aec8bf..d9b0387fca177 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/ConnectionMatcher.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/ConnectionMatcher.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers.helpers; +package io.airbyte.commons.server.handlers.helpers; import io.airbyte.api.model.generated.ConnectionRead; import io.airbyte.api.model.generated.ConnectionSearch; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/ConnectionScheduleHelper.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/ConnectionScheduleHelper.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/ConnectionScheduleHelper.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/ConnectionScheduleHelper.java index 807072626cb37..e49d31a6449e4 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/ConnectionScheduleHelper.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/ConnectionScheduleHelper.java @@ -2,17 +2,17 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers.helpers; +package io.airbyte.commons.server.handlers.helpers; import io.airbyte.api.model.generated.ConnectionScheduleData; import io.airbyte.api.model.generated.ConnectionScheduleType; +import io.airbyte.commons.server.converters.ApiPojoConverters; import io.airbyte.config.BasicSchedule; import io.airbyte.config.Cron; import io.airbyte.config.Schedule; import io.airbyte.config.ScheduleData; import io.airbyte.config.StandardSync; import io.airbyte.config.StandardSync.ScheduleType; -import io.airbyte.server.converters.ApiPojoConverters; import io.airbyte.validation.json.JsonValidationException; import java.text.ParseException; import java.util.TimeZone; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/DestinationMatcher.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/DestinationMatcher.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/DestinationMatcher.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/DestinationMatcher.java index b9c374c31e003..05f2752d1df28 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/DestinationMatcher.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/DestinationMatcher.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers.helpers; +package io.airbyte.commons.server.handlers.helpers; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/Matchable.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/Matchable.java similarity index 71% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/Matchable.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/Matchable.java index b1de20b95fdcd..2e87767d3a765 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/Matchable.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/Matchable.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers.helpers; +package io.airbyte.commons.server.handlers.helpers; @FunctionalInterface interface Matchable { diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/OAuthPathExtractor.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/OAuthPathExtractor.java similarity index 96% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/OAuthPathExtractor.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/OAuthPathExtractor.java index 4a6ed4580020d..60da416a51089 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/OAuthPathExtractor.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/OAuthPathExtractor.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers.helpers; +package io.airbyte.commons.server.handlers.helpers; import com.fasterxml.jackson.databind.JsonNode; import java.util.ArrayList; diff --git a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/SourceMatcher.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/SourceMatcher.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/SourceMatcher.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/SourceMatcher.java index ee4e35d7d2c7c..78c13fc4e9921 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/handlers/helpers/SourceMatcher.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/handlers/helpers/SourceMatcher.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers.helpers; +package io.airbyte.commons.server.handlers.helpers; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; diff --git a/airbyte-server/src/main/java/io/airbyte/server/scheduler/DefaultSynchronousSchedulerClient.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/DefaultSynchronousSchedulerClient.java similarity index 99% rename from airbyte-server/src/main/java/io/airbyte/server/scheduler/DefaultSynchronousSchedulerClient.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/DefaultSynchronousSchedulerClient.java index 28036302a9bea..f01806f089583 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/scheduler/DefaultSynchronousSchedulerClient.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/DefaultSynchronousSchedulerClient.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.scheduler; +package io.airbyte.commons.server.scheduler; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.annotations.VisibleForTesting; diff --git a/airbyte-server/src/main/java/io/airbyte/server/scheduler/EventRunner.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/EventRunner.java similarity index 95% rename from airbyte-server/src/main/java/io/airbyte/server/scheduler/EventRunner.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/EventRunner.java index bc4a83a07042a..627df14556b37 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/scheduler/EventRunner.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/EventRunner.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.scheduler; +package io.airbyte.commons.server.scheduler; import io.airbyte.commons.temporal.TemporalClient.ManualOperationResult; import io.airbyte.protocol.models.StreamDescriptor; diff --git a/airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousJobMetadata.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousJobMetadata.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousJobMetadata.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousJobMetadata.java index b4689b9fa6bf0..a3731db99e524 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousJobMetadata.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousJobMetadata.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.scheduler; +package io.airbyte.commons.server.scheduler; import io.airbyte.commons.temporal.JobMetadata; import io.airbyte.config.JobConfig.ConfigType; diff --git a/airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousResponse.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousResponse.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousResponse.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousResponse.java index 463564e8fe981..1c135ce85aaf8 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousResponse.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousResponse.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.scheduler; +package io.airbyte.commons.server.scheduler; import io.airbyte.commons.temporal.TemporalResponse; import io.airbyte.config.ConnectorJobOutput; diff --git a/airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousSchedulerClient.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousSchedulerClient.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousSchedulerClient.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousSchedulerClient.java index 7ff4257e1f2bf..a9bceabccc645 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/scheduler/SynchronousSchedulerClient.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/SynchronousSchedulerClient.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.scheduler; +package io.airbyte.commons.server.scheduler; import io.airbyte.commons.version.Version; import io.airbyte.config.DestinationConnection; diff --git a/airbyte-server/src/main/java/io/airbyte/server/scheduler/TemporalEventRunner.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/TemporalEventRunner.java similarity index 97% rename from airbyte-server/src/main/java/io/airbyte/server/scheduler/TemporalEventRunner.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/TemporalEventRunner.java index 5aa469a1a9d5a..e6976a7f9de1c 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/scheduler/TemporalEventRunner.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/scheduler/TemporalEventRunner.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.scheduler; +package io.airbyte.commons.server.scheduler; import io.airbyte.commons.temporal.TemporalClient; import io.airbyte.commons.temporal.TemporalClient.ManualOperationResult; diff --git a/airbyte-server/src/main/java/io/airbyte/server/services/AirbyteGithubStore.java b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/services/AirbyteGithubStore.java similarity index 98% rename from airbyte-server/src/main/java/io/airbyte/server/services/AirbyteGithubStore.java rename to airbyte-commons-server/src/main/java/io/airbyte/commons/server/services/AirbyteGithubStore.java index 8500d6e8dc558..06113d752d482 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/services/AirbyteGithubStore.java +++ b/airbyte-commons-server/src/main/java/io/airbyte/commons/server/services/AirbyteGithubStore.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.services; +package io.airbyte.commons.server.services; import com.google.common.annotations.VisibleForTesting; import io.airbyte.config.EnvConfigs; diff --git a/airbyte-server/src/test/java/io/airbyte/server/RequestLoggerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/RequestLoggerTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/RequestLoggerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/RequestLoggerTest.java index 46498b4e0b60f..042baedd324eb 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/RequestLoggerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/RequestLoggerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server; +package io.airbyte.commons.server; import io.airbyte.commons.io.IOs; import io.airbyte.config.Configs.WorkerEnvironment; diff --git a/airbyte-server/src/test/java/io/airbyte/server/converters/CatalogConverterTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/CatalogConverterTest.java similarity index 85% rename from airbyte-server/src/test/java/io/airbyte/server/converters/CatalogConverterTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/CatalogConverterTest.java index 59602b2e72634..5747a8d910662 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/converters/CatalogConverterTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/CatalogConverterTest.java @@ -2,10 +2,10 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; -import static io.airbyte.server.helpers.ConnectionHelpers.FIELD_NAME; -import static io.airbyte.server.helpers.ConnectionHelpers.SECOND_FIELD_NAME; +import static io.airbyte.commons.server.helpers.ConnectionHelpers.FIELD_NAME; +import static io.airbyte.commons.server.helpers.ConnectionHelpers.SECOND_FIELD_NAME; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -16,10 +16,10 @@ import io.airbyte.api.model.generated.SelectedFieldInfo; import io.airbyte.api.model.generated.SyncMode; import io.airbyte.commons.enums.Enums; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; +import io.airbyte.commons.server.helpers.ConnectionHelpers; import io.airbyte.config.DataType; import io.airbyte.config.FieldSelectionData; -import io.airbyte.server.handlers.helpers.CatalogConverter; -import io.airbyte.server.helpers.ConnectionHelpers; import io.airbyte.validation.json.JsonValidationException; import java.util.List; import org.junit.jupiter.api.Test; @@ -28,7 +28,8 @@ class CatalogConverterTest { @Test void testConvertToProtocol() throws JsonValidationException { - assertEquals(ConnectionHelpers.generateBasicConfiguredAirbyteCatalog(), CatalogConverter.toProtocol(ConnectionHelpers.generateBasicApiCatalog())); + assertEquals(ConnectionHelpers.generateBasicConfiguredAirbyteCatalog(), + CatalogConverter.toConfiguredProtocol(ConnectionHelpers.generateBasicApiCatalog())); } @Test @@ -49,7 +50,7 @@ void testConvertToProtocolColumnSelectionValidation() { // fieldSelectionEnabled=true but selectedFields=null. final var catalog = ConnectionHelpers.generateBasicApiCatalog(); catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).selectedFields(null); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); assertThrows(JsonValidationException.class, () -> { @@ -57,14 +58,14 @@ void testConvertToProtocolColumnSelectionValidation() { final var catalog = ConnectionHelpers.generateBasicApiCatalog(); ((ObjectNode) catalog.getStreams().get(0).getStream().getJsonSchema()).remove("properties"); catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).addSelectedFieldsItem(new SelectedFieldInfo().addFieldPathItem("foo")); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); assertThrows(JsonValidationException.class, () -> { // SelectedFieldInfo with empty path. final var catalog = ConnectionHelpers.generateBasicApiCatalog(); catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).addSelectedFieldsItem(new SelectedFieldInfo()); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); assertThrows(UnsupportedOperationException.class, () -> { @@ -72,14 +73,14 @@ void testConvertToProtocolColumnSelectionValidation() { final var catalog = ConnectionHelpers.generateBasicApiCatalog(); catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true) .addSelectedFieldsItem(new SelectedFieldInfo().addFieldPathItem("foo").addFieldPathItem("bar")); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); assertThrows(JsonValidationException.class, () -> { // SelectedFieldInfo with empty path. final var catalog = ConnectionHelpers.generateBasicApiCatalog(); catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).addSelectedFieldsItem(new SelectedFieldInfo().addFieldPathItem("foo")); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); assertThrows(JsonValidationException.class, () -> { @@ -88,7 +89,7 @@ void testConvertToProtocolColumnSelectionValidation() { catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).addSelectedFieldsItem(new SelectedFieldInfo().addFieldPathItem(FIELD_NAME)); // The sync mode is INCREMENTAL and SECOND_FIELD_NAME is a cursor field. catalog.getStreams().get(0).getConfig().syncMode(SyncMode.INCREMENTAL).cursorField(List.of(SECOND_FIELD_NAME)); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); assertDoesNotThrow(() -> { @@ -97,7 +98,7 @@ void testConvertToProtocolColumnSelectionValidation() { catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).addSelectedFieldsItem(new SelectedFieldInfo().addFieldPathItem(FIELD_NAME)); // The cursor field is not selected, but it's okay because it's FULL_REFRESH so it doesn't throw. catalog.getStreams().get(0).getConfig().syncMode(SyncMode.FULL_REFRESH).cursorField(List.of(SECOND_FIELD_NAME)); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); assertThrows(JsonValidationException.class, () -> { @@ -106,7 +107,7 @@ void testConvertToProtocolColumnSelectionValidation() { catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).addSelectedFieldsItem(new SelectedFieldInfo().addFieldPathItem(FIELD_NAME)); // The destination sync mode is DEDUP and SECOND_FIELD_NAME is a primary key. catalog.getStreams().get(0).getConfig().destinationSyncMode(DestinationSyncMode.APPEND_DEDUP).primaryKey(List.of(List.of(SECOND_FIELD_NAME))); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); assertDoesNotThrow(() -> { @@ -115,7 +116,7 @@ void testConvertToProtocolColumnSelectionValidation() { catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).addSelectedFieldsItem(new SelectedFieldInfo().addFieldPathItem(FIELD_NAME)); // The primary key is not selected but that's okay because the destination sync mode is OVERWRITE. catalog.getStreams().get(0).getConfig().destinationSyncMode(DestinationSyncMode.OVERWRITE).primaryKey(List.of(List.of(SECOND_FIELD_NAME))); - CatalogConverter.toProtocol(catalog); + CatalogConverter.toConfiguredProtocol(catalog); }); } @@ -123,7 +124,7 @@ void testConvertToProtocolColumnSelectionValidation() { void testConvertToProtocolFieldSelection() throws JsonValidationException { final var catalog = ConnectionHelpers.generateApiCatalogWithTwoFields(); catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true).addSelectedFieldsItem(new SelectedFieldInfo().addFieldPathItem(FIELD_NAME)); - assertEquals(ConnectionHelpers.generateBasicConfiguredAirbyteCatalog(), CatalogConverter.toProtocol(catalog)); + assertEquals(ConnectionHelpers.generateBasicConfiguredAirbyteCatalog(), CatalogConverter.toConfiguredProtocol(catalog)); } } diff --git a/airbyte-server/src/test/java/io/airbyte/server/converters/CatalogDiffConvertersTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/CatalogDiffConvertersTest.java similarity index 94% rename from airbyte-server/src/test/java/io/airbyte/server/converters/CatalogDiffConvertersTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/CatalogDiffConvertersTest.java index d9108cd6f577f..e18c89ef10ba6 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/converters/CatalogDiffConvertersTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/CatalogDiffConvertersTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/airbyte-server/src/test/java/io/airbyte/server/converters/ConfigurationUpdateTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/ConfigurationUpdateTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/converters/ConfigurationUpdateTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/ConfigurationUpdateTest.java index 654c7af8c44b9..831bbc58ff241 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/converters/ConfigurationUpdateTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/ConfigurationUpdateTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; diff --git a/airbyte-server/src/test/java/io/airbyte/server/converters/JobConverterTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/JobConverterTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/converters/JobConverterTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/JobConverterTest.java index f73ec6e62aad5..eb2595333f857 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/converters/JobConverterTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/JobConverterTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; diff --git a/airbyte-server/src/test/java/io/airbyte/server/converters/OauthModelConverterTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/OauthModelConverterTest.java similarity index 98% rename from airbyte-server/src/test/java/io/airbyte/server/converters/OauthModelConverterTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/OauthModelConverterTest.java index c96a23d1bab1b..494e9c3a2b7f6 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/converters/OauthModelConverterTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/converters/OauthModelConverterTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.converters; +package io.airbyte.commons.server.converters; import static org.junit.jupiter.api.Assertions.*; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/AttemptHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/AttemptHandlerTest.java similarity index 98% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/AttemptHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/AttemptHandlerTest.java index 4698ed5c63876..eeb2c0ff48c71 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/AttemptHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/AttemptHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/ConnectionSchedulerHelperTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/ConnectionSchedulerHelperTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/ConnectionSchedulerHelperTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/ConnectionSchedulerHelperTest.java index 7c8f2bc0bc826..83c68ec03c452 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/ConnectionSchedulerHelperTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/ConnectionSchedulerHelperTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -15,11 +15,11 @@ import io.airbyte.api.model.generated.ConnectionScheduleDataBasicSchedule.TimeUnitEnum; import io.airbyte.api.model.generated.ConnectionScheduleDataCron; import io.airbyte.api.model.generated.ConnectionScheduleType; +import io.airbyte.commons.server.handlers.helpers.ConnectionScheduleHelper; import io.airbyte.config.BasicSchedule.TimeUnit; import io.airbyte.config.Schedule; import io.airbyte.config.StandardSync; import io.airbyte.config.StandardSync.ScheduleType; -import io.airbyte.server.handlers.helpers.ConnectionScheduleHelper; import io.airbyte.validation.json.JsonValidationException; import org.junit.jupiter.api.Test; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/ConnectionsHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/ConnectionsHandlerTest.java similarity index 95% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/ConnectionsHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/ConnectionsHandlerTest.java index 8563232078599..b2445c5d43b03 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/ConnectionsHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/ConnectionsHandlerTest.java @@ -2,10 +2,10 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; -import static io.airbyte.server.helpers.ConnectionHelpers.FIELD_NAME; -import static io.airbyte.server.helpers.ConnectionHelpers.SECOND_FIELD_NAME; +import static io.airbyte.commons.server.helpers.ConnectionHelpers.FIELD_NAME; +import static io.airbyte.commons.server.helpers.ConnectionHelpers.SECOND_FIELD_NAME; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -43,6 +43,10 @@ import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.enums.Enums; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.converters.ApiPojoConverters; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; +import io.airbyte.commons.server.helpers.ConnectionHelpers; +import io.airbyte.commons.server.scheduler.EventRunner; import io.airbyte.config.BasicSchedule; import io.airbyte.config.ConfigSchema; import io.airbyte.config.Cron; @@ -65,10 +69,6 @@ import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.persistence.job.WorkspaceHelper; import io.airbyte.protocol.models.ConfiguredAirbyteCatalog; -import io.airbyte.server.converters.ApiPojoConverters; -import io.airbyte.server.handlers.helpers.CatalogConverter; -import io.airbyte.server.helpers.ConnectionHelpers; -import io.airbyte.server.scheduler.EventRunner; import io.airbyte.validation.json.JsonValidationException; import io.airbyte.workers.helper.ConnectionHelper; import java.io.IOException; @@ -221,20 +221,8 @@ void setUp() throws JsonValidationException, ConfigNotFoundException, IOExceptio @Nested class CreateConnection { - @Test - void testCreateConnection() throws JsonValidationException, ConfigNotFoundException, IOException { - - final AirbyteCatalog catalog = ConnectionHelpers.generateBasicApiCatalog(); - - // set a defaultGeography on the workspace as EU, but expect connection to be - // created AUTO because the ConnectionCreate geography takes precedence over the workspace - // defaultGeography. - final StandardWorkspace workspace = new StandardWorkspace() - .withWorkspaceId(workspaceId) - .withDefaultGeography(Geography.EU); - when(configRepository.getStandardWorkspaceNoSecrets(workspaceId, true)).thenReturn(workspace); - - final ConnectionCreate connectionCreate = new ConnectionCreate() + private ConnectionCreate buildConnectionCreateRequest(final StandardSync standardSync, final AirbyteCatalog catalog) { + return new ConnectionCreate() .sourceId(standardSync.getSourceId()) .destinationId(standardSync.getDestinationId()) .operationIds(standardSync.getOperationIds()) @@ -252,6 +240,22 @@ void testCreateConnection() throws JsonValidationException, ConfigNotFoundExcept .memoryLimit(standardSync.getResourceRequirements().getMemoryLimit())) .sourceCatalogId(standardSync.getSourceCatalogId()) .geography(ApiPojoConverters.toApiGeography(standardSync.getGeography())); + } + + @Test + void testCreateConnection() throws JsonValidationException, ConfigNotFoundException, IOException { + + final AirbyteCatalog catalog = ConnectionHelpers.generateBasicApiCatalog(); + + // set a defaultGeography on the workspace as EU, but expect connection to be + // created AUTO because the ConnectionCreate geography takes precedence over the workspace + // defaultGeography. + final StandardWorkspace workspace = new StandardWorkspace() + .withWorkspaceId(workspaceId) + .withDefaultGeography(Geography.EU); + when(configRepository.getStandardWorkspaceNoSecrets(workspaceId, true)).thenReturn(workspace); + + final ConnectionCreate connectionCreate = buildConnectionCreateRequest(standardSync, catalog); final ConnectionRead actualConnectionRead = connectionsHandler.createConnection(connectionCreate); @@ -277,23 +281,7 @@ void testCreateConnectionUsesDefaultGeographyFromWorkspace() throws JsonValidati final AirbyteCatalog catalog = ConnectionHelpers.generateBasicApiCatalog(); // don't set a geography on the ConnectionCreate to force inheritance from workspace default - final ConnectionCreate connectionCreate = new ConnectionCreate() - .sourceId(standardSync.getSourceId()) - .destinationId(standardSync.getDestinationId()) - .operationIds(standardSync.getOperationIds()) - .name(PRESTO_TO_HUDI) - .namespaceDefinition(NamespaceDefinitionType.SOURCE) - .namespaceFormat(null) - .prefix(PRESTO_TO_HUDI_PREFIX) - .status(ConnectionStatus.ACTIVE) - .schedule(ConnectionHelpers.generateBasicConnectionSchedule()) - .syncCatalog(catalog) - .resourceRequirements(new io.airbyte.api.model.generated.ResourceRequirements() - .cpuRequest(standardSync.getResourceRequirements().getCpuRequest()) - .cpuLimit(standardSync.getResourceRequirements().getCpuLimit()) - .memoryRequest(standardSync.getResourceRequirements().getMemoryRequest()) - .memoryLimit(standardSync.getResourceRequirements().getMemoryLimit())) - .sourceCatalogId(standardSync.getSourceCatalogId()); + final ConnectionCreate connectionCreate = buildConnectionCreateRequest(standardSync, catalog).geography(null); // set the workspace default to EU final StandardWorkspace workspace = new StandardWorkspace() @@ -319,29 +307,12 @@ void testCreateConnectionWithSelectedFields() throws IOException, JsonValidation .withDefaultGeography(Geography.AUTO); when(configRepository.getStandardWorkspaceNoSecrets(workspaceId, true)).thenReturn(workspace); - final AirbyteCatalog catalog = ConnectionHelpers.generateApiCatalogWithTwoFields(); + final AirbyteCatalog catalogWithSelectedFields = ConnectionHelpers.generateApiCatalogWithTwoFields(); // Only select one of the two fields. - catalog.getStreams().get(0).getConfig().fieldSelectionEnabled(true) + catalogWithSelectedFields.getStreams().get(0).getConfig().fieldSelectionEnabled(true) .selectedFields(List.of(new SelectedFieldInfo().addFieldPathItem(FIELD_NAME))); - final ConnectionCreate connectionCreate = new ConnectionCreate() - .sourceId(standardSync.getSourceId()) - .destinationId(standardSync.getDestinationId()) - .operationIds(standardSync.getOperationIds()) - .name(PRESTO_TO_HUDI) - .namespaceDefinition(NamespaceDefinitionType.SOURCE) - .namespaceFormat(null) - .prefix(PRESTO_TO_HUDI_PREFIX) - .status(ConnectionStatus.ACTIVE) - .schedule(ConnectionHelpers.generateBasicConnectionSchedule()) - .syncCatalog(catalog) - .resourceRequirements(new io.airbyte.api.model.generated.ResourceRequirements() - .cpuRequest(standardSync.getResourceRequirements().getCpuRequest()) - .cpuLimit(standardSync.getResourceRequirements().getCpuLimit()) - .memoryRequest(standardSync.getResourceRequirements().getMemoryRequest()) - .memoryLimit(standardSync.getResourceRequirements().getMemoryLimit())) - .sourceCatalogId(standardSync.getSourceCatalogId()) - .geography(ApiPojoConverters.toApiGeography(standardSync.getGeography())); + final ConnectionCreate connectionCreate = buildConnectionCreateRequest(standardSync, catalogWithSelectedFields); final ConnectionRead actualConnectionRead = connectionsHandler.createConnection(connectionCreate); @@ -354,6 +325,35 @@ void testCreateConnectionWithSelectedFields() throws IOException, JsonValidation verify(configRepository).writeStandardSync(standardSync); } + @Test + void testCreateFullRefreshConnectionWithSelectedFields() throws IOException, JsonValidationException, ConfigNotFoundException { + final StandardWorkspace workspace = new StandardWorkspace() + .withWorkspaceId(workspaceId) + .withDefaultGeography(Geography.AUTO); + when(configRepository.getStandardWorkspaceNoSecrets(workspaceId, true)).thenReturn(workspace); + + final AirbyteCatalog fullRefreshCatalogWithSelectedFields = ConnectionHelpers.generateApiCatalogWithTwoFields(); + fullRefreshCatalogWithSelectedFields.getStreams().get(0).getConfig() + .fieldSelectionEnabled(true) + .selectedFields(List.of(new SelectedFieldInfo().addFieldPathItem(FIELD_NAME))) + .cursorField(null) + .syncMode(SyncMode.FULL_REFRESH); + + final ConnectionCreate connectionCreate = buildConnectionCreateRequest(standardSync, fullRefreshCatalogWithSelectedFields); + + final ConnectionRead actualConnectionRead = connectionsHandler.createConnection(connectionCreate); + + final ConnectionRead expectedConnectionRead = ConnectionHelpers.generateExpectedConnectionRead(standardSync); + + assertEquals(expectedConnectionRead, actualConnectionRead); + + standardSync + .withFieldSelectionData(new FieldSelectionData().withAdditionalProperty("null/users-data0", true)) + .getCatalog().getStreams().get(0).withSyncMode(io.airbyte.protocol.models.SyncMode.FULL_REFRESH).withCursorField(null); + + verify(configRepository).writeStandardSync(standardSync); + } + @Test void testFieldSelectionRemoveCursorFails() throws JsonValidationException, ConfigNotFoundException, IOException { // Test that if we try to de-select a field that's being used for the cursor, the request will fail. @@ -365,7 +365,8 @@ void testFieldSelectionRemoveCursorFails() throws JsonValidationException, Confi catalogForUpdate.getStreams().get(0).getConfig() .fieldSelectionEnabled(true) .selectedFields(List.of(new SelectedFieldInfo().addFieldPathItem(FIELD_NAME))) - .cursorField(List.of(SECOND_FIELD_NAME)); + .cursorField(List.of(SECOND_FIELD_NAME)) + .syncMode(SyncMode.INCREMENTAL); final ConnectionUpdate connectionUpdate = new ConnectionUpdate() .connectionId(standardSync.getConnectionId()) diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/DestinationDefinitionsHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/DestinationDefinitionsHandlerTest.java similarity index 98% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/DestinationDefinitionsHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/DestinationDefinitionsHandlerTest.java index 8eadc7abf46a0..4a65cc85aa936 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/DestinationDefinitionsHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/DestinationDefinitionsHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -31,6 +31,12 @@ import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.docker.DockerUtils; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.errors.IdNotFoundKnownException; +import io.airbyte.commons.server.errors.UnsupportedProtocolVersionException; +import io.airbyte.commons.server.scheduler.SynchronousJobMetadata; +import io.airbyte.commons.server.scheduler.SynchronousResponse; +import io.airbyte.commons.server.scheduler.SynchronousSchedulerClient; +import io.airbyte.commons.server.services.AirbyteGithubStore; import io.airbyte.commons.version.AirbyteProtocolVersionRange; import io.airbyte.commons.version.Version; import io.airbyte.config.ActorDefinitionResourceRequirements; @@ -44,12 +50,6 @@ import io.airbyte.config.persistence.ConfigNotFoundException; import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.errors.IdNotFoundKnownException; -import io.airbyte.server.errors.UnsupportedProtocolVersionException; -import io.airbyte.server.scheduler.SynchronousJobMetadata; -import io.airbyte.server.scheduler.SynchronousResponse; -import io.airbyte.server.scheduler.SynchronousSchedulerClient; -import io.airbyte.server.services.AirbyteGithubStore; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; import java.net.URI; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/DestinationHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/DestinationHandlerTest.java similarity index 98% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/DestinationHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/DestinationHandlerTest.java index 728d60bbee48e..9448aa5a36094 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/DestinationHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/DestinationHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -24,6 +24,9 @@ import io.airbyte.api.model.generated.DestinationUpdate; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.converters.ConfigurationUpdate; +import io.airbyte.commons.server.helpers.ConnectorSpecificationHelpers; +import io.airbyte.commons.server.helpers.DestinationHelpers; import io.airbyte.config.DestinationConnection; import io.airbyte.config.StandardDestinationDefinition; import io.airbyte.config.persistence.ConfigNotFoundException; @@ -33,9 +36,6 @@ import io.airbyte.config.persistence.split_secrets.JsonSecretsProcessor; import io.airbyte.persistence.job.factory.OAuthConfigSupplier; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.converters.ConfigurationUpdate; -import io.airbyte.server.helpers.ConnectorSpecificationHelpers; -import io.airbyte.server.helpers.DestinationHelpers; import io.airbyte.validation.json.JsonSchemaValidator; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/HealthCheckHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/HealthCheckHandlerTest.java similarity index 95% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/HealthCheckHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/HealthCheckHandlerTest.java index 2d83a4bd02c98..7dedbe3142d2a 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/HealthCheckHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/HealthCheckHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.mock; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/JobHistoryHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/JobHistoryHandlerTest.java similarity index 98% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/JobHistoryHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/JobHistoryHandlerTest.java index 02bd7034f6f5c..3ab2582afdb45 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/JobHistoryHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/JobHistoryHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -35,6 +35,12 @@ import io.airbyte.api.model.generated.SourceIdRequestBody; import io.airbyte.api.model.generated.SourceRead; import io.airbyte.commons.enums.Enums; +import io.airbyte.commons.server.converters.JobConverter; +import io.airbyte.commons.server.helpers.ConnectionHelpers; +import io.airbyte.commons.server.helpers.DestinationDefinitionHelpers; +import io.airbyte.commons.server.helpers.DestinationHelpers; +import io.airbyte.commons.server.helpers.SourceDefinitionHelpers; +import io.airbyte.commons.server.helpers.SourceHelpers; import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs.WorkerEnvironment; import io.airbyte.config.DestinationConnection; @@ -57,12 +63,6 @@ import io.airbyte.persistence.job.models.AttemptStatus; import io.airbyte.persistence.job.models.Job; import io.airbyte.persistence.job.models.JobStatus; -import io.airbyte.server.converters.JobConverter; -import io.airbyte.server.helpers.ConnectionHelpers; -import io.airbyte.server.helpers.DestinationDefinitionHelpers; -import io.airbyte.server.helpers.DestinationHelpers; -import io.airbyte.server.helpers.SourceDefinitionHelpers; -import io.airbyte.server.helpers.SourceHelpers; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; import java.net.URISyntaxException; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/LogsHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/LogsHandlerTest.java similarity index 97% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/LogsHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/LogsHandlerTest.java index 098f05f1a4a36..3b730f1997714 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/LogsHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/LogsHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/OAuthHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OAuthHandlerTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/OAuthHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OAuthHandlerTest.java index 08d9d2f95e530..57daf559363d9 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/OAuthHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OAuthHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/OpenApiConfigHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OpenApiConfigHandlerTest.java similarity index 92% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/OpenApiConfigHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OpenApiConfigHandlerTest.java index 5b7311433e9bb..99dd0ccb4b4b6 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/OpenApiConfigHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OpenApiConfigHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.*; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/OperationsHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OperationsHandlerTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/OperationsHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OperationsHandlerTest.java index e3e2d49542f19..97082336b16dc 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/OperationsHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/OperationsHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/SchedulerHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SchedulerHandlerTest.java similarity index 93% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/SchedulerHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SchedulerHandlerTest.java index dc8721c4cf550..5b4e2773112a6 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/SchedulerHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SchedulerHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -52,6 +52,16 @@ import io.airbyte.commons.features.EnvVariableFeatureFlags; import io.airbyte.commons.json.Jsons; import io.airbyte.commons.lang.Exceptions; +import io.airbyte.commons.server.converters.ConfigurationUpdate; +import io.airbyte.commons.server.converters.JobConverter; +import io.airbyte.commons.server.errors.ValueConflictKnownException; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; +import io.airbyte.commons.server.helpers.DestinationHelpers; +import io.airbyte.commons.server.helpers.SourceHelpers; +import io.airbyte.commons.server.scheduler.EventRunner; +import io.airbyte.commons.server.scheduler.SynchronousJobMetadata; +import io.airbyte.commons.server.scheduler.SynchronousResponse; +import io.airbyte.commons.server.scheduler.SynchronousSchedulerClient; import io.airbyte.commons.temporal.ErrorCode; import io.airbyte.commons.temporal.TemporalClient.ManualOperationResult; import io.airbyte.commons.version.Version; @@ -76,16 +86,6 @@ import io.airbyte.protocol.models.Field; import io.airbyte.protocol.models.JsonSchemaType; import io.airbyte.protocol.models.StreamDescriptor; -import io.airbyte.server.converters.ConfigurationUpdate; -import io.airbyte.server.converters.JobConverter; -import io.airbyte.server.errors.ValueConflictKnownException; -import io.airbyte.server.handlers.helpers.CatalogConverter; -import io.airbyte.server.helpers.DestinationHelpers; -import io.airbyte.server.helpers.SourceHelpers; -import io.airbyte.server.scheduler.EventRunner; -import io.airbyte.server.scheduler.SynchronousJobMetadata; -import io.airbyte.server.scheduler.SynchronousResponse; -import io.airbyte.server.scheduler.SynchronousSchedulerClient; import io.airbyte.validation.json.JsonSchemaValidator; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; @@ -570,12 +570,13 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreaking() throws IOExcept final StreamTransform streamTransform = new StreamTransform().transformType(TransformTypeEnum.REMOVE_STREAM) .streamDescriptor(new io.airbyte.api.model.generated.StreamDescriptor().name(DOGS)); final CatalogDiff catalogDiff = new CatalogDiff().addTransformsItem(streamTransform); + final StandardSourceDefinition sourceDef = new StandardSourceDefinition() + .withDockerRepository(SOURCE_DOCKER_REPO) + .withDockerImageTag(SOURCE_DOCKER_TAG) + .withProtocolVersion(SOURCE_PROTOCOL_VERSION) + .withSourceDefinitionId(source.getSourceDefinitionId()); when(configRepository.getStandardSourceDefinition(source.getSourceDefinitionId())) - .thenReturn(new StandardSourceDefinition() - .withDockerRepository(SOURCE_DOCKER_REPO) - .withDockerImageTag(SOURCE_DOCKER_TAG) - .withProtocolVersion(SOURCE_PROTOCOL_VERSION) - .withSourceDefinitionId(source.getSourceDefinitionId())); + .thenReturn(sourceDef); when(configRepository.getSourceConnection(source.getSourceId())).thenReturn(source); when(synchronousSchedulerClient.createDiscoverSchemaJob(source, SOURCE_DOCKER_IMAGE, SOURCE_DOCKER_TAG, new Version(SOURCE_PROTOCOL_VERSION), false)) @@ -588,7 +589,8 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreaking() throws IOExcept CatalogHelpers.createAirbyteStream(SHOES, Field.of(SKU, JsonSchemaType.STRING)), CatalogHelpers.createAirbyteStream(DOGS, Field.of(NAME, JsonSchemaType.STRING)))); - final ConnectionRead connectionRead = new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).connectionId(connectionId); + final ConnectionRead connectionRead = + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).connectionId(connectionId); when(connectionsHandler.getConnection(request.getConnectionId())).thenReturn(connectionRead); when(connectionsHandler.getDiff(any(), any(), any())).thenReturn(catalogDiff); final ConnectionReadList connectionReadList = new ConnectionReadList().connections(List.of(connectionRead)); @@ -602,7 +604,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreaking() throws IOExcept final AirbyteCatalog persistenceCatalog = Jsons.object(actorCatalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); - final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog); + final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog, sourceDef); final SourceDiscoverSchemaRead actual = schedulerHandler.discoverSchemaForSourceFromSourceId(request); assertEquals(actual.getCatalogDiff(), catalogDiff); @@ -621,13 +623,14 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP final StreamTransform streamTransform = new StreamTransform().transformType(TransformTypeEnum.REMOVE_STREAM) .streamDescriptor(new io.airbyte.api.model.generated.StreamDescriptor().name(DOGS)); final CatalogDiff catalogDiff = new CatalogDiff().addTransformsItem(streamTransform); + final StandardSourceDefinition sourceDef = new StandardSourceDefinition() + .withDockerRepository(SOURCE_DOCKER_REPO) + .withDockerImageTag(SOURCE_DOCKER_TAG) + .withProtocolVersion(SOURCE_PROTOCOL_VERSION) + .withSourceDefinitionId(source.getSourceDefinitionId()); when(envVariableFeatureFlags.autoDetectSchema()).thenReturn(false); when(configRepository.getStandardSourceDefinition(source.getSourceDefinitionId())) - .thenReturn(new StandardSourceDefinition() - .withDockerRepository(SOURCE_DOCKER_REPO) - .withDockerImageTag(SOURCE_DOCKER_TAG) - .withProtocolVersion(SOURCE_PROTOCOL_VERSION) - .withSourceDefinitionId(source.getSourceDefinitionId())); + .thenReturn(sourceDef); when(configRepository.getSourceConnection(source.getSourceId())).thenReturn(source); when(synchronousSchedulerClient.createDiscoverSchemaJob(source, SOURCE_DOCKER_IMAGE, SOURCE_DOCKER_TAG, new Version(SOURCE_PROTOCOL_VERSION), false)) @@ -641,7 +644,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP CatalogHelpers.createAirbyteStream(DOGS, Field.of(NAME, JsonSchemaType.STRING)))); final ConnectionRead connectionRead = - new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).nonBreakingChangesPreference( + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).nonBreakingChangesPreference( NonBreakingChangesPreference.DISABLE).status(ConnectionStatus.ACTIVE).connectionId(connectionId); when(connectionsHandler.getConnection(request.getConnectionId())).thenReturn(connectionRead); when(connectionsHandler.getDiff(any(), any(), any())).thenReturn(catalogDiff); @@ -656,7 +659,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP final AirbyteCatalog persistenceCatalog = Jsons.object(actorCatalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); - final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog); + final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog, sourceDef); final SourceDiscoverSchemaRead actual = schedulerHandler.discoverSchemaForSourceFromSourceId(request); assertEquals(actual.getCatalogDiff(), catalogDiff); @@ -676,13 +679,14 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP final StreamTransform streamTransform = new StreamTransform().transformType(TransformTypeEnum.REMOVE_STREAM) .streamDescriptor(new io.airbyte.api.model.generated.StreamDescriptor().name(DOGS)); final CatalogDiff catalogDiff = new CatalogDiff().addTransformsItem(streamTransform); + final StandardSourceDefinition sourceDef = new StandardSourceDefinition() + .withDockerRepository(SOURCE_DOCKER_REPO) + .withDockerImageTag(SOURCE_DOCKER_TAG) + .withProtocolVersion(SOURCE_PROTOCOL_VERSION) + .withSourceDefinitionId(source.getSourceDefinitionId()); when(envVariableFeatureFlags.autoDetectSchema()).thenReturn(true); when(configRepository.getStandardSourceDefinition(source.getSourceDefinitionId())) - .thenReturn(new StandardSourceDefinition() - .withDockerRepository(SOURCE_DOCKER_REPO) - .withDockerImageTag(SOURCE_DOCKER_TAG) - .withProtocolVersion(SOURCE_PROTOCOL_VERSION) - .withSourceDefinitionId(source.getSourceDefinitionId())); + .thenReturn(sourceDef); when(configRepository.getSourceConnection(source.getSourceId())).thenReturn(source); when(synchronousSchedulerClient.createDiscoverSchemaJob(source, SOURCE_DOCKER_IMAGE, SOURCE_DOCKER_TAG, new Version(SOURCE_PROTOCOL_VERSION), false)) @@ -696,7 +700,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP CatalogHelpers.createAirbyteStream(DOGS, Field.of(NAME, JsonSchemaType.STRING)))); final ConnectionRead connectionRead = - new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).nonBreakingChangesPreference( + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).nonBreakingChangesPreference( NonBreakingChangesPreference.DISABLE).connectionId(connectionId); when(connectionsHandler.getConnection(request.getConnectionId())).thenReturn(connectionRead); when(connectionsHandler.getDiff(any(), any(), any())).thenReturn(catalogDiff); @@ -711,7 +715,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP final AirbyteCatalog persistenceCatalog = Jsons.object(actorCatalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); - final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog); + final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog, sourceDef); final SourceDiscoverSchemaRead actual = schedulerHandler.discoverSchemaForSourceFromSourceId(request); assertEquals(actual.getCatalogDiff(), catalogDiff); @@ -731,12 +735,13 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdBreaking() throws IOException .streamDescriptor(new io.airbyte.api.model.generated.StreamDescriptor().name(DOGS)).addUpdateStreamItem(new FieldTransform().transformType( FieldTransform.TransformTypeEnum.REMOVE_FIELD).breaking(true)); final CatalogDiff catalogDiff = new CatalogDiff().addTransformsItem(streamTransform); + final StandardSourceDefinition sourceDef = new StandardSourceDefinition() + .withDockerRepository(SOURCE_DOCKER_REPO) + .withDockerImageTag(SOURCE_DOCKER_TAG) + .withProtocolVersion(SOURCE_PROTOCOL_VERSION) + .withSourceDefinitionId(source.getSourceDefinitionId()); when(configRepository.getStandardSourceDefinition(source.getSourceDefinitionId())) - .thenReturn(new StandardSourceDefinition() - .withDockerRepository(SOURCE_DOCKER_REPO) - .withDockerImageTag(SOURCE_DOCKER_TAG) - .withProtocolVersion(SOURCE_PROTOCOL_VERSION) - .withSourceDefinitionId(source.getSourceDefinitionId())); + .thenReturn(sourceDef); when(configRepository.getSourceConnection(source.getSourceId())).thenReturn(source); when(synchronousSchedulerClient.createDiscoverSchemaJob(source, SOURCE_DOCKER_IMAGE, SOURCE_DOCKER_TAG, new Version(SOURCE_PROTOCOL_VERSION), false)) @@ -750,7 +755,8 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdBreaking() throws IOException CatalogHelpers.createAirbyteStream(DOGS, Field.of(NAME, JsonSchemaType.STRING)))); final ConnectionRead connectionRead = - new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).status(ConnectionStatus.ACTIVE).connectionId(connectionId); + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).status(ConnectionStatus.ACTIVE) + .connectionId(connectionId); when(connectionsHandler.getConnection(request.getConnectionId())).thenReturn(connectionRead); when(connectionsHandler.getDiff(any(), any(), any())).thenReturn(catalogDiff); final ConnectionReadList connectionReadList = new ConnectionReadList().connections(List.of(connectionRead)); @@ -764,7 +770,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdBreaking() throws IOException final AirbyteCatalog persistenceCatalog = Jsons.object(actorCatalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); - final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog); + final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog, sourceDef); final ConnectionUpdate expectedConnectionUpdate = new ConnectionUpdate().connectionId(connectionId).breakingChange(true).status(ConnectionStatus.ACTIVE); @@ -787,13 +793,14 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdBreakingFeatureFlagOn() throw .streamDescriptor(new io.airbyte.api.model.generated.StreamDescriptor().name(DOGS)).addUpdateStreamItem(new FieldTransform().transformType( FieldTransform.TransformTypeEnum.REMOVE_FIELD).breaking(true)); final CatalogDiff catalogDiff = new CatalogDiff().addTransformsItem(streamTransform); + final StandardSourceDefinition sourceDef = new StandardSourceDefinition() + .withDockerRepository(SOURCE_DOCKER_REPO) + .withDockerImageTag(SOURCE_DOCKER_TAG) + .withProtocolVersion(SOURCE_PROTOCOL_VERSION) + .withSourceDefinitionId(source.getSourceDefinitionId()); when(envVariableFeatureFlags.autoDetectSchema()).thenReturn(true); when(configRepository.getStandardSourceDefinition(source.getSourceDefinitionId())) - .thenReturn(new StandardSourceDefinition() - .withDockerRepository(SOURCE_DOCKER_REPO) - .withDockerImageTag(SOURCE_DOCKER_TAG) - .withProtocolVersion(SOURCE_PROTOCOL_VERSION) - .withSourceDefinitionId(source.getSourceDefinitionId())); + .thenReturn(sourceDef); when(configRepository.getSourceConnection(source.getSourceId())).thenReturn(source); when(synchronousSchedulerClient.createDiscoverSchemaJob(source, SOURCE_DOCKER_IMAGE, SOURCE_DOCKER_TAG, new Version(SOURCE_PROTOCOL_VERSION), false)) @@ -806,7 +813,8 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdBreakingFeatureFlagOn() throw CatalogHelpers.createAirbyteStream(SHOES, Field.of(SKU, JsonSchemaType.STRING)), CatalogHelpers.createAirbyteStream(DOGS, Field.of(NAME, JsonSchemaType.STRING)))); - final ConnectionRead connectionRead = new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).connectionId(connectionId); + final ConnectionRead connectionRead = + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).connectionId(connectionId); when(connectionsHandler.getConnection(request.getConnectionId())).thenReturn(connectionRead); when(connectionsHandler.getDiff(any(), any(), any())).thenReturn(catalogDiff); final ConnectionReadList connectionReadList = new ConnectionReadList().connections(List.of(connectionRead)); @@ -820,7 +828,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdBreakingFeatureFlagOn() throw final AirbyteCatalog persistenceCatalog = Jsons.object(actorCatalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); - final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog); + final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog, sourceDef); final ConnectionUpdate expectedConnectionUpdate = new ConnectionUpdate().connectionId(connectionId).breakingChange(true).status(ConnectionStatus.INACTIVE); @@ -841,13 +849,14 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP final SourceDiscoverSchemaRequestBody request = new SourceDiscoverSchemaRequestBody().sourceId(source.getSourceId()).connectionId(connectionId).disableCache(true); final CatalogDiff catalogDiff = new CatalogDiff(); + final StandardSourceDefinition sourceDef = new StandardSourceDefinition() + .withDockerRepository(SOURCE_DOCKER_REPO) + .withDockerImageTag(SOURCE_DOCKER_TAG) + .withProtocolVersion(SOURCE_PROTOCOL_VERSION) + .withSourceDefinitionId(source.getSourceDefinitionId()); when(envVariableFeatureFlags.autoDetectSchema()).thenReturn(true); when(configRepository.getStandardSourceDefinition(source.getSourceDefinitionId())) - .thenReturn(new StandardSourceDefinition() - .withDockerRepository(SOURCE_DOCKER_REPO) - .withDockerImageTag(SOURCE_DOCKER_TAG) - .withProtocolVersion(SOURCE_PROTOCOL_VERSION) - .withSourceDefinitionId(source.getSourceDefinitionId())); + .thenReturn(sourceDef); when(configRepository.getSourceConnection(source.getSourceId())).thenReturn(source); when(synchronousSchedulerClient.createDiscoverSchemaJob(source, SOURCE_DOCKER_IMAGE, SOURCE_DOCKER_TAG, new Version(SOURCE_PROTOCOL_VERSION), false)) @@ -861,7 +870,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP CatalogHelpers.createAirbyteStream(DOGS, Field.of(NAME, JsonSchemaType.STRING)))); final ConnectionRead connectionRead = - new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).nonBreakingChangesPreference( + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).nonBreakingChangesPreference( NonBreakingChangesPreference.DISABLE).status(ConnectionStatus.INACTIVE).connectionId(connectionId); when(connectionsHandler.getConnection(request.getConnectionId())).thenReturn(connectionRead); when(connectionsHandler.getDiff(any(), any(), any())).thenReturn(catalogDiff); @@ -876,7 +885,7 @@ void testDiscoverSchemaFromSourceIdWithConnectionIdNonBreakingDisableConnectionP final AirbyteCatalog persistenceCatalog = Jsons.object(actorCatalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); - final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog); + final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog, sourceDef); final SourceDiscoverSchemaRead actual = schedulerHandler.discoverSchemaForSourceFromSourceId(request); assertEquals(actual.getCatalogDiff(), catalogDiff); @@ -907,14 +916,15 @@ void testDiscoverSchemaForSourceMultipleConnectionsFeatureFlagOn() throws IOExce final CatalogDiff catalogDiff1 = new CatalogDiff().addTransformsItem(nonBreakingStreamTransform); final CatalogDiff catalogDiff2 = new CatalogDiff().addTransformsItem(nonBreakingStreamTransform); final CatalogDiff catalogDiff3 = new CatalogDiff().addTransformsItem(breakingStreamTransform); + final StandardSourceDefinition sourceDef = new StandardSourceDefinition() + .withDockerRepository(SOURCE_DOCKER_REPO) + .withDockerImageTag(SOURCE_DOCKER_TAG) + .withProtocolVersion(SOURCE_PROTOCOL_VERSION) + .withSourceDefinitionId(source.getSourceDefinitionId()); when(envVariableFeatureFlags.autoDetectSchema()).thenReturn(true); when(configRepository.getStandardSourceDefinition(source.getSourceDefinitionId())) - .thenReturn(new StandardSourceDefinition() - .withDockerRepository(SOURCE_DOCKER_REPO) - .withDockerImageTag(SOURCE_DOCKER_TAG) - .withProtocolVersion(SOURCE_PROTOCOL_VERSION) - .withSourceDefinitionId(source.getSourceDefinitionId())); + .thenReturn(sourceDef); when(configRepository.getSourceConnection(source.getSourceId())).thenReturn(source); when(synchronousSchedulerClient.createDiscoverSchemaJob(source, SOURCE_DOCKER_IMAGE, SOURCE_DOCKER_TAG, new Version(SOURCE_PROTOCOL_VERSION), false)) @@ -928,15 +938,15 @@ void testDiscoverSchemaForSourceMultipleConnectionsFeatureFlagOn() throws IOExce CatalogHelpers.createAirbyteStream(DOGS, Field.of(NAME, JsonSchemaType.STRING)))); final ConnectionRead connectionRead = - new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).nonBreakingChangesPreference( + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).nonBreakingChangesPreference( NonBreakingChangesPreference.IGNORE).status(ConnectionStatus.ACTIVE).connectionId(connectionId); final ConnectionRead connectionRead2 = - new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).nonBreakingChangesPreference( + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).nonBreakingChangesPreference( NonBreakingChangesPreference.IGNORE).status(ConnectionStatus.ACTIVE).connectionId(connectionId2); final ConnectionRead connectionRead3 = - new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent)).nonBreakingChangesPreference( + new ConnectionRead().syncCatalog(CatalogConverter.toApi(airbyteCatalogCurrent, sourceDef)).nonBreakingChangesPreference( NonBreakingChangesPreference.DISABLE).status(ConnectionStatus.ACTIVE).connectionId(connectionId3); when(connectionsHandler.getConnection(request.getConnectionId())).thenReturn(connectionRead, connectionRead2, connectionRead3); @@ -952,7 +962,7 @@ void testDiscoverSchemaForSourceMultipleConnectionsFeatureFlagOn() throws IOExce final AirbyteCatalog persistenceCatalog = Jsons.object(actorCatalog.getCatalog(), io.airbyte.protocol.models.AirbyteCatalog.class); - final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog); + final io.airbyte.api.model.generated.AirbyteCatalog expectedActorCatalog = CatalogConverter.toApi(persistenceCatalog, sourceDef); final SourceDiscoverSchemaRead actual = schedulerHandler.discoverSchemaForSourceFromSourceId(request); assertEquals(catalogDiff1, actual.getCatalogDiff()); diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/SourceDefinitionsHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SourceDefinitionsHandlerTest.java similarity index 98% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/SourceDefinitionsHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SourceDefinitionsHandlerTest.java index 424ae0d49e3dd..76c2c70dd036a 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/SourceDefinitionsHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SourceDefinitionsHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -33,6 +33,12 @@ import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.docker.DockerUtils; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.errors.IdNotFoundKnownException; +import io.airbyte.commons.server.errors.UnsupportedProtocolVersionException; +import io.airbyte.commons.server.scheduler.SynchronousJobMetadata; +import io.airbyte.commons.server.scheduler.SynchronousResponse; +import io.airbyte.commons.server.scheduler.SynchronousSchedulerClient; +import io.airbyte.commons.server.services.AirbyteGithubStore; import io.airbyte.commons.version.AirbyteProtocolVersionRange; import io.airbyte.commons.version.Version; import io.airbyte.config.ActorDefinitionResourceRequirements; @@ -45,12 +51,6 @@ import io.airbyte.config.persistence.ConfigNotFoundException; import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.errors.IdNotFoundKnownException; -import io.airbyte.server.errors.UnsupportedProtocolVersionException; -import io.airbyte.server.scheduler.SynchronousJobMetadata; -import io.airbyte.server.scheduler.SynchronousResponse; -import io.airbyte.server.scheduler.SynchronousSchedulerClient; -import io.airbyte.server.services.AirbyteGithubStore; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; import java.net.URI; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/SourceHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SourceHandlerTest.java similarity index 91% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/SourceHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SourceHandlerTest.java index 758bad37f9095..95958f3393c24 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/SourceHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/SourceHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -15,11 +15,13 @@ import com.google.common.collect.Lists; import io.airbyte.api.model.generated.ConnectionRead; import io.airbyte.api.model.generated.ConnectionReadList; +import io.airbyte.api.model.generated.DiscoverCatalogResult; import io.airbyte.api.model.generated.SourceCloneConfiguration; import io.airbyte.api.model.generated.SourceCloneRequestBody; import io.airbyte.api.model.generated.SourceCreate; import io.airbyte.api.model.generated.SourceDefinitionIdRequestBody; import io.airbyte.api.model.generated.SourceDefinitionSpecificationRead; +import io.airbyte.api.model.generated.SourceDiscoverSchemaWriteRequestBody; import io.airbyte.api.model.generated.SourceIdRequestBody; import io.airbyte.api.model.generated.SourceRead; import io.airbyte.api.model.generated.SourceReadList; @@ -27,6 +29,11 @@ import io.airbyte.api.model.generated.SourceUpdate; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.converters.ConfigurationUpdate; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; +import io.airbyte.commons.server.helpers.ConnectionHelpers; +import io.airbyte.commons.server.helpers.ConnectorSpecificationHelpers; +import io.airbyte.commons.server.helpers.SourceHelpers; import io.airbyte.config.SourceConnection; import io.airbyte.config.StandardSourceDefinition; import io.airbyte.config.StandardSync; @@ -36,11 +43,11 @@ import io.airbyte.config.persistence.SecretsRepositoryWriter; import io.airbyte.config.persistence.split_secrets.JsonSecretsProcessor; import io.airbyte.persistence.job.factory.OAuthConfigSupplier; +import io.airbyte.protocol.models.AirbyteCatalog; +import io.airbyte.protocol.models.CatalogHelpers; import io.airbyte.protocol.models.ConnectorSpecification; -import io.airbyte.server.converters.ConfigurationUpdate; -import io.airbyte.server.helpers.ConnectionHelpers; -import io.airbyte.server.helpers.ConnectorSpecificationHelpers; -import io.airbyte.server.helpers.SourceHelpers; +import io.airbyte.protocol.models.Field; +import io.airbyte.protocol.models.JsonSchemaType; import io.airbyte.validation.json.JsonSchemaValidator; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; @@ -67,6 +74,11 @@ class SourceHandlerTest { private ConnectorSpecification connectorSpecification; private OAuthConfigSupplier oAuthConfigSupplier; + private static final String SHOES = "shoes"; + private static final String SKU = "sku"; + private static final AirbyteCatalog airbyteCatalog = CatalogHelpers.createAirbyteCatalog(SHOES, + Field.of(SKU, JsonSchemaType.STRING)); + // needs to match name of file in src/test/resources/icons private static final String ICON = "test-source.svg"; @@ -369,4 +381,22 @@ void testDeleteSource() throws JsonValidationException, ConfigNotFoundException, verify(connectionsHandler).deleteConnection(connectionRead.getConnectionId()); } + @Test + void testWriteDiscoverCatalogResult() throws JsonValidationException, IOException { + UUID actorId = UUID.randomUUID(); + UUID catalogId = UUID.randomUUID(); + String connectorVersion = "0.0.1"; + String hashValue = "0123456789abcd"; + final StandardSourceDefinition sourceDefinition = configRepository.getSourceDefinitionFromSource(actorId); + + SourceDiscoverSchemaWriteRequestBody request = new SourceDiscoverSchemaWriteRequestBody().catalog( + CatalogConverter.toApi(airbyteCatalog, sourceDefinition)).sourceId(actorId).connectorVersion(connectorVersion).configurationHash(hashValue); + + when(configRepository.writeActorCatalogFetchEvent(airbyteCatalog, actorId, connectorVersion, hashValue)).thenReturn(catalogId); + DiscoverCatalogResult result = sourceHandler.writeDiscoverCatalogResult(request); + + verify(configRepository).writeActorCatalogFetchEvent(airbyteCatalog, actorId, connectorVersion, hashValue); + assert (result.getCatalogId()).equals(catalogId); + } + } diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/StateHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/StateHandlerTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/StateHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/StateHandlerTest.java index 53cc95fc90276..f43633cc98afe 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/StateHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/StateHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendCheckUpdatesHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendCheckUpdatesHandlerTest.java similarity index 98% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendCheckUpdatesHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendCheckUpdatesHandlerTest.java index 78ac5ee79b565..4c9e51f910cc3 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendCheckUpdatesHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendCheckUpdatesHandlerTest.java @@ -2,17 +2,17 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import io.airbyte.api.model.generated.WebBackendCheckUpdatesRead; +import io.airbyte.commons.server.services.AirbyteGithubStore; import io.airbyte.config.StandardDestinationDefinition; import io.airbyte.config.StandardSourceDefinition; import io.airbyte.config.persistence.ConfigRepository; -import io.airbyte.server.services.AirbyteGithubStore; import java.io.IOException; import java.util.List; import java.util.Map; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendConnectionsHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendConnectionsHandlerTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendConnectionsHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendConnectionsHandlerTest.java index 0103d8f0f5fdf..fb75429471309 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendConnectionsHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendConnectionsHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -75,6 +75,13 @@ import io.airbyte.api.model.generated.WebBackendWorkspaceState; import io.airbyte.commons.enums.Enums; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.handlers.helpers.CatalogConverter; +import io.airbyte.commons.server.helpers.ConnectionHelpers; +import io.airbyte.commons.server.helpers.DestinationDefinitionHelpers; +import io.airbyte.commons.server.helpers.DestinationHelpers; +import io.airbyte.commons.server.helpers.SourceDefinitionHelpers; +import io.airbyte.commons.server.helpers.SourceHelpers; +import io.airbyte.commons.server.scheduler.EventRunner; import io.airbyte.commons.temporal.TemporalClient.ManualOperationResult; import io.airbyte.config.ActorCatalog; import io.airbyte.config.ActorCatalogFetchEvent; @@ -93,13 +100,6 @@ import io.airbyte.protocol.models.ConfiguredAirbyteCatalog; import io.airbyte.protocol.models.Field; import io.airbyte.protocol.models.JsonSchemaType; -import io.airbyte.server.handlers.helpers.CatalogConverter; -import io.airbyte.server.helpers.ConnectionHelpers; -import io.airbyte.server.helpers.DestinationDefinitionHelpers; -import io.airbyte.server.helpers.DestinationHelpers; -import io.airbyte.server.helpers.SourceDefinitionHelpers; -import io.airbyte.server.helpers.SourceHelpers; -import io.airbyte.server.scheduler.EventRunner; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; import java.lang.reflect.Method; @@ -1016,7 +1016,7 @@ void testUpdateConnectionNoStreamsToReset() throws JsonValidationException, Conf final ConnectionIdRequestBody connectionId = new ConnectionIdRequestBody().connectionId(result.getConnectionId()); verify(connectionsHandler).getDiff(expected.getSyncCatalog(), expectedWithNewSchema.getSyncCatalog(), - CatalogConverter.toProtocol(result.getSyncCatalog())); + CatalogConverter.toConfiguredProtocol(result.getSyncCatalog())); verify(connectionsHandler).getConfigurationDiff(expected.getSyncCatalog(), expectedWithNewSchema.getSyncCatalog()); verify(schedulerHandler, times(0)).resetConnection(connectionId); verify(schedulerHandler, times(0)).syncConnection(connectionId); diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendGeographiesHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendGeographiesHandlerTest.java similarity index 96% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendGeographiesHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendGeographiesHandlerTest.java index e4f014aa3c1db..f0c14e2e69ff3 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/WebBackendGeographiesHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WebBackendGeographiesHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import io.airbyte.api.model.generated.Geography; import io.airbyte.api.model.generated.WebBackendGeographiesListResult; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/WorkspacesHandlerTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WorkspacesHandlerTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/WorkspacesHandlerTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WorkspacesHandlerTest.java index 4e604e12855da..c3c6a94419381 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/WorkspacesHandlerTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/WorkspacesHandlerTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers; +package io.airbyte.commons.server.handlers; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; @@ -34,6 +34,7 @@ import io.airbyte.api.model.generated.WorkspaceUpdate; import io.airbyte.api.model.generated.WorkspaceUpdateName; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.converters.NotificationConverter; import io.airbyte.config.Geography; import io.airbyte.config.Notification; import io.airbyte.config.Notification.NotificationType; @@ -43,7 +44,6 @@ import io.airbyte.config.persistence.ConfigRepository; import io.airbyte.config.persistence.SecretsRepositoryWriter; import io.airbyte.config.persistence.split_secrets.SecretPersistence; -import io.airbyte.server.converters.NotificationConverter; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; import java.util.Collections; diff --git a/airbyte-server/src/test/java/io/airbyte/server/handlers/helper/OAuthPathExtractorTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/helper/OAuthPathExtractorTest.java similarity index 93% rename from airbyte-server/src/test/java/io/airbyte/server/handlers/helper/OAuthPathExtractorTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/helper/OAuthPathExtractorTest.java index e7c7d95f83080..5a45c37b2af5a 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/handlers/helper/OAuthPathExtractorTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/handlers/helper/OAuthPathExtractorTest.java @@ -2,11 +2,11 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.handlers.helper; +package io.airbyte.commons.server.handlers.helper; import com.fasterxml.jackson.databind.JsonNode; import io.airbyte.commons.json.Jsons; -import io.airbyte.server.handlers.helpers.OAuthPathExtractor; +import io.airbyte.commons.server.handlers.helpers.OAuthPathExtractor; import java.util.List; import java.util.Map; import org.assertj.core.api.Assertions; diff --git a/airbyte-server/src/test/java/io/airbyte/server/helpers/ConnectionHelpers.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/ConnectionHelpers.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/helpers/ConnectionHelpers.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/ConnectionHelpers.java index 00afd4ff6a803..300079b72964c 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/helpers/ConnectionHelpers.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/ConnectionHelpers.java @@ -2,9 +2,9 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.helpers; +package io.airbyte.commons.server.helpers; -import static io.airbyte.server.handlers.helpers.CatalogConverter.toApi; +import static io.airbyte.commons.server.handlers.helpers.CatalogConverter.toApi; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.Lists; @@ -30,6 +30,7 @@ import io.airbyte.api.model.generated.SyncMode; import io.airbyte.api.model.generated.WebBackendConnectionListItem; import io.airbyte.commons.enums.Enums; +import io.airbyte.commons.server.converters.ApiPojoConverters; import io.airbyte.commons.text.Names; import io.airbyte.config.BasicSchedule; import io.airbyte.config.JobSyncConfig.NamespaceDefinitionType; @@ -45,7 +46,6 @@ import io.airbyte.protocol.models.Field; import io.airbyte.protocol.models.JsonSchemaType; import io.airbyte.protocol.models.StreamDescriptor; -import io.airbyte.server.converters.ApiPojoConverters; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/airbyte-server/src/test/java/io/airbyte/server/helpers/ConnectorSpecificationHelpers.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/ConnectorSpecificationHelpers.java similarity index 82% rename from airbyte-server/src/test/java/io/airbyte/server/helpers/ConnectorSpecificationHelpers.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/ConnectorSpecificationHelpers.java index dd843b96cbdb2..50ac208ba8dd9 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/helpers/ConnectorSpecificationHelpers.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/ConnectorSpecificationHelpers.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.helpers; +package io.airbyte.commons.server.helpers; import io.airbyte.commons.json.Jsons; import io.airbyte.protocol.models.ConnectorSpecification; @@ -17,7 +17,7 @@ public class ConnectorSpecificationHelpers { public static ConnectorSpecification generateConnectorSpecification() throws IOException { - final Path path = Paths.get("../airbyte-server/src/test/resources/json/TestSpecification.json"); + final Path path = Paths.get(ConnectorSpecificationHelpers.class.getClassLoader().getResource("json/TestSpecification.json").getPath()); try { return new ConnectorSpecification() diff --git a/airbyte-server/src/test/java/io/airbyte/server/helpers/DestinationDefinitionHelpers.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/DestinationDefinitionHelpers.java similarity index 92% rename from airbyte-server/src/test/java/io/airbyte/server/helpers/DestinationDefinitionHelpers.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/DestinationDefinitionHelpers.java index 24ee7a0d452c1..b1c776a17d7e1 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/helpers/DestinationDefinitionHelpers.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/DestinationDefinitionHelpers.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.helpers; +package io.airbyte.commons.server.helpers; import io.airbyte.config.StandardDestinationDefinition; import java.util.UUID; diff --git a/airbyte-server/src/test/java/io/airbyte/server/helpers/DestinationHelpers.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/DestinationHelpers.java similarity index 92% rename from airbyte-server/src/test/java/io/airbyte/server/helpers/DestinationHelpers.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/DestinationHelpers.java index a3eb07edee60d..74bb05dca4f23 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/helpers/DestinationHelpers.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/DestinationHelpers.java @@ -2,14 +2,14 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.helpers; +package io.airbyte.commons.server.helpers; import com.fasterxml.jackson.databind.JsonNode; import io.airbyte.api.model.generated.DestinationRead; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.handlers.DestinationDefinitionsHandler; import io.airbyte.config.DestinationConnection; import io.airbyte.config.StandardDestinationDefinition; -import io.airbyte.server.handlers.DestinationDefinitionsHandler; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -20,7 +20,7 @@ public class DestinationHelpers { public static JsonNode getTestDestinationJson() throws IOException { final Path path = - Paths.get("../airbyte-server/src/test/resources/json/TestImplementation.json"); + Paths.get(DestinationHelpers.class.getClassLoader().getResource("json/TestImplementation.json").getPath()); return Jsons.deserialize(Files.readString(path)); } diff --git a/airbyte-server/src/test/java/io/airbyte/server/helpers/SourceDefinitionHelpers.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/SourceDefinitionHelpers.java similarity index 92% rename from airbyte-server/src/test/java/io/airbyte/server/helpers/SourceDefinitionHelpers.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/SourceDefinitionHelpers.java index 1c592baa42950..fd5a0bb8d26c1 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/helpers/SourceDefinitionHelpers.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/SourceDefinitionHelpers.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.helpers; +package io.airbyte.commons.server.helpers; import io.airbyte.config.StandardSourceDefinition; import java.util.UUID; diff --git a/airbyte-server/src/test/java/io/airbyte/server/helpers/SourceHelpers.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/SourceHelpers.java similarity index 90% rename from airbyte-server/src/test/java/io/airbyte/server/helpers/SourceHelpers.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/SourceHelpers.java index 975256c751a7f..1b1604973bdb7 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/helpers/SourceHelpers.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/helpers/SourceHelpers.java @@ -2,14 +2,14 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.helpers; +package io.airbyte.commons.server.helpers; import com.fasterxml.jackson.databind.JsonNode; import io.airbyte.api.model.generated.SourceRead; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.handlers.SourceDefinitionsHandler; import io.airbyte.config.SourceConnection; import io.airbyte.config.StandardSourceDefinition; -import io.airbyte.server.handlers.SourceDefinitionsHandler; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; @@ -46,7 +46,7 @@ public static SourceConnection generateSource(final UUID sourceDefinitionId, fin } public static JsonNode getTestImplementationJson() throws IOException { - final Path path = Paths.get("../airbyte-server/src/test/resources/json/TestImplementation.json"); + final Path path = Paths.get(SourceHelpers.class.getClassLoader().getResource("json/TestImplementation.json").getPath()); return Jsons.deserialize(Files.readString(path)); } diff --git a/airbyte-server/src/test/java/io/airbyte/server/scheduler/DefaultSynchronousSchedulerClientTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/scheduler/DefaultSynchronousSchedulerClientTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/scheduler/DefaultSynchronousSchedulerClientTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/scheduler/DefaultSynchronousSchedulerClientTest.java index 9cc3761c224cf..bd9bbdc927649 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/scheduler/DefaultSynchronousSchedulerClientTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/scheduler/DefaultSynchronousSchedulerClientTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.scheduler; +package io.airbyte.commons.server.scheduler; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/airbyte-server/src/test/java/io/airbyte/server/services/AirbyteGithubStoreTest.java b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/services/AirbyteGithubStoreTest.java similarity index 99% rename from airbyte-server/src/test/java/io/airbyte/server/services/AirbyteGithubStoreTest.java rename to airbyte-commons-server/src/test/java/io/airbyte/commons/server/services/AirbyteGithubStoreTest.java index 6f483ffdbdfe0..80dfff70b7014 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/services/AirbyteGithubStoreTest.java +++ b/airbyte-commons-server/src/test/java/io/airbyte/commons/server/services/AirbyteGithubStoreTest.java @@ -2,7 +2,7 @@ * Copyright (c) 2022 Airbyte, Inc., all rights reserved. */ -package io.airbyte.server.services; +package io.airbyte.commons.server.services; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/airbyte-server/src/test/resources/icons/test-destination.svg b/airbyte-commons-server/src/test/resources/icons/test-destination.svg similarity index 100% rename from airbyte-server/src/test/resources/icons/test-destination.svg rename to airbyte-commons-server/src/test/resources/icons/test-destination.svg diff --git a/airbyte-server/src/test/resources/icons/test-source.svg b/airbyte-commons-server/src/test/resources/icons/test-source.svg similarity index 100% rename from airbyte-server/src/test/resources/icons/test-source.svg rename to airbyte-commons-server/src/test/resources/icons/test-source.svg diff --git a/airbyte-server/src/test/resources/json/TestImplementation.json b/airbyte-commons-server/src/test/resources/json/TestImplementation.json similarity index 100% rename from airbyte-server/src/test/resources/json/TestImplementation.json rename to airbyte-commons-server/src/test/resources/json/TestImplementation.json diff --git a/airbyte-server/src/test/resources/json/TestSpecification.json b/airbyte-commons-server/src/test/resources/json/TestSpecification.json similarity index 100% rename from airbyte-server/src/test/resources/json/TestSpecification.json rename to airbyte-commons-server/src/test/resources/json/TestSpecification.json diff --git a/airbyte-server/src/test/resources/migration/03a4c904-c91d-447f-ab59-27a43b52c2fd.gz b/airbyte-commons-server/src/test/resources/migration/03a4c904-c91d-447f-ab59-27a43b52c2fd.gz similarity index 100% rename from airbyte-server/src/test/resources/migration/03a4c904-c91d-447f-ab59-27a43b52c2fd.gz rename to airbyte-commons-server/src/test/resources/migration/03a4c904-c91d-447f-ab59-27a43b52c2fd.gz diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/DESTINATION_CONNECTION/4e00862d-5484-4f50-9860-f3bbb4317397.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/DESTINATION_CONNECTION/4e00862d-5484-4f50-9860-f3bbb4317397.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/DESTINATION_CONNECTION/4e00862d-5484-4f50-9860-f3bbb4317397.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/DESTINATION_CONNECTION/4e00862d-5484-4f50-9860-f3bbb4317397.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/DESTINATION_CONNECTION/5434615d-a3b7-4351-bc6b-a9a695555a30.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/DESTINATION_CONNECTION/5434615d-a3b7-4351-bc6b-a9a695555a30.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/DESTINATION_CONNECTION/5434615d-a3b7-4351-bc6b-a9a695555a30.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/DESTINATION_CONNECTION/5434615d-a3b7-4351-bc6b-a9a695555a30.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/SOURCE_CONNECTION/28ffee2b-372a-4f72-9b95-8ed56a8b99c5.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/SOURCE_CONNECTION/28ffee2b-372a-4f72-9b95-8ed56a8b99c5.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/SOURCE_CONNECTION/28ffee2b-372a-4f72-9b95-8ed56a8b99c5.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/SOURCE_CONNECTION/28ffee2b-372a-4f72-9b95-8ed56a8b99c5.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/SOURCE_CONNECTION/e48cae1a-1f5c-42cc-9ec1-a44ff7fb4969.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/SOURCE_CONNECTION/e48cae1a-1f5c-42cc-9ec1-a44ff7fb4969.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/SOURCE_CONNECTION/e48cae1a-1f5c-42cc-9ec1-a44ff7fb4969.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/SOURCE_CONNECTION/e48cae1a-1f5c-42cc-9ec1-a44ff7fb4969.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/22f6c74f-5699-40ff-833c-4a879ea40133.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/22f6c74f-5699-40ff-833c-4a879ea40133.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/22f6c74f-5699-40ff-833c-4a879ea40133.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/22f6c74f-5699-40ff-833c-4a879ea40133.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/25c5221d-dce2-4163-ade9-739ef790f503.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/25c5221d-dce2-4163-ade9-739ef790f503.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/25c5221d-dce2-4163-ade9-739ef790f503.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/25c5221d-dce2-4163-ade9-739ef790f503.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/424892c4-daac-4491-b35d-c6688ba547ba.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/424892c4-daac-4491-b35d-c6688ba547ba.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/424892c4-daac-4491-b35d-c6688ba547ba.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/424892c4-daac-4491-b35d-c6688ba547ba.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/8be1cf83-fde1-477f-a4ad-318d23c9f3c6.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/8be1cf83-fde1-477f-a4ad-318d23c9f3c6.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/8be1cf83-fde1-477f-a4ad-318d23c9f3c6.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/8be1cf83-fde1-477f-a4ad-318d23c9f3c6.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/a625d593-bba5-4a1c-a53d-2d246268a816.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/a625d593-bba5-4a1c-a53d-2d246268a816.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/a625d593-bba5-4a1c-a53d-2d246268a816.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/a625d593-bba5-4a1c-a53d-2d246268a816.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/af7c921e-5892-4ff2-b6c1-4a5ab258fb7e.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/af7c921e-5892-4ff2-b6c1-4a5ab258fb7e.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/af7c921e-5892-4ff2-b6c1-4a5ab258fb7e.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/af7c921e-5892-4ff2-b6c1-4a5ab258fb7e.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/f7a7d195-377f-cf5b-70a5-be6b819019dc.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/f7a7d195-377f-cf5b-70a5-be6b819019dc.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/f7a7d195-377f-cf5b-70a5-be6b819019dc.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_DESTINATION_DEFINITION/f7a7d195-377f-cf5b-70a5-be6b819019dc.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/00405b19-9768-4e0c-b1ae-9fc2ee2b2a8c.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/2470e835-feaf-4db6-96f3-70fd645acc77.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/2470e835-feaf-4db6-96f3-70fd645acc77.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/2470e835-feaf-4db6-96f3-70fd645acc77.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/2470e835-feaf-4db6-96f3-70fd645acc77.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/2af123bf-0aaf-4e0d-9784-cb497f23741a.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/2af123bf-0aaf-4e0d-9784-cb497f23741a.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/2af123bf-0aaf-4e0d-9784-cb497f23741a.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/2af123bf-0aaf-4e0d-9784-cb497f23741a.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/396e4ca3-8a97-4b85-aa4e-c9d8c2d5f992.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/396e4ca3-8a97-4b85-aa4e-c9d8c2d5f992.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/396e4ca3-8a97-4b85-aa4e-c9d8c2d5f992.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/396e4ca3-8a97-4b85-aa4e-c9d8c2d5f992.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/41375467-61ae-4204-8e38-e2b8b7365f23.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/41375467-61ae-4204-8e38-e2b8b7365f23.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/41375467-61ae-4204-8e38-e2b8b7365f23.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/41375467-61ae-4204-8e38-e2b8b7365f23.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/435bb9a5-7887-4809-aa58-28c27df0d7ad.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/435bb9a5-7887-4809-aa58-28c27df0d7ad.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/435bb9a5-7887-4809-aa58-28c27df0d7ad.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/435bb9a5-7887-4809-aa58-28c27df0d7ad.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/445831eb-78db-4b1f-8f1f-0d96ad8739e2.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/445831eb-78db-4b1f-8f1f-0d96ad8739e2.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/445831eb-78db-4b1f-8f1f-0d96ad8739e2.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/445831eb-78db-4b1f-8f1f-0d96ad8739e2.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/4eb22946-2a79-4d20-a3e6-effd234613c3.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/4eb22946-2a79-4d20-a3e6-effd234613c3.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/4eb22946-2a79-4d20-a3e6-effd234613c3.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/4eb22946-2a79-4d20-a3e6-effd234613c3.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/57eb1576-8f52-463d-beb6-2e107cdf571d.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/57eb1576-8f52-463d-beb6-2e107cdf571d.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/57eb1576-8f52-463d-beb6-2e107cdf571d.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/57eb1576-8f52-463d-beb6-2e107cdf571d.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/59f1e50a-331f-4f09-b3e8-2e8d4d355f44.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/59f1e50a-331f-4f09-b3e8-2e8d4d355f44.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/59f1e50a-331f-4f09-b3e8-2e8d4d355f44.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/59f1e50a-331f-4f09-b3e8-2e8d4d355f44.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/68e63de2-bb83-4c7e-93fa-a8a9051e3993.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/68e63de2-bb83-4c7e-93fa-a8a9051e3993.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/68e63de2-bb83-4c7e-93fa-a8a9051e3993.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/68e63de2-bb83-4c7e-93fa-a8a9051e3993.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/71607ba1-c0ac-4799-8049-7f4b90dd50f7.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/71607ba1-c0ac-4799-8049-7f4b90dd50f7.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/71607ba1-c0ac-4799-8049-7f4b90dd50f7.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/71607ba1-c0ac-4799-8049-7f4b90dd50f7.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/778daa7c-feaf-4db6-96f3-70fd645acc77.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/778daa7c-feaf-4db6-96f3-70fd645acc77.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/778daa7c-feaf-4db6-96f3-70fd645acc77.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/778daa7c-feaf-4db6-96f3-70fd645acc77.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/859e501d-2b67-471f-91bb-1c801414d28f.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/859e501d-2b67-471f-91bb-1c801414d28f.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/859e501d-2b67-471f-91bb-1c801414d28f.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/859e501d-2b67-471f-91bb-1c801414d28f.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/9e0556f4-69df-4522-a3fb-03264d36b348.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/9e0556f4-69df-4522-a3fb-03264d36b348.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/9e0556f4-69df-4522-a3fb-03264d36b348.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/9e0556f4-69df-4522-a3fb-03264d36b348.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/9fed261d-d107-47fd-8c8b-323023db6e20.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/9fed261d-d107-47fd-8c8b-323023db6e20.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/9fed261d-d107-47fd-8c8b-323023db6e20.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/9fed261d-d107-47fd-8c8b-323023db6e20.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/aea2fd0d-377d-465e-86c0-4fdc4f688e51.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/aea2fd0d-377d-465e-86c0-4fdc4f688e51.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/aea2fd0d-377d-465e-86c0-4fdc4f688e51.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/aea2fd0d-377d-465e-86c0-4fdc4f688e51.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b03a9f3e-22a5-11eb-adc1-0242ac120002.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b03a9f3e-22a5-11eb-adc1-0242ac120002.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b03a9f3e-22a5-11eb-adc1-0242ac120002.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b03a9f3e-22a5-11eb-adc1-0242ac120002.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b1892b11-788d-44bd-b9ec-3a436f7b54ce.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b1892b11-788d-44bd-b9ec-3a436f7b54ce.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b1892b11-788d-44bd-b9ec-3a436f7b54ce.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b1892b11-788d-44bd-b9ec-3a436f7b54ce.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b5ea17b1-f170-46dc-bc31-cc744ca984c1.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b5ea17b1-f170-46dc-bc31-cc744ca984c1.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b5ea17b1-f170-46dc-bc31-cc744ca984c1.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/b5ea17b1-f170-46dc-bc31-cc744ca984c1.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/cd42861b-01fc-4658-a8ab-5d11d0510f01.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/cd42861b-01fc-4658-a8ab-5d11d0510f01.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/cd42861b-01fc-4658-a8ab-5d11d0510f01.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/cd42861b-01fc-4658-a8ab-5d11d0510f01.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d2147be5-fa36-4936-977e-f031affa5895.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d2147be5-fa36-4936-977e-f031affa5895.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d2147be5-fa36-4936-977e-f031affa5895.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d2147be5-fa36-4936-977e-f031affa5895.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d29764f8-80d7-4dd7-acbe-1a42005ee5aa.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d29764f8-80d7-4dd7-acbe-1a42005ee5aa.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d29764f8-80d7-4dd7-acbe-1a42005ee5aa.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d29764f8-80d7-4dd7-acbe-1a42005ee5aa.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d8313939-3782-41b0-be29-b3ca20d8dd3a.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d8313939-3782-41b0-be29-b3ca20d8dd3a.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d8313939-3782-41b0-be29-b3ca20d8dd3a.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/d8313939-3782-41b0-be29-b3ca20d8dd3a.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/decd338e-5647-4c0b-adf4-da0e75f5a750.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/decd338e-5647-4c0b-adf4-da0e75f5a750.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/decd338e-5647-4c0b-adf4-da0e75f5a750.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/decd338e-5647-4c0b-adf4-da0e75f5a750.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e094cb9a-26de-4645-8761-65c0c425d1de.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e094cb9a-26de-4645-8761-65c0c425d1de.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e094cb9a-26de-4645-8761-65c0c425d1de.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e094cb9a-26de-4645-8761-65c0c425d1de.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e7778cfc-e97c-4458-9ecb-b4f2bba8946c.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e7778cfc-e97c-4458-9ecb-b4f2bba8946c.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e7778cfc-e97c-4458-9ecb-b4f2bba8946c.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e7778cfc-e97c-4458-9ecb-b4f2bba8946c.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e87ffa8e-a3b5-f69c-9076-6011339de1f6.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e87ffa8e-a3b5-f69c-9076-6011339de1f6.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e87ffa8e-a3b5-f69c-9076-6011339de1f6.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/e87ffa8e-a3b5-f69c-9076-6011339de1f6.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/eaf50f04-21dd-4620-913b-2a83f5635227.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/eaf50f04-21dd-4620-913b-2a83f5635227.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/eaf50f04-21dd-4620-913b-2a83f5635227.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/eaf50f04-21dd-4620-913b-2a83f5635227.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ec4b9503-13cb-48ab-a4ab-6ade4be46567.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ec4b9503-13cb-48ab-a4ab-6ade4be46567.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ec4b9503-13cb-48ab-a4ab-6ade4be46567.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ec4b9503-13cb-48ab-a4ab-6ade4be46567.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ed799e2b-2158-4c66-8da4-b40fe63bc72a.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ed799e2b-2158-4c66-8da4-b40fe63bc72a.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ed799e2b-2158-4c66-8da4-b40fe63bc72a.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ed799e2b-2158-4c66-8da4-b40fe63bc72a.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ef69ef6e-aa7f-4af1-a01d-ef775033524e.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ef69ef6e-aa7f-4af1-a01d-ef775033524e.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ef69ef6e-aa7f-4af1-a01d-ef775033524e.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/ef69ef6e-aa7f-4af1-a01d-ef775033524e.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SOURCE_DEFINITION/fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC/49dae3f0-158b-4737-b6e4-0eed77d4b74e.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC/49dae3f0-158b-4737-b6e4-0eed77d4b74e.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC/49dae3f0-158b-4737-b6e4-0eed77d4b74e.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC/49dae3f0-158b-4737-b6e4-0eed77d4b74e.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC/a294256f-1abe-4837-925f-91602c7207b4.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC/a294256f-1abe-4837-925f-91602c7207b4.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC/a294256f-1abe-4837-925f-91602c7207b4.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC/a294256f-1abe-4837-925f-91602c7207b4.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC_SCHEDULE/49dae3f0-158b-4737-b6e4-0eed77d4b74e.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC_SCHEDULE/49dae3f0-158b-4737-b6e4-0eed77d4b74e.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC_SCHEDULE/49dae3f0-158b-4737-b6e4-0eed77d4b74e.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC_SCHEDULE/49dae3f0-158b-4737-b6e4-0eed77d4b74e.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC_SCHEDULE/a294256f-1abe-4837-925f-91602c7207b4.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC_SCHEDULE/a294256f-1abe-4837-925f-91602c7207b4.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC_SCHEDULE/a294256f-1abe-4837-925f-91602c7207b4.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_SYNC_SCHEDULE/a294256f-1abe-4837-925f-91602c7207b4.json diff --git a/airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_WORKSPACE/5ae6b09b-fdec-41af-aaf7-7d94cfc33ef6.json b/airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_WORKSPACE/5ae6b09b-fdec-41af-aaf7-7d94cfc33ef6.json similarity index 100% rename from airbyte-server/src/test/resources/migration/dummy_data/config/STANDARD_WORKSPACE/5ae6b09b-fdec-41af-aaf7-7d94cfc33ef6.json rename to airbyte-commons-server/src/test/resources/migration/dummy_data/config/STANDARD_WORKSPACE/5ae6b09b-fdec-41af-aaf7-7d94cfc33ef6.json diff --git a/airbyte-server/src/test/resources/migration/schema.sql b/airbyte-commons-server/src/test/resources/migration/schema.sql similarity index 100% rename from airbyte-server/src/test/resources/migration/schema.sql rename to airbyte-commons-server/src/test/resources/migration/schema.sql diff --git a/airbyte-commons-temporal/src/main/java/io/airbyte/commons/temporal/TemporalClient.java b/airbyte-commons-temporal/src/main/java/io/airbyte/commons/temporal/TemporalClient.java index 141238b851dda..e57d584961a32 100644 --- a/airbyte-commons-temporal/src/main/java/io/airbyte/commons/temporal/TemporalClient.java +++ b/airbyte-commons-temporal/src/main/java/io/airbyte/commons/temporal/TemporalClient.java @@ -400,7 +400,9 @@ public TemporalResponse submitSync(final long jobId, final i .withState(config.getState()) .withResourceRequirements(config.getResourceRequirements()) .withSourceResourceRequirements(config.getSourceResourceRequirements()) - .withDestinationResourceRequirements(config.getDestinationResourceRequirements()); + .withDestinationResourceRequirements(config.getDestinationResourceRequirements()) + .withConnectionId(connectionId) + .withWorkspaceId(config.getWorkspaceId()); return execute(jobRunConfig, () -> getWorkflowStub(SyncWorkflow.class, TemporalJobType.SYNC).run( diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/config/ApiClientBeanFactory.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/config/ApiClientBeanFactory.java index d7e5d80407c0c..47f2c7cded307 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/config/ApiClientBeanFactory.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/config/ApiClientBeanFactory.java @@ -11,6 +11,7 @@ import io.airbyte.api.client.AirbyteApiClient; import io.airbyte.api.client.generated.ConnectionApi; import io.airbyte.api.client.generated.DestinationApi; +import io.airbyte.api.client.generated.JobsApi; import io.airbyte.api.client.generated.SourceApi; import io.airbyte.api.client.generated.WorkspaceApi; import io.airbyte.api.client.invoker.generated.ApiClient; @@ -72,6 +73,11 @@ public SourceApi sourceApi(@Named("apiClient") final ApiClient apiClient) { return new SourceApi(apiClient); } + @Singleton + public JobsApi jobsApi(@Named("apiClient") final ApiClient apiClient) { + return new JobsApi(apiClient); + } + @Singleton public DestinationApi destinationApi(final ApiClient apiClient) { return new DestinationApi(apiClient); diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/general/DbtTransformationRunner.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/general/DbtTransformationRunner.java index 7abd7bc7b6728..1a42902b86a11 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/general/DbtTransformationRunner.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/general/DbtTransformationRunner.java @@ -107,6 +107,7 @@ public boolean transform(final String jobId, files, "/bin/bash", resourceRequirements, + null, Map.of(JOB_TYPE_KEY, SYNC_JOB, SYNC_STEP_KEY, CUSTOM_STEP), Collections.emptyMap(), Collections.emptyMap(), diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/general/DefaultReplicationWorker.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/general/DefaultReplicationWorker.java index fafacc8c42c81..a1ba66f544b6f 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/general/DefaultReplicationWorker.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/general/DefaultReplicationWorker.java @@ -50,6 +50,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Optional; @@ -336,9 +338,12 @@ private static Runnable readFromSrcAndWriteToDstRunnable(final AirbyteSource sou long recordsRead = 0L; final Map, Integer>> validationErrors = new HashMap<>(); final Map> streamToSelectedFields = new HashMap<>(); + final Map> streamToAllFields = new HashMap<>(); + final Map> unexpectedFields = new HashMap<>(); if (fieldSelectionEnabled) { populatedStreamToSelectedFields(catalog, streamToSelectedFields); } + populateStreamToAllFields(catalog, streamToAllFields); try { while (!cancelled.get() && !source.isFinished()) { final Optional messageOptional; @@ -353,7 +358,7 @@ private static Runnable readFromSrcAndWriteToDstRunnable(final AirbyteSource sou if (fieldSelectionEnabled) { filterSelectedFields(streamToSelectedFields, airbyteMessage); } - validateSchema(recordSchemaValidator, validationErrors, airbyteMessage); + validateSchema(recordSchemaValidator, streamToAllFields, unexpectedFields, validationErrors, airbyteMessage); final AirbyteMessage message = mapper.mapMessage(airbyteMessage); messageTracker.acceptFromSource(message); @@ -396,6 +401,12 @@ private static Runnable readFromSrcAndWriteToDstRunnable(final AirbyteSource sou metricReporter.trackSchemaValidationError(stream); }); } + unexpectedFields.forEach((stream, unexpectedFieldNames) -> { + if (!unexpectedFieldNames.isEmpty()) { + LOGGER.warn("Source {} has unexpected fields [{}] in stream {}", sourceId, String.join(", ", unexpectedFieldNames), stream); + // TODO(mfsiega-airbyte): publish this as a metric. + } + }); try { destination.notifyEndOfInput(); @@ -595,6 +606,8 @@ private List getFailureReasons(final AtomicReference> streamToAllFields, + Map> unexpectedFields, final Map, Integer>> validationErrors, final AirbyteMessage message) { if (message.getRecord() == null) { @@ -609,6 +622,9 @@ private static void validateSchema(final RecordSchemaValidator recordSchemaValid if (streamHasLessThenTenErrs) { try { recordSchemaValidator.validateSchema(record, messageStream); + final Set unexpectedFieldNames = unexpectedFields.getOrDefault(messageStream, new HashSet<>()); + populateUnexpectedFieldNames(record, streamToAllFields.get(messageStream), unexpectedFieldNames); + unexpectedFields.put(messageStream, unexpectedFieldNames); } catch (final RecordSchemaValidationException e) { final ImmutablePair, Integer> exceptionWithCount = validationErrors.get(messageStream); if (exceptionWithCount == null) { @@ -620,8 +636,22 @@ private static void validateSchema(final RecordSchemaValidator recordSchemaValid validationErrors.put(messageStream, new ImmutablePair<>(updatedErrorMessages, currentCount + 1)); } } + } + } + private static void populateUnexpectedFieldNames(AirbyteRecordMessage record, Set fieldsInCatalog, Set unexpectedFieldNames) { + final JsonNode data = record.getData(); + if (data.isObject()) { + Iterator fieldNamesInRecord = data.fieldNames(); + while (fieldNamesInRecord.hasNext()) { + final String fieldName = fieldNamesInRecord.next(); + if (!fieldsInCatalog.contains(fieldName)) { + unexpectedFieldNames.add(fieldName); + } + } } + // If it's not an object it's malformed, but we tolerate it here - it will be logged as an error by + // the validation. } /** @@ -646,6 +676,27 @@ private static void populatedStreamToSelectedFields(final ConfiguredAirbyteCatal } } + /** + * Populates a map for stream -> all the top-level fields in the catalog. Used to identify any + * unexpected top-level fields in the records. + * + * @param catalog + * @param streamToAllFields + */ + private static void populateStreamToAllFields(final ConfiguredAirbyteCatalog catalog, + final Map> streamToAllFields) { + for (final var s : catalog.getStreams()) { + final Set fields = new HashSet<>(); + final JsonNode propertiesNode = s.getStream().getJsonSchema().findPath("properties"); + if (propertiesNode.isObject()) { + propertiesNode.fieldNames().forEachRemaining((fieldName) -> fields.add(fieldName)); + } else { + throw new RuntimeException("No properties node in stream schema"); + } + streamToAllFields.put(AirbyteStreamNameNamespacePair.fromConfiguredAirbyteSteam(s), fields); + } + } + private static void filterSelectedFields(final Map> streamToSelectedFields, final AirbyteMessage airbyteMessage) { final AirbyteRecordMessage record = airbyteMessage.getRecord(); diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/helper/EntrypointEnvChecker.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/helper/EntrypointEnvChecker.java index a88ae8a62f51c..09a0cd58d0682 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/helper/EntrypointEnvChecker.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/helper/EntrypointEnvChecker.java @@ -45,6 +45,7 @@ public static String getEntrypointEnvVariable(final ProcessFactory processFactor Collections.emptyMap(), "printenv", null, + null, Collections.emptyMap(), Collections.emptyMap(), Collections.emptyMap()); diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/normalization/DefaultNormalizationRunner.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/normalization/DefaultNormalizationRunner.java index 8c2813804069a..ce6177f34b34f 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/normalization/DefaultNormalizationRunner.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/normalization/DefaultNormalizationRunner.java @@ -134,6 +134,7 @@ private boolean runProcess(final String jobId, false, files, null, resourceRequirements, + null, Map.of(JOB_TYPE_KEY, SYNC_JOB, SYNC_STEP_KEY, NORMALIZE_STEP), Collections.emptyMap(), Collections.emptyMap(), diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/AirbyteIntegrationLauncher.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/AirbyteIntegrationLauncher.java index 6b8c9ac347cd9..17a7853f51f5a 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/AirbyteIntegrationLauncher.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/AirbyteIntegrationLauncher.java @@ -23,6 +23,7 @@ import datadog.trace.api.Trace; import io.airbyte.commons.features.EnvVariableFeatureFlags; import io.airbyte.commons.features.FeatureFlags; +import io.airbyte.config.AllowedHosts; import io.airbyte.config.ResourceRequirements; import io.airbyte.config.WorkerEnvConstants; import io.airbyte.metrics.lib.ApmTraceUtils; @@ -50,12 +51,14 @@ public class AirbyteIntegrationLauncher implements IntegrationLauncher { * At this moment, we put custom connector jobs into an isolated pool. */ private final boolean useIsolatedPool; + private final AllowedHosts allowedHosts; public AirbyteIntegrationLauncher(final String jobId, final int attempt, final String imageName, final ProcessFactory processFactory, final ResourceRequirements resourceRequirement, + final AllowedHosts allowedHosts, final boolean useIsolatedPool, final FeatureFlags featureFlags) { this.jobId = jobId; @@ -63,6 +66,7 @@ public AirbyteIntegrationLauncher(final String jobId, this.imageName = imageName; this.processFactory = processFactory; this.resourceRequirement = resourceRequirement; + this.allowedHosts = allowedHosts; this.featureFlags = featureFlags; this.useIsolatedPool = useIsolatedPool; } @@ -82,6 +86,7 @@ public Process spec(final Path jobRoot) throws WorkerException { Collections.emptyMap(), null, resourceRequirement, + allowedHosts, Map.of(JOB_TYPE_KEY, SPEC_JOB), getWorkerMetadata(), Collections.emptyMap(), @@ -103,6 +108,7 @@ public Process check(final Path jobRoot, final String configFilename, final Stri ImmutableMap.of(configFilename, configContents), null, resourceRequirement, + allowedHosts, Map.of(JOB_TYPE_KEY, CHECK_JOB), getWorkerMetadata(), Collections.emptyMap(), @@ -125,6 +131,7 @@ public Process discover(final Path jobRoot, final String configFilename, final S ImmutableMap.of(configFilename, configContents), null, resourceRequirement, + allowedHosts, Map.of(JOB_TYPE_KEY, DISCOVER_JOB), getWorkerMetadata(), Collections.emptyMap(), @@ -171,6 +178,7 @@ public Process read(final Path jobRoot, files, null, resourceRequirement, + allowedHosts, Map.of(JOB_TYPE_KEY, SYNC_JOB, SYNC_STEP_KEY, READ_STEP), getWorkerMetadata(), Collections.emptyMap(), @@ -201,6 +209,7 @@ public Process write(final Path jobRoot, files, null, resourceRequirement, + allowedHosts, Map.of(JOB_TYPE_KEY, SYNC_JOB, SYNC_STEP_KEY, WRITE_STEP), getWorkerMetadata(), Collections.emptyMap(), diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/DockerProcessFactory.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/DockerProcessFactory.java index 5ed26798030b7..77381fb1b12a4 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/DockerProcessFactory.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/DockerProcessFactory.java @@ -12,6 +12,7 @@ import io.airbyte.commons.io.LineGobbler; import io.airbyte.commons.map.MoreMaps; import io.airbyte.commons.resources.MoreResources; +import io.airbyte.config.AllowedHosts; import io.airbyte.config.ResourceRequirements; import io.airbyte.workers.WorkerConfigs; import io.airbyte.workers.WorkerUtils; @@ -20,9 +21,12 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; +import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -88,6 +92,7 @@ public Process create(final String jobType, final Map files, final String entrypoint, final ResourceRequirements resourceRequirements, + final AllowedHosts allowedHosts, final Map labels, final Map jobMetadata, final Map internalToExternalPorts, @@ -117,9 +122,10 @@ public Process create(final String jobType, "--log-driver", "none"); final String containerName = ProcessFactory.createProcessName(imageName, jobType, jobId, attempt, DOCKER_NAME_LEN_LIMIT); - LOGGER.info("Creating docker container = {} with resources {}", containerName, resourceRequirements); + LOGGER.info("Creating docker container = {} with resources {} and allowedHosts {}", containerName, resourceRequirements, allowedHosts); cmd.add("--name"); cmd.add(containerName); + cmd.addAll(localDebuggingOptions(containerName)); if (networkName != null) { cmd.add("--network"); @@ -169,6 +175,31 @@ public Process create(final String jobType, } } + /** + * !! ONLY FOR DEBUGGING, SHOULD NOT BE USED IN PRODUCTION !! If you set the DEBUG_CONTAINER_IMAGE + * environment variable, and it matches the image name of a spawned container, this method will add + * the necessary params to connect a debugger. For example, to enable this for + * `destination-bigquery` start the services locally with: ``` VERSION="dev" + * DEBUG_CONTAINER_IMAGE="destination-bigquery" docker compose -f docker-compose.yaml -f + * docker-compose.debug.yaml up ``` Additionally you may have to update the image version of your + * target image to 'dev' in the UI of your local airbyte platform. See the + * `docker-compose.debug.yaml` file for more context. + * + * @param containerName the name of the container which could be debugged. + * @return A list with debugging arguments or an empty list + */ + static List localDebuggingOptions(final String containerName) { + final boolean shouldAddDebuggerOptions = + Optional.ofNullable(System.getenv("DEBUG_CONTAINER_IMAGE")).filter(StringUtils::isNotEmpty) + .map(ProcessFactory.extractShortImageName(containerName)::equals).orElse(false) + && Optional.ofNullable(System.getenv("DEBUG_CONTAINER_JAVA_OPTS")).isPresent(); + if (shouldAddDebuggerOptions) { + return List.of("-e", "JAVA_TOOL_OPTIONS=" + System.getenv("DEBUG_CONTAINER_JAVA_OPTS"), "-p5005:5005"); + } else { + return Collections.emptyList(); + } + } + private Path rebasePath(final Path jobRoot) { final Path relativePath = workspaceRoot.relativize(jobRoot); return DATA_MOUNT_DESTINATION.resolve(relativePath); diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/KubeProcessFactory.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/KubeProcessFactory.java index 8643ba99219e3..b30a5793d3bda 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/KubeProcessFactory.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/KubeProcessFactory.java @@ -7,6 +7,7 @@ import com.google.common.annotations.VisibleForTesting; import io.airbyte.commons.lang.Exceptions; import io.airbyte.commons.map.MoreMaps; +import io.airbyte.config.AllowedHosts; import io.airbyte.config.ResourceRequirements; import io.airbyte.workers.WorkerConfigs; import io.airbyte.workers.exception.WorkerException; @@ -85,6 +86,7 @@ public Process create( final Map files, final String entrypoint, final ResourceRequirements resourceRequirements, + final AllowedHosts allowedHosts, final Map customLabels, final Map jobMetadata, final Map internalToExternalPorts, @@ -93,7 +95,8 @@ public Process create( try { // used to differentiate source and destination processes with the same id and attempt final String podName = ProcessFactory.createProcessName(imageName, jobType, jobId, attempt, KUBE_NAME_LEN_LIMIT); - LOGGER.info("Attempting to start pod = {} for {} with resources {}", podName, imageName, resourceRequirements); + LOGGER.info("Attempting to start pod = {} for {} with resources {} and allowedHosts {}", podName, imageName, resourceRequirements, + allowedHosts); final int stdoutLocalPort = KubePortManagerSingleton.getInstance().take(); LOGGER.info("{} stdoutLocalPort = {}", podName, stdoutLocalPort); diff --git a/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/ProcessFactory.java b/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/ProcessFactory.java index d9cf45084a068..c174aa49c7d93 100644 --- a/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/ProcessFactory.java +++ b/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/ProcessFactory.java @@ -4,6 +4,7 @@ package io.airbyte.workers.process; +import io.airbyte.config.AllowedHosts; import io.airbyte.config.ResourceRequirements; import io.airbyte.workers.exception.WorkerException; import java.nio.file.Path; @@ -49,6 +50,7 @@ Process create(String jobType, final Map files, final String entrypoint, final ResourceRequirements resourceRequirements, + final AllowedHosts allowedHosts, final Map labels, final Map jobMetadata, final Map portMapping, @@ -64,11 +66,8 @@ Process create(String jobType, * can be used by the factories implementing this interface for easier operations. */ static String createProcessName(final String fullImagePath, final String jobType, final String jobId, final int attempt, final int lenLimit) { - final var noVersion = fullImagePath.split(VERSION_DELIMITER)[0]; - - final var nameParts = noVersion.split(DOCKER_DELIMITER); - var imageName = nameParts[nameParts.length - 1]; + var imageName = extractShortImageName(fullImagePath); final var randSuffix = RandomStringUtils.randomAlphabetic(5).toLowerCase(); final String suffix = jobType + "-" + jobId + "-" + attempt + "-" + randSuffix; @@ -90,4 +89,20 @@ static String createProcessName(final String fullImagePath, final String jobType return processName.substring(m.start()); } + /** + * Docker image names are by convention separated by slashes. The last portion is the image's name. + * This is followed by a colon and a version number. e.g. airbyte/scheduler:v1 or + * gcr.io/my-project/my-project:v2. + * + * @param fullImagePath the image name with repository and version ex + * gcr.io/my-project/image-name:v2 + * @return the image name without the repo and version, ex. image-name + */ + static String extractShortImageName(final String fullImagePath) { + final var noVersion = fullImagePath.split(VERSION_DELIMITER)[0]; + + final var nameParts = noVersion.split(DOCKER_DELIMITER); + return nameParts[nameParts.length - 1]; + } + } diff --git a/airbyte-commons-worker/src/test/java/io/airbyte/workers/normalization/DefaultNormalizationRunnerTest.java b/airbyte-commons-worker/src/test/java/io/airbyte/workers/normalization/DefaultNormalizationRunnerTest.java index db3bbc57671e6..7fb14d19948b0 100644 --- a/airbyte-commons-worker/src/test/java/io/airbyte/workers/normalization/DefaultNormalizationRunnerTest.java +++ b/airbyte-commons-worker/src/test/java/io/airbyte/workers/normalization/DefaultNormalizationRunnerTest.java @@ -91,6 +91,7 @@ void setup() throws IOException, WorkerException { when(processFactory.create(NORMALIZE_STEP, JOB_ID, JOB_ATTEMPT, jobRoot, DockerUtils.getTaggedImageName(NORMALIZATION_IMAGE, NORMALIZATION_TAG), false, false, files, null, workerConfigs.getResourceRequirements(), + null, Map.of(JOB_TYPE_KEY, SYNC_JOB, SYNC_STEP_KEY, NORMALIZE_STEP), Map.of(), Map.of(), diff --git a/airbyte-commons-worker/src/test/java/io/airbyte/workers/process/AirbyteIntegrationLauncherTest.java b/airbyte-commons-worker/src/test/java/io/airbyte/workers/process/AirbyteIntegrationLauncherTest.java index 458885c0d9409..c6ec9ed2f49cd 100644 --- a/airbyte-commons-worker/src/test/java/io/airbyte/workers/process/AirbyteIntegrationLauncherTest.java +++ b/airbyte-commons-worker/src/test/java/io/airbyte/workers/process/AirbyteIntegrationLauncherTest.java @@ -69,7 +69,7 @@ class AirbyteIntegrationLauncherTest { @BeforeEach void setUp() { workerConfigs = new WorkerConfigs(new EnvConfigs()); - launcher = new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, FAKE_IMAGE, processFactory, workerConfigs.getResourceRequirements(), false, + launcher = new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, FAKE_IMAGE, processFactory, workerConfigs.getResourceRequirements(), null, false, featureFlags); } @@ -78,7 +78,7 @@ void spec() throws WorkerException { launcher.spec(JOB_ROOT); Mockito.verify(processFactory).create(SPEC_JOB, JOB_ID, JOB_ATTEMPT, JOB_ROOT, FAKE_IMAGE, false, false, Collections.emptyMap(), null, - workerConfigs.getResourceRequirements(), Map.of(JOB_TYPE_KEY, SPEC_JOB), JOB_METADATA, + workerConfigs.getResourceRequirements(), null, Map.of(JOB_TYPE_KEY, SPEC_JOB), JOB_METADATA, Map.of(), "spec"); } @@ -89,6 +89,7 @@ void check() throws WorkerException { Mockito.verify(processFactory).create(CHECK_JOB, JOB_ID, JOB_ATTEMPT, JOB_ROOT, FAKE_IMAGE, false, false, CONFIG_FILES, null, workerConfigs.getResourceRequirements(), + null, Map.of(JOB_TYPE_KEY, CHECK_JOB), JOB_METADATA, Map.of(), @@ -102,6 +103,7 @@ void discover() throws WorkerException { Mockito.verify(processFactory).create(DISCOVER_JOB, JOB_ID, JOB_ATTEMPT, JOB_ROOT, FAKE_IMAGE, false, false, CONFIG_FILES, null, workerConfigs.getResourceRequirements(), + null, Map.of(JOB_TYPE_KEY, DISCOVER_JOB), JOB_METADATA, Map.of(), @@ -115,6 +117,7 @@ void read() throws WorkerException { Mockito.verify(processFactory).create(READ_STEP, JOB_ID, JOB_ATTEMPT, JOB_ROOT, FAKE_IMAGE, false, false, CONFIG_CATALOG_STATE_FILES, null, workerConfigs.getResourceRequirements(), + null, Map.of(JOB_TYPE_KEY, SYNC_JOB, SYNC_STEP_KEY, READ_STEP), JOB_METADATA, Map.of(), @@ -131,6 +134,7 @@ void write() throws WorkerException { Mockito.verify(processFactory).create(WRITE_STEP, JOB_ID, JOB_ATTEMPT, JOB_ROOT, FAKE_IMAGE, false, true, CONFIG_CATALOG_FILES, null, workerConfigs.getResourceRequirements(), + null, Map.of(JOB_TYPE_KEY, SYNC_JOB, SYNC_STEP_KEY, WRITE_STEP), JOB_METADATA, Map.of(), diff --git a/airbyte-commons-worker/src/test/java/io/airbyte/workers/process/DockerProcessFactoryTest.java b/airbyte-commons-worker/src/test/java/io/airbyte/workers/process/DockerProcessFactoryTest.java index 215fb0bb20153..a4983c384227b 100644 --- a/airbyte-commons-worker/src/test/java/io/airbyte/workers/process/DockerProcessFactoryTest.java +++ b/airbyte-commons-worker/src/test/java/io/airbyte/workers/process/DockerProcessFactoryTest.java @@ -86,7 +86,7 @@ void testFileWriting() throws IOException, WorkerException { final DockerProcessFactory processFactory = new DockerProcessFactory(new WorkerConfigs(new EnvConfigs()), workspaceRoot, null, null, null); processFactory.create("tester", "job_id", 0, jobRoot, BUSYBOX, false, false, ImmutableMap.of("config.json", "{\"data\": 2}"), "echo hi", - new WorkerConfigs(new EnvConfigs()).getResourceRequirements(), Map.of(), Map.of(), Map.of()); + new WorkerConfigs(new EnvConfigs()).getResourceRequirements(), null, Map.of(), Map.of(), Map.of()); assertEquals( Jsons.jsonNode(ImmutableMap.of("data", 2)), @@ -125,6 +125,7 @@ void testEnvMapSet() throws IOException, WorkerException, InterruptedException { Map.of(), "/bin/sh", workerConfigs.getResourceRequirements(), + null, Map.of(), Map.of(), Map.of(), @@ -158,6 +159,7 @@ private void waitForDockerToInitialize(final ProcessFactory processFactory, fina Map.of(), "/bin/sh", workerConfigs.getResourceRequirements(), + null, Map.of(), Map.of(), Map.of(), diff --git a/airbyte-commons/src/main/java/io/airbyte/commons/auth/AuthRole.java b/airbyte-commons/src/main/java/io/airbyte/commons/auth/AuthRole.java new file mode 100644 index 0000000000000..63b176034100a --- /dev/null +++ b/airbyte-commons/src/main/java/io/airbyte/commons/auth/AuthRole.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.commons.auth; + +import java.util.Comparator; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * This enum describes the standard auth levels for a given resource. It currently is only used for + * 2 resources Workspace and Instance (i.e. the entire instance or deployment of Airbyte). + * + * In the context of a workspace, there is a 1:1 mapping. + *
    + *
  • OWNER => WORKSPACE OWNER. Superadmin of the instance (typically the person that created it), + * has all the rights on the instance including deleting it.
  • + *
  • ADMIN => WORKSPACE ADMIN. Admin of the instance, can invite other users, update their + * permission and change settings of the instance.
  • + *
  • EDITOR => WORKSPACE EDITOR
  • + *
  • READER => WORKSPACE READER
  • + *
  • AUTHENTICATED_USER => INVALID
  • + *
  • NONE => NONE (does not have access to this resource)
  • + *
+ * In the context of the instance, there are currently only 3 levels. + *
    + *
  • ADMIN => INSTANCE ADMIN
  • + *
  • AUTHENTICATED_USER => Denotes that all that is required for access is an active Airbyte + * account. This should only ever be used when the associated resource is an INSTANCE. All other + * uses are invalid. It is a special value in the enum to handle a case that only applies to + * instances and no other resources.
  • + *
  • NONE => NONE (not applicable. anyone being checked in our auth stack already has an account + * so by definition they have some access to the instance.)
  • + *
+ */ +public enum AuthRole { + + OWNER(500, AuthRoleConstants.OWNER), + ADMIN(400, AuthRoleConstants.ADMIN), + EDITOR(300, AuthRoleConstants.EDITOR), + READER(200, AuthRoleConstants.READER), + AUTHENTICATED_USER(100, AuthRoleConstants.AUTHENTICATED_USER), // ONLY USE WITH INSTANCE RESOURCE! + NONE(0, AuthRoleConstants.NONE); + + private final int authority; + private final String label; + + AuthRole(final int authority, final String label) { + this.authority = authority; + this.label = label; + } + + public int getAuthority() { + return authority; + } + + public String getLabel() { + return label; + } + + /** + * Builds the set of roles based on the provided {@link AuthRole} value. + *

+ * The generated set of auth roles contains the provided {@link AuthRole} (if not {@code null}) and + * any other authentication roles with a lesser {@link #getAuthority()} value. + *

+ * + * @param authRole An {@link AuthRole} (may be {@code null}). + * @return The set of {@link AuthRole} labels based on the provided {@link AuthRole}. + */ + public static Set buildAuthRolesSet(final AuthRole authRole) { + final Set authRoles = new HashSet<>(); + + if (authRole != null) { + authRoles.add(authRole); + authRoles.addAll(Stream.of(values()) + .filter(role -> !NONE.equals(role)) + .filter(role -> role.getAuthority() < authRole.getAuthority()) + .collect(Collectors.toSet())); + } + + // Sort final set by descending authority order + return authRoles.stream() + .sorted(Comparator.comparingInt(AuthRole::getAuthority)) + .map(role -> role.getLabel()) + .collect(Collectors.toCollection(LinkedHashSet::new)); + } + +} diff --git a/airbyte-commons/src/main/java/io/airbyte/commons/auth/AuthRoleConstants.java b/airbyte-commons/src/main/java/io/airbyte/commons/auth/AuthRoleConstants.java new file mode 100644 index 0000000000000..6a206ee0e89e5 --- /dev/null +++ b/airbyte-commons/src/main/java/io/airbyte/commons/auth/AuthRoleConstants.java @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.commons.auth; + +/** + * Collection of constants that defines authorization roles. + */ +public final class AuthRoleConstants { + + public static final String ADMIN = "ADMIN"; + public static final String AUTHENTICATED_USER = "AUTHENTICATED_USER"; + public static final String EDITOR = "EDITOR"; + public static final String OWNER = "OWNER"; + public static final String NONE = "NONE"; + public static final String READER = "READER"; + + private AuthRoleConstants() {} + +} diff --git a/airbyte-commons/src/main/java/io/airbyte/commons/features/EnvVariableFeatureFlags.java b/airbyte-commons/src/main/java/io/airbyte/commons/features/EnvVariableFeatureFlags.java index 248c5524ed565..b574d0a40cee6 100644 --- a/airbyte-commons/src/main/java/io/airbyte/commons/features/EnvVariableFeatureFlags.java +++ b/airbyte-commons/src/main/java/io/airbyte/commons/features/EnvVariableFeatureFlags.java @@ -41,7 +41,7 @@ public boolean useStreamCapableState() { @Override public boolean autoDetectSchema() { - return getEnvOrDefault(AUTO_DETECT_SCHEMA, false, Boolean::parseBoolean); + return getEnvOrDefault(AUTO_DETECT_SCHEMA, true, Boolean::parseBoolean); } @Override diff --git a/airbyte-commons/src/test/java/io/airbyte/commons/auth/AuthRoleTest.java b/airbyte-commons/src/test/java/io/airbyte/commons/auth/AuthRoleTest.java new file mode 100644 index 0000000000000..0db106bcfd1f5 --- /dev/null +++ b/airbyte-commons/src/test/java/io/airbyte/commons/auth/AuthRoleTest.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.commons.auth; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.Set; +import org.junit.jupiter.api.Test; + +/** + * Test suite for the {@link AuthRole} enumeration. + */ +class AuthRoleTest { + + @Test + void testBuildingAuthRoleSet() { + final Set ownerResult = AuthRole.buildAuthRolesSet(AuthRole.OWNER); + assertEquals(5, ownerResult.size()); + assertEquals(Set.of(AuthRole.OWNER.getLabel(), AuthRole.ADMIN.getLabel(), AuthRole.EDITOR.getLabel(), AuthRole.READER.getLabel(), + AuthRole.AUTHENTICATED_USER.getLabel()), ownerResult); + + final Set adminResult = AuthRole.buildAuthRolesSet(AuthRole.ADMIN); + assertEquals(4, adminResult.size()); + assertEquals(Set.of(AuthRole.ADMIN.getLabel(), AuthRole.EDITOR.getLabel(), AuthRole.READER.getLabel(), AuthRole.AUTHENTICATED_USER.getLabel()), + adminResult); + + final Set editorResult = AuthRole.buildAuthRolesSet(AuthRole.EDITOR); + assertEquals(3, editorResult.size()); + assertEquals(Set.of(AuthRole.EDITOR.getLabel(), AuthRole.READER.getLabel(), AuthRole.AUTHENTICATED_USER.getLabel()), editorResult); + + final Set readerResult = AuthRole.buildAuthRolesSet(AuthRole.READER); + assertEquals(2, readerResult.size()); + assertEquals(Set.of(AuthRole.READER.getLabel(), AuthRole.AUTHENTICATED_USER.getLabel()), readerResult); + + final Set authenticatedUserResult = AuthRole.buildAuthRolesSet(AuthRole.AUTHENTICATED_USER); + assertEquals(1, authenticatedUserResult.size()); + assertEquals(Set.of(AuthRole.AUTHENTICATED_USER.getLabel()), authenticatedUserResult); + + final Set noneResult = AuthRole.buildAuthRolesSet(AuthRole.NONE); + assertEquals(1, noneResult.size()); + assertEquals(Set.of(AuthRole.NONE.getLabel()), noneResult); + + final Set nullResult = AuthRole.buildAuthRolesSet(null); + assertEquals(0, nullResult.size()); + } + +} diff --git a/airbyte-config/config-models/src/main/java/io/airbyte/config/EnvConfigs.java b/airbyte-config/config-models/src/main/java/io/airbyte/config/EnvConfigs.java index b68be54b055d1..c939764eab658 100644 --- a/airbyte-config/config-models/src/main/java/io/airbyte/config/EnvConfigs.java +++ b/airbyte-config/config-models/src/main/java/io/airbyte/config/EnvConfigs.java @@ -1124,7 +1124,7 @@ public int getWorkflowFailureRestartDelaySeconds() { @Override public boolean getAutoDetectSchema() { - return getEnvOrDefault(AUTO_DETECT_SCHEMA, false); + return getEnvOrDefault(AUTO_DETECT_SCHEMA, true); } @Override diff --git a/airbyte-config/config-models/src/main/resources/types/StandardSourceDefinition.yaml b/airbyte-config/config-models/src/main/resources/types/StandardSourceDefinition.yaml index 905670ac44027..3bf9517028aef 100644 --- a/airbyte-config/config-models/src/main/resources/types/StandardSourceDefinition.yaml +++ b/airbyte-config/config-models/src/main/resources/types/StandardSourceDefinition.yaml @@ -67,3 +67,5 @@ properties: description: the Airbyte Protocol version supported by the connector allowedHosts: "$ref": AllowedHosts.yaml + suggestedStreams: + "$ref": SuggestedStreams.yaml diff --git a/airbyte-config/config-models/src/main/resources/types/StandardSyncInput.yaml b/airbyte-config/config-models/src/main/resources/types/StandardSyncInput.yaml index 8e7b7398f5e6d..cbea5cf7e2937 100644 --- a/airbyte-config/config-models/src/main/resources/types/StandardSyncInput.yaml +++ b/airbyte-config/config-models/src/main/resources/types/StandardSyncInput.yaml @@ -70,3 +70,7 @@ properties: description: The id of the workspace associated with this sync type: string format: uuid + connectionId: + description: The id of the connection associated with this sync + type: string + format: uuid diff --git a/airbyte-config/config-models/src/main/resources/types/SuggestedStreams.yaml b/airbyte-config/config-models/src/main/resources/types/SuggestedStreams.yaml new file mode 100644 index 0000000000000..4d84054dba124 --- /dev/null +++ b/airbyte-config/config-models/src/main/resources/types/SuggestedStreams.yaml @@ -0,0 +1,14 @@ +--- +"$schema": http://json-schema.org/draft-07/schema# +"$id": https://github.com/airbytehq/airbyte/blob/master/airbyte-config/models/src/main/resources/types/SuggestedStreams.yaml +title: SuggestedStreams +description: A source's suggested streams. These will be suggested by default for new connections using this source. Otherwise, all streams will be selected. This is useful for when your source has a lot of streams, but the average user will only want a subset of them synced. +type: object +required: +additionalProperties: true +properties: + streams: + type: array + 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. + items: + type: string diff --git a/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/ConfigRepository.java b/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/ConfigRepository.java index 6865993a0126f..fa63c660af8a8 100644 --- a/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/ConfigRepository.java +++ b/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/ConfigRepository.java @@ -15,10 +15,12 @@ import static io.airbyte.db.instance.configs.jooq.generated.Tables.OPERATION; import static io.airbyte.db.instance.configs.jooq.generated.Tables.WORKSPACE; import static io.airbyte.db.instance.configs.jooq.generated.Tables.WORKSPACE_SERVICE_ACCOUNT; +import static io.airbyte.db.instance.jobs.jooq.generated.Tables.JOBS; import static org.jooq.impl.DSL.asterisk; import static org.jooq.impl.DSL.groupConcat; import static org.jooq.impl.DSL.noCondition; import static org.jooq.impl.DSL.select; +import static org.jooq.impl.SQLDataType.VARCHAR; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Charsets; @@ -82,6 +84,7 @@ import org.jooq.JSONB; import org.jooq.JoinType; import org.jooq.Record; +import org.jooq.Record1; import org.jooq.Record2; import org.jooq.Result; import org.jooq.SelectJoinStep; @@ -761,6 +764,25 @@ public List listWorkspaceDestinationConnection(final UUID return result.stream().map(DbConverter::buildDestinationConnection).collect(Collectors.toList()); } + /** + * List workspace IDs with most recently running jobs within a given time window (in hours). + * + * @param timeWindowInHours - integer, e.g. 24, 48, etc + * @return List - list of workspace IDs + * @throws IOException - failed to query data + */ + public List listWorkspacesByMostRecentlyRunningJobs(final int timeWindowInHours) throws IOException { + final Result> records = database.query(ctx -> ctx.selectDistinct(ACTOR.WORKSPACE_ID) + .from(ACTOR) + .join(CONNECTION) + .on(CONNECTION.SOURCE_ID.eq(ACTOR.ID)) + .join(JOBS) + .on(CONNECTION.ID.cast(VARCHAR(255)).eq(JOBS.SCOPE)) + .where(JOBS.UPDATED_AT.greaterOrEqual(OffsetDateTime.now().minusHours(timeWindowInHours))) + .fetch()); + return records.stream().map(record -> record.get(ACTOR.WORKSPACE_ID)).collect(Collectors.toList()); + } + /** * Returns all active sources using a definition * @@ -1348,19 +1370,22 @@ public Optional getMostRecentActorCatalogFetchEventForSo return records.stream().findFirst().map(DbConverter::buildActorCatalogFetchEvent); } - // todo (cgardens) - following up on why this arg is not used in this comment: - // https://github.com/airbytehq/airbyte/pull/18125/files#r1027377700 @SuppressWarnings({"unused", "SqlNoDataSourceInspection"}) public Map getMostRecentActorCatalogFetchEventForSources(final List sourceIds) throws IOException { // noinspection SqlResolve + if (sourceIds.isEmpty()) { + return Collections.emptyMap(); + } return database.query(ctx -> ctx.fetch( """ - select actor_catalog_id, actor_id, created_at from - (select actor_catalog_id, actor_id, created_at, rank() over (partition by actor_id order by created_at desc) as creation_order_rank + select distinct actor_catalog_id, actor_id, created_at from + (select actor_catalog_id, actor_id, created_at, row_number() over (partition by actor_id order by created_at desc) as creation_order_row_number from public.actor_catalog_fetch_event + where actor_id in ({0}) ) table_with_rank - where creation_order_rank = 1; - """)) + where creation_order_row_number = 1; + """, + DSL.list(sourceIds.stream().map(DSL::value).collect(Collectors.toList())))) .stream().map(DbConverter::buildActorCatalogFetchEvent) .collect(Collectors.toMap(ActorCatalogFetchEvent::getActorId, record -> record)); } diff --git a/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/ConfigWriter.java b/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/ConfigWriter.java index 662ad2562bccf..a1e95fe5e56b7 100644 --- a/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/ConfigWriter.java +++ b/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/ConfigWriter.java @@ -107,6 +107,8 @@ static void writeStandardSourceDefinition(final List c : JSONB.valueOf(Jsons.serialize(standardSourceDefinition.getResourceRequirements()))) .set(Tables.ACTOR_DEFINITION.ALLOWED_HOSTS, standardSourceDefinition.getAllowedHosts() == null ? null : JSONB.valueOf(Jsons.serialize(standardSourceDefinition.getAllowedHosts()))) + .set(ACTOR_DEFINITION.SUGGESTED_STREAMS, standardSourceDefinition.getSuggestedStreams() == null ? null + : JSONB.valueOf(Jsons.serialize(standardSourceDefinition.getSuggestedStreams()))) .set(Tables.ACTOR_DEFINITION.UPDATED_AT, timestamp) .where(Tables.ACTOR_DEFINITION.ID.eq(standardSourceDefinition.getSourceDefinitionId())) .execute(); @@ -140,6 +142,8 @@ static void writeStandardSourceDefinition(final List c : JSONB.valueOf(Jsons.serialize(standardSourceDefinition.getResourceRequirements()))) .set(ACTOR_DEFINITION.ALLOWED_HOSTS, standardSourceDefinition.getAllowedHosts() == null ? null : JSONB.valueOf(Jsons.serialize(standardSourceDefinition.getAllowedHosts()))) + .set(ACTOR_DEFINITION.SUGGESTED_STREAMS, standardSourceDefinition.getSuggestedStreams() == null ? null + : JSONB.valueOf(Jsons.serialize(standardSourceDefinition.getSuggestedStreams()))) .set(Tables.ACTOR_DEFINITION.CREATED_AT, timestamp) .set(Tables.ACTOR_DEFINITION.UPDATED_AT, timestamp) .execute(); diff --git a/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/DbConverter.java b/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/DbConverter.java index 41f1822bbd457..2e4ee20c3ca8d 100644 --- a/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/DbConverter.java +++ b/airbyte-config/config-persistence/src/main/java/io/airbyte/config/persistence/DbConverter.java @@ -19,6 +19,7 @@ import io.airbyte.config.ActorCatalogFetchEvent; import io.airbyte.config.ActorCatalogWithUpdatedAt; import io.airbyte.config.ActorDefinitionResourceRequirements; +import io.airbyte.config.AllowedHosts; import io.airbyte.config.DestinationConnection; import io.airbyte.config.DestinationOAuthParameter; import io.airbyte.config.FieldSelectionData; @@ -39,6 +40,7 @@ import io.airbyte.config.StandardSync.ScheduleType; import io.airbyte.config.StandardSync.Status; import io.airbyte.config.StandardWorkspace; +import io.airbyte.config.SuggestedStreams; import io.airbyte.config.WorkspaceServiceAccount; import io.airbyte.protocol.models.ConfiguredAirbyteCatalog; import io.airbyte.protocol.models.ConnectorSpecification; @@ -160,7 +162,13 @@ public static StandardSourceDefinition buildStandardSourceDefinition(final Recor : record.get(ACTOR_DEFINITION.RELEASE_DATE).toString()) .withResourceRequirements(record.get(ACTOR_DEFINITION.RESOURCE_REQUIREMENTS) == null ? null - : Jsons.deserialize(record.get(ACTOR_DEFINITION.RESOURCE_REQUIREMENTS).data(), ActorDefinitionResourceRequirements.class)); + : Jsons.deserialize(record.get(ACTOR_DEFINITION.RESOURCE_REQUIREMENTS).data(), ActorDefinitionResourceRequirements.class)) + .withAllowedHosts(record.get(ACTOR_DEFINITION.ALLOWED_HOSTS) == null + ? null + : Jsons.deserialize(record.get(ACTOR_DEFINITION.ALLOWED_HOSTS).data(), AllowedHosts.class)) + .withSuggestedStreams(record.get(ACTOR_DEFINITION.SUGGESTED_STREAMS) == null + ? null + : Jsons.deserialize(record.get(ACTOR_DEFINITION.SUGGESTED_STREAMS).data(), SuggestedStreams.class)); } public static StandardDestinationDefinition buildStandardDestinationDefinition(final Record record) { @@ -193,7 +201,10 @@ public static StandardDestinationDefinition buildStandardDestinationDefinition(f : null) .withResourceRequirements(record.get(ACTOR_DEFINITION.RESOURCE_REQUIREMENTS) == null ? null - : Jsons.deserialize(record.get(ACTOR_DEFINITION.RESOURCE_REQUIREMENTS).data(), ActorDefinitionResourceRequirements.class)); + : Jsons.deserialize(record.get(ACTOR_DEFINITION.RESOURCE_REQUIREMENTS).data(), ActorDefinitionResourceRequirements.class)) + .withAllowedHosts(record.get(ACTOR_DEFINITION.ALLOWED_HOSTS) == null + ? null + : Jsons.deserialize(record.get(ACTOR_DEFINITION.ALLOWED_HOSTS).data(), AllowedHosts.class)); } public static DestinationOAuthParameter buildDestinationOAuthParameter(final Record record) { diff --git a/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/BaseConfigDatabaseTest.java b/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/BaseConfigDatabaseTest.java index 3f8a221fc7db6..10ba2848a7e7a 100644 --- a/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/BaseConfigDatabaseTest.java +++ b/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/BaseConfigDatabaseTest.java @@ -11,6 +11,7 @@ import io.airbyte.db.init.DatabaseInitializationException; import io.airbyte.db.instance.configs.ConfigsDatabaseMigrator; import io.airbyte.db.instance.configs.ConfigsDatabaseTestProvider; +import io.airbyte.db.instance.test.TestDatabaseProviders; import io.airbyte.test.utils.DatabaseConnectionHelper; import java.io.IOException; import java.sql.SQLException; @@ -132,10 +133,12 @@ private static void createDbContainer() { container.start(); } - private static void setDb() { + private static void setDb() throws DatabaseInitializationException, IOException { dataSource = DatabaseConnectionHelper.createDataSource(container); dslContext = DSLContextFactory.create(dataSource, SQLDialect.POSTGRES); - database = new Database(dslContext); + final TestDatabaseProviders databaseProviders = new TestDatabaseProviders(dataSource, dslContext); + database = databaseProviders.createNewConfigsDatabase(); + databaseProviders.createNewJobsDatabase(); } private static void migrateDb() throws IOException, DatabaseInitializationException { diff --git a/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/ConfigRepositoryE2EReadWriteTest.java b/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/ConfigRepositoryE2EReadWriteTest.java index d7cbf6f56c456..ba3d6be057e8b 100644 --- a/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/ConfigRepositoryE2EReadWriteTest.java +++ b/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/ConfigRepositoryE2EReadWriteTest.java @@ -564,6 +564,13 @@ void testGetMostRecentActorCatalogFetchEventForSource() throws SQLException, IOE fetchEvent2.getActorId(), fetchEvent2.getActorCatalogId(), now); + // Insert a second identical copy to verify that the query can handle duplicates since the records + // are not guaranteed to be unique. + insertCatalogFetchEvent( + ctx, + fetchEvent2.getActorId(), + fetchEvent2.getActorCatalogId(), + now); return null; }); @@ -590,6 +597,40 @@ void testGetMostRecentActorCatalogFetchEventForSources() throws SQLException, IO return null; }); + final Map result = + configRepository.getMostRecentActorCatalogFetchEventForSources(List.of(MockData.SOURCE_ID_1, + MockData.SOURCE_ID_2)); + + assertEquals(MockData.ACTOR_CATALOG_ID_1, result.get(MockData.SOURCE_ID_1).getActorCatalogId()); + assertEquals(MockData.ACTOR_CATALOG_ID_3, result.get(MockData.SOURCE_ID_2).getActorCatalogId()); + assertEquals(0, configRepository.getMostRecentActorCatalogFetchEventForSources(Collections.emptyList()).size()); + } + + @Test + void testGetMostRecentActorCatalogFetchEventWithDuplicates() throws SQLException, IOException { + // Tests that we can handle two fetch events in the db with the same actor id, actor catalog id, and + // timestamp e.g., from duplicate discoveries. + for (final ActorCatalog actorCatalog : MockData.actorCatalogs()) { + writeActorCatalog(database, Collections.singletonList(actorCatalog)); + } + + database.transaction(ctx -> { + // Insert the fetch events twice. + MockData.actorCatalogFetchEventsForAggregationTest().forEach(actorCatalogFetchEvent -> { + insertCatalogFetchEvent( + ctx, + actorCatalogFetchEvent.getActorCatalogFetchEvent().getActorId(), + actorCatalogFetchEvent.getActorCatalogFetchEvent().getActorCatalogId(), + actorCatalogFetchEvent.getCreatedAt()); + insertCatalogFetchEvent( + ctx, + actorCatalogFetchEvent.getActorCatalogFetchEvent().getActorId(), + actorCatalogFetchEvent.getActorCatalogFetchEvent().getActorCatalogId(), + actorCatalogFetchEvent.getCreatedAt()); + }); + return null; + }); + final Map result = configRepository.getMostRecentActorCatalogFetchEventForSources(List.of(MockData.SOURCE_ID_1, MockData.SOURCE_ID_2)); diff --git a/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/MockData.java b/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/MockData.java index a6117a08af06e..80d2be2d1a4a4 100644 --- a/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/MockData.java +++ b/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/MockData.java @@ -140,6 +140,8 @@ public class MockData { private static final UUID WEBHOOK_CONFIG_ID = UUID.randomUUID(); private static final String WEBHOOK_OPERATION_EXECUTION_URL = "test-webhook-url"; private static final String WEBHOOK_OPERATION_EXECUTION_BODY = "test-webhook-body"; + public static final String CONFIG_HASH = "1394"; + public static final String CONNECTOR_VERSION = "1.2.0"; public static List standardWorkspaces() { final Notification notification = new Notification() @@ -656,8 +658,8 @@ public static List actorCatalogFetchEventsSameSource() { .withId(ACTOR_CATALOG_FETCH_EVENT_ID_2) .withActorCatalogId(ACTOR_CATALOG_ID_2) .withActorId(SOURCE_ID_1) - .withConfigHash("1394") - .withConnectorVersion("1.2.0"); + .withConfigHash(CONFIG_HASH) + .withConnectorVersion(CONNECTOR_VERSION); return Arrays.asList(actorCatalogFetchEvent1, actorCatalogFetchEvent2); } @@ -683,18 +685,25 @@ public static List actorCatalogFetchEven .withId(ACTOR_CATALOG_FETCH_EVENT_ID_2) .withActorCatalogId(ACTOR_CATALOG_ID_2) .withActorId(SOURCE_ID_2) - .withConfigHash("1394") - .withConnectorVersion("1.2.0"); + .withConfigHash(CONFIG_HASH) + .withConnectorVersion(CONNECTOR_VERSION); final ActorCatalogFetchEvent actorCatalogFetchEvent3 = new ActorCatalogFetchEvent() .withId(ACTOR_CATALOG_FETCH_EVENT_ID_3) .withActorCatalogId(ACTOR_CATALOG_ID_3) .withActorId(SOURCE_ID_2) - .withConfigHash("1394") - .withConnectorVersion("1.2.0"); + .withConfigHash(CONFIG_HASH) + .withConnectorVersion(CONNECTOR_VERSION); + final ActorCatalogFetchEvent actorCatalogFetchEvent4 = new ActorCatalogFetchEvent() + .withId(ACTOR_CATALOG_FETCH_EVENT_ID_3) + .withActorCatalogId(ACTOR_CATALOG_ID_3) + .withActorId(SOURCE_ID_3) + .withConfigHash(CONFIG_HASH) + .withConnectorVersion(CONNECTOR_VERSION); return Arrays.asList( new ActorCatalogFetchEventWithCreationDate(actorCatalogFetchEvent1, now), new ActorCatalogFetchEventWithCreationDate(actorCatalogFetchEvent2, yesterday), - new ActorCatalogFetchEventWithCreationDate(actorCatalogFetchEvent3, now)); + new ActorCatalogFetchEventWithCreationDate(actorCatalogFetchEvent3, now), + new ActorCatalogFetchEventWithCreationDate(actorCatalogFetchEvent4, now)); } public static List workspaceServiceAccounts() { diff --git a/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/WorkspaceFilterTest.java b/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/WorkspaceFilterTest.java new file mode 100644 index 0000000000000..70429a25688bf --- /dev/null +++ b/airbyte-config/config-persistence/src/test/java/io/airbyte/config/persistence/WorkspaceFilterTest.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.config.persistence; + +import static io.airbyte.db.instance.configs.jooq.generated.Tables.ACTOR; +import static io.airbyte.db.instance.configs.jooq.generated.Tables.ACTOR_DEFINITION; +import static io.airbyte.db.instance.configs.jooq.generated.Tables.CONNECTION; +import static io.airbyte.db.instance.configs.jooq.generated.Tables.WORKSPACE; +import static io.airbyte.db.instance.jobs.jooq.generated.Tables.JOBS; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import io.airbyte.db.ExceptionWrappingDatabase; +import io.airbyte.db.instance.configs.jooq.generated.enums.ActorType; +import io.airbyte.db.instance.configs.jooq.generated.enums.NamespaceDefinitionType; +import io.airbyte.db.instance.configs.jooq.generated.enums.ReleaseStage; +import java.io.IOException; +import java.sql.SQLException; +import java.time.OffsetDateTime; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import org.jooq.JSONB; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; + +class WorkspaceFilterTest extends BaseConfigDatabaseTest { + + private static final UUID SRC_DEF_ID = UUID.randomUUID(); + private static final UUID DST_DEF_ID = UUID.randomUUID(); + private static final UUID ACTOR_ID_0 = UUID.randomUUID(); + private static final UUID ACTOR_ID_1 = UUID.randomUUID(); + private static final UUID ACTOR_ID_2 = UUID.randomUUID(); + private static final UUID ACTOR_ID_3 = UUID.randomUUID(); + private static final UUID CONN_ID_0 = UUID.randomUUID(); + private static final UUID CONN_ID_1 = UUID.randomUUID(); + private static final UUID CONN_ID_2 = UUID.randomUUID(); + private static final UUID CONN_ID_3 = UUID.randomUUID(); + private static final UUID CONN_ID_4 = UUID.randomUUID(); + private static final UUID CONN_ID_5 = UUID.randomUUID(); + private static final UUID WORKSPACE_ID_0 = UUID.randomUUID(); + private static final UUID WORKSPACE_ID_1 = UUID.randomUUID(); + private static final UUID WORKSPACE_ID_2 = UUID.randomUUID(); + private static final UUID WORKSPACE_ID_3 = UUID.randomUUID(); + private ConfigRepository configRepository; + + @BeforeAll + static void setUpAll() throws SQLException { + // create actor_definition + database.transaction(ctx -> ctx.insertInto(ACTOR_DEFINITION, ACTOR_DEFINITION.ID, ACTOR_DEFINITION.NAME, ACTOR_DEFINITION.DOCKER_REPOSITORY, + ACTOR_DEFINITION.DOCKER_IMAGE_TAG, ACTOR_DEFINITION.SPEC, ACTOR_DEFINITION.ACTOR_TYPE, ACTOR_DEFINITION.RELEASE_STAGE) + .values(SRC_DEF_ID, "srcDef", "repository", "tag", JSONB.valueOf("{}"), ActorType.source, ReleaseStage.beta) + .values(DST_DEF_ID, "dstDef", "repository", "tag", JSONB.valueOf("{}"), ActorType.destination, ReleaseStage.generally_available) + .values(UUID.randomUUID(), "dstDef", "repository", "tag", JSONB.valueOf("{}"), ActorType.destination, ReleaseStage.alpha) + .execute()); + + // create workspace + database.transaction(ctx -> ctx.insertInto(WORKSPACE, WORKSPACE.ID, WORKSPACE.NAME, WORKSPACE.SLUG, WORKSPACE.INITIAL_SETUP_COMPLETE) + .values(WORKSPACE_ID_0, "ws-0", "ws-0", true) + .values(WORKSPACE_ID_1, "ws-1", "ws-1", true) + .values(WORKSPACE_ID_2, "ws-2", "ws-2", true) + .values(WORKSPACE_ID_3, "ws-3", "ws-3", true) + .execute()); + // create actors + database.transaction( + ctx -> ctx.insertInto(ACTOR, ACTOR.WORKSPACE_ID, ACTOR.ID, ACTOR.ACTOR_DEFINITION_ID, ACTOR.NAME, ACTOR.CONFIGURATION, ACTOR.ACTOR_TYPE) + .values(WORKSPACE_ID_0, ACTOR_ID_0, SRC_DEF_ID, "ACTOR-0", JSONB.valueOf("{}"), ActorType.source) + .values(WORKSPACE_ID_1, ACTOR_ID_1, SRC_DEF_ID, "ACTOR-1", JSONB.valueOf("{}"), ActorType.source) + .values(WORKSPACE_ID_2, ACTOR_ID_2, DST_DEF_ID, "ACTOR-2", JSONB.valueOf("{}"), ActorType.source) + .values(WORKSPACE_ID_3, ACTOR_ID_3, DST_DEF_ID, "ACTOR-3", JSONB.valueOf("{}"), ActorType.source) + .execute()); + // create connections + database.transaction( + ctx -> ctx.insertInto(CONNECTION, CONNECTION.SOURCE_ID, CONNECTION.DESTINATION_ID, CONNECTION.ID, CONNECTION.NAMESPACE_DEFINITION, + CONNECTION.NAME, CONNECTION.CATALOG, CONNECTION.MANUAL) + .values(ACTOR_ID_0, ACTOR_ID_1, CONN_ID_0, NamespaceDefinitionType.source, "CONN-0", JSONB.valueOf("{}"), true) + .values(ACTOR_ID_0, ACTOR_ID_2, CONN_ID_1, NamespaceDefinitionType.source, "CONN-1", JSONB.valueOf("{}"), true) + .values(ACTOR_ID_1, ACTOR_ID_2, CONN_ID_2, NamespaceDefinitionType.source, "CONN-2", JSONB.valueOf("{}"), true) + .values(ACTOR_ID_1, ACTOR_ID_2, CONN_ID_3, NamespaceDefinitionType.source, "CONN-3", JSONB.valueOf("{}"), true) + .values(ACTOR_ID_2, ACTOR_ID_3, CONN_ID_4, NamespaceDefinitionType.source, "CONN-4", JSONB.valueOf("{}"), true) + .values(ACTOR_ID_3, ACTOR_ID_1, CONN_ID_5, NamespaceDefinitionType.source, "CONN-5", JSONB.valueOf("{}"), true) + .execute()); + // create jobs + final OffsetDateTime currentTs = OffsetDateTime.now(); + database.transaction(ctx -> ctx.insertInto(JOBS, JOBS.ID, JOBS.UPDATED_AT, JOBS.SCOPE) + .values(0L, currentTs.minusHours(0), CONN_ID_0.toString()) + .values(1L, currentTs.minusHours(5), CONN_ID_0.toString()) + .values(2L, currentTs.minusHours(10), CONN_ID_1.toString()) + .values(3L, currentTs.minusHours(15), CONN_ID_1.toString()) + .values(4L, currentTs.minusHours(20), CONN_ID_2.toString()) + .values(5L, currentTs.minusHours(30), CONN_ID_3.toString()) + .values(6L, currentTs.minusHours(40), CONN_ID_4.toString()) + .values(7L, currentTs.minusHours(50), CONN_ID_4.toString()) + .values(8L, currentTs.minusHours(70), CONN_ID_5.toString()) + .execute()); + } + + @BeforeEach + void beforeEach() { + configRepository = new ConfigRepository(database, new ActorDefinitionMigrator(new ExceptionWrappingDatabase(database)), null); + } + + @Test + @DisplayName("Should return a list of workspace IDs with most recently running jobs") + void testListWorkspacesByMostRecentlyRunningJobs() throws IOException { + final int timeWindowInHours = 48; + /* + * Following function is to filter workspace (IDs) with most recently running jobs within a given + * time window. Step 1: Filter on table JOBS where job's UPDATED_AT timestamp is within the given + * time window. Step 2: Trace back via CONNECTION table and ACTOR table. Step 3: Return workspace + * IDs from ACTOR table. + */ + final List actualResult = configRepository.listWorkspacesByMostRecentlyRunningJobs(timeWindowInHours); + /* + * With the test data provided above, expected outputs for each step: Step 1: `jobs` (IDs) OL, 1L, + * 2L, 3L, 4L, 5L and 6L. Step 2: `connections` (IDs) CONN_ID_0, CONN_ID_1, CONN_ID_2, CONN_ID_3, + * and CONN_ID_4 `actors` (IDs) ACTOR_ID_0, ACTOR_ID_1, and ACTOR_ID_2. Step 3: `workspaces` (IDs) + * WORKSPACE_ID_0, WORKSPACE_ID_1 and WORKSPACE_ID_2. + */ + final List expectedResult = new ArrayList<>(); + expectedResult.add(WORKSPACE_ID_0); + expectedResult.add(WORKSPACE_ID_1); + expectedResult.add(WORKSPACE_ID_2); + assertTrue(expectedResult.size() == actualResult.size() && expectedResult.containsAll(actualResult) && actualResult.containsAll(expectedResult)); + } + +} diff --git a/airbyte-config/init/src/main/resources/seed/destination_definitions.yaml b/airbyte-config/init/src/main/resources/seed/destination_definitions.yaml index 39285b789ebe5..002404443f58d 100644 --- a/airbyte-config/init/src/main/resources/seed/destination_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/destination_definitions.yaml @@ -40,7 +40,7 @@ - name: BigQuery destinationDefinitionId: 22f6c74f-5699-40ff-833c-4a879ea40133 dockerRepository: airbyte/destination-bigquery - dockerImageTag: 1.2.11 + dockerImageTag: 1.2.13 documentationUrl: https://docs.airbyte.com/integrations/destinations/bigquery icon: bigquery.svg normalizationConfig: @@ -139,7 +139,7 @@ - name: Google Cloud Storage (GCS) destinationDefinitionId: ca8f6566-e555-4b40-943a-545bf123117a dockerRepository: airbyte/destination-gcs - dockerImageTag: 0.2.12 + dockerImageTag: 0.2.14 documentationUrl: https://docs.airbyte.com/integrations/destinations/gcs icon: googlecloudstorage.svg resourceRequirements: @@ -290,7 +290,7 @@ - name: Redshift destinationDefinitionId: f7a7d195-377f-cf5b-70a5-be6b819019dc dockerRepository: airbyte/destination-redshift - dockerImageTag: 0.3.53 + dockerImageTag: 0.3.56 documentationUrl: https://docs.airbyte.com/integrations/destinations/redshift icon: redshift.svg normalizationConfig: @@ -321,7 +321,7 @@ - name: S3 destinationDefinitionId: 4816b78f-1489-44c1-9060-4b19d5fa9362 dockerRepository: airbyte/destination-s3 - dockerImageTag: 0.3.18 + dockerImageTag: 0.3.19 documentationUrl: https://docs.airbyte.com/integrations/destinations/s3 icon: s3.svg resourceRequirements: @@ -348,7 +348,7 @@ - name: Snowflake destinationDefinitionId: 424892c4-daac-4491-b35d-c6688ba547ba dockerRepository: airbyte/destination-snowflake - dockerImageTag: 0.4.42 + dockerImageTag: 0.4.47 documentationUrl: https://docs.airbyte.com/integrations/destinations/snowflake icon: snowflake.svg normalizationConfig: diff --git a/airbyte-config/init/src/main/resources/seed/destination_specs.yaml b/airbyte-config/init/src/main/resources/seed/destination_specs.yaml index 859ec2b6d8abe..94ddbba34d970 100644 --- a/airbyte-config/init/src/main/resources/seed/destination_specs.yaml +++ b/airbyte-config/init/src/main/resources/seed/destination_specs.yaml @@ -621,7 +621,7 @@ supported_destination_sync_modes: - "overwrite" - "append" -- dockerImage: "airbyte/destination-bigquery:1.2.11" +- dockerImage: "airbyte/destination-bigquery:1.2.13" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/bigquery" connectionSpecification: @@ -2325,7 +2325,7 @@ supported_destination_sync_modes: - "overwrite" - "append" -- dockerImage: "airbyte/destination-gcs:0.2.12" +- dockerImage: "airbyte/destination-gcs:0.2.14" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/gcs" connectionSpecification: @@ -5123,7 +5123,7 @@ supported_destination_sync_modes: - "overwrite" - "append" -- dockerImage: "airbyte/destination-redshift:0.3.53" +- dockerImage: "airbyte/destination-redshift:0.3.56" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/redshift" connectionSpecification: @@ -5337,19 +5337,19 @@ \ or 256 bits. Leave blank to have Airbyte generate an ephemeral\ \ key for each sync." airbyte_secret: true - file_buffer_size: + file_buffer_count: title: "File Buffer Count" type: "integer" - minimum: 15 + minimum: 10 maximum: 50 - default: 15 + 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: - - "15" + - "10" supportsIncremental: true supportsNormalization: true supportsDBT: true @@ -5492,7 +5492,7 @@ supported_destination_sync_modes: - "append" - "overwrite" -- dockerImage: "airbyte/destination-s3:0.3.18" +- dockerImage: "airbyte/destination-s3:0.3.19" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/s3" connectionSpecification: @@ -6109,7 +6109,7 @@ supported_destination_sync_modes: - "overwrite" - "append" -- dockerImage: "airbyte/destination-snowflake:0.4.42" +- dockerImage: "airbyte/destination-snowflake:0.4.47" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/snowflake" connectionSpecification: diff --git a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml index e7dfad1c3c127..b17d9da888ece 100644 --- a/airbyte-config/init/src/main/resources/seed/source_definitions.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_definitions.yaml @@ -17,7 +17,7 @@ - name: Airtable sourceDefinitionId: 14c6e7ea-97ed-4f5e-a7b5-25e9a80b8212 dockerRepository: airbyte/source-airtable - dockerImageTag: 1.0.1 + dockerImageTag: 2.0.0 documentationUrl: https://docs.airbyte.com/integrations/sources/airtable icon: airtable.svg sourceType: api @@ -41,7 +41,7 @@ - name: AlloyDB for PostgreSQL sourceDefinitionId: 1fa90628-2b9e-11ed-a261-0242ac120002 dockerRepository: airbyte/source-alloydb - dockerImageTag: 1.0.35 + dockerImageTag: 1.0.36 documentationUrl: https://docs.airbyte.com/integrations/sources/alloydb icon: alloydb.svg sourceType: database @@ -57,7 +57,7 @@ - name: Amazon Ads sourceDefinitionId: c6b0a29e-1da9-4512-9002-7bfd0cba2246 dockerRepository: airbyte/source-amazon-ads - dockerImageTag: 0.1.27 + dockerImageTag: 0.1.28 documentationUrl: https://docs.airbyte.com/integrations/sources/amazon-ads icon: amazonads.svg sourceType: api @@ -65,7 +65,7 @@ - name: Amazon Seller Partner sourceDefinitionId: e55879a8-0ef8-4557-abcf-ab34c53ec460 dockerRepository: airbyte/source-amazon-seller-partner - dockerImageTag: 0.2.30 + dockerImageTag: 0.2.31 sourceType: api documentationUrl: https://docs.airbyte.com/integrations/sources/amazon-seller-partner icon: amazonsellerpartner.svg @@ -81,7 +81,7 @@ - name: Amplitude sourceDefinitionId: fa9f58c6-2d03-4237-aaa4-07d75e0c1396 dockerRepository: airbyte/source-amplitude - dockerImageTag: 0.1.19 + dockerImageTag: 0.1.20 documentationUrl: https://docs.airbyte.com/integrations/sources/amplitude icon: amplitude.svg sourceType: api @@ -488,7 +488,7 @@ - name: Facebook Marketing sourceDefinitionId: e7778cfc-e97c-4458-9ecb-b4f2bba8946c dockerRepository: airbyte/source-facebook-marketing - dockerImageTag: 0.2.83 + dockerImageTag: 0.2.84 documentationUrl: https://docs.airbyte.com/integrations/sources/facebook-marketing icon: facebook.svg sourceType: api @@ -511,6 +511,11 @@ releaseStage: alpha allowedHosts: hosts: [] + suggestedStreams: + streams: + - users + - products + - purchases - name: Fastbill sourceDefinitionId: eb3e9c1c-0467-4eb7-a172-5265e04ccd0a dockerRepository: airbyte/source-fastbill @@ -551,7 +556,7 @@ - name: Freshdesk sourceDefinitionId: ec4b9503-13cb-48ab-a4ab-6ade4be46567 dockerRepository: airbyte/source-freshdesk - dockerImageTag: 2.0.0 + dockerImageTag: 2.0.1 documentationUrl: https://docs.airbyte.com/integrations/sources/freshdesk icon: freshdesk.svg sourceType: api @@ -597,15 +602,30 @@ - name: GitHub sourceDefinitionId: ef69ef6e-aa7f-4af1-a01d-ef775033524e dockerRepository: airbyte/source-github - dockerImageTag: 0.3.11 + dockerImageTag: 0.4.1 documentationUrl: https://docs.airbyte.com/integrations/sources/github icon: github.svg sourceType: api releaseStage: generally_available + suggestedStreams: + streams: + - branches + - comments + - issues + - organizations + - pull_requests + - repositories + - stargazers + - tags + - teams + - users + allowedHosts: + hosts: + - api.github.com - name: Gitlab sourceDefinitionId: 5e6175e5-68e1-4c17-bff9-56103bbb0d80 dockerRepository: airbyte/source-gitlab - dockerImageTag: 1.0.0 + dockerImageTag: 1.0.2 documentationUrl: https://docs.airbyte.com/integrations/sources/gitlab icon: gitlab.svg sourceType: api @@ -645,7 +665,7 @@ - name: Google Ads sourceDefinitionId: 253487c0-2246-43ba-a21f-5116b20a2c50 dockerRepository: airbyte/source-google-ads - dockerImageTag: 0.2.7 + dockerImageTag: 0.2.9 documentationUrl: https://docs.airbyte.com/integrations/sources/google-ads icon: google-adwords.svg sourceType: api @@ -685,7 +705,7 @@ - name: Google Search Console sourceDefinitionId: eb4c9e00-db83-4d63-a386-39cfa91012a8 dockerRepository: airbyte/source-google-search-console - dockerImageTag: 0.1.18 + dockerImageTag: 0.1.19 documentationUrl: https://docs.airbyte.com/integrations/sources/google-search-console icon: googlesearchconsole.svg sourceType: api @@ -740,7 +760,7 @@ - name: Harvest sourceDefinitionId: fe2b4084-3386-4d3b-9ad6-308f61a6f1e6 dockerRepository: airbyte/source-harvest - dockerImageTag: 0.1.14 + dockerImageTag: 0.1.15 documentationUrl: https://docs.airbyte.com/integrations/sources/harvest icon: harvest.svg sourceType: api @@ -764,7 +784,7 @@ - name: HubSpot sourceDefinitionId: 36c891d9-4bd9-43ac-bad2-10e12756272c dockerRepository: airbyte/source-hubspot - dockerImageTag: 0.3.0 + dockerImageTag: 0.3.1 documentationUrl: https://docs.airbyte.com/integrations/sources/hubspot icon: hubspot.svg sourceType: api @@ -796,7 +816,7 @@ - name: Instagram sourceDefinitionId: 6acf6b55-4f1e-4fca-944e-1a3caef8aba8 dockerRepository: airbyte/source-instagram - dockerImageTag: 1.0.0 + dockerImageTag: 1.0.1 documentationUrl: https://docs.airbyte.com/integrations/sources/instagram icon: instagram.svg sourceType: api @@ -812,7 +832,7 @@ - name: Intercom sourceDefinitionId: d8313939-3782-41b0-be29-b3ca20d8dd3a dockerRepository: airbyte/source-intercom - dockerImageTag: 0.1.29 + dockerImageTag: 0.1.30 documentationUrl: https://docs.airbyte.com/integrations/sources/intercom icon: intercom.svg sourceType: api @@ -876,7 +896,7 @@ - name: Klaviyo sourceDefinitionId: 95e8cffd-b8c4-4039-968e-d32fb4a69bde dockerRepository: airbyte/source-klaviyo - dockerImageTag: 0.1.10 + dockerImageTag: 0.1.11 documentationUrl: https://docs.airbyte.com/integrations/sources/klaviyo icon: klaviyo.svg sourceType: api @@ -915,7 +935,7 @@ - name: LinkedIn Ads sourceDefinitionId: 137ece28-5434-455c-8f34-69dc3782f451 dockerRepository: airbyte/source-linkedin-ads - dockerImageTag: 0.1.12 + dockerImageTag: 0.1.13 documentationUrl: https://docs.airbyte.com/integrations/sources/linkedin-ads icon: linkedin.svg sourceType: api @@ -955,7 +975,7 @@ - name: Mailchimp sourceDefinitionId: b03a9f3e-22a5-11eb-adc1-0242ac120002 dockerRepository: airbyte/source-mailchimp - dockerImageTag: 0.3.1 + dockerImageTag: 0.3.2 documentationUrl: https://docs.airbyte.com/integrations/sources/mailchimp icon: mailchimp.svg sourceType: api @@ -1019,7 +1039,7 @@ - name: Microsoft SQL Server (MSSQL) sourceDefinitionId: b5ea17b1-f170-46dc-bc31-cc744ca984c1 dockerRepository: airbyte/source-mssql - dockerImageTag: 0.4.27 + dockerImageTag: 0.4.28 documentationUrl: https://docs.airbyte.com/integrations/sources/mssql icon: mssql.svg sourceType: database @@ -1043,7 +1063,7 @@ - name: Mixpanel sourceDefinitionId: 12928b32-bf0a-4f1e-964f-07e12e37153a dockerRepository: airbyte/source-mixpanel - dockerImageTag: 0.1.29 + dockerImageTag: 0.1.30 documentationUrl: https://docs.airbyte.com/integrations/sources/mixpanel icon: mixpanel.svg sourceType: api @@ -1075,7 +1095,7 @@ - name: MySQL sourceDefinitionId: 435bb9a5-7887-4809-aa58-28c27df0d7ad dockerRepository: airbyte/source-mysql - dockerImageTag: 1.0.19 + dockerImageTag: 1.0.21 documentationUrl: https://docs.airbyte.com/integrations/sources/mysql icon: mysql.svg sourceType: database @@ -1099,7 +1119,7 @@ - name: Netsuite sourceDefinitionId: 4f2f093d-ce44-4121-8118-9d13b7bfccd0 dockerRepository: airbyte/source-netsuite - dockerImageTag: 0.1.2 + dockerImageTag: 0.1.3 documentationUrl: https://docs.airbyte.com/integrations/sources/netsuite icon: netsuite.svg sourceType: api @@ -1122,7 +1142,7 @@ - name: Notion sourceDefinitionId: 6e00b415-b02e-4160-bf02-58176a0ae687 dockerRepository: airbyte/source-notion - dockerImageTag: 1.0.0 + dockerImageTag: 1.0.1 documentationUrl: https://docs.airbyte.com/integrations/sources/notion icon: notion.svg sourceType: api @@ -1234,7 +1254,7 @@ - name: Paypal Transaction sourceDefinitionId: d913b0f2-cc51-4e55-a44c-8ba1697b9239 dockerRepository: airbyte/source-paypal-transaction - dockerImageTag: 0.1.10 + dockerImageTag: 0.1.11 documentationUrl: https://docs.airbyte.com/integrations/sources/paypal-transaction icon: paypal.svg sourceType: api @@ -1266,7 +1286,7 @@ - name: Pinterest sourceDefinitionId: 5cb7e5fe-38c2-11ec-8d3d-0242ac130003 dockerRepository: airbyte/source-pinterest - dockerImageTag: 0.2.1 + dockerImageTag: 0.2.2 documentationUrl: https://docs.airbyte.com/integrations/sources/pinterest icon: pinterest.svg sourceType: api @@ -1338,11 +1358,15 @@ - name: Postgres sourceDefinitionId: decd338e-5647-4c0b-adf4-da0e75f5a750 dockerRepository: airbyte/source-postgres - dockerImageTag: 1.0.38 + dockerImageTag: 1.0.42 documentationUrl: https://docs.airbyte.com/integrations/sources/postgres icon: postgresql.svg sourceType: database releaseStage: generally_available + allowedHosts: + hosts: + - "${host}" + - "${tunnel_method.tunnel_host}" - name: Postmark App sourceDefinitionId: cde75ca1-1e28-4a0f-85bb-90c546de9f1f dockerRepository: airbyte/source-postmarkapp @@ -1418,7 +1442,7 @@ - name: Recharge sourceDefinitionId: 45d2e135-2ede-49e1-939f-3e3ec357a65e dockerRepository: airbyte/source-recharge - dockerImageTag: 0.2.4 + dockerImageTag: 0.2.5 documentationUrl: https://docs.airbyte.com/integrations/sources/recharge icon: recharge.svg sourceType: api @@ -1504,7 +1528,7 @@ - name: S3 sourceDefinitionId: 69589781-7828-43c5-9f63-8925b1c1ccc2 dockerRepository: airbyte/source-s3 - dockerImageTag: 0.1.28 + dockerImageTag: 0.1.30 documentationUrl: https://docs.airbyte.com/integrations/sources/s3 icon: s3.svg sourceType: file @@ -1520,7 +1544,7 @@ - name: Salesforce sourceDefinitionId: b117307c-14b6-41aa-9422-947e34922962 dockerRepository: airbyte/source-salesforce - dockerImageTag: 1.0.29 + dockerImageTag: 1.0.30 documentationUrl: https://docs.airbyte.com/integrations/sources/salesforce icon: salesforce.svg sourceType: api @@ -1552,7 +1576,7 @@ - name: Sendgrid sourceDefinitionId: fbb5fbe2-16ad-4cf4-af7d-ff9d9c316c87 dockerRepository: airbyte/source-sendgrid - dockerImageTag: 0.2.16 + dockerImageTag: 0.3.0 documentationUrl: https://docs.airbyte.com/integrations/sources/sendgrid icon: sendgrid.svg sourceType: api @@ -1592,7 +1616,7 @@ - name: Slack sourceDefinitionId: c2281cee-86f9-4a86-bb48-d23286b4c7bd dockerRepository: airbyte/source-slack - dockerImageTag: 0.1.21 + dockerImageTag: 0.1.22 documentationUrl: https://docs.airbyte.com/integrations/sources/slack icon: slack.svg sourceType: api @@ -1624,7 +1648,7 @@ - name: Snapchat Marketing sourceDefinitionId: 200330b2-ea62-4d11-ac6d-cfe3e3f8ab2b dockerRepository: airbyte/source-snapchat-marketing - dockerImageTag: 0.1.12 + dockerImageTag: 0.1.13 documentationUrl: https://docs.airbyte.com/integrations/sources/snapchat-marketing icon: snapchat.svg sourceType: api @@ -1680,7 +1704,7 @@ - name: Stripe sourceDefinitionId: e094cb9a-26de-4645-8761-65c0c425d1de dockerRepository: airbyte/source-stripe - dockerImageTag: 0.1.40 + dockerImageTag: 1.0.1 documentationUrl: https://docs.airbyte.com/integrations/sources/stripe icon: stripe.svg sourceType: api @@ -1696,7 +1720,7 @@ - name: SurveyMonkey sourceDefinitionId: badc5925-0485-42be-8caa-b34096cb71b5 dockerRepository: airbyte/source-surveymonkey - dockerImageTag: 0.1.13 + dockerImageTag: 0.1.14 documentationUrl: https://docs.airbyte.com/integrations/sources/surveymonkey icon: surveymonkey.svg sourceType: api @@ -1736,7 +1760,7 @@ - name: TikTok Marketing sourceDefinitionId: 4bfac00d-ce15-44ff-95b9-9e3c3e8fbd35 dockerRepository: airbyte/source-tiktok-marketing - dockerImageTag: 1.0.1 + dockerImageTag: 2.0.1 documentationUrl: https://docs.airbyte.com/integrations/sources/tiktok-marketing icon: tiktok.svg sourceType: api @@ -1799,7 +1823,7 @@ - name: Twilio sourceDefinitionId: b9dc6155-672e-42ea-b10d-9f1f1fb95ab1 dockerRepository: airbyte/source-twilio - dockerImageTag: 0.1.14 + dockerImageTag: 0.1.15 documentationUrl: https://docs.airbyte.com/integrations/sources/twilio icon: twilio.svg sourceType: api @@ -1967,7 +1991,7 @@ - name: Zendesk Chat sourceDefinitionId: 40d24d0f-b8f9-4fe0-9e6c-b06c0f3f45e4 dockerRepository: airbyte/source-zendesk-chat - dockerImageTag: 0.1.11 + dockerImageTag: 0.1.12 documentationUrl: https://docs.airbyte.com/integrations/sources/zendesk-chat icon: zendesk-chat.svg sourceType: api @@ -1991,7 +2015,7 @@ - name: Zendesk Support sourceDefinitionId: 79c1aa37-dae3-42ae-b333-d1c105477715 dockerRepository: airbyte/source-zendesk-support - dockerImageTag: 0.2.20 + dockerImageTag: 0.2.21 documentationUrl: https://docs.airbyte.com/integrations/sources/zendesk-support icon: zendesk-support.svg sourceType: api @@ -1999,7 +2023,7 @@ - name: Zendesk Talk sourceDefinitionId: c8630570-086d-4a40-99ae-ea5b18673071 dockerRepository: airbyte/source-zendesk-talk - dockerImageTag: 0.1.5 + dockerImageTag: 0.1.6 documentationUrl: https://docs.airbyte.com/integrations/sources/zendesk-talk icon: zendesk-talk.svg sourceType: api @@ -2023,7 +2047,7 @@ - sourceDefinitionId: cdaf146a-9b75-49fd-9dd2-9d64a0bb4781 name: Sentry dockerRepository: airbyte/source-sentry - dockerImageTag: 0.1.8 + dockerImageTag: 0.1.10 documentationUrl: https://docs.airbyte.com/integrations/sources/sentry icon: sentry.svg sourceType: api diff --git a/airbyte-config/init/src/main/resources/seed/source_specs.yaml b/airbyte-config/init/src/main/resources/seed/source_specs.yaml index dc9f71b621a75..b22fb595f6c94 100644 --- a/airbyte-config/init/src/main/resources/seed/source_specs.yaml +++ b/airbyte-config/init/src/main/resources/seed/source_specs.yaml @@ -178,28 +178,118 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-airtable:1.0.1" +- dockerImage: "airbyte/source-airtable:2.0.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/airtable" connectionSpecification: $schema: "http://json-schema.org/draft-07/schema#" title: "Airtable Source Spec" type: "object" - required: - - "api_key" + additionalProperties: true properties: - api_key: - type: "string" - description: "The API Key or PAT for the Airtable account. See the Support\ - \ Guide for more information on how to obtain this key." - title: "API Key" - airbyte_secret: true - examples: - - "key1234567890" + 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: "API Key" + type: "object" + required: + - "api_key" + properties: + auth_method: + type: "string" + const: "api_key" + api_key: + type: "string" + description: "The API Key or PAT for the Airtable account. See the\ + \ Support Guide for more information on how to obtain this key." + title: "API Key" + 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" - dockerImage: "airbyte/source-aha:0.1.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/aha" @@ -280,7 +370,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-alloydb:1.0.35" +- dockerImage: "airbyte/source-alloydb:1.0.36" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/postgres" connectionSpecification: @@ -508,6 +598,7 @@ - "method" - "replication_slot" - "publication" + additionalProperties: true properties: method: type: "string" @@ -552,6 +643,19 @@ 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" @@ -700,7 +804,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-amazon-ads:0.1.27" +- dockerImage: "airbyte/source-amazon-ads:0.1.28" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/amazon-ads" connectionSpecification: @@ -776,6 +880,16 @@ 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 required: - "client_id" - "client_secret" @@ -818,7 +932,7 @@ type: "string" path_in_connector_config: - "client_secret" -- dockerImage: "airbyte/source-amazon-seller-partner:0.2.30" +- dockerImage: "airbyte/source-amazon-seller-partner:0.2.31" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/amazon-seller-partner" changelogUrl: "https://docs.airbyte.com/integrations/sources/amazon-seller-partner" @@ -899,10 +1013,14 @@ 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: 30 + default: 90 + maximum: 90 examples: + - "1" + - "10" - "30" - - "365" + - "60" + - "90" order: 10 type: "integer" report_options: @@ -1157,7 +1275,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-amplitude:0.1.19" +- dockerImage: "airbyte/source-amplitude:0.1.20" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/amplitude" connectionSpecification: @@ -3524,7 +3642,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-facebook-marketing:0.2.83" +- dockerImage: "airbyte/source-facebook-marketing:0.2.84" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/facebook-marketing" changelogUrl: "https://docs.airbyte.com/integrations/sources/facebook-marketing" @@ -4396,7 +4514,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-freshdesk:2.0.0" +- dockerImage: "airbyte/source-freshdesk:2.0.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/freshdesk" connectionSpecification: @@ -4597,7 +4715,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-github:0.3.11" +- dockerImage: "airbyte/source-github:0.4.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/github" connectionSpecification: @@ -4732,7 +4850,7 @@ path_in_connector_config: - "credentials" - "client_secret" -- dockerImage: "airbyte/source-gitlab:1.0.0" +- dockerImage: "airbyte/source-gitlab:1.0.2" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/gitlab" connectionSpecification: @@ -5215,7 +5333,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-google-ads:0.2.7" +- dockerImage: "airbyte/source-google-ads:0.2.9" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/google-ads" connectionSpecification: @@ -5789,7 +5907,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-google-search-console:0.1.18" +- dockerImage: "airbyte/source-google-search-console:0.1.19" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/google-search-console" connectionSpecification: @@ -6218,7 +6336,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-harvest:0.1.14" +- dockerImage: "airbyte/source-harvest:0.1.15" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/harvest" connectionSpecification: @@ -6403,7 +6521,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-hubspot:0.3.0" +- dockerImage: "airbyte/source-hubspot:0.3.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/hubspot" connectionSpecification: @@ -6648,7 +6766,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-instagram:1.0.0" +- dockerImage: "airbyte/source-instagram:1.0.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/instagram" changelogUrl: "https://docs.airbyte.com/integrations/sources/instagram" @@ -6706,7 +6824,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-intercom:0.1.29" +- dockerImage: "airbyte/source-intercom:0.1.30" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/intercom" connectionSpecification: @@ -7257,7 +7375,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-klaviyo:0.1.10" +- dockerImage: "airbyte/source-klaviyo:0.1.11" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/klaviyo" changelogUrl: "https://docs.airbyte.com/integrations/sources/klaviyo" @@ -7508,7 +7626,7 @@ path_in_connector_config: - "credentials" - "client_secret" -- dockerImage: "airbyte/source-linkedin-ads:0.1.12" +- dockerImage: "airbyte/source-linkedin-ads:0.1.13" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/linkedin-ads" connectionSpecification: @@ -7777,7 +7895,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-mailchimp:0.3.1" +- dockerImage: "airbyte/source-mailchimp:0.3.2" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/mailchimp" connectionSpecification: @@ -8113,7 +8231,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-mssql:0.4.27" +- dockerImage: "airbyte/source-mssql:0.4.28" spec: documentationUrl: "https://docs.airbyte.com/integrations/destinations/mssql" connectionSpecification: @@ -8272,6 +8390,18 @@ \ 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" @@ -8571,7 +8701,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-mixpanel:0.1.29" +- dockerImage: "airbyte/source-mixpanel:0.1.30" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/mixpanel" connectionSpecification: @@ -8976,7 +9106,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-mysql:1.0.19" +- dockerImage: "airbyte/source-mysql:1.0.21" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/mysql" connectionSpecification: @@ -9374,7 +9504,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-netsuite:0.1.2" +- dockerImage: "airbyte/source-netsuite:0.1.3" spec: documentationUrl: "https://docsurl.com" connectionSpecification: @@ -9840,7 +9970,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-notion:1.0.0" +- dockerImage: "airbyte/source-notion:1.0.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/notion" connectionSpecification: @@ -10769,7 +10899,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-paypal-transaction:0.1.10" +- dockerImage: "airbyte/source-paypal-transaction:0.1.11" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/paypal-transactions" connectionSpecification: @@ -10937,7 +11067,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-pinterest:0.2.1" +- dockerImage: "airbyte/source-pinterest:0.2.2" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/pinterest" connectionSpecification: @@ -11476,7 +11606,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-postgres:1.0.38" +- dockerImage: "airbyte/source-postgres:1.0.42" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/postgres" connectionSpecification: @@ -12197,7 +12327,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-recharge:0.2.4" +- dockerImage: "airbyte/source-recharge:0.2.5" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/recharge" connectionSpecification: @@ -12634,7 +12764,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-s3:0.1.28" +- dockerImage: "airbyte/source-s3:0.1.30" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/s3" changelogUrl: "https://docs.airbyte.com/integrations/sources/s3" @@ -12843,14 +12973,10 @@ - "infer" - "error" order: 1 - allOf: - - title: "UnexpectedFieldBehaviorEnum" - description: "An enumeration." - enum: - - "ignore" - - "infer" - - "error" - type: "string" + enum: + - "ignore" + - "infer" + - "error" block_size: title: "Block Size" description: "The chunk size in bytes to process at a time in memory\ @@ -12969,7 +13095,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-salesforce:1.0.29" +- dockerImage: "airbyte/source-salesforce:1.0.30" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/salesforce" connectionSpecification: @@ -13210,7 +13336,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-sendgrid:0.2.16" +- dockerImage: "airbyte/source-sendgrid:0.3.0" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/sendgrid" connectionSpecification: @@ -13230,9 +13356,7 @@ order: 0 start_time: title: "Start time" - type: - - "integer" - - "string" + type: "string" description: "Start time in ISO8601 format. Any data before this time point\ \ will not be replicated." examples: @@ -13499,7 +13623,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-slack:0.1.21" +- dockerImage: "airbyte/source-slack:0.1.22" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/slack" connectionSpecification: @@ -13729,7 +13853,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-snapchat-marketing:0.1.12" +- dockerImage: "airbyte/source-snapchat-marketing:0.1.13" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/snapchat-marketing" connectionSpecification: @@ -14286,7 +14410,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-stripe:0.1.40" +- dockerImage: "airbyte/source-stripe:1.0.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/stripe" connectionSpecification: @@ -14397,7 +14521,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-surveymonkey:0.1.13" +- dockerImage: "airbyte/source-surveymonkey:0.1.14" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/surveymonkey" connectionSpecification: @@ -14799,7 +14923,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-tiktok-marketing:1.0.1" +- dockerImage: "airbyte/source-tiktok-marketing:2.0.1" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/tiktok-marketing" changelogUrl: "https://docs.airbyte.com/integrations/sources/tiktok-marketing" @@ -15289,7 +15413,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-twilio:0.1.14" +- dockerImage: "airbyte/source-twilio:0.1.15" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/twilio" connectionSpecification: @@ -16033,7 +16157,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-zendesk-chat:0.1.11" +- dockerImage: "airbyte/source-zendesk-chat:0.1.12" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/zendesk-chat" connectionSpecification: @@ -16308,7 +16432,7 @@ path_in_connector_config: - "credentials" - "client_secret" -- dockerImage: "airbyte/source-zendesk-support:0.2.20" +- dockerImage: "airbyte/source-zendesk-support:0.2.21" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/zendesk-support" connectionSpecification: @@ -16435,7 +16559,7 @@ path_in_connector_config: - "credentials" - "client_secret" -- dockerImage: "airbyte/source-zendesk-talk:0.1.5" +- dockerImage: "airbyte/source-zendesk-talk:0.1.6" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/zendesk-talk" connectionSpecification: @@ -16611,7 +16735,7 @@ supportsNormalization: false supportsDBT: false supported_destination_sync_modes: [] -- dockerImage: "airbyte/source-sentry:0.1.8" +- dockerImage: "airbyte/source-sentry:0.1.10" spec: documentationUrl: "https://docs.airbyte.com/integrations/sources/sentry" connectionSpecification: diff --git a/airbyte-connector-builder-server/Dockerfile b/airbyte-connector-builder-server/Dockerfile index 7e5c167607ee8..a85fb70e69717 100644 --- a/airbyte-connector-builder-server/Dockerfile +++ b/airbyte-connector-builder-server/Dockerfile @@ -10,5 +10,5 @@ RUN pip install --no-cache-dir . ENTRYPOINT ["uvicorn", "connector_builder.entrypoint:app", "--host", "0.0.0.0", "--port", "80"] -LABEL io.airbyte.version=0.40.28 +LABEL io.airbyte.version=0.40.30 LABEL io.airbyte.name=airbyte/connector-builder-server diff --git a/airbyte-connector-builder-server/connector_builder/entrypoint.py b/airbyte-connector-builder-server/connector_builder/entrypoint.py index c277501551785..d2ee54d20c2bc 100644 --- a/airbyte-connector-builder-server/connector_builder/entrypoint.py +++ b/airbyte-connector-builder-server/connector_builder/entrypoint.py @@ -4,10 +4,14 @@ from connector_builder.generated.apis.default_api_interface import initialize_router from connector_builder.impl.default_api import DefaultApiImpl -from connector_builder.impl.low_code_cdk_adapter import LowCodeSourceAdapter +from connector_builder.impl.low_code_cdk_adapter import LowCodeSourceAdapterFactory from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware +_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE = 5 +_MAXIMUM_NUMBER_OF_SLICES = 5 +_ADAPTER_FACTORY = LowCodeSourceAdapterFactory(_MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, _MAXIMUM_NUMBER_OF_SLICES) + app = FastAPI( title="Connector Builder Server API", description="Connector Builder Server API ", @@ -22,4 +26,4 @@ allow_headers=["*"], ) -app.include_router(initialize_router(DefaultApiImpl(LowCodeSourceAdapter))) +app.include_router(initialize_router(DefaultApiImpl(_ADAPTER_FACTORY, _MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, _MAXIMUM_NUMBER_OF_SLICES))) diff --git a/airbyte-connector-builder-server/connector_builder/generated/apis/default_api_interface.py b/airbyte-connector-builder-server/connector_builder/generated/apis/default_api_interface.py index 70e031d41df93..1af2b51cff7ee 100644 --- a/airbyte-connector-builder-server/connector_builder/generated/apis/default_api_interface.py +++ b/airbyte-connector-builder-server/connector_builder/generated/apis/default_api_interface.py @@ -27,6 +27,8 @@ from connector_builder.generated.models.invalid_input_exception_info import InvalidInputExceptionInfo from connector_builder.generated.models.known_exception_info import KnownExceptionInfo +from connector_builder.generated.models.resolve_manifest import ResolveManifest +from connector_builder.generated.models.resolve_manifest_request_body import ResolveManifestRequestBody from connector_builder.generated.models.stream_read import StreamRead from connector_builder.generated.models.stream_read_request_body import StreamReadRequestBody from connector_builder.generated.models.streams_list_read import StreamsListRead @@ -65,6 +67,15 @@ async def read_stream( Reads a specific stream in the source. TODO in a later phase - only read a single slice of data. """ + @abstractmethod + async def resolve_manifest( + self, + resolve_manifest_request_body: ResolveManifestRequestBody = Body(None, description=""), + ) -> ResolveManifest: + """ + Given a JSON manifest, returns a JSON manifest with all of the $refs and $options resolved and flattened + """ + def _assert_signature_is_set(method: Callable) -> None: """ @@ -143,5 +154,20 @@ def initialize_router(api: DefaultApi) -> APIRouter: response_model_by_alias=True, ) + _assert_signature_is_set(api.resolve_manifest) + router.add_api_route( + "/v1/manifest/resolve", + endpoint=api.resolve_manifest, + methods=["POST"], + responses={ + 200: {"model": ResolveManifest, "description": "Successful operation"}, + 400: {"model": KnownExceptionInfo, "description": "Exception occurred; see message for details."}, + 422: {"model": InvalidInputExceptionInfo, "description": "Input failed validation"}, + }, + tags=["default"], + summary="Given a JSON manifest, returns a JSON manifest with all of the $refs and $options resolved and flattened", + response_model_by_alias=True, + ) + return router diff --git a/airbyte-connector-builder-server/connector_builder/generated/models/resolve_manifest.py b/airbyte-connector-builder-server/connector_builder/generated/models/resolve_manifest.py new file mode 100644 index 0000000000000..81bcc339a5373 --- /dev/null +++ b/airbyte-connector-builder-server/connector_builder/generated/models/resolve_manifest.py @@ -0,0 +1,24 @@ +# coding: utf-8 + +from __future__ import annotations +from datetime import date, datetime # noqa: F401 + +import re # noqa: F401 +from typing import Any, Dict, List, Optional # noqa: F401 + +from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401 + + +class ResolveManifest(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + ResolveManifest - a model defined in OpenAPI + + manifest: The manifest of this ResolveManifest. + """ + + manifest: Dict[str, Any] + +ResolveManifest.update_forward_refs() diff --git a/airbyte-connector-builder-server/connector_builder/generated/models/resolve_manifest_request_body.py b/airbyte-connector-builder-server/connector_builder/generated/models/resolve_manifest_request_body.py new file mode 100644 index 0000000000000..91aded8ec5239 --- /dev/null +++ b/airbyte-connector-builder-server/connector_builder/generated/models/resolve_manifest_request_body.py @@ -0,0 +1,24 @@ +# coding: utf-8 + +from __future__ import annotations +from datetime import date, datetime # noqa: F401 + +import re # noqa: F401 +from typing import Any, Dict, List, Optional # noqa: F401 + +from pydantic import AnyUrl, BaseModel, EmailStr, validator # noqa: F401 + + +class ResolveManifestRequestBody(BaseModel): + """NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). + + Do not edit the class manually. + + ResolveManifestRequestBody - a model defined in OpenAPI + + manifest: The manifest of this ResolveManifestRequestBody. + """ + + manifest: Dict[str, Any] + +ResolveManifestRequestBody.update_forward_refs() diff --git a/airbyte-connector-builder-server/connector_builder/generated/models/stream_read.py b/airbyte-connector-builder-server/connector_builder/generated/models/stream_read.py index 163bb131e7c28..775b148fa3a70 100644 --- a/airbyte-connector-builder-server/connector_builder/generated/models/stream_read.py +++ b/airbyte-connector-builder-server/connector_builder/generated/models/stream_read.py @@ -19,11 +19,13 @@ class StreamRead(BaseModel): logs: The logs of this StreamRead. slices: The slices of this StreamRead. + test_read_limit_reached: The test_read_limit_reached of this StreamRead. inferred_schema: The inferred_schema of this StreamRead [Optional]. """ logs: List[object] slices: List[StreamReadSlices] + test_read_limit_reached: bool inferred_schema: Optional[Dict[str, Any]] = None StreamRead.update_forward_refs() diff --git a/airbyte-connector-builder-server/connector_builder/impl/adapter.py b/airbyte-connector-builder-server/connector_builder/impl/adapter.py index 840e0996fbaaf..33da6ced709a0 100644 --- a/airbyte-connector-builder-server/connector_builder/impl/adapter.py +++ b/airbyte-connector-builder-server/connector_builder/impl/adapter.py @@ -32,3 +32,11 @@ def read_stream(self, stream: str, config: Dict[str, Any]) -> Iterator[AirbyteMe :param config: The user-provided configuration as specified by the source's spec. :return: An iterator over `AirbyteMessage` objects. """ + + +class CdkAdapterFactory(ABC): + + @abstractmethod + def create(self, manifest: Dict[str, Any]) -> CdkAdapter: + """Return an implementation of CdkAdapter""" + pass diff --git a/airbyte-connector-builder-server/connector_builder/impl/default_api.py b/airbyte-connector-builder-server/connector_builder/impl/default_api.py index ef7ad588c3e7f..675e928f6cbb7 100644 --- a/airbyte-connector-builder-server/connector_builder/impl/default_api.py +++ b/airbyte-connector-builder-server/connector_builder/impl/default_api.py @@ -6,14 +6,17 @@ import logging import traceback from json import JSONDecodeError -from typing import Any, Callable, Dict, Iterable, Iterator, Optional, Union +from typing import Any, Dict, Iterable, Iterator, Optional, Union from urllib.parse import parse_qs, urljoin, urlparse from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, Type +from airbyte_cdk.sources.declarative.manifest_declarative_source import ManifestDeclarativeSource from airbyte_cdk.utils.schema_inferrer import SchemaInferrer from connector_builder.generated.apis.default_api_interface import DefaultApi from connector_builder.generated.models.http_request import HttpRequest from connector_builder.generated.models.http_response import HttpResponse +from connector_builder.generated.models.resolve_manifest import ResolveManifest +from connector_builder.generated.models.resolve_manifest_request_body import ResolveManifestRequestBody from connector_builder.generated.models.stream_read import StreamRead from connector_builder.generated.models.stream_read_pages import StreamReadPages from connector_builder.generated.models.stream_read_request_body import StreamReadRequestBody @@ -21,17 +24,21 @@ from connector_builder.generated.models.streams_list_read import StreamsListRead from connector_builder.generated.models.streams_list_read_streams import StreamsListReadStreams from connector_builder.generated.models.streams_list_request_body import StreamsListRequestBody -from connector_builder.impl.adapter import CdkAdapter +from connector_builder.impl.adapter import CdkAdapter, CdkAdapterFactory from fastapi import Body, HTTPException from jsonschema import ValidationError class DefaultApiImpl(DefaultApi): + logger = logging.getLogger("airbyte.connector-builder") - def __init__(self, adapter_cls: Callable[[Dict[str, Any]], CdkAdapter], max_record_limit: int = 1000): - self.adapter_cls = adapter_cls + def __init__(self, adapter_factory: CdkAdapterFactory, max_pages_per_slice, max_slices, max_record_limit: int = 1000): + self.adapter_factory = adapter_factory + self._max_pages_per_slice = max_pages_per_slice + self._max_slices = max_slices self.max_record_limit = max_record_limit + super().__init__() async def get_manifest_template(self) -> str: @@ -104,7 +111,8 @@ async def list_streams(self, streams_list_request_body: StreamsListRequestBody = ) except Exception as error: self.logger.error( - f"Could not list streams with with error: {error.args[0]} - {DefaultApiImpl._get_stacktrace_as_string(error)}") + f"Could not list streams with with error: {error.args[0]} - {DefaultApiImpl._get_stacktrace_as_string(error)}" + ) raise HTTPException(status_code=400, detail=f"Could not list streams with with error: {error.args[0]}") return StreamsListRead(streams=stream_list_read) @@ -124,18 +132,18 @@ async def read_stream(self, stream_read_request_body: StreamReadRequestBody = Bo else: record_limit = min(stream_read_request_body.record_limit, self.max_record_limit) - single_slice = StreamReadSlices(pages=[]) + slices = [] log_messages = [] try: for message_group in self._get_message_groups( - adapter.read_stream(stream_read_request_body.stream, stream_read_request_body.config), - schema_inferrer, - record_limit, + adapter.read_stream(stream_read_request_body.stream, stream_read_request_body.config), + schema_inferrer, + record_limit, ): if isinstance(message_group, AirbyteLogMessage): log_messages.append({"message": message_group.message}) else: - single_slice.pages.append(message_group) + slices.append(message_group) except Exception as error: # TODO: We're temporarily using FastAPI's default exception model. Ideally we should use exceptions defined in the OpenAPI spec self.logger.error(f"Could not perform read with with error: {error.args[0]} - {self._get_stacktrace_as_string(error)}") @@ -144,11 +152,46 @@ async def read_stream(self, stream_read_request_body: StreamReadRequestBody = Bo detail=f"Could not perform read with with error: {error.args[0]}", ) - return StreamRead(logs=log_messages, slices=[single_slice], - inferred_schema=schema_inferrer.get_stream_schema(stream_read_request_body.stream)) + return StreamRead( + logs=log_messages, + slices=slices, + test_read_limit_reached=self._has_reached_limit(slices), + inferred_schema=schema_inferrer.get_stream_schema(stream_read_request_body.stream) + ) - def _get_message_groups(self, messages: Iterator[AirbyteMessage], schema_inferrer: SchemaInferrer, limit: int) -> Iterable[ - Union[StreamReadPages, AirbyteLogMessage]]: + def _has_reached_limit(self, slices): + if len(slices) >= self._max_slices: + return True + + for slice in slices: + if len(slice.pages) >= self._max_pages_per_slice: + return True + return False + + async def resolve_manifest( + self, resolve_manifest_request_body: ResolveManifestRequestBody = Body(None, description="") + ) -> ResolveManifest: + """ + Using the provided manifest, resolves $refs and $options and returns the resulting manifest to the client. + :param manifest_resolve_request_body: Input manifest whose $refs and $options will be resolved + :return: Airbyte record messages produced by the sync grouped by slice and page + """ + try: + return ResolveManifest( + manifest=ManifestDeclarativeSource( + resolve_manifest_request_body.manifest, construct_using_pydantic_models=True + ).resolved_manifest + ) + except Exception as error: + self.logger.error(f"Could not resolve manifest with error: {error.args[0]} - {self._get_stacktrace_as_string(error)}") + raise HTTPException( + status_code=400, + detail=f"Could not resolve manifest with error: {error.args[0]}", + ) + + def _get_message_groups( + self, messages: Iterator[AirbyteMessage], schema_inferrer: SchemaInferrer, limit: int + ) -> Iterable[Union[StreamReadPages, AirbyteLogMessage]]: """ Message groups are partitioned according to when request log messages are received. Subsequent response log messages and record messages belong to the prior request log message and when we encounter another request, append the latest @@ -164,33 +207,56 @@ def _get_message_groups(self, messages: Iterator[AirbyteMessage], schema_inferre Note: The exception is that normal log messages can be received at any time which are not incorporated into grouping """ - first_page = True - current_records = [] + records_count = 0 + at_least_one_page_in_group = False + current_page_records = [] + current_slice_pages = [] current_page_request: Optional[HttpRequest] = None current_page_response: Optional[HttpResponse] = None - while len(current_records) < limit and (message := next(messages, None)): - if first_page and message.type == Type.LOG and message.log.message.startswith("request:"): - first_page = False - request = self._create_request_from_log_message(message.log) - current_page_request = request + while records_count < limit and (message := next(messages, None)): + if self._need_to_close_page(at_least_one_page_in_group, message): + self._close_page(current_page_request, current_page_response, current_slice_pages, current_page_records) + current_page_request = None + current_page_response = None + + if at_least_one_page_in_group and message.type == Type.LOG and message.log.message.startswith("slice:"): + yield StreamReadSlices(pages=current_slice_pages) + current_slice_pages = [] + at_least_one_page_in_group = False elif message.type == Type.LOG and message.log.message.startswith("request:"): - if not current_page_request or not current_page_response: - raise ValueError("Every message grouping should have at least one request and response") - yield StreamReadPages(request=current_page_request, response=current_page_response, records=current_records) + if not at_least_one_page_in_group: + at_least_one_page_in_group = True current_page_request = self._create_request_from_log_message(message.log) - current_records = [] elif message.type == Type.LOG and message.log.message.startswith("response:"): current_page_response = self._create_response_from_log_message(message.log) elif message.type == Type.LOG: yield message.log elif message.type == Type.RECORD: - current_records.append(message.record.data) + current_page_records.append(message.record.data) + records_count += 1 schema_inferrer.accumulate(message.record) else: - if not current_page_request or not current_page_response: - raise ValueError("Every message grouping should have at least one request and response") - yield StreamReadPages(request=current_page_request, response=current_page_response, records=current_records) + self._close_page(current_page_request, current_page_response, current_slice_pages, current_page_records) + yield StreamReadSlices(pages=current_slice_pages) + + @staticmethod + def _need_to_close_page(at_least_one_page_in_group, message): + return ( + at_least_one_page_in_group + and message.type == Type.LOG + and (message.log.message.startswith("request:") or message.log.message.startswith("slice:")) + ) + + @staticmethod + def _close_page(current_page_request, current_page_response, current_slice_pages, current_page_records): + if not current_page_request or not current_page_response: + raise ValueError("Every message grouping should have at least one request and response") + + current_slice_pages.append( + StreamReadPages(request=current_page_request, response=current_page_response, records=current_page_records) + ) + current_page_records.clear() def _create_request_from_log_message(self, log_message: AirbyteLogMessage) -> Optional[HttpRequest]: # TODO: As a temporary stopgap, the CDK emits request data as a log message string. Ideally this should come in the @@ -228,7 +294,7 @@ def _create_response_from_log_message(self, log_message: AirbyteLogMessage) -> O def _create_low_code_adapter(self, manifest: Dict[str, Any]) -> CdkAdapter: try: - return self.adapter_cls(manifest=manifest) + return self.adapter_factory.create(manifest) except ValidationError as error: # TODO: We're temporarily using FastAPI's default exception model. Ideally we should use exceptions defined in the OpenAPI spec self.logger.error(f"Invalid connector manifest with error: {error.message} - {DefaultApiImpl._get_stacktrace_as_string(error)}") diff --git a/airbyte-connector-builder-server/connector_builder/impl/low_code_cdk_adapter.py b/airbyte-connector-builder-server/connector_builder/impl/low_code_cdk_adapter.py index 580d0d7c42e72..f298cc3588ad0 100644 --- a/airbyte-connector-builder-server/connector_builder/impl/low_code_cdk_adapter.py +++ b/airbyte-connector-builder-server/connector_builder/impl/low_code_cdk_adapter.py @@ -7,15 +7,20 @@ from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, ConfiguredAirbyteCatalog, Level from airbyte_cdk.models import Type as MessageType from airbyte_cdk.sources.declarative.declarative_stream import DeclarativeStream +from airbyte_cdk.sources.declarative.parsers.model_to_component_factory import ModelToComponentFactory from airbyte_cdk.sources.declarative.yaml_declarative_source import ManifestDeclarativeSource from airbyte_cdk.sources.streams.http import HttpStream -from connector_builder.impl.adapter import CdkAdapter +from connector_builder.impl.adapter import CdkAdapter, CdkAdapterFactory class LowCodeSourceAdapter(CdkAdapter): - def __init__(self, manifest: Dict[str, Any]): + def __init__(self, manifest: Dict[str, Any], limit_page_fetched_per_slice, limit_slices_fetched): # Request and response messages are only emitted for a sources that have debug turned on - self._source = ManifestDeclarativeSource(manifest, debug=True) + self._source = ManifestDeclarativeSource( + manifest, + debug=True, + component_factory=ModelToComponentFactory(limit_page_fetched_per_slice, limit_slices_fetched) + ) def get_http_streams(self, config: Dict[str, Any]) -> List[HttpStream]: http_streams = [] @@ -58,3 +63,13 @@ def read_stream(self, stream: str, config: Dict[str, Any]) -> Iterator[AirbyteMe except Exception as e: yield AirbyteMessage(type=MessageType.LOG, log=AirbyteLogMessage(level=Level.ERROR, message=str(e))) return + + +class LowCodeSourceAdapterFactory(CdkAdapterFactory): + + def __init__(self, max_pages_per_slice, max_slices): + self._max_pages_per_slice = max_pages_per_slice + self._max_slices = max_slices + + def create(self, manifest: Dict[str, Any]) -> CdkAdapter: + return LowCodeSourceAdapter(manifest, self._max_pages_per_slice, self._max_slices) diff --git a/airbyte-connector-builder-server/setup.py b/airbyte-connector-builder-server/setup.py index 66d7c37273420..6b0738fc69f5f 100644 --- a/airbyte-connector-builder-server/setup.py +++ b/airbyte-connector-builder-server/setup.py @@ -14,7 +14,7 @@ setup( name="connector-builder-server", - version="0.40.28", + version="0.40.30", description="", long_description=README, author="Airbyte", @@ -41,7 +41,7 @@ }, packages=find_packages(exclude=("unit_tests", "integration_tests", "docs")), package_data={}, - install_requires=["airbyte-cdk~=0.15", "fastapi", "uvicorn"], + install_requires=["airbyte-cdk==0.23", "fastapi", "uvicorn"], python_requires=">=3.9.11", extras_require={ "tests": [ diff --git a/airbyte-connector-builder-server/src/main/openapi/openapi.yaml b/airbyte-connector-builder-server/src/main/openapi/openapi.yaml index 61a828e3fbf0e..6f2147668e99f 100644 --- a/airbyte-connector-builder-server/src/main/openapi/openapi.yaml +++ b/airbyte-connector-builder-server/src/main/openapi/openapi.yaml @@ -69,6 +69,27 @@ paths: schema: type: string description: Connector manifest template string + /v1/manifest/resolve: + post: + summary: Given a JSON manifest, returns a JSON manifest with all of the $refs and $options resolved and flattened + operationId: resolveManifest + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ResolveManifestRequestBody" + required: true + responses: + "200": + description: Successful operation + content: + application/json: + schema: + $ref: "#/components/schemas/ResolveManifest" + "400": + $ref: "#/components/responses/ExceptionResponse" + "422": + $ref: "#/components/responses/InvalidInputResponse" components: schemas: @@ -77,6 +98,7 @@ components: required: - logs - slices + - test_read_limit_reached properties: logs: type: array @@ -123,6 +145,9 @@ components: type: object description: The STATE AirbyteMessage emitted at the end of this slice. This can be omitted if a stream slicer is not configured. # $ref: "#/components/schemas/AirbyteProtocol/definitions/AirbyteStateMessage" + test_read_limit_reached: + type: boolean + description: Whether the maximum number of request per slice or the maximum number of slices queried has been reached inferred_schema: type: object description: The narrowest JSON Schema against which every AirbyteRecord in the slices can validate successfully. This is inferred from reading every record in the output slices. @@ -237,6 +262,22 @@ components: # description: list of slices that will be retrieved for this stream # items: # type: object + ResolveManifestRequestBody: + type: object + required: + - manifest + properties: + manifest: + type: object + description: The config-based connector manifest contents + ResolveManifest: + type: object + required: + - manifest + properties: + manifest: + type: object + description: The config-based connector manifest contents with $refs and $options resolved # The following exception structs were copied from airbyte-api/src/main/openapi/config.yaml InvalidInputProperty: diff --git a/airbyte-connector-builder-server/unit_tests/connector_builder/impl/test_default_api.py b/airbyte-connector-builder-server/unit_tests/connector_builder/impl/test_default_api.py index d9bbf6a07fa17..ea1d10682e2dc 100644 --- a/airbyte-connector-builder-server/unit_tests/connector_builder/impl/test_default_api.py +++ b/airbyte-connector-builder-server/unit_tests/connector_builder/impl/test_default_api.py @@ -11,6 +11,8 @@ from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, AirbyteRecordMessage, Level, Type from connector_builder.generated.models.http_request import HttpRequest from connector_builder.generated.models.http_response import HttpResponse +from connector_builder.generated.models.resolve_manifest import ResolveManifest +from connector_builder.generated.models.resolve_manifest_request_body import ResolveManifestRequestBody from connector_builder.generated.models.stream_read import StreamRead from connector_builder.generated.models.stream_read_pages import StreamReadPages from connector_builder.generated.models.stream_read_request_body import StreamReadRequestBody @@ -18,10 +20,13 @@ from connector_builder.generated.models.streams_list_read_streams import StreamsListReadStreams from connector_builder.generated.models.streams_list_request_body import StreamsListRequestBody from connector_builder.impl.default_api import DefaultApiImpl -from connector_builder.impl.low_code_cdk_adapter import LowCodeSourceAdapter +from connector_builder.impl.low_code_cdk_adapter import LowCodeSourceAdapterFactory from fastapi import HTTPException from pydantic.error_wrappers import ValidationError +MAX_PAGES_PER_SLICE = 4 +MAX_SLICES = 3 + MANIFEST = { "version": "0.1.0", "type": "DeclarativeSource", @@ -93,13 +98,17 @@ def record_message(stream: str, data: dict) -> AirbyteMessage: return AirbyteMessage(type=Type.RECORD, record=AirbyteRecordMessage(stream=stream, data=data, emitted_at=1234)) +def slice_message() -> AirbyteMessage: + return AirbyteMessage(type=Type.LOG, log=AirbyteLogMessage(level=Level.INFO, message='slice:{"key": "value"}')) + + def test_list_streams(): expected_streams = [ StreamsListReadStreams(name="hashiras", url="https://demonslayers.com/api/v1/hashiras"), StreamsListReadStreams(name="breathing-techniques", url="https://demonslayers.com/api/v1/breathing_techniques"), ] - api = DefaultApiImpl(LowCodeSourceAdapter) + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) streams_list_request_body = StreamsListRequestBody(manifest=MANIFEST, config=CONFIG) loop = asyncio.get_event_loop() actual_streams = loop.run_until_complete(api.list_streams(streams_list_request_body)) @@ -133,7 +142,7 @@ def test_list_streams_with_interpolated_urls(): expected_streams = StreamsListRead(streams=[StreamsListReadStreams(name="demons", url="https://upper-six.muzan.com/api/v1/demons")]) - api = DefaultApiImpl(LowCodeSourceAdapter) + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) streams_list_request_body = StreamsListRequestBody(manifest=manifest, config=CONFIG) loop = asyncio.get_event_loop() actual_streams = loop.run_until_complete(api.list_streams(streams_list_request_body)) @@ -167,7 +176,7 @@ def test_list_streams_with_unresolved_interpolation(): # The interpolated string {{ config['not_in_config'] }} doesn't resolve to anything so it ends up blank during interpolation expected_streams = StreamsListRead(streams=[StreamsListReadStreams(name="demons", url="https://.muzan.com/api/v1/demons")]) - api = DefaultApiImpl(LowCodeSourceAdapter) + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) streams_list_request_body = StreamsListRequestBody(manifest=manifest, config=CONFIG) loop = asyncio.get_event_loop() @@ -210,7 +219,7 @@ def test_read_stream(): ), ] - mock_source_adapter_cls = make_mock_adapter_cls( + mock_source_adapter_cls = make_mock_adapter_factory( iter( [ request_log_message(request), @@ -224,7 +233,7 @@ def test_read_stream(): ) ) - api = DefaultApiImpl(mock_source_adapter_cls) + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES) loop = asyncio.get_event_loop() actual_response: StreamRead = loop.run_until_complete( @@ -275,7 +284,7 @@ def test_read_stream_with_logs(): {"message": "log message after the response"}, ] - mock_source_adapter_cls = make_mock_adapter_cls( + mock_source_adapter_cls = make_mock_adapter_factory( iter( [ AirbyteMessage(type=Type.LOG, log=AirbyteLogMessage(level=Level.INFO, message="log message before the request")), @@ -289,7 +298,7 @@ def test_read_stream_with_logs(): ) ) - api = DefaultApiImpl(mock_source_adapter_cls) + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES) loop = asyncio.get_event_loop() actual_response: StreamRead = loop.run_until_complete( @@ -318,7 +327,7 @@ def test_read_stream_record_limit(request_record_limit, max_record_limit): "body": {"custom": "field"}, } response = {"status_code": 200, "headers": {"field": "value"}, "body": '{"name": "field"}'} - mock_source_adapter_cls = make_mock_adapter_cls( + mock_source_adapter_cls = make_mock_adapter_factory( iter( [ request_log_message(request), @@ -335,7 +344,7 @@ def test_read_stream_record_limit(request_record_limit, max_record_limit): n_records = 2 record_limit = min(request_record_limit, max_record_limit) - api = DefaultApiImpl(mock_source_adapter_cls, max_record_limit=max_record_limit) + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES, max_record_limit=max_record_limit) loop = asyncio.get_event_loop() actual_response: StreamRead = loop.run_until_complete( api.read_stream(StreamReadRequestBody(manifest=MANIFEST, config=CONFIG, stream="hashiras", record_limit=request_record_limit)) @@ -361,7 +370,7 @@ def test_read_stream_default_record_limit(max_record_limit): "body": {"custom": "field"}, } response = {"status_code": 200, "headers": {"field": "value"}, "body": '{"name": "field"}'} - mock_source_adapter_cls = make_mock_adapter_cls( + mock_source_adapter_cls = make_mock_adapter_factory( iter( [ request_log_message(request), @@ -377,7 +386,7 @@ def test_read_stream_default_record_limit(max_record_limit): ) n_records = 2 - api = DefaultApiImpl(mock_source_adapter_cls, max_record_limit=max_record_limit) + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES, max_record_limit=max_record_limit) loop = asyncio.get_event_loop() actual_response: StreamRead = loop.run_until_complete( api.read_stream(StreamReadRequestBody(manifest=MANIFEST, config=CONFIG, stream="hashiras")) @@ -396,7 +405,7 @@ def test_read_stream_limit_0(): "body": {"custom": "field"}, } response = {"status_code": 200, "headers": {"field": "value"}, "body": '{"name": "field"}'} - mock_source_adapter_cls = make_mock_adapter_cls( + mock_source_adapter_cls = make_mock_adapter_factory( iter( [ request_log_message(request), @@ -410,7 +419,7 @@ def test_read_stream_limit_0(): ] ) ) - api = DefaultApiImpl(mock_source_adapter_cls) + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES) loop = asyncio.get_event_loop() with pytest.raises(ValidationError): @@ -451,7 +460,7 @@ def test_read_stream_no_records(): ), ] - mock_source_adapter_cls = make_mock_adapter_cls( + mock_source_adapter_cls = make_mock_adapter_factory( iter( [ request_log_message(request), @@ -462,7 +471,7 @@ def test_read_stream_no_records(): ) ) - api = DefaultApiImpl(mock_source_adapter_cls) + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES) loop = asyncio.get_event_loop() actual_response: StreamRead = loop.run_until_complete( @@ -499,7 +508,7 @@ def test_invalid_manifest(): expected_status_code = 400 - api = DefaultApiImpl(LowCodeSourceAdapter) + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) loop = asyncio.get_event_loop() with pytest.raises(HTTPException) as actual_exception: loop.run_until_complete(api.read_stream(StreamReadRequestBody(manifest=invalid_manifest, config={}, stream="hashiras"))) @@ -510,7 +519,7 @@ def test_invalid_manifest(): def test_read_stream_invalid_group_format(): response = {"status_code": 200, "headers": {"field": "value"}, "body": '{"name": "field"}'} - mock_source_adapter_cls = make_mock_adapter_cls( + mock_source_adapter_cls = make_mock_adapter_factory( iter( [ response_log_message(response), @@ -520,7 +529,7 @@ def test_read_stream_invalid_group_format(): ) ) - api = DefaultApiImpl(mock_source_adapter_cls) + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES) loop = asyncio.get_event_loop() with pytest.raises(HTTPException) as actual_exception: @@ -532,7 +541,7 @@ def test_read_stream_invalid_group_format(): def test_read_stream_returns_error_if_stream_does_not_exist(): expected_status_code = 400 - api = DefaultApiImpl(LowCodeSourceAdapter) + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) loop = asyncio.get_event_loop() with pytest.raises(HTTPException) as actual_exception: loop.run_until_complete(api.read_stream(StreamReadRequestBody(manifest=MANIFEST, config={}, stream="not_in_manifest"))) @@ -582,7 +591,7 @@ def test_read_stream_returns_error_if_stream_does_not_exist(): ) def test_create_request_from_log_message(log_message, expected_request): airbyte_log_message = AirbyteLogMessage(level=Level.INFO, message=log_message) - api = DefaultApiImpl(LowCodeSourceAdapter) + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) actual_request = api._create_request_from_log_message(airbyte_log_message) assert actual_request == expected_request @@ -617,15 +626,295 @@ def test_create_response_from_log_message(log_message, expected_response): response_message = f"response:{json.dumps(log_message)}" airbyte_log_message = AirbyteLogMessage(level=Level.INFO, message=response_message) - api = DefaultApiImpl(LowCodeSourceAdapter) + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) actual_response = api._create_response_from_log_message(airbyte_log_message) assert actual_response == expected_response -def make_mock_adapter_cls(return_value: Iterator) -> MagicMock: - mock_source_adapter_cls = MagicMock() +def test_read_stream_with_many_slices(): + request = {} + response = {"status_code": 200} + + mock_source_adapter_cls = make_mock_adapter_factory( + iter( + [ + slice_message(), + request_log_message(request), + response_log_message(response), + record_message("hashiras", {"name": "Muichiro Tokito"}), + slice_message(), + request_log_message(request), + response_log_message(response), + record_message("hashiras", {"name": "Shinobu Kocho"}), + record_message("hashiras", {"name": "Mitsuri Kanroji"}), + request_log_message(request), + response_log_message(response), + record_message("hashiras", {"name": "Obanai Iguro"}), + request_log_message(request), + response_log_message(response), + ] + ) + ) + + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES) + + loop = asyncio.get_event_loop() + stream_read: StreamRead = loop.run_until_complete( + api.read_stream(StreamReadRequestBody(manifest=MANIFEST, config=CONFIG, stream="hashiras")) + ) + + assert not stream_read.test_read_limit_reached + assert len(stream_read.slices) == 2 + + assert len(stream_read.slices[0].pages) == 1 + assert len(stream_read.slices[0].pages[0].records) == 1 + + assert len(stream_read.slices[1].pages) == 3 + assert len(stream_read.slices[1].pages[0].records) == 2 + assert len(stream_read.slices[1].pages[1].records) == 1 + assert len(stream_read.slices[1].pages[2].records) == 0 + + + +def test_read_stream_given_maximum_number_of_slices_then_test_read_limit_reached(): + maximum_number_of_slices = 5 + request = {} + response = {"status_code": 200} + mock_source_adapter_cls = make_mock_adapter_factory( + iter( + [ + slice_message(), + request_log_message(request), + response_log_message(response) + ] * maximum_number_of_slices + ) + ) + + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES) + + loop = asyncio.get_event_loop() + stream_read: StreamRead = loop.run_until_complete( + api.read_stream(StreamReadRequestBody(manifest=MANIFEST, config=CONFIG, stream="hashiras")) + ) + + assert stream_read.test_read_limit_reached + + +def test_read_stream_given_maximum_number_of_pages_then_test_read_limit_reached(): + maximum_number_of_pages_per_slice = 5 + request = {} + response = {"status_code": 200} + mock_source_adapter_cls = make_mock_adapter_factory( + iter( + [slice_message()] + [request_log_message(request), response_log_message(response)] * maximum_number_of_pages_per_slice + ) + ) + + api = DefaultApiImpl(mock_source_adapter_cls, MAX_PAGES_PER_SLICE, MAX_SLICES) + + loop = asyncio.get_event_loop() + stream_read: StreamRead = loop.run_until_complete( + api.read_stream(StreamReadRequestBody(manifest=MANIFEST, config=CONFIG, stream="hashiras")) + ) + + assert stream_read.test_read_limit_reached + + +def test_resolve_manifest(): + _stream_name = "stream_with_custom_requester" + _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} + + manifest = { + "version": "version", + "definitions": { + "schema_loader": {"name": "{{ options.stream_name }}", "file_path": "./source_sendgrid/schemas/{{ options.name }}.yaml"}, + "retriever": { + "paginator": { + "type": "DefaultPaginator", + "page_size": 10, + "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, + "page_token_option": {"inject_into": "path"}, + "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}"}, + }, + "requester": { + "path": "/v3/marketing/lists", + "authenticator": {"type": "BearerAuthenticator", "api_token": "{{ config.apikey }}"}, + "request_parameters": {"page_size": 10}, + }, + "record_selector": {"extractor": {"field_pointer": ["result"]}}, + }, + }, + "streams": [ + { + "type": "DeclarativeStream", + "$options": _stream_options, + "schema_loader": {"$ref": "*ref(definitions.schema_loader)"}, + "retriever": "*ref(definitions.retriever)", + }, + ], + "check": {"type": "CheckStream", "stream_names": ["lists"]}, + } + + expected_resolved_manifest = { + "type": "DeclarativeSource", + "version": "version", + "definitions": { + "schema_loader": {"name": "{{ options.stream_name }}", "file_path": "./source_sendgrid/schemas/{{ options.name }}.yaml"}, + "retriever": { + "paginator": { + "type": "DefaultPaginator", + "page_size": 10, + "page_size_option": {"inject_into": "request_parameter", "field_name": "page_size"}, + "page_token_option": {"inject_into": "path"}, + "pagination_strategy": {"type": "CursorPagination", "cursor_value": "{{ response._metadata.next }}"}, + }, + "requester": { + "path": "/v3/marketing/lists", + "authenticator": {"type": "BearerAuthenticator", "api_token": "{{ config.apikey }}"}, + "request_parameters": {"page_size": 10}, + }, + "record_selector": {"extractor": {"field_pointer": ["result"]}}, + }, + }, + "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, + "$options": _stream_options, + }, + "retriever": { + "type": "SimpleRetriever", + "paginator": { + "type": "DefaultPaginator", + "page_size": 10, + "page_size_option": { + "type": "RequestOption", + "inject_into": "request_parameter", + "field_name": "page_size", + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "page_token_option": { + "type": "RequestOption", + "inject_into": "path", + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "pagination_strategy": { + "type": "CursorPagination", + "cursor_value": "{{ response._metadata.next }}", + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "requester": { + "type": "HttpRequester", + "path": "/v3/marketing/lists", + "authenticator": { + "type": "BearerAuthenticator", + "api_token": "{{ config.apikey }}", + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "request_parameters": {"page_size": 10}, + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "record_selector": { + "type": "RecordSelector", + "extractor": { + "type": "DpathExtractor", + "field_pointer": ["result"], + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + "name": _stream_name, + "primary_key": _stream_primary_key, + "url_base": _stream_url_base, + "$options": _stream_options, + }, + ], + "check": {"type": "CheckStream", "stream_names": ["lists"]}, + } + + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) + + loop = asyncio.get_event_loop() + actual_response: ResolveManifest = loop.run_until_complete(api.resolve_manifest(ResolveManifestRequestBody(manifest=manifest))) + assert actual_response.manifest == expected_resolved_manifest + + +def test_resolve_manifest_unresolvable_references(): + expected_status_code = 400 + + invalid_manifest = { + "version": "version", + "definitions": {}, + "streams": [ + {"type": "DeclarativeStream", "retriever": "*ref(definitions.retriever)"}, + ], + "check": {"type": "CheckStream", "stream_names": ["lists"]}, + } + + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) + loop = asyncio.get_event_loop() + with pytest.raises(HTTPException) as actual_exception: + loop.run_until_complete(api.resolve_manifest(ResolveManifestRequestBody(manifest=invalid_manifest))) + + assert "Undefined reference *ref(definitions.retriever)" in actual_exception.value.detail + assert actual_exception.value.status_code == expected_status_code + + +def test_resolve_manifest_invalid(): + expected_status_code = 400 + invalid_manifest = {"version": "version"} + + api = DefaultApiImpl(LowCodeSourceAdapterFactory(MAX_PAGES_PER_SLICE, MAX_SLICES), MAX_PAGES_PER_SLICE, MAX_SLICES) + loop = asyncio.get_event_loop() + with pytest.raises(HTTPException) as actual_exception: + loop.run_until_complete(api.resolve_manifest(ResolveManifestRequestBody(manifest=invalid_manifest))) + + assert "Could not resolve manifest with error" in actual_exception.value.detail + assert actual_exception.value.status_code == expected_status_code + + +def make_mock_adapter_factory(return_value: Iterator) -> MagicMock: + mock_source_adapter_factory = MagicMock() mock_source_adapter = MagicMock() mock_source_adapter.read_stream.return_value = return_value - mock_source_adapter_cls.return_value = mock_source_adapter - return mock_source_adapter_cls + mock_source_adapter_factory.create.return_value = mock_source_adapter + return mock_source_adapter_factory diff --git a/airbyte-connector-builder-server/unit_tests/connector_builder/impl/test_low_code_cdk_adapter.py b/airbyte-connector-builder-server/unit_tests/connector_builder/impl/test_low_code_cdk_adapter.py index b097f5e9a2933..645969186ff9e 100644 --- a/airbyte-connector-builder-server/unit_tests/connector_builder/impl/test_low_code_cdk_adapter.py +++ b/airbyte-connector-builder-server/unit_tests/connector_builder/impl/test_low_code_cdk_adapter.py @@ -10,6 +10,8 @@ import requests from airbyte_cdk.models import AirbyteLogMessage, AirbyteMessage, AirbyteRecordMessage, Level, Type from airbyte_cdk.sources.declarative.declarative_stream import DeclarativeStream +from airbyte_cdk.sources.declarative.requesters.paginators import PaginatorTestReadDecorator +from airbyte_cdk.sources.declarative.retrievers.simple_retriever import SimpleRetrieverTestReadDecorator from airbyte_cdk.sources.declarative.parsers.custom_exceptions import UndefinedReferenceException from airbyte_cdk.sources.streams.http import HttpStream @@ -176,10 +178,37 @@ def parse_response( } } +MANIFEST_WITH_PAGINATOR = { + "version": "0.1.0", + "type" : "DeclarativeSource", + "definitions": { + }, + "streams": [ + { + "type" : "DeclarativeStream", + "retriever": { + "type" : "SimpleRetriever", + "record_selector": {"extractor": {"field_pointer": ["items"], "type": "DpathExtractor"}, "type": "RecordSelector"}, + "paginator": { + "type": "DefaultPaginator", + "pagination_strategy": { + "type": "OffsetIncrement", + "page_size": 10 + }, + "url_base": "https://demonslayers.com/api/v1/" + }, + "requester": {"url_base": "https://demonslayers.com/api/v1/", "http_method": "GET", "type": "HttpRequester"}, + }, + "$options": {"name": "hashiras", "path": "/hashiras"}, + }, + ], + "check": {"stream_names": ["hashiras"], "type": "CheckStream"}, +} + def test_get_http_streams(): expected_urls = {"https://demonslayers.com/api/v1/breathing_techniques", "https://demonslayers.com/api/v1/hashiras"} - adapter = LowCodeSourceAdapter(MANIFEST) + adapter = LowCodeSourceAdapter(MANIFEST, MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, MAXIMUM_NUMBER_OF_SLICES) actual_streams = adapter.get_http_streams(config={}) actual_urls = {http_stream.url_base + http_stream.path() for http_stream in actual_streams} @@ -187,10 +216,13 @@ def test_get_http_streams(): assert actual_urls == expected_urls +MAXIMUM_NUMBER_OF_PAGES_PER_SLICE = 5 +MAXIMUM_NUMBER_OF_SLICES = 5 + def test_get_http_manifest_with_references(): expected_urls = {"https://demonslayers.com/api/v1/ranks"} - adapter = LowCodeSourceAdapter(MANIFEST_WITH_REFERENCES) + adapter = LowCodeSourceAdapter(MANIFEST_WITH_REFERENCES, MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, MAXIMUM_NUMBER_OF_SLICES) actual_streams = adapter.get_http_streams(config={}) actual_urls = {http_stream.url_base + http_stream.path() for http_stream in actual_streams} @@ -204,7 +236,7 @@ def test_get_http_streams_non_declarative_streams(): mock_source = MagicMock() mock_source.streams.return_value = [non_declarative_stream] - adapter = LowCodeSourceAdapter(MANIFEST) + adapter = LowCodeSourceAdapter(MANIFEST, MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, MAXIMUM_NUMBER_OF_SLICES) adapter._source = mock_source with pytest.raises(TypeError): adapter.get_http_streams(config={}) @@ -217,7 +249,7 @@ def test_get_http_streams_non_http_stream(): mock_source = MagicMock() mock_source.streams.return_value = [declarative_stream_non_http_retriever] - adapter = LowCodeSourceAdapter(MANIFEST) + adapter = LowCodeSourceAdapter(MANIFEST, MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, MAXIMUM_NUMBER_OF_SLICES) adapter._source = mock_source with pytest.raises(TypeError): adapter.get_http_streams(config={}) @@ -247,7 +279,7 @@ def test_read_streams(): mock_source = MagicMock() mock_source.read.return_value = expected_messages - adapter = LowCodeSourceAdapter(MANIFEST) + adapter = LowCodeSourceAdapter(MANIFEST, MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, MAXIMUM_NUMBER_OF_SLICES) adapter._source = mock_source actual_messages = list(adapter.read_stream("hashiras", {})) @@ -272,7 +304,7 @@ def return_value(*args, **kwargs): mock_source.read.side_effect = return_value - adapter = LowCodeSourceAdapter(MANIFEST) + adapter = LowCodeSourceAdapter(MANIFEST, MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, MAXIMUM_NUMBER_OF_SLICES) adapter._source = mock_source actual_messages = list(adapter.read_stream("hashiras", {})) @@ -309,4 +341,14 @@ def test_read_streams_invalid_reference(): } with pytest.raises(UndefinedReferenceException): - LowCodeSourceAdapter(invalid_reference_manifest) + LowCodeSourceAdapter(invalid_reference_manifest, MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, MAXIMUM_NUMBER_OF_SLICES) + + +def test_stream_use_read_test_retriever_and_paginator(): + adapter = LowCodeSourceAdapter(MANIFEST_WITH_PAGINATOR, MAXIMUM_NUMBER_OF_PAGES_PER_SLICE, MAXIMUM_NUMBER_OF_SLICES) + streams = adapter.get_http_streams(config={}) + + assert streams + for stream in streams: + assert isinstance(stream, SimpleRetrieverTestReadDecorator) + assert isinstance(stream.paginator, PaginatorTestReadDecorator) diff --git a/airbyte-container-orchestrator/Dockerfile b/airbyte-container-orchestrator/Dockerfile index 07480cd50773d..b70efb99d8ec1 100644 --- a/airbyte-container-orchestrator/Dockerfile +++ b/airbyte-container-orchestrator/Dockerfile @@ -10,7 +10,7 @@ RUN curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/s && chmod +x kubectl && mv kubectl /usr/local/bin/ # Don't change this manually. Bump version expects to make moves based on this string -ARG VERSION=0.40.28 +ARG VERSION=0.40.30 ENV APPLICATION airbyte-container-orchestrator ENV VERSION=${VERSION} @@ -18,6 +18,9 @@ ENV AIRBYTE_ENTRYPOINT "/app/${APPLICATION}-${VERSION}/bin/${APPLICATION}" WORKDIR /app +# Grab well-known types file +COPY WellKnownTypes.json /app + # Move orchestrator app ADD bin/${APPLICATION}-${VERSION}.tar /app diff --git a/airbyte-container-orchestrator/build.gradle b/airbyte-container-orchestrator/build.gradle index 55e9bbd3bd381..7adaa37046282 100644 --- a/airbyte-container-orchestrator/build.gradle +++ b/airbyte-container-orchestrator/build.gradle @@ -1,3 +1,6 @@ +import groovy.json.JsonBuilder +import groovy.yaml.YamlSlurper + plugins { id 'application' } @@ -54,6 +57,26 @@ application { applicationDefaultJvmArgs = ['-XX:+ExitOnOutOfMemoryError', '-XX:MaxRAMPercentage=75.0'] } +// Duplicated from :airbyte-worker, eventually, this should be handled in :airbyte-protocol +task generateWellKnownTypes() { + doLast { + def wellKnownTypesYaml = project(':airbyte-protocol').file('protocol-models/src/main/resources/airbyte_protocol/well_known_types.yaml').text + def parsedYaml = new YamlSlurper().parseText(wellKnownTypesYaml) + def wellKnownTypesJson = new JsonBuilder(parsedYaml).toPrettyString() + def targetFile = project.file("build/docker/WellKnownTypes.json") + targetFile.getParentFile().mkdirs() + targetFile.text = wellKnownTypesJson + } +} + tasks.named("buildDockerImage") { dependsOn copyGeneratedTar + dependsOn generateWellKnownTypes +} + +// Ideally, we would have buildDockerImage depend on generateWellKnownTypes +// but some of our actions use copyGeneratedTar as the "set up the docker build context" task +// so we'll just add it here. +tasks.named("copyGeneratedTar") { + dependsOn generateWellKnownTypes } diff --git a/airbyte-container-orchestrator/src/main/java/io/airbyte/container_orchestrator/orchestrator/ReplicationJobOrchestrator.java b/airbyte-container-orchestrator/src/main/java/io/airbyte/container_orchestrator/orchestrator/ReplicationJobOrchestrator.java index 4e2496f3735eb..c73f06f4e0cbf 100644 --- a/airbyte-container-orchestrator/src/main/java/io/airbyte/container_orchestrator/orchestrator/ReplicationJobOrchestrator.java +++ b/airbyte-container-orchestrator/src/main/java/io/airbyte/container_orchestrator/orchestrator/ReplicationJobOrchestrator.java @@ -123,6 +123,7 @@ public Optional runJob() throws Exception { sourceLauncherConfig.getDockerImage(), processFactory, syncInput.getSourceResourceRequirements(), + sourceLauncherConfig.getAllowedHosts(), useIsolatedPool, featureFlags); @@ -133,6 +134,7 @@ public Optional runJob() throws Exception { destinationLauncherConfig.getDockerImage(), processFactory, syncInput.getDestinationResourceRequirements(), + destinationLauncherConfig.getAllowedHosts(), useIsolatedPool, featureFlags); diff --git a/airbyte-cron/Dockerfile b/airbyte-cron/Dockerfile index f820410130c71..cae47e8b8ec48 100644 --- a/airbyte-cron/Dockerfile +++ b/airbyte-cron/Dockerfile @@ -1,7 +1,7 @@ ARG JDK_IMAGE=airbyte/airbyte-base-java-image:1.0 FROM ${JDK_IMAGE} AS cron -ARG VERSION=0.40.28 +ARG VERSION=0.40.30 ENV APPLICATION airbyte-cron ENV VERSION ${VERSION} diff --git a/airbyte-db/db-lib/src/main/java/io/airbyte/db/instance/configs/migrations/V0_40_28_001__AddSuggestedStreams.java b/airbyte-db/db-lib/src/main/java/io/airbyte/db/instance/configs/migrations/V0_40_28_001__AddSuggestedStreams.java new file mode 100644 index 0000000000000..fd542e7c0ce40 --- /dev/null +++ b/airbyte-db/db-lib/src/main/java/io/airbyte/db/instance/configs/migrations/V0_40_28_001__AddSuggestedStreams.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.db.instance.configs.migrations; + +import org.flywaydb.core.api.migration.BaseJavaMigration; +import org.flywaydb.core.api.migration.Context; +import org.jooq.DSLContext; +import org.jooq.impl.DSL; +import org.jooq.impl.SQLDataType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class V0_40_28_001__AddSuggestedStreams extends BaseJavaMigration { + + private static final Logger LOGGER = LoggerFactory.getLogger(V0_40_28_001__AddSuggestedStreams.class); + + @Override + public void migrate(final Context context) throws Exception { + LOGGER.info("Running migration: {}", this.getClass().getSimpleName()); + + // Warning: please do not use any jOOQ generated code to write a migration. + // As database schema changes, the generated jOOQ code can be deprecated. So + // old migration may not compile if there is any generated code. + try (final DSLContext ctx = DSL.using(context.getConnection())) { + addSuggestedStreams(ctx); + } + } + + private static void addSuggestedStreams(final DSLContext ctx) { + ctx.alterTable("actor_definition") + .addColumnIfNotExists(DSL.field( + "suggested_streams", + SQLDataType.JSONB.nullable(true))) + .execute(); + } + +} diff --git a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/JdbcDatabase.java b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/JdbcDatabase.java index 18fb509c225fb..b59c97e5db9d7 100644 --- a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/JdbcDatabase.java +++ b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/JdbcDatabase.java @@ -29,6 +29,8 @@ public abstract class JdbcDatabase extends SqlDatabase { protected final JdbcCompatibleSourceOperations sourceOperations; + protected Exception streamException; + protected boolean isStreamFailed; public JdbcDatabase(final JdbcCompatibleSourceOperations sourceOperations) { this.sourceOperations = sourceOperations; diff --git a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/StreamingJdbcDatabase.java b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/StreamingJdbcDatabase.java index ba8bd82ca9dbd..6fb7f3f60948d 100644 --- a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/StreamingJdbcDatabase.java +++ b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/StreamingJdbcDatabase.java @@ -71,6 +71,9 @@ public Stream unsafeQuery(final CheckedFunction Stream unsafeQuery(final CheckedFunction Stream toUnsafeStream(final ResultSet resultSet, - final CheckedFunction mapper, - final JdbcStreamingQueryConfig streamingConfig) { + protected Stream toUnsafeStream(final ResultSet resultSet, + final CheckedFunction mapper, + final JdbcStreamingQueryConfig streamingConfig) { return StreamSupport.stream(new Spliterators.AbstractSpliterator<>(Long.MAX_VALUE, Spliterator.ORDERED) { @Override @@ -102,7 +105,11 @@ public boolean tryAdvance(final Consumer action) { return true; } catch (final SQLException e) { LOGGER.error("SQLState: {}, Message: {}", e.getSQLState(), e.getMessage()); - throw new RuntimeException(e); + streamException = e; + isStreamFailed = true; + // throwing an exception in tryAdvance() method lead to the endless loop in Spliterator and stream + // will never close + return false; } } diff --git a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/FetchSizeConstants.java b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/FetchSizeConstants.java index d5a6d7615eaf7..29c8f0dac2c20 100644 --- a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/FetchSizeConstants.java +++ b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/FetchSizeConstants.java @@ -12,7 +12,6 @@ public final class FetchSizeConstants { // limited by the heap size. public static final double TARGET_BUFFER_SIZE_RATIO = 0.6; public static final long MIN_BUFFER_BYTE_SIZE = 250L * 1024L * 1024L; // 250 MB - public static final long MAX_BUFFER_BYTE_SIZE = 1024L * 1024L * 1024L; // 1GB // sample size for making the first estimation of the row size public static final int INITIAL_SAMPLE_SIZE = 10; // sample every N rows during the post-initial stage @@ -20,7 +19,7 @@ public final class FetchSizeConstants { public static final int MIN_FETCH_SIZE = 1; public static final int DEFAULT_FETCH_SIZE = 1000; - public static final int MAX_FETCH_SIZE = 1_000_000; + public static final int MAX_FETCH_SIZE = 2_000_000; private FetchSizeConstants() {} diff --git a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/JdbcStreamingQueryConfig.java b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/JdbcStreamingQueryConfig.java index c6ad8e159c16b..b6e0e53624009 100644 --- a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/JdbcStreamingQueryConfig.java +++ b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/JdbcStreamingQueryConfig.java @@ -10,6 +10,13 @@ import java.sql.SQLException; import java.sql.Statement; +/* + * Interface that defines how to stream results from a Jdbc database. This involves determining + * updating what the fetch size should be based on the size of the existing rows. 1. The config + * initializes the fetch size and sets up the estimator. 2. The config then accepts each row and + * feeds it to the estimator. If the estimator has a new estimate, it updates the fetch size. + */ + public interface JdbcStreamingQueryConfig extends CheckedBiConsumer { void initialize(final Connection connection, final Statement statement) throws SQLException; diff --git a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/TwoStageSizeEstimator.java b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/TwoStageSizeEstimator.java index 8a265286d9636..9ede34c70cff7 100644 --- a/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/TwoStageSizeEstimator.java +++ b/airbyte-db/db-lib/src/main/java/io/airbyte/db/jdbc/streaming/TwoStageSizeEstimator.java @@ -67,8 +67,7 @@ static long getTargetBufferByteSize(final Long maxMemory) { return FetchSizeConstants.MIN_BUFFER_BYTE_SIZE; } final long targetBufferByteSize = Math.round(maxMemory * FetchSizeConstants.TARGET_BUFFER_SIZE_RATIO); - final long finalBufferByteSize = Math.min(FetchSizeConstants.MAX_BUFFER_BYTE_SIZE, - Math.max(FetchSizeConstants.MIN_BUFFER_BYTE_SIZE, targetBufferByteSize)); + final long finalBufferByteSize = Math.max(FetchSizeConstants.MIN_BUFFER_BYTE_SIZE, targetBufferByteSize); LOGGER.info("Max memory limit: {}, JDBC buffer size: {}", maxMemory, finalBufferByteSize); return finalBufferByteSize; } diff --git a/airbyte-db/db-lib/src/main/resources/configs_database/schema_dump.txt b/airbyte-db/db-lib/src/main/resources/configs_database/schema_dump.txt index 30115101e66e5..d83b9eabad512 100644 --- a/airbyte-db/db-lib/src/main/resources/configs_database/schema_dump.txt +++ b/airbyte-db/db-lib/src/main/resources/configs_database/schema_dump.txt @@ -59,6 +59,7 @@ create table "public"."actor_definition"( "supports_dbt" bool null, "normalization_integration_type" varchar(255) null, "allowed_hosts" jsonb null, + "suggested_streams" jsonb null, constraint "actor_definition_pkey" primary key ("id") ); diff --git a/airbyte-db/db-lib/src/test/java/io/airbyte/db/jdbc/streaming/TwoStageSizeEstimatorTest.java b/airbyte-db/db-lib/src/test/java/io/airbyte/db/jdbc/streaming/TwoStageSizeEstimatorTest.java index 61cc26ae990be..9c527da60891f 100644 --- a/airbyte-db/db-lib/src/test/java/io/airbyte/db/jdbc/streaming/TwoStageSizeEstimatorTest.java +++ b/airbyte-db/db-lib/src/test/java/io/airbyte/db/jdbc/streaming/TwoStageSizeEstimatorTest.java @@ -32,9 +32,6 @@ void testGetTargetBufferByteSize() { TwoStageSizeEstimator.getTargetBufferByteSize(Long.MAX_VALUE)); assertEquals(FetchSizeConstants.MIN_BUFFER_BYTE_SIZE, TwoStageSizeEstimator.getTargetBufferByteSize(FetchSizeConstants.MIN_BUFFER_BYTE_SIZE - 10L)); - assertEquals(FetchSizeConstants.MAX_BUFFER_BYTE_SIZE, - TwoStageSizeEstimator.getTargetBufferByteSize( - Math.round(FetchSizeConstants.MAX_BUFFER_BYTE_SIZE / FetchSizeConstants.TARGET_BUFFER_SIZE_RATIO + 10L))); } } diff --git a/airbyte-featureflag/src/main/kotlin/Client.kt b/airbyte-featureflag/src/main/kotlin/Client.kt index ddf92f665fc3d..c9a7758c7b20c 100644 --- a/airbyte-featureflag/src/main/kotlin/Client.kt +++ b/airbyte-featureflag/src/main/kotlin/Client.kt @@ -33,26 +33,30 @@ sealed interface FeatureFlagClient { } /** - * Config file based feature-flag client. Feature-flag are derived from a yaml config file. - * Also supports flags defined via environment-variables via the [EnvVar] class. + * Config file based feature-flag client. + * + * If no [config] is provided, will return the default state for each [Flag] requested. + * Supports [EnvVar] flags as well. * - * @param [config] the location of the yaml config file that contains the feature-flag definitions. - * The [config] will be watched for changes and the internal representation of the [config] will be updated to match. + * @param [config] optional location of the yaml config file that contains the feature-flag definitions. + * If the [config] is provided, it will be watched for changes and the internal representation of the [config] will be updated to match. */ -class ConfigFileClient(config: Path) : FeatureFlagClient { +class ConfigFileClient(config: Path?) : FeatureFlagClient { /** [flags] holds the mappings of the flag-name to the flag properties */ - private var flags: Map = readConfig(config) + private var flags: Map = config?.let { readConfig(it) } ?: mapOf() /** lock is used for ensuring access to the flags map is handled correctly when the map is being updated. */ private val lock = ReentrantReadWriteLock() init { - if (!config.isRegularFile()) { - throw IllegalArgumentException("config must reference a file") - } + config?.also { + if (!it.isRegularFile()) { + throw IllegalArgumentException("config must reference a file") + } - config.onChange { - lock.write { flags = readConfig(config) } + it.onChange { + lock.write { flags = readConfig(config) } + } } } @@ -175,9 +179,23 @@ private fun Path.onChange(block: () -> Unit) { * Once v6 is GA, this method would be removed and replaced with toLDContext. */ private fun Context.toLDUser(): LDUser = when (this) { - is Multi -> throw IllegalArgumentException("LDv5 does not support multiple contexts") - else -> { + is Multi -> { val builder = LDUser.Builder(key) + with(contexts) { + // Add each individual context's value as an attribute on the LDUser. + // This allows for more granular targeting of feature-flag rules that target LDUser types. + forEach { builder.custom(it.kind, it.key) } + + if (all { it.key == ANONYMOUS.toString() }) { + builder.anonymous(true) + } + } + builder.build() + } + + else -> { + // for LDv5 Users, add the context type and valid as a custom attribute + val builder = LDUser.Builder(key).apply { custom(kind, key) } if (this.key == ANONYMOUS.toString()) { builder.anonymous(true) } diff --git a/airbyte-featureflag/src/main/kotlin/Context.kt b/airbyte-featureflag/src/main/kotlin/Context.kt index 490e32580422b..236120aa85646 100644 --- a/airbyte-featureflag/src/main/kotlin/Context.kt +++ b/airbyte-featureflag/src/main/kotlin/Context.kt @@ -39,8 +39,24 @@ data class Multi(val contexts: List) : Context { /** This value MUST be "multi" to properly sync with the LaunchDarkly client. */ override val kind = "multi" - /** Multi contexts don't have a key */ - override val key = "" + /** + * Multi contexts don't have a key, however for LDv5 reasons, a key must exist. + * + * Determine what the key should be based on the priority order of: + * workspace -> connection -> source -> destination -> user + * taking the first value + * + * When LDv5 support is dropped replace this with: override vale key = "" + */ + override val key = when { + /** Intellij is going to recommend replacing .sortedBy with .minByOrNull, ignore this recommendation. */ + fetchContexts().isNotEmpty() -> fetchContexts().sortedBy { it.key }.first().key + fetchContexts().isNotEmpty() -> fetchContexts().sortedBy { it.key }.first().key + fetchContexts().isNotEmpty() -> fetchContexts().sortedBy { it.key }.first().key + fetchContexts().isNotEmpty() -> fetchContexts().sortedBy { it.key }.first().key + fetchContexts().isNotEmpty() -> fetchContexts().sortedBy { it.key }.first().key + else -> throw IllegalArgumentException("unsupported context: ${contexts.joinToString { it.kind }}") + } init { // ensure there are no nested contexts (i.e. this Multi does not contain another Multi) diff --git a/airbyte-featureflag/src/main/kotlin/Flags.kt b/airbyte-featureflag/src/main/kotlin/Flags.kt index bfc1dd0a6a820..db1f57184d023 100644 --- a/airbyte-featureflag/src/main/kotlin/Flags.kt +++ b/airbyte-featureflag/src/main/kotlin/Flags.kt @@ -16,6 +16,8 @@ object AutoDetectSchema : EnvVar(envVar = "AUTO_DETECT_SCHEMA") object NeedStateValidation : EnvVar(envVar = "NEED_STATE_VALIDATION") object ApplyFieldSelection : EnvVar(envVar = "APPLY_FIELD_SELECTION") +object PerfBackgroundJsonValidation : Temporary(key = "performance.backgroundJsonSchemaValidation") + object FieldSelectionWorkspaces : EnvVar(envVar = "FIELD_SELECTION_WORKSPACES") { override fun enabled(ctx: Context): Boolean { val enabledWorkspaceIds: List = fetcher(key) diff --git a/airbyte-featureflag/src/main/kotlin/config/Factory.kt b/airbyte-featureflag/src/main/kotlin/config/Factory.kt index d80a4673a13e7..8cf81ed5f6734 100644 --- a/airbyte-featureflag/src/main/kotlin/config/Factory.kt +++ b/airbyte-featureflag/src/main/kotlin/config/Factory.kt @@ -10,8 +10,6 @@ import io.airbyte.featureflag.FeatureFlagClient import io.airbyte.featureflag.LaunchDarklyClient import io.micronaut.context.annotation.Factory import io.micronaut.context.annotation.Property -import io.micronaut.context.annotation.Requirements -import io.micronaut.context.annotation.Requires import jakarta.inject.Singleton import java.nio.file.Path @@ -20,22 +18,23 @@ internal const val CONFIG_OSS_KEY = "airbyte.feature-flag.path" @Factory class Factory { - @Requirements( - Requires(property = CONFIG_LD_KEY), - Requires(missingProperty = CONFIG_OSS_KEY), - ) @Singleton - fun Cloud(@Property(name = CONFIG_LD_KEY) apiKey: String): FeatureFlagClient { - val client = LDClient(apiKey) - return LaunchDarklyClient(client) - } + fun featureFlagClient( + @Property(name = CONFIG_LD_KEY) apiKey: String, + @Property(name = CONFIG_OSS_KEY) configPath: String, + ): FeatureFlagClient { + // I cannot get the @Requires annotation to work to load one instance if a property is set and another instance if unset. + // Combined both cases together here instead resulting to manually doing the is-set check via the isNotBlank function. + if (apiKey.isNotBlank()) { + val client = LDClient(apiKey) + return LaunchDarklyClient(client) + } - @Requirements( - Requires(property = CONFIG_OSS_KEY), - Requires(missingProperty = CONFIG_LD_KEY), - ) - fun Platform(@Property(name = CONFIG_OSS_KEY) configPath: String): FeatureFlagClient { - val path = Path.of(configPath) + val path: Path? = if (configPath.isNotBlank()) { + Path.of(configPath) + } else { + null + } return ConfigFileClient(path) } } diff --git a/airbyte-featureflag/src/test/kotlin/ClientTest.kt b/airbyte-featureflag/src/test/kotlin/ClientTest.kt index dbbfc8ad55d34..4a538da7d5091 100644 --- a/airbyte-featureflag/src/test/kotlin/ClientTest.kt +++ b/airbyte-featureflag/src/test/kotlin/ClientTest.kt @@ -10,7 +10,6 @@ import io.airbyte.featureflag.EnvVar import io.airbyte.featureflag.FeatureFlagClient import io.airbyte.featureflag.Flag import io.airbyte.featureflag.LaunchDarklyClient -import io.airbyte.featureflag.Multi import io.airbyte.featureflag.Temporary import io.airbyte.featureflag.TestClient import io.airbyte.featureflag.User @@ -32,7 +31,7 @@ import kotlin.test.assertTrue class ConfigFileClient { @Test - fun `verify platform functionality`() { + fun `verify config-file functionality`() { val cfg = Path.of("src", "test", "resources", "feature-flags.yml") val client: FeatureFlagClient = ConfigFileClient(cfg) @@ -57,6 +56,19 @@ class ConfigFileClient { * * TODO: move this to a different test suite */ + @Test + fun `verify no-config file returns default flag state`() { + val client: FeatureFlagClient = ConfigFileClient(null) + val defaultFalse = Temporary(key = "default-false") + val defaultTrue = Temporary(key = "default-true", default = true) + + val ctx = Workspace("workspace") + with(client) { + assertTrue { enabled(defaultTrue, ctx) } + assertFalse { enabled(defaultFalse, ctx) } + } + } + @Test @Ignore fun `verify platform reload capabilities`() { @@ -161,22 +173,6 @@ class LaunchDarklyClient { } } - @Test - fun `verify multi-context is not supported`() { - /** - * TODO replace this test once LDv6 is being used and Context.toLDUser no longer exists, to verify Multi support - */ - val ldClient: LDClient = mockk() - every { ldClient.boolVariation(any(), any(), any()) } returns false - - val client: FeatureFlagClient = LaunchDarklyClient(ldClient) - val multiCtx = Multi(listOf(User("test"))) - - assertFailsWith { - client.enabled(Temporary(key = "test"), multiCtx) - } - } - @Test fun `verify env-var flag support`() { val ldClient: LDClient = mockk() diff --git a/airbyte-featureflag/src/test/kotlin/ContextTest.kt b/airbyte-featureflag/src/test/kotlin/ContextTest.kt index 042104d9d2207..d9f2c2ae9f928 100644 --- a/airbyte-featureflag/src/test/kotlin/ContextTest.kt +++ b/airbyte-featureflag/src/test/kotlin/ContextTest.kt @@ -9,18 +9,75 @@ import io.airbyte.featureflag.Source import io.airbyte.featureflag.User import io.airbyte.featureflag.Workspace import org.junit.jupiter.api.Test +import kotlin.test.assertEquals +import kotlin.test.assertFailsWith class MultiTest { @Test fun `verify data`() { - val user = User("user-id") + val source = Source("source") val workspace = Workspace("workspace") - Multi(listOf(user, workspace)).also { + Multi(listOf(source, workspace)).also { assert(it.kind == "multi") - assert(it.key == "") } } + + @Test + fun `Multi cannot contain another Multi`() { + val source = Source("source") + val workspace = Workspace("workspace") + val multi = Multi(listOf(source, workspace)) + + assertFailsWith { + Multi(listOf(source, workspace, multi)) + } + } + + @Test + fun `fetchContexts returns correct results`() { + val source1 = Source("source1") + val source2 = Source("source2") + val workspace = Workspace("workspace") + val multi = Multi(listOf(source1, source2, workspace)) + + assertEquals(listOf(source1, source2), multi.fetchContexts(), "two source contexts") + assertEquals(listOf(workspace), multi.fetchContexts(), "one workspace context") + assertEquals(listOf(), multi.fetchContexts(), "should be empty as no connection context was provided") + } + + @Test + fun `key set correctly based on contexts`() { + val workspace = Workspace("workspace") + val connection = Connection("connection") + val source = Source("source") + val destination = Destination("destination") + val user = User("user") + + Multi(listOf(user, destination, source, connection, workspace)).also { + assert(it.key == workspace.key) + } + Multi(listOf(user, destination, source, connection)).also { + assert(it.key == connection.key) + } + Multi(listOf(user, destination, source)).also { + assert(it.key == source.key) + } + Multi(listOf(user, destination)).also { + assert(it.key == destination.key) + } + Multi(listOf(user)).also { + assert(it.key == user.key) + } + } + + @Test + fun `no contexts is an exception`() { + assertFailsWith { + Multi(listOf()) + } + } + } class WorkspaceTest { diff --git a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/BlobStorageOperations.java b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/BlobStorageOperations.java index d131470e976e9..5613837df73e7 100644 --- a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/BlobStorageOperations.java +++ b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/BlobStorageOperations.java @@ -22,9 +22,9 @@ protected BlobStorageOperations() { public abstract String getBucketObjectPath(String namespace, String streamName, DateTime writeDatetime, String customFormat); /** - * Create a storage object where to store data in the destination for a @param objectPath + * Ensure that the bucket specified in the config exists */ - public abstract void createBucketObjectIfNotExists(String objectPath) throws Exception; + public abstract void createBucketIfNotExists() throws Exception; /** * Upload the data files into the storage area. @@ -39,6 +39,14 @@ public abstract String uploadRecordsToBucket(SerializableBuffer recordsData, Str */ public abstract void cleanUpBucketObject(String objectPath, List stagedFiles) throws Exception; + /** + * Deletes all the bucket objects for the specified bucket path + * + * @param namespace Optional source-defined namespace name + * @param streamName Name of the stream + * @param objectPath file path to where staging files are stored + * @param pathFormat formatted string for the path + */ public abstract void cleanUpBucketObject(String namespace, String streamName, String objectPath, String pathFormat); public abstract void dropBucketObject(String objectPath); diff --git a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/S3BaseChecks.java b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/S3BaseChecks.java index b5f2037e842b7..0873cbb87a01f 100644 --- a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/S3BaseChecks.java +++ b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/S3BaseChecks.java @@ -120,7 +120,7 @@ private static void attemptWriteAndDeleteS3Object(final S3StorageOperations stor final var bucketPath = s3Config.getBucketPath(); if (!Strings.isNullOrEmpty(bucketPath)) { - storageOperations.createBucketObjectIfNotExists(bucketPath); + storageOperations.createBucketIfNotExists(); } s3.putObject(s3Bucket, outputTableName, "check-content"); testIAMUserHasListObjectPermission(s3, s3Bucket); diff --git a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/S3StorageOperations.java b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/S3StorageOperations.java index 5994634351420..ba9f3a19ceabb 100644 --- a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/S3StorageOperations.java +++ b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/S3StorageOperations.java @@ -8,6 +8,7 @@ import alex.mojaki.s3upload.StreamTransferManager; import com.amazonaws.services.s3.AmazonS3; +import com.amazonaws.services.s3.model.AmazonS3Exception; import com.amazonaws.services.s3.model.DeleteObjectsRequest; import com.amazonaws.services.s3.model.DeleteObjectsRequest.KeyVersion; import com.amazonaws.services.s3.model.ListObjectsRequest; @@ -15,12 +16,14 @@ import com.fasterxml.jackson.databind.JsonNode; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import io.airbyte.commons.exceptions.ConfigErrorException; import io.airbyte.commons.string.Strings; import io.airbyte.integrations.destination.NamingConventionTransformer; import io.airbyte.integrations.destination.record_buffer.SerializableBuffer; import io.airbyte.integrations.destination.s3.template.S3FilenameTemplateManager; import io.airbyte.integrations.destination.s3.template.S3FilenameTemplateParameterObject; import io.airbyte.integrations.destination.s3.util.StreamTransferManagerFactory; +import io.airbyte.integrations.util.ConnectorExceptionUtil; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -95,23 +98,15 @@ public String getBucketObjectPath(final String namespace, final String streamNam /** * Create a directory object at the specified location. Creates the bucket if necessary. - * - * @param objectPath The directory to create. Must be a nonempty string. */ @Override - public void createBucketObjectIfNotExists(final String objectPath) { + public void createBucketIfNotExists() { final String bucket = s3Config.getBucketName(); - final String folderPath = objectPath.endsWith("/") ? objectPath : objectPath + "/"; if (!doesBucketExist(bucket)) { LOGGER.info("Bucket {} does not exist; creating...", bucket); s3Client.createBucket(bucket); LOGGER.info("Bucket {} has been created.", bucket); } - if (!s3Client.doesObjectExist(bucket, folderPath)) { - LOGGER.info("Storage Object {}/{} does not exist in bucket; creating...", bucket, objectPath); - s3Client.putObject(bucket, folderPath, ""); - LOGGER.info("Storage Object {}/{} has been created in bucket.", bucket, objectPath); - } } protected boolean doesBucketExist(final String bucket) { @@ -138,7 +133,18 @@ public String uploadRecordsToBucket(final SerializableBuffer recordsData, exceptionsThrown.add(e); } } - throw new RuntimeException(String.format("Exceptions thrown while uploading records into storage: %s", Strings.join(exceptionsThrown, "\n"))); + // Verifying that ALL exceptions are authentication related before assuming this is a configuration + // issue + // reduces risk of misidentifying errors or reporting a transient error. + final boolean areAllExceptionsAuthExceptions = exceptionsThrown.stream().filter(e -> e instanceof AmazonS3Exception) + .map(s3e -> ((AmazonS3Exception) s3e).getStatusCode()) + .filter(ConnectorExceptionUtil.HTTP_AUTHENTICATION_ERROR_CODES::contains) + .count() == exceptionsThrown.size(); + if (areAllExceptionsAuthExceptions) { + throw new ConfigErrorException(exceptionsThrown.get(0).getMessage(), exceptionsThrown.get(0)); + } else { + throw new RuntimeException(String.format("Exceptions thrown while uploading records into storage: %s", Strings.join(exceptionsThrown, "\n"))); + } } /** diff --git a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/avro/JsonSchemaType.java b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/avro/JsonSchemaType.java index ae874c0c8c5d1..3daade3589788 100644 --- a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/avro/JsonSchemaType.java +++ b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/avro/JsonSchemaType.java @@ -23,7 +23,7 @@ public enum JsonSchemaType { DATE_V1("WellKnownTypes.json#/definitions/Date", Schema.Type.INT), TIMESTAMP_WITH_TIMEZONE_V1("WellKnownTypes.json#/definitions/TimestampWithTimezone", Schema.Type.LONG), TIMESTAMP_WITHOUT_TIMEZONE_V1("WellKnownTypes.json#/definitions/TimestampWithoutTimezone", Schema.Type.LONG), - TIME_WITH_TIMEZONE_V1("WellKnownTypes.json#/definitions/TimeWithTimezone", Schema.Type.LONG), + TIME_WITH_TIMEZONE_V1("WellKnownTypes.json#/definitions/TimeWithTimezone", Schema.Type.STRING), TIME_WITHOUT_TIMEZONE_V1("WellKnownTypes.json#/definitions/TimeWithoutTimezone", Schema.Type.LONG), OBJECT("object", Schema.Type.RECORD), ARRAY("array", Schema.Type.ARRAY), diff --git a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/avro/JsonToAvroSchemaConverter.java b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/avro/JsonToAvroSchemaConverter.java index 791b454394e32..991a5e0e2ba6f 100644 --- a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/avro/JsonToAvroSchemaConverter.java +++ b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/avro/JsonToAvroSchemaConverter.java @@ -225,11 +225,12 @@ Schema parseSingleType(final String fieldName, final Schema fieldSchema; switch (fieldType) { - case INTEGER_V1, NUMBER_V1, BOOLEAN_V1, STRING_V1, BINARY_DATA_V1 -> fieldSchema = Schema.create(fieldType.getAvroType()); + case INTEGER_V1, NUMBER_V1, BOOLEAN_V1, STRING_V1, TIME_WITH_TIMEZONE_V1, BINARY_DATA_V1 -> fieldSchema = + Schema.create(fieldType.getAvroType()); case DATE_V1 -> fieldSchema = LogicalTypes.date().addToSchema(Schema.create(Schema.Type.INT)); case TIMESTAMP_WITH_TIMEZONE_V1, TIMESTAMP_WITHOUT_TIMEZONE_V1 -> fieldSchema = LogicalTypes.timestampMicros() .addToSchema(Schema.create(Schema.Type.LONG)); - case TIME_WITH_TIMEZONE_V1, TIME_WITHOUT_TIMEZONE_V1 -> fieldSchema = LogicalTypes.timeMicros().addToSchema(Schema.create(Schema.Type.LONG)); + case TIME_WITHOUT_TIMEZONE_V1 -> fieldSchema = LogicalTypes.timeMicros().addToSchema(Schema.create(Schema.Type.LONG)); case INTEGER_V0, NUMBER_V0, NUMBER_INT_V0, NUMBER_BIGINT_V0, NUMBER_FLOAT_V0, BOOLEAN_V0 -> fieldSchema = Schema.create(fieldType.getAvroType()); case STRING_V0 -> { diff --git a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/csv/CsvSerializedBuffer.java b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/csv/CsvSerializedBuffer.java index 0dbb695e5b017..f16b454c745e8 100644 --- a/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/csv/CsvSerializedBuffer.java +++ b/airbyte-integrations/bases/base-java-s3/src/main/java/io/airbyte/integrations/destination/s3/csv/CsvSerializedBuffer.java @@ -31,9 +31,9 @@ public class CsvSerializedBuffer extends BaseSerializedBuffer { private CSVPrinter csvPrinter; private CSVFormat csvFormat; - protected CsvSerializedBuffer(final BufferStorage bufferStorage, - final CsvSheetGenerator csvSheetGenerator, - final boolean compression) + public CsvSerializedBuffer(final BufferStorage bufferStorage, + final CsvSheetGenerator csvSheetGenerator, + final boolean compression) throws Exception { super(bufferStorage); this.csvSheetGenerator = csvSheetGenerator; diff --git a/airbyte-integrations/bases/base-java-s3/src/test/java/io/airbyte/integrations/destination/s3/S3BaseChecksTest.java b/airbyte-integrations/bases/base-java-s3/src/test/java/io/airbyte/integrations/destination/s3/S3BaseChecksTest.java index 6f08faa683e30..08e6eecd65108 100644 --- a/airbyte-integrations/bases/base-java-s3/src/test/java/io/airbyte/integrations/destination/s3/S3BaseChecksTest.java +++ b/airbyte-integrations/bases/base-java-s3/src/test/java/io/airbyte/integrations/destination/s3/S3BaseChecksTest.java @@ -46,7 +46,6 @@ public void attemptWriteAndDeleteS3Object_should_createSpecificFiles() { S3BaseChecks.attemptS3WriteAndDelete(operations, config, "test/bucket/path"); - verify(s3Client).putObject("test_bucket", "test/bucket/path/", ""); verify(s3Client).putObject(eq("test_bucket"), startsWith("test/bucket/path/_airbyte_connection_test_"), anyString()); verify(s3Client).listObjects(ArgumentMatchers.argThat(request -> "test_bucket".equals(request.getBucketName()))); verify(s3Client).deleteObject(eq("test_bucket"), startsWith("test/bucket/path/_airbyte_connection_test_")); diff --git a/airbyte-integrations/bases/base-java-s3/src/test/resources/parquet/json_schema_converter/type_conversion_test_cases_v1.json b/airbyte-integrations/bases/base-java-s3/src/test/resources/parquet/json_schema_converter/type_conversion_test_cases_v1.json index d6e75600e7ca7..399a8a4afd592 100644 --- a/airbyte-integrations/bases/base-java-s3/src/test/resources/parquet/json_schema_converter/type_conversion_test_cases_v1.json +++ b/airbyte-integrations/bases/base-java-s3/src/test/resources/parquet/json_schema_converter/type_conversion_test_cases_v1.json @@ -204,11 +204,7 @@ "jsonFieldSchema": { "$ref": "WellKnownTypes.json#/definitions/TimeWithTimezone" }, - "avroFieldType": [ - "null", - { "type": "long", "logicalType": "time-micros" }, - "string" - ] + "avroFieldType": ["null", "string"] }, { "fieldName": "array_field_without_items", diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/FailureTrackingAirbyteMessageConsumer.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/FailureTrackingAirbyteMessageConsumer.java index f5a79e7f35a96..de78a1dde1e21 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/FailureTrackingAirbyteMessageConsumer.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/FailureTrackingAirbyteMessageConsumer.java @@ -49,7 +49,10 @@ public void start() throws Exception { } /** - * Wraps actual processing of each {@link AirbyteMessage} + * Processing of AirbyteMessages with general functionality of storing STATE messages, serializing + * RECORD messages and storage within a buffer + * + * NOTE: Not all the functionality mentioned above is always true but generally applies * * @param msg {@link AirbyteMessage} to be processed * @throws Exception diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshTunnel.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshTunnel.java index 2b24d2babb357..f07ef2e6d0054 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshTunnel.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/base/ssh/SshTunnel.java @@ -22,9 +22,11 @@ import java.time.Duration; import java.util.Arrays; import java.util.List; +import java.util.Locale; import org.apache.sshd.client.SshClient; import org.apache.sshd.client.keyverifier.AcceptAllServerKeyVerifier; import org.apache.sshd.client.session.ClientSession; +import org.apache.sshd.common.SshException; import org.apache.sshd.common.util.net.SshdSocketAddress; import org.apache.sshd.common.util.security.SecurityUtils; import org.apache.sshd.core.CoreModuleProperties; @@ -41,6 +43,8 @@ public class SshTunnel implements AutoCloseable { private static final Logger LOGGER = LoggerFactory.getLogger(SshTunnel.class); + public static final String SSH_TIMEOUT_DISPLAY_MESSAGE = + "Timed out while opening a SSH Tunnel. Please double check the given SSH configurations and try again."; public enum TunnelMethod { NO_TUNNEL, @@ -364,7 +368,13 @@ ClientSession openTunnel(final SshClient client) { remoteServiceHost, remoteServicePort, address.toInetSocketAddress())); return session; } catch (final IOException | GeneralSecurityException e) { - throw new RuntimeException(e); + if (e instanceof SshException && e.getMessage() + .toLowerCase(Locale.ROOT) + .contains("failed to get operation result within specified timeout")) { + throw new ConfigErrorException(SSH_TIMEOUT_DISPLAY_MESSAGE, e); + } else { + throw new RuntimeException(e); + } } } diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/buffered_stream_consumer/BufferedStreamConsumer.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/buffered_stream_consumer/BufferedStreamConsumer.java index d2a71bbcc8e41..96fdf0d2ae694 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/buffered_stream_consumer/BufferedStreamConsumer.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/buffered_stream_consumer/BufferedStreamConsumer.java @@ -14,6 +14,7 @@ import io.airbyte.integrations.base.FailureTrackingAirbyteMessageConsumer; import io.airbyte.integrations.destination.dest_state_lifecycle_manager.DefaultDestStateLifecycleManager; import io.airbyte.integrations.destination.dest_state_lifecycle_manager.DestStateLifecycleManager; +import io.airbyte.integrations.destination.record_buffer.BufferFlushType; import io.airbyte.integrations.destination.record_buffer.BufferingStrategy; import io.airbyte.protocol.models.v0.AirbyteMessage; import io.airbyte.protocol.models.v0.AirbyteMessage.Type; @@ -22,6 +23,7 @@ import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.function.Consumer; import org.slf4j.Logger; @@ -125,6 +127,7 @@ protected void acceptTracked(final AirbyteMessage message) throws Exception { final AirbyteRecordMessage recordMessage = message.getRecord(); final AirbyteStreamNameNamespacePair stream = AirbyteStreamNameNamespacePair.fromRecordMessage(recordMessage); + // if stream is not part of list of streams to sync to then throw invalid stream exception if (!streamNames.contains(stream)) { throwUnrecognizedStream(catalog, message); } @@ -134,22 +137,47 @@ protected void acceptTracked(final AirbyteMessage message) throws Exception { return; } - // if the buffer flushes, update the states appropriately. - // TODO: ryankfu (if true, this is where bundling up logic to also commit to airbyte_raw table) - if (bufferingStrategy.addRecord(stream, message)) { - markStatesAsFlushedToTmpDestination(); + final Optional flushType = bufferingStrategy.addRecord(stream, message); + // if present means that a flush occurred + if (flushType.isPresent()) { + if (BufferFlushType.FLUSH_ALL.equals(flushType.get())) { + // when all buffers have been flushed then we can update all states as flushed + markStatesAsFlushedToDestination(); + } else if (BufferFlushType.FLUSH_SINGLE_STREAM.equals(flushType.get())) { + if (stateManager.supportsPerStreamFlush()) { + // per-stream instance can handle flush of just a single stream + markStatesAsFlushedToDestination(); + } + /* + * We don't mark {@link AirbyteStateMessage} as committed in the case with GLOBAL/LEGACY because + * within a single stream being flushed it is not deterministic that all the AirbyteRecordMessages + * have been committed + */ + } } - + /* + * TODO: (ryankfu) after record has added and time has been met then to see if time has elapsed then + * flush the buffer + * + * The reason that this is where time component should exist here is primarily due to #acceptTracked + * is the method that processes each AirbyteMessage. Method to call is + * bufferingStrategy.flushWriter(stream, streamBuffer) + */ } else if (message.getType() == Type.STATE) { stateManager.addState(message); } else { LOGGER.warn("Unexpected message: " + message.getType()); } - } - private void markStatesAsFlushedToTmpDestination() { - stateManager.markPendingAsFlushed(); + /** + * After marking states as committed, emit the state message to platform then clear state messages + * to avoid resending the same state message to the platform + */ + private void markStatesAsFlushedToDestination() { + stateManager.markPendingAsCommitted(); + stateManager.listCommitted().forEach(outputRecordCollector); + stateManager.clearCommitted(); } private static void throwUnrecognizedStream(final ConfiguredAirbyteCatalog catalog, final AirbyteMessage message) { @@ -158,6 +186,15 @@ private static void throwUnrecognizedStream(final ConfiguredAirbyteCatalog catal Jsons.serialize(catalog), Jsons.serialize(message))); } + /** + * Cleans up buffer based on whether the sync was successful or some exception occurred. In the case + * where a failure occurred we do a simple clean up any lingering data. Otherwise, flush any + * remaining data that has been stored. This is fine even if the state has not been received since + * this Airbyte promises at least once delivery + * + * @param hasFailed true if the stream replication failed partway through, false otherwise + * @throws Exception + */ @Override protected void close(final boolean hasFailed) throws Exception { Preconditions.checkState(hasStarted, "Cannot close; has not started."); @@ -170,17 +207,22 @@ protected void close(final boolean hasFailed) throws Exception { LOGGER.error("executing on failed close procedure."); } else { LOGGER.info("executing on success close procedure."); + // When flushing the buffer, this will call the respective #flushBufferFunction which bundles + // the flush and commit operation, so if successful then mark state as committed bufferingStrategy.flushAll(); - markStatesAsFlushedToTmpDestination(); + markStatesAsFlushedToDestination(); } bufferingStrategy.close(); try { - // flushed is empty in 2 cases: - // 1. either it is full refresh (no state is emitted necessarily). - // 2. it is stream but no states were flushed. - // in both of these cases, if there was a failure, we should not bother committing. otherwise, - // attempt to commit. + /* + * TODO: (ryankfu) Remove usage of hasFailed with onClose after all destination connectors have been + * updated to support checkpointing + * + * flushed is empty in 2 cases: 1. either it is full refresh (no state is emitted necessarily) 2. it + * is stream but no states were flushed in both of these cases, if there was a failure, we should + * not bother committing. otherwise attempt to commit + */ if (stateManager.listFlushed().isEmpty()) { onClose.accept(hasFailed); } else { @@ -192,10 +234,6 @@ protected void close(final boolean hasFailed) throws Exception { onClose.accept(false); } - // TODO: (ryankfu) at this section for when we close the stream and mark stream as committed - // if onClose succeeds without exception then we can emit the state record because it means its - // records were not only flushed, but committed. - stateManager.markFlushedAsCommitted(); stateManager.listCommitted().forEach(outputRecordCollector); } catch (final Exception e) { LOGGER.error("Close failed.", e); diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DefaultDestStateLifecycleManager.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DefaultDestStateLifecycleManager.java index 401234ba4f366..e3d753a6b0a86 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DefaultDestStateLifecycleManager.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DefaultDestStateLifecycleManager.java @@ -110,9 +110,24 @@ public void markFlushedAsCommitted() { internalStateManagerSupplier.get().markFlushedAsCommitted(); } + @Override + public void markPendingAsCommitted() { + internalStateManagerSupplier.get().markPendingAsCommitted(); + } + + @Override + public void clearCommitted() { + internalStateManagerSupplier.get().clearCommitted(); + } + @Override public Queue listCommitted() { return internalStateManagerSupplier.get().listCommitted(); } + @Override + public boolean supportsPerStreamFlush() { + return internalStateManagerSupplier.get().supportsPerStreamFlush(); + } + } diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestSingleStateLifecycleManager.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestSingleStateLifecycleManager.java index 190a9e7049eb9..5b83ff953b0f9 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestSingleStateLifecycleManager.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestSingleStateLifecycleManager.java @@ -58,6 +58,19 @@ public void markFlushedAsCommitted() { } } + @Override + public void clearCommitted() { + lastCommittedState = null; + } + + @Override + public void markPendingAsCommitted() { + if (lastPendingState != null) { + lastCommittedState = lastPendingState; + lastPendingState = null; + } + } + @Override public Queue listCommitted() { return stateMessageToQueue(lastCommittedState); @@ -67,4 +80,9 @@ private static Queue stateMessageToQueue(final AirbyteMessage st return new LinkedList<>(stateMessage == null ? Collections.emptyList() : List.of(stateMessage)); } + @Override + public boolean supportsPerStreamFlush() { + return false; + } + } diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStateLifecycleManager.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStateLifecycleManager.java index fe461f94a4034..e832a5e470025 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStateLifecycleManager.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStateLifecycleManager.java @@ -16,6 +16,7 @@ * been committed *
  • committed - associated records have been committed
  • * + * */ public interface DestStateLifecycleManager { @@ -28,6 +29,9 @@ public interface DestStateLifecycleManager { /** * Moves any tracked state messages that are currently pending to flushed. + * + * @Deprecated since destination checkpointing will be bundling flush & commit into the same + * operation */ void markPendingAsFlushed(); @@ -40,9 +44,32 @@ public interface DestStateLifecycleManager { /** * Moves any tracked state messages that are currently flushed to committed. + * + * @Deprecated since destination checkpointing will be bundling flush and commit into the same + * operation */ void markFlushedAsCommitted(); + /** + * Clears any committed state messages, this is called after returning the state message to the + * platform. The rationale behind this logic is to avoid returning duplicated state messages that + * would otherwise be held in the `committed` state + */ + void clearCommitted(); + + /** + * Moves any tracked state messages that are currently pending to committed. + * + * Note: that this is skipping "flushed" state since flushed meant that this was using a staging + * area to hold onto files, for the changes with checkpointing this step is skipped. It follows + * under the guiding principle that destination needs to commit + * {@link io.airbyte.protocol.models.AirbyteRecordMessage} more frequently to checkpoint. The new + * transaction logic will be: + * + * Buffer -(flush)-> Staging (Blob Storage) -(commit to airbyte_raw)-> Destination table + */ + void markPendingAsCommitted(); + /** * List all tracked state messages that are committed. * @@ -50,4 +77,6 @@ public interface DestStateLifecycleManager { */ Queue listCommitted(); + boolean supportsPerStreamFlush(); + } diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStreamStateLifecycleManager.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStreamStateLifecycleManager.java index da32711bbba15..ca7c6eb8f1c56 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStreamStateLifecycleManager.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStreamStateLifecycleManager.java @@ -52,6 +52,11 @@ Queue listPending() { return listStatesInOrder(streamToLastPendingState); } + /* + * Similar to #markFlushedAsCommmitted, this method should no longer be used to align with the + * changes to destination checkpointing where flush/commit operations will be bundled + */ + @Deprecated @Override public void markPendingAsFlushed() { moveToNextPhase(streamToLastPendingState, streamToLastFlushedState); @@ -62,16 +67,37 @@ public Queue listFlushed() { return listStatesInOrder(streamToLastFlushedState); } + /* + * During the process of migration to destination checkpointing, this method should no longer be in + * use in favor of #markPendingAsCommitted where states will be flushed/committed as a singular + * transaction + */ + @Deprecated @Override public void markFlushedAsCommitted() { moveToNextPhase(streamToLastFlushedState, streamToLastCommittedState); } + @Override + public void clearCommitted() { + streamToLastCommittedState.clear(); + } + + @Override + public void markPendingAsCommitted() { + moveToNextPhase(streamToLastPendingState, streamToLastCommittedState); + } + @Override public Queue listCommitted() { return listStatesInOrder(streamToLastCommittedState); } + @Override + public boolean supportsPerStreamFlush() { + return true; + } + /** * Lists out the states in the stream to state maps. Guarantees a deterministic sort order, which is * handy because we are going from a map (unsorted) to a queue. The sort order primary sort on diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/BufferFlushType.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/BufferFlushType.java new file mode 100644 index 0000000000000..42b6b5f717a74 --- /dev/null +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/BufferFlushType.java @@ -0,0 +1,10 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.integrations.destination.record_buffer; + +public enum BufferFlushType { + FLUSH_ALL, + FLUSH_SINGLE_STREAM +} diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/BufferingStrategy.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/BufferingStrategy.java index b74299b9b5c8f..3d2c5151f4561 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/BufferingStrategy.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/BufferingStrategy.java @@ -6,6 +6,7 @@ import io.airbyte.protocol.models.v0.AirbyteMessage; import io.airbyte.protocol.models.v0.AirbyteStreamNameNamespacePair; +import java.util.Optional; /** * High-level interface used by @@ -20,14 +21,16 @@ public interface BufferingStrategy extends AutoCloseable { /** - * Add a new message to the buffer while consuming streams + * Add a new message to the buffer while consuming streams, also handles when a buffer flush when + * buffer has been filled * - * @param stream - stream associated with record - * @param message - {@link AirbyteMessage} to buffer - * @return true if this record cause ALL records in the buffer to flush, otherwise false. + * @param stream stream associated with record + * @param message {@link AirbyteMessage} to be added to the buffer + * @return an optional value if a flushed occur with the respective flush type, otherwise an empty + * value means only a record was added * @throws Exception throw on failure */ - boolean addRecord(AirbyteStreamNameNamespacePair stream, AirbyteMessage message) throws Exception; + Optional addRecord(AirbyteStreamNameNamespacePair stream, AirbyteMessage message) throws Exception; /** * Flush buffered messages in a writer from a particular stream diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/InMemoryRecordBufferingStrategy.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/InMemoryRecordBufferingStrategy.java index 8068fd8f28d35..e1c9e7d035119 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/InMemoryRecordBufferingStrategy.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/InMemoryRecordBufferingStrategy.java @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -55,13 +56,13 @@ public InMemoryRecordBufferingStrategy(final RecordWriter } @Override - public boolean addRecord(final AirbyteStreamNameNamespacePair stream, final AirbyteMessage message) throws Exception { - boolean didFlush = false; + public Optional addRecord(final AirbyteStreamNameNamespacePair stream, final AirbyteMessage message) throws Exception { + Optional flushed = Optional.empty(); final long messageSizeInBytes = recordSizeEstimator.getEstimatedByteSize(message.getRecord()); if (bufferSizeInBytes + messageSizeInBytes > maxQueueSizeInBytes) { flushAll(); - didFlush = true; + flushed = Optional.of(BufferFlushType.FLUSH_ALL); bufferSizeInBytes = 0; } @@ -69,7 +70,7 @@ public boolean addRecord(final AirbyteStreamNameNamespacePair stream, final Airb bufferedRecords.add(message.getRecord()); bufferSizeInBytes += messageSizeInBytes; - return didFlush; + return flushed; } @Override diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/SerializableBuffer.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/SerializableBuffer.java index 9d02524606d74..65f9038e70ca0 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/SerializableBuffer.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/SerializableBuffer.java @@ -14,19 +14,26 @@ * A {@link SerializableBuffer} is designed to be used as part of a * {@link SerializedBufferingStrategy}. * + *

    * It encapsulates the actual implementation of a buffer: both the medium storage (usually defined * as part of {@link BufferStorage}. and the format of the serialized data when it is written to the * buffer. + *

    * + *

    * A {@link BaseSerializedBuffer} class is provided, and should be the expected class to derive from * when implementing a new format of buffer. The storage aspects are normally provided through * composition of {@link BufferStorage}. + *

    * */ public interface SerializableBuffer extends AutoCloseable { /** - * Adds a @param recordMessage to the buffer and @return how many bytes were written to the buffer. + * Adds a {@link AirbyteRecordMessage} to the buffer and returns the size of the message in bytes + * + * @param recordMessage {@link AirbyteRecordMessage} to be added to buffer + * @return number of bytes written to the buffer */ long accept(AirbyteRecordMessage recordMessage) throws Exception; diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/SerializedBufferingStrategy.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/SerializedBufferingStrategy.java index 4f2a07318ef16..54738ee7f34e5 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/SerializedBufferingStrategy.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/destination/record_buffer/SerializedBufferingStrategy.java @@ -15,10 +15,19 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import org.apache.commons.io.FileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Buffering Strategy used to convert {@link io.airbyte.protocol.models.AirbyteRecordMessage} into a + * stream of bytes to more readily save and transmit information + * + *

    + * This class is meant to be used in conjunction with {@link SerializableBuffer} + *

    + */ public class SerializedBufferingStrategy implements BufferingStrategy { private static final Logger LOGGER = LoggerFactory.getLogger(SerializedBufferingStrategy.class); @@ -50,16 +59,19 @@ public SerializedBufferingStrategy(final CheckedBiFunction addRecord(final AirbyteStreamNameNamespacePair stream, final AirbyteMessage message) throws Exception { + Optional flushed = Optional.empty(); + /* + * Creates a new buffer for each stream if buffers do not already exist, else return already + * computed buffer + */ final SerializableBuffer streamBuffer = allBuffers.computeIfAbsent(stream, k -> { LOGGER.info("Starting a new buffer for stream {} (current state: {} in {} buffers)", stream.getName(), @@ -77,18 +89,18 @@ public boolean addRecord(final AirbyteStreamNameNamespacePair stream, final Airb } final long actualMessageSizeInBytes = streamBuffer.accept(message.getRecord()); totalBufferSizeInBytes += actualMessageSizeInBytes; + // Flushes buffer when either the buffer was completely filled or only a single stream was filled if (totalBufferSizeInBytes >= streamBuffer.getMaxTotalBufferSizeInBytes() || allBuffers.size() >= streamBuffer.getMaxConcurrentStreamsInBuffer()) { flushAll(); - didFlush = true; - totalBufferSizeInBytes = 0; + flushed = Optional.of(BufferFlushType.FLUSH_ALL); } else if (streamBuffer.getByteCount() >= streamBuffer.getMaxPerStreamBufferSizeInBytes()) { flushWriter(stream, streamBuffer); /* - * Note: We intentionally do not mark didFlush as true in the branch of this conditional. Because - * this branch flushes individual streams, there is no guarantee that it will flush records in the - * same order that state messages were received. The outcome here is that records get flushed but - * our updating of which state messages have been flushed falls behind. + * Note: This branch is needed to indicate to the {@link DefaultDestStateLifeCycleManager} that an + * individual stream was flushed, there is no guarantee that it will flush records in the same order + * that state messages were received. The outcome here is that records get flushed but our updating + * of which state messages have been flushed falls behind. * * This is not ideal from a checkpoint point of view, because it means in the case where there is a * failure, we will not be able to report that those records that were flushed and committed were @@ -99,9 +111,9 @@ public boolean addRecord(final AirbyteStreamNameNamespacePair stream, final Airb * by some other means. That can be caused by the previous branch in this conditional. It is * guaranteed by the fact that we always flush all state messages at the end of a sync. */ + flushed = Optional.of(BufferFlushType.FLUSH_SINGLE_STREAM); } - - return didFlush; + return flushed; } @Override diff --git a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/util/ConnectorExceptionUtil.java b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/util/ConnectorExceptionUtil.java index 2db68dff49e68..ea336d8fce652 100644 --- a/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/util/ConnectorExceptionUtil.java +++ b/airbyte-integrations/bases/base-java/src/main/java/io/airbyte/integrations/util/ConnectorExceptionUtil.java @@ -4,6 +4,7 @@ package io.airbyte.integrations.util; +import com.google.common.collect.ImmutableList; import io.airbyte.commons.exceptions.ConfigErrorException; import io.airbyte.commons.exceptions.ConnectionErrorException; import io.airbyte.integrations.base.errors.messages.ErrorMessage; @@ -22,6 +23,8 @@ public class ConnectorExceptionUtil { static final String RECOVERY_CONNECTION_ERROR_MESSAGE = "We're having issues syncing from a Postgres replica that is configured as a hot standby server. " + "Please see https://docs.airbyte.com/integrations/sources/postgres/#sync-data-from-postgres-hot-standby-server for options and workarounds"; + + public static final List HTTP_AUTHENTICATION_ERROR_CODES = ImmutableList.of(401, 403); private static final List> configErrorPredicates = List.of(getConfigErrorPredicate(), getConnectionErrorPredicate(), isRecoveryConnectionExceptionPredicate(), isUnknownColumnInFieldListException()); diff --git a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/buffered_stream_consumer/BufferedStreamConsumerTest.java b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/buffered_stream_consumer/BufferedStreamConsumerTest.java index 26332dd2a4e28..1069c07f6a362 100644 --- a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/buffered_stream_consumer/BufferedStreamConsumerTest.java +++ b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/buffered_stream_consumer/BufferedStreamConsumerTest.java @@ -199,7 +199,7 @@ void testExceptionAfterOneStateMessage() throws Exception { assertThrows(IllegalStateException.class, () -> consumer.accept(expectedRecordsBatch3.get(0))); consumer.close(); - verifyStartAndClose(); + verifyStartAndCloseFailure(); verifyRecords(STREAM_NAME, SCHEMA_NAME, expectedRecordsBatch1); @@ -219,8 +219,7 @@ void testExceptionAfterNoStateMessages() throws Exception { assertThrows(IllegalStateException.class, () -> consumer.accept(expectedRecordsBatch3.get(0))); consumer.close(); - verify(onStart).call(); - verify(onClose).accept(true); + verifyStartAndCloseFailure(); verifyRecords(STREAM_NAME, SCHEMA_NAME, expectedRecordsBatch1); @@ -244,7 +243,7 @@ void testExceptionDuringOnClose() throws Exception { verifyRecords(STREAM_NAME, SCHEMA_NAME, expectedRecordsBatch1); - verifyNoInteractions(outputRecordCollector); + verify(outputRecordCollector).accept(STATE_MESSAGE1); } @Test @@ -299,6 +298,12 @@ private void verifyStartAndClose() throws Exception { verify(onClose).accept(false); } + /** Indicates that a failure occurred while consuming AirbyteMessages */ + private void verifyStartAndCloseFailure() throws Exception { + verify(onStart).call(); + verify(onClose).accept(true); + } + private static void consumeRecords(final BufferedStreamConsumer consumer, final Collection records) { records.forEach(m -> { try { diff --git a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestSingleStateLifecycleManagerTest.java b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestSingleStateLifecycleManagerTest.java index 24c95f0f4f4dc..da03baeeccbb4 100644 --- a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestSingleStateLifecycleManagerTest.java +++ b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestSingleStateLifecycleManagerTest.java @@ -119,4 +119,23 @@ void testCommitted() { assertEquals(MESSAGE1, mgr.listCommitted().poll()); } + /* + * This change follows the same changes in DestStreamStateLifecycleManager where the goal is to + * confirm that `markPendingAsCommitted` combines what was previous `markPendingAsFlushed` and + * `markFlushedAsCommitted` + * + * The reason for this method is due to destination checkpointing will no longer hold into a state + * as "Flushed" but immediately commit records to the destination's final table + */ + @Test + void testMarkPendingAsCommitted() { + mgr.addState(MESSAGE1); + mgr.addState(MESSAGE2); + mgr.markPendingAsCommitted(); + + assertTrue(mgr.listPending().isEmpty()); + assertTrue(mgr.listFlushed().isEmpty()); + assertEquals(MESSAGE2, mgr.listCommitted().poll()); + } + } diff --git a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStreamStateLifecycleManagerTest.java b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStreamStateLifecycleManagerTest.java index 4528fa077c040..8047e9f1e2ad6 100644 --- a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStreamStateLifecycleManagerTest.java +++ b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/dest_state_lifecycle_manager/DestStreamStateLifecycleManagerTest.java @@ -93,6 +93,11 @@ void testPending() { assertTrue(mgr.listCommitted().isEmpty()); } + /* + * TODO: remove this test after all destination connectors have updated to reflect destination + * checkpointing changes where flush/commit will be bundled into the same operation + */ + @Deprecated @Test void testFlushed() { mgr.addState(STREAM1_MESSAGE1); @@ -137,4 +142,21 @@ void testCommitted() { assertEquals(new LinkedList<>(List.of(STREAM1_MESSAGE1, STREAM2_MESSAGE1)), mgr.listCommitted()); } + /* + * This section is to test for logic that is isolated to changes with respect to destination + * checkpointing where it captures flush and commit are bundled into a transaction so + * + * buffer -(flush buffer)-> staging area -(copy into {staging_file})-> destination raw table + */ + @Test + void testPendingAsCommitted() { + mgr.addState(STREAM1_MESSAGE1); + mgr.markPendingAsCommitted(); + + // verifies that we've skipped "Flushed" without needing to call `markPendingAsFlushed()` and + // `markFlushedAsCommitted` + assertTrue(mgr.listPending().isEmpty()); + assertEquals(new LinkedList<>(List.of(STREAM1_MESSAGE1)), mgr.listCommitted()); + } + } diff --git a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/record_buffer/InMemoryRecordBufferingStrategyTest.java b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/record_buffer/InMemoryRecordBufferingStrategyTest.java index e2e1ce1f9bcee..ce6349a7ecdb3 100644 --- a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/record_buffer/InMemoryRecordBufferingStrategyTest.java +++ b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/record_buffer/InMemoryRecordBufferingStrategyTest.java @@ -4,6 +4,7 @@ package io.airbyte.integrations.destination.record_buffer; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; @@ -17,6 +18,7 @@ import io.airbyte.protocol.models.v0.AirbyteRecordMessage; import io.airbyte.protocol.models.v0.AirbyteStreamNameNamespacePair; import java.util.List; +import java.util.Optional; import org.junit.jupiter.api.Test; public class InMemoryRecordBufferingStrategyTest { @@ -39,10 +41,14 @@ public void testBuffering() throws Exception { final AirbyteMessage message3 = generateMessage(stream2); final AirbyteMessage message4 = generateMessage(stream2); - assertFalse(buffering.addRecord(stream1, message1)); - assertFalse(buffering.addRecord(stream2, message2)); + assertFalse(buffering.addRecord(stream1, message1).isPresent()); + assertFalse(buffering.addRecord(stream2, message2).isPresent()); // Buffer still has room - assertTrue(buffering.addRecord(stream2, message3)); + final Optional flushType = buffering.addRecord(stream2, message3); + // Keeps track of this #addRecord since we're expecting a buffer flush & that the flushType + // value will indicate that all buffers were flushed + assertTrue(flushType.isPresent()); + assertEquals(flushType.get(), BufferFlushType.FLUSH_ALL); // Buffer limit reach, flushing all messages so far before adding the new incoming one verify(recordWriter, times(1)).accept(stream1, List.of(message1.getRecord())); verify(recordWriter, times(1)).accept(stream2, List.of(message2.getRecord())); diff --git a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/record_buffer/SerializedBufferingStrategyTest.java b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/record_buffer/SerializedBufferingStrategyTest.java index 2c4929cd2da48..034196f6401e6 100644 --- a/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/record_buffer/SerializedBufferingStrategyTest.java +++ b/airbyte-integrations/bases/base-java/src/test/java/io/airbyte/integrations/destination/record_buffer/SerializedBufferingStrategyTest.java @@ -4,6 +4,7 @@ package io.airbyte.integrations.destination.record_buffer; +import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -21,6 +22,7 @@ import io.airbyte.protocol.models.v0.AirbyteRecordMessage; import io.airbyte.protocol.models.v0.AirbyteStreamNameNamespacePair; import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; +import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -76,25 +78,29 @@ public void testPerStreamThresholdFlush() throws Exception { final AirbyteMessage message5 = generateMessage(stream2); when(recordWriter1.getByteCount()).thenReturn(10L); // one record in recordWriter1 - assertFalse(buffering.addRecord(stream1, message1)); + assertFalse(buffering.addRecord(stream1, message1).isPresent()); when(recordWriter2.getByteCount()).thenReturn(10L); // one record in recordWriter2 - assertFalse(buffering.addRecord(stream2, message2)); + assertFalse(buffering.addRecord(stream2, message2).isPresent()); // Total and per stream Buffers still have room verify(perStreamFlushHook, times(0)).accept(stream1, recordWriter1); verify(perStreamFlushHook, times(0)).accept(stream2, recordWriter2); when(recordWriter2.getByteCount()).thenReturn(20L); // second record in recordWriter2 - assertFalse(buffering.addRecord(stream2, message3)); + assertFalse(buffering.addRecord(stream2, message3).isPresent()); when(recordWriter2.getByteCount()).thenReturn(30L); // third record in recordWriter2 - assertFalse(buffering.addRecord(stream2, message4)); + + // Buffer reaches limit so a buffer flush occurs returning a buffer flush type of single stream + final Optional flushType = buffering.addRecord(stream2, message4); + assertTrue(flushType.isPresent()); + assertEquals(flushType.get(), BufferFlushType.FLUSH_SINGLE_STREAM); // The buffer limit is now reached for stream2, flushing that single stream only verify(perStreamFlushHook, times(0)).accept(stream1, recordWriter1); verify(perStreamFlushHook, times(1)).accept(stream2, recordWriter2); when(recordWriter2.getByteCount()).thenReturn(10L); // back to one record in recordWriter2 - assertFalse(buffering.addRecord(stream2, message5)); + assertFalse(buffering.addRecord(stream2, message5).isPresent()); // force flush to terminate test buffering.flushAll(); @@ -117,24 +123,30 @@ public void testTotalStreamThresholdFlush() throws Exception { final AirbyteMessage message5 = generateMessage(stream2); final AirbyteMessage message6 = generateMessage(stream3); - assertFalse(buffering.addRecord(stream1, message1)); - assertFalse(buffering.addRecord(stream2, message2)); + assertFalse(buffering.addRecord(stream1, message1).isPresent()); + assertFalse(buffering.addRecord(stream2, message2).isPresent()); // Total and per stream Buffers still have room verify(perStreamFlushHook, times(0)).accept(stream1, recordWriter1); verify(perStreamFlushHook, times(0)).accept(stream2, recordWriter2); verify(perStreamFlushHook, times(0)).accept(stream3, recordWriter3); - assertFalse(buffering.addRecord(stream3, message3)); + assertFalse(buffering.addRecord(stream3, message3).isPresent()); when(recordWriter1.getByteCount()).thenReturn(20L); // second record in recordWriter1 - assertFalse(buffering.addRecord(stream1, message4)); + assertFalse(buffering.addRecord(stream1, message4).isPresent()); when(recordWriter2.getByteCount()).thenReturn(20L); // second record in recordWriter2 - assertTrue(buffering.addRecord(stream2, message5)); + + // In response to checkpointing, will need to know what type of buffer flush occurred to mark + // AirbyteStateMessage as committed depending on DestDefaultStateLifecycleManager + final Optional flushType = buffering.addRecord(stream2, message5); + assertTrue(flushType.isPresent()); + assertEquals(flushType.get(), BufferFlushType.FLUSH_ALL); + // Buffer limit reached for total streams, flushing all streams verify(perStreamFlushHook, times(1)).accept(stream1, recordWriter1); verify(perStreamFlushHook, times(1)).accept(stream2, recordWriter2); verify(perStreamFlushHook, times(1)).accept(stream3, recordWriter3); - assertFalse(buffering.addRecord(stream3, message6)); + assertFalse(buffering.addRecord(stream3, message6).isPresent()); // force flush to terminate test buffering.flushAll(); verify(perStreamFlushHook, times(1)).accept(stream1, recordWriter1); @@ -156,22 +168,26 @@ public void testConcurrentStreamThresholdFlush() throws Exception { final AirbyteMessage message4 = generateMessage(stream4); final AirbyteMessage message5 = generateMessage(stream1); - assertFalse(buffering.addRecord(stream1, message1)); - assertFalse(buffering.addRecord(stream2, message2)); - assertFalse(buffering.addRecord(stream3, message3)); + assertFalse(buffering.addRecord(stream1, message1).isPresent()); + assertFalse(buffering.addRecord(stream2, message2).isPresent()); + assertFalse(buffering.addRecord(stream3, message3).isPresent()); // Total and per stream Buffers still have room verify(perStreamFlushHook, times(0)).accept(stream1, recordWriter1); verify(perStreamFlushHook, times(0)).accept(stream2, recordWriter2); verify(perStreamFlushHook, times(0)).accept(stream3, recordWriter3); - assertTrue(buffering.addRecord(stream4, message4)); + // Since the concurrent stream threshold has been exceeded, all buffer streams are flush + final Optional flushType = buffering.addRecord(stream4, message4); + assertTrue(flushType.isPresent()); + assertEquals(flushType.get(), BufferFlushType.FLUSH_ALL); + // Buffer limit reached for concurrent streams, flushing all streams verify(perStreamFlushHook, times(1)).accept(stream1, recordWriter1); verify(perStreamFlushHook, times(1)).accept(stream2, recordWriter2); verify(perStreamFlushHook, times(1)).accept(stream3, recordWriter3); verify(perStreamFlushHook, times(1)).accept(stream4, recordWriter4); - assertFalse(buffering.addRecord(stream1, message5)); + assertFalse(buffering.addRecord(stream1, message5).isPresent()); // force flush to terminate test buffering.flushAll(); verify(perStreamFlushHook, times(2)).accept(stream1, recordWriter1); diff --git a/airbyte-integrations/bases/source-acceptance-test/CHANGELOG.md b/airbyte-integrations/bases/source-acceptance-test/CHANGELOG.md index 4660fe1e2186b..2492642bdca12 100644 --- a/airbyte-integrations/bases/source-acceptance-test/CHANGELOG.md +++ b/airbyte-integrations/bases/source-acceptance-test/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 0.5.0 +Re-release of 0.3.0 [#21451](https://github.com/airbytehq/airbyte/pull/21451) + +## 0.4.0 +Revert 0.3.0 + +## 0.3.0 +(Broken) Add various stricter checks for specs (see PR for details). [#21451](https://github.com/airbytehq/airbyte/pull/21451) + ## 0.2.26 Check `future_state` only for incremental streams. [#21248](https://github.com/airbytehq/airbyte/pull/21248) diff --git a/airbyte-integrations/bases/source-acceptance-test/Dockerfile b/airbyte-integrations/bases/source-acceptance-test/Dockerfile index af3dcd740a74a..cd1d9aa54fe0b 100644 --- a/airbyte-integrations/bases/source-acceptance-test/Dockerfile +++ b/airbyte-integrations/bases/source-acceptance-test/Dockerfile @@ -33,7 +33,7 @@ COPY pytest.ini setup.py ./ COPY source_acceptance_test ./source_acceptance_test RUN pip install . -LABEL io.airbyte.version=0.2.26 +LABEL io.airbyte.version=0.5.0 LABEL io.airbyte.name=airbyte/source-acceptance-test ENTRYPOINT ["python", "-m", "pytest", "-p", "source_acceptance_test.plugin", "-r", "fEsx"] diff --git a/airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py b/airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py index 0928b07b3db80..0e985b06cecff 100644 --- a/airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py +++ b/airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/tests/test_core.py @@ -76,6 +76,10 @@ def secret_property_names_fixture(): ) +DATE_PATTERN = "^[0-9]{2}-[0-9]{2}-[0-9]{4}$" +DATETIME_PATTERN = "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$" + + @pytest.mark.default_timeout(10) class TestSpec(BaseTest): @@ -219,22 +223,15 @@ def _property_can_store_secret(prop: dict) -> bool: Some fields can not hold a secret by design, others can. Null type as well as boolean can not hold a secret value. A string, a number or an integer type can always store secrets. - Objects and arrays can hold a secret in case they are generic, - meaning their inner structure is not described in details with properties/items. + Secret objects and arrays can not be rendered correctly in the UI: A field with a constant value can not hold a secret as well. """ unsecure_types = {"string", "integer", "number"} type_ = prop["type"] - is_property_generic_object = type_ == "object" and not any( - [prop.get("properties", {}), prop.get("anyOf", []), prop.get("oneOf", []), prop.get("allOf", [])] - ) - is_property_generic_array = type_ == "array" and not any([prop.get("items", []), prop.get("prefixItems", [])]) is_property_constant_value = bool(prop.get("const")) can_store_secret = any( [ isinstance(type_, str) and type_ in unsecure_types, - is_property_generic_object, - is_property_generic_array, isinstance(type_, list) and (set(type_) & unsecure_types), ] ) @@ -252,7 +249,7 @@ def test_secret_is_properly_marked(self, connector_spec_dict: dict, detailed_log secrets_exposed = [] non_secrets_hidden = [] spec_properties = connector_spec_dict["connectionSpecification"]["properties"] - for type_path, value in dpath.util.search(spec_properties, "**/type", yielded=True): + for type_path, type_value in dpath.util.search(spec_properties, "**/type", yielded=True): _, is_property_name_secret = self._is_spec_property_name_secret(type_path, secret_property_names) if not is_property_name_secret: continue @@ -268,7 +265,7 @@ def test_secret_is_properly_marked(self, connector_spec_dict: dict, detailed_log if non_secrets_hidden: properties = "\n".join(non_secrets_hidden) - detailed_logger.warning( + pytest.fail( f"""Some properties are marked with `airbyte_secret` although they probably should not be. Please double check them. If they're okay, please fix this test. {properties}""" @@ -280,6 +277,139 @@ def test_secret_is_properly_marked(self, connector_spec_dict: dict, detailed_log {properties}""" ) + def _fail_on_errors(self, errors: List[str]): + if len(errors) > 0: + pytest.fail("\n".join(errors)) + + def test_property_type_is_not_array(self, connector_spec: ConnectorSpecification): + """ + Each field has one or multiple types, but the UI only supports a single type and optionally "null" as a second type. + """ + errors = [] + for type_path, type_value in dpath.util.search(connector_spec.connectionSpecification, "**/properties/*/type", yielded=True): + if isinstance(type_value, List): + number_of_types = len(type_value) + if number_of_types != 2 and number_of_types != 1: + errors.append( + f"{type_path} is not either a simple type or an array of a simple type plus null: {type_value} (for example: type: [string, null])" + ) + if number_of_types == 2 and type_value[1] != "null": + errors.append( + f"Second type of {type_path} is not null: {type_value}. Type can either be a simple type or an array of a simple type plus null (for example: type: [string, null])" + ) + self._fail_on_errors(errors) + + def test_object_not_empty(self, connector_spec: ConnectorSpecification): + """ + Each object field needs to have at least one property as the UI won't be able to show them otherwise. + If the whole spec is empty, it's allowed to have a single empty object at the top level + """ + schema_helper = JsonSchemaHelper(connector_spec.connectionSpecification) + errors = [] + for type_path, type_value in dpath.util.search(connector_spec.connectionSpecification, "**/type", yielded=True): + if type_path == "type": + # allow empty root object + continue + if type_value == "object": + property = schema_helper.get_parent(type_path) + if "oneOf" not in property and ("properties" not in property or len(property["properties"]) == 0): + errors.append( + f"{type_path} is an empty object which will not be represented correctly in the UI. Either remove or add specific properties" + ) + self._fail_on_errors(errors) + + def test_array_type(self, connector_spec: ConnectorSpecification): + """ + Each array has one or multiple types for its items, but the UI only supports a single type which can either be object, string or an enum + """ + schema_helper = JsonSchemaHelper(connector_spec.connectionSpecification) + errors = [] + for type_path, type_type in dpath.util.search(connector_spec.connectionSpecification, "**/type", yielded=True): + property_definition = schema_helper.get_parent(type_path) + if type_type != "array": + # unrelated "items", not an array definition + continue + items_value = property_definition.get("items", None) + if items_value is None: + continue + elif isinstance(items_value, List): + errors.append(f"{type_path} is not just a single item type: {items_value}") + elif items_value.get("type") not in ["object", "string", "number", "integer"] and "enum" not in items_value: + errors.append(f"Items of {type_path} has to be either object or string or define an enum") + self._fail_on_errors(errors) + + def test_forbidden_complex_types(self, connector_spec: ConnectorSpecification): + """ + not, anyOf, patternProperties, prefixItems, allOf, if, then, else, dependentSchemas and dependentRequired are not allowed + """ + forbidden_keys = [ + "not", + "anyOf", + "patternProperties", + "prefixItems", + "allOf", + "if", + "then", + "else", + "dependentSchemas", + "dependentRequired", + ] + found_keys = set() + for forbidden_key in forbidden_keys: + for path, value in dpath.util.search(connector_spec.connectionSpecification, f"**/{forbidden_key}", yielded=True): + found_keys.add(path) + + for forbidden_key in forbidden_keys: + # remove forbidden keys if they are used as properties directly + for path, _value in dpath.util.search(connector_spec.connectionSpecification, f"**/properties/{forbidden_key}", yielded=True): + found_keys.remove(path) + + if len(found_keys) > 0: + key_list = ", ".join(found_keys) + pytest.fail(f"Found the following disallowed JSON schema features: {key_list}") + + def test_date_pattern(self, connector_spec: ConnectorSpecification, detailed_logger): + """ + Properties with format date or date-time should always have a pattern defined how the date/date-time should be formatted + that corresponds with the format the datepicker component is creating. + """ + schema_helper = JsonSchemaHelper(connector_spec.connectionSpecification) + for format_path, format in dpath.util.search(connector_spec.connectionSpecification, "**/format", yielded=True): + if not isinstance(format, str): + # format is not a format definition here but a property named format + continue + property_definition = schema_helper.get_parent(format_path) + pattern = property_definition.get("pattern") + if format == "date" and not pattern == DATE_PATTERN: + detailed_logger.warning( + f"{format_path} is defining a date format without the corresponding pattern. Consider setting the pattern to {DATE_PATTERN} to make it easier for users to edit this field in the UI." + ) + if format == "date-time" and not pattern == DATETIME_PATTERN: + detailed_logger.warning( + f"{format_path} is defining a date-time format without the corresponding pattern Consider setting the pattern to {DATETIME_PATTERN} to make it easier for users to edit this field in the UI." + ) + + def test_date_format(self, connector_spec: ConnectorSpecification, detailed_logger): + """ + Properties with a pattern that looks like a date should have their format set to date or date-time. + """ + schema_helper = JsonSchemaHelper(connector_spec.connectionSpecification) + for pattern_path, pattern in dpath.util.search(connector_spec.connectionSpecification, "**/pattern", yielded=True): + if not isinstance(pattern, str): + # pattern is not a pattern definition here but a property named pattern + continue + if pattern == DATE_PATTERN or pattern == DATETIME_PATTERN: + property_definition = schema_helper.get_parent(pattern_path) + format = property_definition.get("format") + if not format == "date" and pattern == DATE_PATTERN: + detailed_logger.warning( + f"{pattern_path} is defining a pattern that looks like a date without setting the format to `date`. Consider specifying the format to make it easier for users to edit this field in the UI." + ) + if not format == "date-time" and pattern == DATETIME_PATTERN: + detailed_logger.warning( + f"{pattern_path} is defining a pattern that looks like a date-time without setting the format to `date-time`. Consider specifying the format to make it easier for users to edit this field in the UI." + ) + def test_defined_refs_exist_in_json_spec_file(self, connector_spec_dict: dict): """Checking for the presence of unresolved `$ref`s values within each json spec file""" check_result = list(find_all_values_for_key_in_schema(connector_spec_dict, "$ref")) diff --git a/airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/utils/json_schema_helper.py b/airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/utils/json_schema_helper.py index 7f0c7badb7114..400b5af53b6de 100644 --- a/airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/utils/json_schema_helper.py +++ b/airbyte-integrations/bases/source-acceptance-test/source_acceptance_test/utils/json_schema_helper.py @@ -6,6 +6,7 @@ from functools import reduce from typing import Any, Dict, List, Mapping, Optional, Set, Text, Union +import dpath.util import pendulum from jsonref import JsonRef @@ -121,6 +122,16 @@ def get_node(self, path: List[str]) -> Any: node = node[segment] return node + def get_parent(self, path: str) -> Any: + """ + Returns the parent dict of a given path within the `obj` dict + """ + absolute_path = f"/{path}" + parent_path, _ = absolute_path.rsplit(sep="/", maxsplit=1) + if parent_path == "": + return self._schema + return dpath.util.get(self._schema, parent_path) + def find_nodes(self, keys: List[str]) -> List[List[str]]: """Find all paths that lead to nodes with the specified keys. diff --git a/airbyte-integrations/bases/source-acceptance-test/unit_tests/test_spec.py b/airbyte-integrations/bases/source-acceptance-test/unit_tests/test_spec.py index 327876fec4c76..c9bbdc110bf4e 100644 --- a/airbyte-integrations/bases/source-acceptance-test/unit_tests/test_spec.py +++ b/airbyte-integrations/bases/source-acceptance-test/unit_tests/test_spec.py @@ -652,102 +652,267 @@ def test_additional_properties_is_true(connector_spec, expectation): @pytest.mark.parametrize( - "connector_spec, should_fail, is_warning_logged", + "connector_spec, should_fail", ( ( - { - "connectionSpecification": {"type": "object", "properties": {"api_token": {"type": "string", "airbyte_secret": True}}} - }, + {"type": "object", "properties": {"api_token": {"type": "string", "airbyte_secret": True}}}, False, - False ), + ({"type": "object", "properties": {"api_token": {"type": "null"}}}, False), + ({"type": "object", "properties": {"refresh_token": {"type": "boolean", "airbyte_secret": True}}}, True), + ({"type": "object", "properties": {"refresh_token": {"type": ["null", "string"]}}}, True), + ({"type": "object", "properties": {"credentials": {"type": "array", "items": {"type": "string"}}}}, True), + ({"type": "object", "properties": {"auth": {"oneOf": [{"api_token": {"type": "string"}}]}}}, True), ( { - "connectionSpecification": {"type": "object", "properties": {"api_token": {"type": "null"}}} + "type": "object", + "properties": {"credentials": {"oneOf": [{"type": "object", "properties": {"api_key": {"type": "string"}}}]}}, }, - False, - False + True, ), + ({"type": "object", "properties": {"start_date": {"type": ["null", "string"]}}}, False), + ({"type": "object", "properties": {"credentials": {"oneOf": [{"type": "string", "const": "OAuth2.0"}]}}}, False), + ), +) +def test_airbyte_secret(mocker, connector_spec, should_fail): + mocker.patch.object(conftest.pytest, "fail") + t = _TestSpec() + logger = mocker.Mock() + t.test_secret_is_properly_marked( + {"connectionSpecification": connector_spec}, logger, ("api_key", "api_token", "refresh_token", "jwt", "credentials") + ) + if should_fail: + conftest.pytest.fail.assert_called_once() + else: + conftest.pytest.fail.assert_not_called() + + +@pytest.mark.parametrize( + "connector_spec, should_fail", + ( + ({"type": "object", "properties": {"refresh_token": {"type": ["boolean", "string"]}}}, True), + ({"type": "object", "properties": {"refresh_token": {"type": []}}}, True), + ({"type": "object", "properties": {"refresh_token": {"type": ["string"]}}}, False), + ({"type": "object", "properties": {"refresh_token": {"type": "string"}}}, False), + ({"type": "object", "properties": {"refresh_token": {"type": ["boolean", "null"]}}}, False), + ), +) +def test_property_type_is_not_array(mocker, connector_spec, should_fail): + mocker.patch.object(conftest.pytest, "fail") + t = _TestSpec() + t.test_property_type_is_not_array(ConnectorSpecification(connectionSpecification=connector_spec)) + if should_fail: + conftest.pytest.fail.assert_called_once() + else: + conftest.pytest.fail.assert_not_called() + + +@pytest.mark.parametrize( + "connector_spec, should_fail", + ( + ({"type": "object", "properties": {"refresh_token": {"type": "boolean", "airbyte_secret": True}}}, False), + ({"type": "object", "properties": {}}, False), + ({"type": "object", "properties": {"jwt": {"type": "object"}}}, True), ( { - "connectionSpecification": {"type": "object", "properties": {"refresh_token": {"type": "boolean", "airbyte_secret": True}}} + "type": "object", + "properties": { + "jwt": { + "type": "object", + "oneOf": [ + {"type": "object", "properties": {"a": {"type": "string"}}}, + {"type": "object", "properties": {"b": {"type": "string"}}}, + ], + } + }, }, False, - True ), ( { - "connectionSpecification": {"type": "object", "properties": {"jwt": {"type": "object"}}} + "type": "object", + "properties": { + "jwt": { + "type": "object", + "oneOf": [ + {"type": "object", "properties": {"a": {"type": "string"}}}, + {"type": "object", "properties": {"b": {"type": "string"}}}, + {"type": "object", "properties": {}}, + ], + } + }, }, True, - False ), + ({"type": "object", "properties": {"jwt": {"type": "object", "properties": {}}}}, True), + ), +) +def test_object_not_empty(mocker, connector_spec, should_fail): + mocker.patch.object(conftest.pytest, "fail") + t = _TestSpec() + t.test_object_not_empty(ConnectorSpecification(connectionSpecification=connector_spec)) + if should_fail: + conftest.pytest.fail.assert_called_once() + else: + conftest.pytest.fail.assert_not_called() + + +@pytest.mark.parametrize( + "connector_spec, should_fail", + ( + ({"type": "object", "properties": {"list": {"type": "array"}}}, False), + ({"type": "object", "properties": {"list": {"type": "array", "items": [{"type": "string"}, {"type": "boolean"}]}}}, True), + ({"type": "object", "properties": {"list": {"type": "array", "items": {"type": "string"}}}}, False), + ({"type": "object", "properties": {"list": {"type": "array", "items": {"type": "number"}}}}, False), + ({"type": "object", "properties": {"list": {"type": "array", "items": {"type": "integer"}}}}, False), + ({"type": "object", "properties": {"list": {"type": "array", "items": {"type": "boolean"}}}}, True), + ({"type": "object", "properties": {"list": {"type": "array", "items": {"type": "number", "enum": [1, 2, 3]}}}}, False), + ({"type": "object", "properties": {"list": {"type": "array", "items": {"enum": ["a", "b", "c"]}}}}, False), ( { - "connectionSpecification": {"type": "object", "properties": {"refresh_token": {"type": ["null", "string"]}}} + "type": "object", + "properties": {"list": {"type": "array", "items": {"type": "object", "properties": {"a": {"type": "string"}}}}}, }, - True, - False + False, ), + ({"type": "object", "properties": {"list": {"type": "array", "items": {"type": "boolean"}}}}, True), + ), +) +def test_array_type(mocker, connector_spec, should_fail): + mocker.patch.object(conftest.pytest, "fail") + t = _TestSpec() + t.test_array_type(ConnectorSpecification(connectionSpecification=connector_spec)) + if should_fail: + conftest.pytest.fail.assert_called_once() + else: + conftest.pytest.fail.assert_not_called() + + +@pytest.mark.parametrize( + "connector_spec, should_fail", + ( + ({"type": "object", "properties": {"a": {"type": "string"}}}, False), + ({"type": "object", "properties": {"a": {"type": "string", "allOf": [{"type": "string"}, {"maxLength": 5}]}}}, True), + ({"type": "object", "properties": {"allOf": {"type": "string"}}}, False), ( { - "connectionSpecification": {"type": "object", "properties": {"credentials": {"type": "array"}}} + "type": "object", + "properties": {"allOf": {"type": "object", "patternProperties": {"^S_": {"type": "string"}, "^I_": {"type": "integer"}}}}, }, True, - False ), ( { - "connectionSpecification": {"type": "object", "properties": {"credentials": {"type": "array", "items": {"type": "string"}}}} + "type": "object", + "properties": { + "list": { + "type": "array", + "prefixItems": [{"enum": ["Street", "Avenue", "Boulevard"]}, {"enum": ["NW", "NE", "SW", "SE"]}], + } + }, }, True, - False + ), + ), +) +def test_forbidden_complex_types(mocker, connector_spec, should_fail): + mocker.patch.object(conftest.pytest, "fail") + t = _TestSpec() + t.test_forbidden_complex_types(ConnectorSpecification(connectionSpecification=connector_spec)) + if should_fail: + conftest.pytest.fail.assert_called_once() + else: + conftest.pytest.fail.assert_not_called() + + +@pytest.mark.parametrize( + "connector_spec, is_warning_logged", + ( + ({"type": "object", "properties": {"date": {"type": "string"}}}, False), + ({"type": "object", "properties": {"date": {"type": "string", "format": "date"}}}, True), + ({"type": "object", "properties": {"date": {"type": "string", "format": "date-time"}}}, True), + ( + {"type": "object", "properties": {"date": {"type": "string", "format": "date", "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$"}}}, + False, ), ( { - "connectionSpecification": {"type": "object", "properties": {"auth": {"oneOf": [{"api_token": {"type": "string"}}]}}} + "type": "object", + "properties": { + "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})?$", + } + }, }, - True, - False + False, ), + ({"type": "object", "properties": {"date": {"type": "string", "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$"}}}, False), ( { - "connectionSpecification": {"type": "object", "properties": {"credentials": {"oneOf": [{"type": "object", "properties": {"api_key": {"type": "string"}}}]}}} + "type": "object", + "properties": {"date": {"type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$"}}, }, - True, - False + False, + ), + ), +) +def test_date_pattern(mocker, connector_spec, is_warning_logged): + mocker.patch.object(conftest.pytest, "fail") + logger = mocker.Mock() + t = _TestSpec() + t.test_date_pattern(ConnectorSpecification(connectionSpecification=connector_spec), logger) + conftest.pytest.fail.assert_not_called() + if is_warning_logged: + _, args, _ = logger.warning.mock_calls[0] + msg, *_ = args + assert "Consider setting the pattern" in msg + + +@pytest.mark.parametrize( + "connector_spec, is_warning_logged", + ( + ({"type": "object", "properties": {"date": {"type": "string"}}}, False), + ({"type": "object", "properties": {"format": {"type": "string"}}}, False), + ({"type": "object", "properties": {"date": {"type": "string", "pattern": "[a-z]*"}}}, False), + ( + {"type": "object", "properties": {"date": {"type": "string", "format": "date", "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$"}}}, + False, ), ( { - "connectionSpecification": {"type": "object", "properties": {"start_date": {"type": ["null", "string"]}}} + "type": "object", + "properties": { + "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})?$", + } + }, }, False, - False ), + ({"type": "object", "properties": {"date": {"type": "string", "pattern": "^[0-9]{2}-[0-9]{2}-[0-9]{4}$"}}}, True), ( { - "connectionSpecification": {"type": "object", "properties": {"credentials": {"oneOf": [{"type": "string", "const": "OAuth2.0"}]}}} + "type": "object", + "properties": {"date": {"type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(T[0-9]{2}:[0-9]{2}:[0-9]{2})?$"}}, }, - False, - False - ) + True, + ), ), ) -def test_airbyte_secret(mocker, connector_spec, should_fail, is_warning_logged): +def test_date_format(mocker, connector_spec, is_warning_logged): mocker.patch.object(conftest.pytest, "fail") - t = _TestSpec() logger = mocker.Mock() - t.test_secret_is_properly_marked(connector_spec, logger, ("api_key", "api_token", "refresh_token", "jwt", "credentials")) - if should_fail: - conftest.pytest.fail.assert_called_once() - else: - conftest.pytest.fail.assert_not_called() + t = _TestSpec() + t.test_date_format(ConnectorSpecification(connectionSpecification=connector_spec), logger) + conftest.pytest.fail.assert_not_called() if is_warning_logged: _, args, _ = logger.warning.mock_calls[0] msg, *_ = args - assert "Some properties are marked with `airbyte_secret` although they probably should not be" in msg - else: - logger.warning.assert_not_called() + assert "Consider specifying the format" in msg @pytest.mark.parametrize( @@ -757,12 +922,15 @@ def test_airbyte_secret(mocker, connector_spec, should_fail, is_warning_logged): ("properties/start_date/type", "start_date", False), ("properties/credentials/oneOf/1/properties/api_token/type", "api_token", True), ("properties/type", None, False), # root element - ("properties/accounts/items/2/properties/jwt/type", "jwt", True) - ) + ("properties/accounts/items/2/properties/jwt/type", "jwt", True), + ), ) def test_is_spec_property_name_secret(path, expected_name, expected_result): t = _TestSpec() - assert t._is_spec_property_name_secret(path, ("api_key", "api_token", "refresh_token", "jwt", "credentials")) == (expected_name, expected_result) + assert t._is_spec_property_name_secret(path, ("api_key", "api_token", "refresh_token", "jwt", "credentials")) == ( + expected_name, + expected_result, + ) @pytest.mark.parametrize( @@ -775,14 +943,12 @@ def test_is_spec_property_name_secret(path, expected_name, expected_result): ({"type": "number"}, True), ({"type": ["null", "string"]}, True), ({"type": ["null", "boolean"]}, False), - ({"type": "object"}, True), - # the object itself cannot hold a secret but the inner items can and will be processed separately + ({"type": "object"}, False), ({"type": "object", "properties": {"api_key": {}}}, False), - ({"type": "array"}, True), - # same as object + ({"type": "array"}, False), ({"type": "array", "items": {"type": "string"}}, False), - ({"type": "string", "const": "OAuth2.0"}, False) - ) + ({"type": "string", "const": "OAuth2.0"}, False), + ), ) def test_property_can_store_secret(property_def, can_store_secret): t = _TestSpec() diff --git a/airbyte-integrations/bases/standard-destination-test/build.gradle b/airbyte-integrations/bases/standard-destination-test/build.gradle index bb98faae7b653..fc0f369fdbbf6 100644 --- a/airbyte-integrations/bases/standard-destination-test/build.gradle +++ b/airbyte-integrations/bases/standard-destination-test/build.gradle @@ -9,7 +9,6 @@ dependencies { implementation project(':airbyte-json-validation') implementation project(':airbyte-integrations:bases:base-java') implementation project(':airbyte-protocol:protocol-models') - implementation project(':airbyte-commons-worker') implementation(enforcedPlatform('org.junit:junit-bom:5.8.2')) implementation 'org.junit.jupiter:junit-jupiter-api' diff --git a/airbyte-integrations/bases/standard-destination-test/src/main/java/io/airbyte/integrations/standardtest/destination/DestinationAcceptanceTest.java b/airbyte-integrations/bases/standard-destination-test/src/main/java/io/airbyte/integrations/standardtest/destination/DestinationAcceptanceTest.java index cff00930528af..1fce78c5bd17e 100644 --- a/airbyte-integrations/bases/standard-destination-test/src/main/java/io/airbyte/integrations/standardtest/destination/DestinationAcceptanceTest.java +++ b/airbyte-integrations/bases/standard-destination-test/src/main/java/io/airbyte/integrations/standardtest/destination/DestinationAcceptanceTest.java @@ -1250,14 +1250,14 @@ protected void assertNamespaceNormalization(final String testCaseId, private ConnectorSpecification runSpec() throws WorkerException { return convertProtocolObject( new DefaultGetSpecWorker( - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, null, false, new EnvVariableFeatureFlags())) + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, null, null, false, new EnvVariableFeatureFlags())) .run(new JobGetSpecConfig().withDockerImage(getImageName()), jobRoot).getSpec(), ConnectorSpecification.class); } protected StandardCheckConnectionOutput runCheck(final JsonNode config) throws WorkerException { return new DefaultCheckConnectionWorker( - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, null, false, new EnvVariableFeatureFlags()), + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, null, null, false, new EnvVariableFeatureFlags()), mConnectorConfigUpdater) .run(new StandardCheckConnectionInput().withConnectionConfiguration(config), jobRoot) .getCheckConnection(); @@ -1267,7 +1267,7 @@ protected StandardCheckConnectionOutput.Status runCheckWithCatchedException( final JsonNode config) { try { final StandardCheckConnectionOutput standardCheckConnectionOutput = new DefaultCheckConnectionWorker( - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, null, false, new EnvVariableFeatureFlags()), + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, null, null, false, new EnvVariableFeatureFlags()), mConnectorConfigUpdater) .run(new StandardCheckConnectionInput().withConnectionConfiguration(config), jobRoot) .getCheckConnection(); @@ -1280,7 +1280,7 @@ protected StandardCheckConnectionOutput.Status runCheckWithCatchedException( protected AirbyteDestination getDestination() { return new DefaultAirbyteDestination( - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, null, false, new EnvVariableFeatureFlags())); + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, null, null, false, new EnvVariableFeatureFlags())); } protected void runSyncAndVerifyStateOutput(final JsonNode config, diff --git a/airbyte-integrations/bases/standard-destination-test/src/main/java/io/airbyte/integrations/standardtest/destination/comparator/AdvancedTestDataComparator.java b/airbyte-integrations/bases/standard-destination-test/src/main/java/io/airbyte/integrations/standardtest/destination/comparator/AdvancedTestDataComparator.java index 3c86a10a04556..7f48c2490ab2a 100644 --- a/airbyte-integrations/bases/standard-destination-test/src/main/java/io/airbyte/integrations/standardtest/destination/comparator/AdvancedTestDataComparator.java +++ b/airbyte-integrations/bases/standard-destination-test/src/main/java/io/airbyte/integrations/standardtest/destination/comparator/AdvancedTestDataComparator.java @@ -105,8 +105,10 @@ protected boolean compareJsonNodes(final JsonNode expectedValue, final JsonNode return compareDateTimeValues(expectedValue.asText(), actualValue.asText()); } else if (isDateValue(expectedValue.asText())) { return compareDateValues(expectedValue.asText(), actualValue.asText()); - } else if (isTimeWithTimezone(expectedValue.asText()) || isTimeWithoutTimezone(expectedValue.asText())) { - return compareTime(expectedValue.asText(), actualValue.asText()); + } else if (isTimeWithTimezone(expectedValue.asText())) { + return compareTimeWithTimeZone(expectedValue.asText(), actualValue.asText()); + } else if (isTimeWithoutTimezone(expectedValue.asText())) { + return compareTimeWithoutTimeZone(expectedValue.asText(), actualValue.asText()); } else if (expectedValue.isArray()) { return compareArrays(expectedValue, actualValue); } else if (expectedValue.isObject()) { @@ -215,7 +217,11 @@ protected boolean compareDateValues(final String airbyteMessageValue, final Stri return compareTextValues(airbyteMessageValue, destinationValue); } - protected boolean compareTime(final String airbyteMessageValue, final String destinationValue) { + protected boolean compareTimeWithoutTimeZone(final String airbyteMessageValue, final String destinationValue) { + return compareTextValues(airbyteMessageValue, destinationValue); + } + + protected boolean compareTimeWithTimeZone(final String airbyteMessageValue, final String destinationValue) { return compareTextValues(airbyteMessageValue, destinationValue); } diff --git a/airbyte-integrations/bases/standard-source-test/build.gradle b/airbyte-integrations/bases/standard-source-test/build.gradle index a006bbc02d765..ba8fde811deb9 100644 --- a/airbyte-integrations/bases/standard-source-test/build.gradle +++ b/airbyte-integrations/bases/standard-source-test/build.gradle @@ -17,7 +17,6 @@ dependencies { implementation project(':airbyte-config:config-models') implementation project(':airbyte-config:config-persistence') implementation project(':airbyte-protocol:protocol-models') - implementation project(':airbyte-commons-worker') implementation 'org.mockito:mockito-core:4.6.1' implementation 'net.sourceforge.argparse4j:argparse4j:0.8.1' @@ -30,7 +29,7 @@ dependencies { def getFullPath(String className) { def matchingFiles = project.fileTree("src/main/java") - .filter { file -> file.getName().equals("${className}.java".toString())}.asCollection() + .filter { file -> file.getName().equals("${className}.java".toString()) }.asCollection() if (matchingFiles.size() == 0) { throw new IllegalArgumentException("Ambiguous class name ${className}: no file found.") } @@ -51,14 +50,15 @@ task generateSourceTestDocs(type: Javadoc) { destinationDir = javadocOutputDir doLast { - def className = "SourceAcceptanceTest" // this can be made into a list once we have multiple standard tests, and can also be used for destinations + def className = "SourceAcceptanceTest" + // this can be made into a list once we have multiple standard tests, and can also be used for destinations def pathInPackage = getFullPath(className) def stdSrcTest = project.file("${javadocOutputDir}/${pathInPackage}.html").readLines().join("\n") def methodList = Jsoup.parse(stdSrcTest).body().select("section.methodDetails>ul>li>section") def md = "" - for (methodInfo in methodList){ + for (methodInfo in methodList) { def annotations = methodInfo.select(".memberSignature>.annotations").text() - if (!annotations.contains("@Test")){ + if (!annotations.contains("@Test")) { continue } def methodName = methodInfo.selectFirst("div>span.memberName").text() @@ -73,7 +73,7 @@ task generateSourceTestDocs(type: Javadoc) { outputDoc.append md } - outputs.upToDateWhen {false} + outputs.upToDateWhen { false } } project.build.dependsOn(generateSourceTestDocs) diff --git a/airbyte-integrations/bases/standard-source-test/src/main/java/io/airbyte/integrations/standardtest/source/AbstractSourceConnectorTest.java b/airbyte-integrations/bases/standard-source-test/src/main/java/io/airbyte/integrations/standardtest/source/AbstractSourceConnectorTest.java index f3d1ae3598bc5..58b3f2b3baf0a 100644 --- a/airbyte-integrations/bases/standard-source-test/src/main/java/io/airbyte/integrations/standardtest/source/AbstractSourceConnectorTest.java +++ b/airbyte-integrations/bases/standard-source-test/src/main/java/io/airbyte/integrations/standardtest/source/AbstractSourceConnectorTest.java @@ -158,7 +158,7 @@ public void tearDownInternal() throws Exception { protected ConnectorSpecification runSpec() throws WorkerException { final io.airbyte.protocol.models.ConnectorSpecification spec = new DefaultGetSpecWorker( - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), false, + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), null, false, new EnvVariableFeatureFlags())) .run(new JobGetSpecConfig().withDockerImage(getImageName()), jobRoot).getSpec(); return convertProtocolObject(spec, ConnectorSpecification.class); @@ -166,7 +166,7 @@ protected ConnectorSpecification runSpec() throws WorkerException { protected StandardCheckConnectionOutput runCheck() throws Exception { return new DefaultCheckConnectionWorker( - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), false, + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), null, false, new EnvVariableFeatureFlags()), mConnectorConfigUpdater) .run(new StandardCheckConnectionInput().withConnectionConfiguration(getConfig()), jobRoot).getCheckConnection(); @@ -174,7 +174,7 @@ protected StandardCheckConnectionOutput runCheck() throws Exception { protected String runCheckAndGetStatusAsString(final JsonNode config) throws Exception { return new DefaultCheckConnectionWorker( - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), false, + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), null, false, new EnvVariableFeatureFlags()), mConnectorConfigUpdater) .run(new StandardCheckConnectionInput().withConnectionConfiguration(config), jobRoot).getCheckConnection().getStatus().toString(); @@ -183,7 +183,7 @@ protected String runCheckAndGetStatusAsString(final JsonNode config) throws Exce protected UUID runDiscover() throws Exception { final UUID toReturn = new DefaultDiscoverCatalogWorker( mConfigRepository, - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), false, + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), null, false, new EnvVariableFeatureFlags()), mConnectorConfigUpdater) .run(new StandardDiscoverCatalogInput().withSourceId(SOURCE_ID.toString()).withConnectionConfiguration(getConfig()), jobRoot) @@ -218,7 +218,7 @@ protected List runRead(final ConfiguredAirbyteCatalog catalog, f final var featureFlags = new EnvVariableFeatureFlags(); final AirbyteSource source = new DefaultAirbyteSource( - new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), false, + new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), null, false, featureFlags), featureFlags); final List messages = new ArrayList<>(); @@ -271,9 +271,9 @@ private AirbyteSource prepareAirbyteSource(final ResourceRequirements resourceRe final var workerConfigs = new WorkerConfigs(new EnvConfigs()); final var featureFlags = new EnvVariableFeatureFlags(); final var integrationLauncher = resourceRequirements == null - ? new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), false, + ? new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, workerConfigs.getResourceRequirements(), null, false, featureFlags) - : new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, resourceRequirements, false, featureFlags); + : new AirbyteIntegrationLauncher(JOB_ID, JOB_ATTEMPT, getImageName(), processFactory, resourceRequirements, null, false, featureFlags); return new DefaultAirbyteSource(integrationLauncher, featureFlags); } diff --git a/airbyte-integrations/connector-templates/source-configuration-based/source_{{snakeCase name}}/{{snakeCase name}}.yaml.hbs b/airbyte-integrations/connector-templates/source-configuration-based/source_{{snakeCase name}}/manifest.yaml.hbs similarity index 100% rename from airbyte-integrations/connector-templates/source-configuration-based/source_{{snakeCase name}}/{{snakeCase name}}.yaml.hbs rename to airbyte-integrations/connector-templates/source-configuration-based/source_{{snakeCase name}}/manifest.yaml.hbs diff --git a/airbyte-integrations/connector-templates/source-configuration-based/source_{{snakeCase name}}/source.py.hbs b/airbyte-integrations/connector-templates/source-configuration-based/source_{{snakeCase name}}/source.py.hbs index 8a9888ecbc2e0..6f34471cfd002 100644 --- a/airbyte-integrations/connector-templates/source-configuration-based/source_{{snakeCase name}}/source.py.hbs +++ b/airbyte-integrations/connector-templates/source-configuration-based/source_{{snakeCase name}}/source.py.hbs @@ -15,4 +15,4 @@ WARNING: Do not modify this file. # Declarative Source class Source{{properCase name}}(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "{{snakeCase name}}.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/destination-bigquery-denormalized/Dockerfile b/airbyte-integrations/connectors/destination-bigquery-denormalized/Dockerfile index 1cfd9ee045d5d..e6cd0710659c2 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.11 +LABEL io.airbyte.version=1.2.12 LABEL io.airbyte.name=airbyte/destination-bigquery-denormalized diff --git a/airbyte-integrations/connectors/destination-bigquery/Dockerfile b/airbyte-integrations/connectors/destination-bigquery/Dockerfile index f79d950d1d7f0..66880d42d779f 100644 --- a/airbyte-integrations/connectors/destination-bigquery/Dockerfile +++ b/airbyte-integrations/connectors/destination-bigquery/Dockerfile @@ -17,5 +17,5 @@ ENV ENABLE_SENTRY true COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=1.2.11 +LABEL io.airbyte.version=1.2.13 LABEL io.airbyte.name=airbyte/destination-bigquery diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryDestination.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryDestination.java index 8900c0b092bb2..6d6b7a2626bcf 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryDestination.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryDestination.java @@ -192,6 +192,17 @@ public static GoogleCredentials getServiceAccountCredentials(final JsonNode conf new ByteArrayInputStream(credentialsString.getBytes(Charsets.UTF_8))); } + /** + * Returns a {@link AirbyteMessageConsumer} based on whether the uploading mode is STANDARD INSERTS + * or using STAGING + * + * @param config - integration-specific configuration object as json. e.g. { "username": "airbyte", + * "password": "super secure" } + * @param catalog - schema of the incoming messages. + * @param outputRecordCollector + * @return + * @throws IOException + */ @Override public AirbyteMessageConsumer getConsumer(final JsonNode config, final ConfiguredAirbyteCatalog catalog, diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryGcsOperations.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryGcsOperations.java index 51a269725befb..67f54ec0b2a8c 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryGcsOperations.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryGcsOperations.java @@ -13,12 +13,12 @@ import com.google.cloud.bigquery.LoadJobConfiguration; import com.google.cloud.bigquery.Schema; import com.google.cloud.bigquery.TableId; +import io.airbyte.commons.exceptions.ConfigErrorException; import io.airbyte.integrations.destination.StandardNameTransformer; -import io.airbyte.integrations.destination.bigquery.uploader.AbstractBigQueryUploader; import io.airbyte.integrations.destination.gcs.GcsDestinationConfig; import io.airbyte.integrations.destination.gcs.GcsStorageOperations; import io.airbyte.integrations.destination.record_buffer.SerializableBuffer; -import io.airbyte.protocol.models.v0.DestinationSyncMode; +import io.airbyte.integrations.util.ConnectorExceptionUtil; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -84,22 +84,30 @@ public String getStagingFullPath(final String datasetId, final String stream) { public void createSchemaIfNotExists(final String datasetId, final String datasetLocation) { if (!existingSchemas.contains(datasetId)) { LOGGER.info("Creating dataset {}", datasetId); - BigQueryUtils.getOrCreateDataset(bigQuery, datasetId, datasetLocation); + try { + BigQueryUtils.getOrCreateDataset(bigQuery, datasetId, datasetLocation); + } catch (final BigQueryException e) { + if (ConnectorExceptionUtil.HTTP_AUTHENTICATION_ERROR_CODES.contains(e.getCode())) { + throw new ConfigErrorException(e.getMessage(), e); + } else { + throw e; + } + } existingSchemas.add(datasetId); } } @Override - public void createTmpTableIfNotExists(final TableId tmpTableId, final Schema tableSchema) { - LOGGER.info("Creating tmp table {}", tmpTableId); - BigQueryUtils.createPartitionedTable(bigQuery, tmpTableId, tableSchema); + public void createTableIfNotExists(final TableId tableId, final Schema tableSchema) { + LOGGER.info("Creating target table {}", tableId); + BigQueryUtils.createPartitionedTable(bigQuery, tableId, tableSchema); } @Override public void createStageIfNotExists(final String datasetId, final String stream) { final String objectPath = getStagingFullPath(datasetId, stream); LOGGER.info("Creating staging path for stream {} (dataset {}): {}", stream, datasetId, objectPath); - gcsStorageOperations.createBucketObjectIfNotExists(objectPath); + gcsStorageOperations.createBucketIfNotExists(); } @Override @@ -110,36 +118,43 @@ public String uploadRecordsToStage(final String datasetId, final String stream, } /** + * Similar to COPY INTO within {@link io.airbyte.integrations.destination.staging.StagingOperations} + * which loads the data stored in the stage area into a target table in the destination + * * Reference * https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html */ @Override - public void copyIntoTmpTableFromStage(final String datasetId, + public void copyIntoTableFromStage(final String datasetId, final String stream, - final TableId tmpTableId, - final Schema tmpTableSchema, + final TableId tableId, + final Schema tableSchema, final List stagedFiles) { - LOGGER.info("Uploading records from staging files to tmp table {} (dataset {}): {}", tmpTableId, datasetId, stagedFiles); + LOGGER.info("Uploading records from staging files to target table {} (dataset {}): {}", + tableId, datasetId, stagedFiles); stagedFiles.parallelStream().forEach(stagedFile -> { final String fullFilePath = String.format("gs://%s/%s%s", gcsConfig.getBucketName(), getStagingFullPath(datasetId, stream), stagedFile); LOGGER.info("Uploading staged file: {}", fullFilePath); - final LoadJobConfiguration configuration = LoadJobConfiguration.builder(tmpTableId, fullFilePath) + final LoadJobConfiguration configuration = LoadJobConfiguration.builder(tableId, fullFilePath) .setFormatOptions(FormatOptions.avro()) - .setSchema(tmpTableSchema) + .setSchema(tableSchema) .setWriteDisposition(WriteDisposition.WRITE_APPEND) .setUseAvroLogicalTypes(true) .build(); final Job loadJob = this.bigQuery.create(JobInfo.of(configuration)); - LOGGER.info("[{}] Created a new job to upload records to tmp table {} (dataset {}): {}", loadJob.getJobId(), tmpTableId, datasetId, loadJob); + LOGGER.info("[{}] Created a new job to upload record(s) to target table {} (dataset {}): {}", loadJob.getJobId(), + tableId, datasetId, loadJob); try { BigQueryUtils.waitForJobFinish(loadJob); - LOGGER.info("[{}] Tmp table {} (dataset {}) is successfully appended with staging files", loadJob.getJobId(), tmpTableId, datasetId); + LOGGER.info("[{}] Target table {} (dataset {}) is successfully appended with staging files", loadJob.getJobId(), + tableId, datasetId); } catch (final BigQueryException | InterruptedException e) { throw new RuntimeException( - String.format("[%s] Failed to upload staging files to tmp table %s (%s)", loadJob.getJobId(), tmpTableId, datasetId), e); + String.format("[%s] Failed to upload staging files to destination table %s (%s)", loadJob.getJobId(), + tableId, datasetId), e); } }); } @@ -155,23 +170,9 @@ public void cleanUpStage(final String datasetId, final String stream, final List } @Override - public void copyIntoTargetTable(final String datasetId, - final TableId tmpTableId, - final TableId targetTableId, - final Schema schema, - final DestinationSyncMode syncMode) { - LOGGER.info("Copying data from tmp table {} to target table {} (dataset {}, sync mode {})", tmpTableId, targetTableId, datasetId, syncMode); - final WriteDisposition bigQueryMode = BigQueryUtils.getWriteDisposition(syncMode); - if (bigQueryMode == JobInfo.WriteDisposition.WRITE_APPEND) { - AbstractBigQueryUploader.partitionIfUnpartitioned(bigQuery, schema, targetTableId); - } - AbstractBigQueryUploader.copyTable(bigQuery, tmpTableId, targetTableId, bigQueryMode); - } - - @Override - public void dropTableIfExists(final String datasetId, final TableId tmpTableId) { - LOGGER.info("Deleting tmp table {} (dataset {})", tmpTableId, datasetId); - bigQuery.delete(tmpTableId); + public void dropTableIfExists(final String datasetId, final TableId tableId) { + LOGGER.info("Deleting target table {} (dataset {})", tableId, datasetId); + bigQuery.delete(tableId); } @Override @@ -185,4 +186,26 @@ public void dropStageIfExists(final String datasetId, final String stream) { gcsStorageOperations.dropBucketObject(stagingDatasetPath); } + /** + * "Truncates" table, this is a workaround to the issue with TRUNCATE TABLE in BigQuery where the + * table's partition filter must be turned off to truncate. Since deleting a table is a free + * operation this option re-uses functions that already exist + * + *

    + * See: https://cloud.google.com/bigquery/pricing#free + *

    + * + * @param datasetId equivalent to schema name + * @param tableId table name + * @param schema schema of the table to be deleted/created + */ + @Override + public void truncateTableIfExists(final String datasetId, + final TableId tableId, + final Schema schema) { + LOGGER.info("Truncating target table {} (dataset {})", tableId, datasetId); + dropTableIfExists(datasetId, tableId); + createTableIfNotExists(tableId, schema); + } + } diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryRecordConsumer.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryRecordConsumer.java index 72c62ad9765b4..633da56bafc1a 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryRecordConsumer.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryRecordConsumer.java @@ -19,6 +19,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * Record Consumer used for STANDARD INSERTS + */ public class BigQueryRecordConsumer extends FailureTrackingAirbyteMessageConsumer implements AirbyteMessageConsumer { private static final Logger LOGGER = LoggerFactory.getLogger(BigQueryRecordConsumer.class); diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryStagingConsumerFactory.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryStagingConsumerFactory.java index 8b0399f867463..26686f88ac104 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryStagingConsumerFactory.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryStagingConsumerFactory.java @@ -21,6 +21,8 @@ import io.airbyte.protocol.models.v0.AirbyteStream; import io.airbyte.protocol.models.v0.AirbyteStreamNameNamespacePair; import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; +import io.airbyte.protocol.models.v0.DestinationSyncMode; +import java.util.List; import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; @@ -29,6 +31,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +/** + * This class mimics the same functionality as {@link io.airbyte.integrations.destination.staging.StagingConsumerFactory} + * which likely should be placed into a commons package to be utilized across all ConsumerFactories + */ public class BigQueryStagingConsumerFactory { private static final Logger LOGGER = LoggerFactory.getLogger(BigQueryStagingConsumerFactory.class); @@ -92,22 +98,47 @@ private Map createWriteConf Functions.identity())); } + /** + * Sets up {@link BufferedStreamConsumer} with creation of the destination's raw tables + * + *

    + * Note: targetTableId is synonymous with airbyte_raw table + *

    + * + * @param bigQueryGcsOperations collection of Google Cloud Storage Operations + * @param writeConfigs configuration settings used to describe how to write data and where it exists + * @return + */ private VoidCallable onStartFunction(final BigQueryStagingOperations bigQueryGcsOperations, final Map writeConfigs) { return () -> { - LOGGER.info("Preparing tmp tables in destination started for {} streams", writeConfigs.size()); + LOGGER.info("Preparing airbyte_raw tables in destination started for {} streams", writeConfigs.size()); for (final BigQueryWriteConfig writeConfig : writeConfigs.values()) { + LOGGER.info("Preparing staging are in destination for schema: {}, stream: {}, target table: {}, stage: {}", + writeConfig.tableSchema(), writeConfig.streamName(), writeConfig.targetTableId(), writeConfig.streamName()); final String datasetId = writeConfig.datasetId(); bigQueryGcsOperations.createSchemaIfNotExists(datasetId, writeConfig.datasetLocation()); - // only the tmp table is explicitly created, because the target table will be automatically - // created when the data is copied from the tmp table - bigQueryGcsOperations.createTmpTableIfNotExists(writeConfig.tmpTableId(), writeConfig.tableSchema()); + // With checkpointing, we will be creating the target table earlier in the setup such that + // the data can be immediately loaded from the staging area + bigQueryGcsOperations.createTableIfNotExists(writeConfig.targetTableId(), writeConfig.tableSchema()); bigQueryGcsOperations.createStageIfNotExists(datasetId, writeConfig.streamName()); + // When OVERWRITE mode, truncate the destination's raw table prior to syncing data + if (writeConfig.syncMode() == DestinationSyncMode.OVERWRITE) { + bigQueryGcsOperations.truncateTableIfExists(datasetId, writeConfig.targetTableId(), writeConfig.tableSchema()); + } } - LOGGER.info("Preparing tmp tables in destination completed."); + LOGGER.info("Preparing airbyte_raw tables in destination completed."); }; } + /** + * Flushes buffer data, writes to staging environment then proceeds to upload those same records to + * destination table + * + * @param bigQueryGcsOperations collection of utility SQL operations + * @param writeConfigs book keeping configurations for writing and storing state to write records + * @param catalog configured Airbyte catalog + */ private CheckedBiConsumer flushBufferFunction(final BigQueryStagingOperations bigQueryGcsOperations, final Map writeConfigs, final ConfiguredAirbyteCatalog catalog) { @@ -119,46 +150,44 @@ private CheckedBiConsumer onCloseFunction(final BigQueryStagingOperations bigQueryGcsOperations, final Map writeConfigs) { return (hasFailed) -> { - if (!hasFailed) { - LOGGER.info("Copying into tables in destination started for {} streams", writeConfigs.size()); - - for (final BigQueryWriteConfig writeConfig : writeConfigs.values()) { - final String datasetId = writeConfig.datasetId(); - final String stream = writeConfig.streamName(); - - try { - bigQueryGcsOperations.copyIntoTmpTableFromStage(datasetId, stream, writeConfig.tmpTableId(), writeConfig.tableSchema(), - writeConfig.stagedFiles()); - } catch (final Exception e) { - bigQueryGcsOperations.cleanUpStage(datasetId, stream, writeConfig.stagedFiles()); - final String stagingPath = bigQueryGcsOperations.getStagingFullPath(datasetId, stream); - throw new RuntimeException("Failed to upload data from stage " + stagingPath, e); - } - writeConfig.clearStagedFiles(); - bigQueryGcsOperations.copyIntoTargetTable( - datasetId, writeConfig.tmpTableId(), writeConfig.targetTableId(), writeConfig.tableSchema(), writeConfig.syncMode()); - } - - LOGGER.info("Finalizing tables in destination completed"); - } + /* + * Previously the hasFailed value was used to commit any remaining staged files into destination, + * however, with the changes to checkpointing this will no longer be necessary since despite partial + * successes, we'll be committing the target table (aka airbyte_raw) table throughout the sync + */ LOGGER.info("Cleaning up destination started for {} streams", writeConfigs.size()); for (final BigQueryWriteConfig writeConfig : writeConfigs.values()) { - bigQueryGcsOperations.dropTableIfExists(writeConfig.datasetId(), writeConfig.tmpTableId()); bigQueryGcsOperations.dropStageIfExists(writeConfig.datasetId(), writeConfig.streamName()); } LOGGER.info("Cleaning up destination completed."); diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryStagingOperations.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryStagingOperations.java index ef44b90aa9397..948a769ee1526 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryStagingOperations.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryStagingOperations.java @@ -7,42 +7,77 @@ import com.google.cloud.bigquery.Schema; import com.google.cloud.bigquery.TableId; import io.airbyte.integrations.destination.record_buffer.SerializableBuffer; -import io.airbyte.protocol.models.v0.DestinationSyncMode; import java.util.List; /** * This interface is similar to * {@link io.airbyte.integrations.destination.s3.BlobStorageOperations}. + * + *

    + * Similar interface to {@link io.airbyte.integrations.destination.jdbc.SqlOperations} + *

    */ public interface BigQueryStagingOperations { String getStagingFullPath(final String datasetId, final String stream); + /** + * Create a schema with provided name if it does not already exist + * + * @param datasetId Name of schema + * @param datasetLocation Location of where the dataset exists (e.g. US, EU, Asia Pacific) + */ void createSchemaIfNotExists(final String datasetId, final String datasetLocation); - void createTmpTableIfNotExists(final TableId tmpTableId, final Schema tableSchema); + /** + * Create a table with provided tableId in provided schema if it does not already exist + * + * @param tableId Name of table + * @param tableSchema Schema of the data being synced + */ + void createTableIfNotExists(final TableId tableId, final Schema tableSchema); + /** + * Create a staging folder with provided stream to upload temporary files before loading into the + * final destination + * + * @param datasetId Name of schema + * @param stream Name of stream (e.g. API source or database table) + */ void createStageIfNotExists(final String datasetId, final String stream); String uploadRecordsToStage(final String datasetId, final String stream, final SerializableBuffer writer) throws Exception; - void copyIntoTmpTableFromStage(final String datasetId, - final String stream, - final TableId tmpTableId, - final Schema schema, - final List stagedFiles) + /** + * Copies data from staging area to the target table + * + * @param datasetId Name of schema + * @param stream Name of stream + * @param tableId Name of destination's target table + * @param schema Schema of the data being synced + * @param stagedFiles collection of staged files + * @throws Exception + */ + void copyIntoTableFromStage(final String datasetId, + final String stream, + final TableId tableId, + final Schema schema, + final List stagedFiles) throws Exception; + /** + * This method was primarily used to clean up staging area at the end of a sync, however, since we're + * no longer trying to commit remaining staged files at the end of a sync this is super-ceded by + * #dropStageIfExists + */ + @Deprecated void cleanUpStage(final String datasetId, final String stream, final List stagedFiles); - void copyIntoTargetTable(final String datasetId, - final TableId tmpTableId, - final TableId targetTableId, - final Schema schema, - final DestinationSyncMode syncMode); - void dropTableIfExists(final String datasetId, final TableId tmpTableId); + void dropTableIfExists(final String datasetId, final TableId tableId); void dropStageIfExists(final String datasetId, final String stream); + void truncateTableIfExists(final String datasetId, final TableId tableId, Schema schema); + } diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryUtils.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryUtils.java index d5b60af7a5483..de3ff6ec4e980 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryUtils.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryUtils.java @@ -171,7 +171,7 @@ private static void attemptCreateTableAndTestInsert(final BigQuery bigquery, fin if (response.hasErrors()) { // If any of the insertions failed, this lets you inspect the errors - for (Map.Entry> entry : response.getInsertErrors().entrySet()) { + for (final Map.Entry> entry : response.getInsertErrors().entrySet()) { throw new ConfigErrorException("Failed to check connection: \n" + entry.getValue()); } } @@ -182,14 +182,26 @@ private static void attemptCreateTableAndTestInsert(final BigQuery bigquery, fin } } - public static Table createTable(final BigQuery bigquery, String datasetName, String tableName, Schema schema) { + public static Table createTable(final BigQuery bigquery, final String datasetName, final String tableName, final Schema schema) { final TableId tableId = TableId.of(datasetName, tableName); final TableDefinition tableDefinition = StandardTableDefinition.of(schema); final TableInfo tableInfo = TableInfo.newBuilder(tableId, tableDefinition).build(); return bigquery.create(tableInfo); } - // https://cloud.google.com/bigquery/docs/creating-partitioned-tables#java + /** + * Creates a partitioned table with clustering based on time + * + *

    + * https://cloud.google.com/bigquery/docs/creating-partitioned-tables#java + *

    + * + * @param bigquery BigQuery interface + * @param tableId equivalent to table name + * @param schema representation for table schema + * @return Table BigQuery table object to be referenced for deleting, otherwise empty meaning table + * was not successfully created + */ static void createPartitionedTable(final BigQuery bigquery, final TableId tableId, final Schema schema) { try { final TimePartitioning partitioning = TimePartitioning.newBuilder(TimePartitioning.Type.DAY) @@ -315,11 +327,11 @@ public static List getDateTimeFieldsFromSchema(final FieldList fieldList public static void transformJsonDateTimeToBigDataFormat(final List dateTimeFields, final JsonNode data) { dateTimeFields.forEach(e -> { if (data.isObject() && data.findValue(e) != null && !data.get(e).isNull()) { - ObjectNode dataObject = (ObjectNode) data; - JsonNode value = data.findValue(e); + final ObjectNode dataObject = (ObjectNode) data; + final JsonNode value = data.findValue(e); if (value.isArray()) { - ArrayNode arrayNode = (ArrayNode) value; - ArrayNode newArrayNode = dataObject.putArray(e); + final ArrayNode arrayNode = (ArrayNode) value; + final ArrayNode newArrayNode = dataObject.putArray(e); arrayNode.forEach(jsonNode -> newArrayNode.add(getFormattedBigQueryDateTime(jsonNode.asText()))); } else if (value.isTextual()) { dataObject.put(e, getFormattedBigQueryDateTime(value.asText())); @@ -345,10 +357,16 @@ public static String getSchema(final JsonNode config, final ConfiguredAirbyteStr return sanitizeDatasetId(schemaName); } - public static String sanitizeDatasetId(String datasetId) { + public static String sanitizeDatasetId(final String datasetId) { return NAME_TRANSFORMER.getNamespace(datasetId); } + /** + * Maps Airbyte internal sync modes with that of BigQuery's sync modes (aka Write Disposition) + * + * @param syncMode {@link DestinationSyncMode} represents how data is supposed to be written + * @return converted sync mode to map to BigQuery's Write Disposition + */ public static JobInfo.WriteDisposition getWriteDisposition(final DestinationSyncMode syncMode) { if (syncMode == null) { throw new IllegalStateException("Undefined destination sync mode"); @@ -429,7 +447,7 @@ public static void waitForJobFinish(final Job job) throws InterruptedException { } public static HeaderProvider getHeaderProvider() { - String connectorName = getConnectorNameOrDefault(); + final String connectorName = getConnectorNameOrDefault(); return () -> ImmutableMap.of("user-agent", String.format(USER_AGENT_FORMAT, connectorName)); } diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryWriteConfig.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryWriteConfig.java index 0857d797fccd0..31f42e4aebf46 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryWriteConfig.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/BigQueryWriteConfig.java @@ -13,7 +13,15 @@ import org.slf4j.LoggerFactory; /** + * @param streamName output stream name + * @param namespace * @param datasetId the dataset ID is equivalent to output schema + * @param datasetLocation location of dataset (e.g. US, EU) + * @param tmpTableId BigQuery temporary table + * @param targetTableId BigQuery final raw table + * @param tableSchema schema for the table + * @param syncMode BigQuery's mapping of write modes to Airbyte's sync mode + * @param stagedFiles collection of staged files to copy data from */ public record BigQueryWriteConfig( String streamName, diff --git a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/uploader/AbstractBigQueryUploader.java b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/uploader/AbstractBigQueryUploader.java index 39d76d2eeef31..18816c8df8a4f 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/uploader/AbstractBigQueryUploader.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/main/java/io/airbyte/integrations/destination/bigquery/uploader/AbstractBigQueryUploader.java @@ -128,6 +128,21 @@ protected void uploadDataToTableFromTmpTable() { copyTable(bigQuery, tmpTable, table, syncMode); } + /** + * Creates a partitioned table if the table previously was not partitioned + * + *

    + * Note: this logic is deprecated since it was used for the functionality of migrating unpartitioned + * tables to partitioned tables for performance. Since this change was introduced in Oct 2021 there + * is a well founded belief that any customer's that would have ran a sync in between end of 2022 and + * Oct 2021 would have migrated to a partition table + *

    + * + * @param bigQuery BigQuery interface + * @param schema Schema of the data table + * @param destinationTableId identifier for a table + */ + @Deprecated public static void partitionIfUnpartitioned(final BigQuery bigQuery, final Schema schema, final TableId destinationTableId) { try { final QueryJobConfiguration queryConfig = QueryJobConfiguration @@ -170,7 +185,18 @@ public static void partitionIfUnpartitioned(final BigQuery bigQuery, final Schem } } - // https://cloud.google.com/bigquery/docs/managing-tables#copying_a_single_source_table + /** + * Copies table from source to destination, while also creating the destination table if not already + * existing + *

    + * https://cloud.google.com/bigquery/docs/managing-tables#copying_a_single_source_table + *

    + * + * @param bigQuery BigQuery interface + * @param sourceTableId source table + * @param destinationTableId destination table + * @param syncMode mapping of Airbyte's sync mode to BigQuery's write mode + */ public static void copyTable(final BigQuery bigQuery, final TableId sourceTableId, final TableId destinationTableId, diff --git a/airbyte-integrations/connectors/destination-bigquery/src/test-integration/java/io/airbyte/integrations/destination/bigquery/BigQueryDestinationTest.java b/airbyte-integrations/connectors/destination-bigquery/src/test-integration/java/io/airbyte/integrations/destination/bigquery/BigQueryDestinationTest.java index 065ff49844cec..07da672a5ee4d 100644 --- a/airbyte-integrations/connectors/destination-bigquery/src/test-integration/java/io/airbyte/integrations/destination/bigquery/BigQueryDestinationTest.java +++ b/airbyte-integrations/connectors/destination-bigquery/src/test-integration/java/io/airbyte/integrations/destination/bigquery/BigQueryDestinationTest.java @@ -84,8 +84,10 @@ class BigQueryDestinationTest { protected static final Path CREDENTIALS_WITH_GCS_STAGING_PATH = Path.of("secrets/credentials-gcs-staging.json"); - protected static final Path[] ALL_PATHS = {CREDENTIALS_WITH_GCS_STAGING_PATH, CREDENTIALS_BAD_PROJECT_PATH, CREDENTIALS_NO_DATASET_CREATION_PATH, + + protected static final Path[] ALL_PATHS = {CREDENTIALS_STANDARD_INSERT_PATH, CREDENTIALS_BAD_PROJECT_PATH, CREDENTIALS_NO_DATASET_CREATION_PATH, CREDENTIALS_NO_EDIT_PUBLIC_SCHEMA_ROLE_PATH, CREDENTIALS_NON_BILLABLE_PROJECT_PATH, CREDENTIALS_WITH_GCS_STAGING_PATH}; + private static final Logger LOGGER = LoggerFactory.getLogger(BigQueryDestinationTest.class); private static final String DATASET_NAME_PREFIX = "bq_dest_integration_test"; @@ -129,11 +131,18 @@ class BigQueryDestinationTest { private AmazonS3 s3Client; - private Stream successTestConfigProvider() { + /* TODO: Migrate all BigQuery Destination configs (GCS, Denormalized, Normalized) to no longer use + * #partitionIfUnpartitioned then recombine Base Provider. The reason for breaking this method into + * a base class is because #testWritePartitionOverUnpartitioned is no longer used only in GCS Staging + */ + private Stream successTestConfigProviderBase() { return Stream.of( Arguments.of("config"), - Arguments.of("configWithProjectId"), - Arguments.of("gcsStagingConfig")); + Arguments.of("configWithProjectId")); + } + + private Stream successTestConfigProvider() { + return Stream.concat(successTestConfigProviderBase(), Stream.of(Arguments.of("gcsStagingConfig"))); } private Stream failCheckTestConfigProvider() { @@ -152,7 +161,7 @@ private Stream failWriteTestConfigProvider() { @BeforeAll public static void beforeAll() throws IOException { - for (Path path : ALL_PATHS) { + for (final Path path : ALL_PATHS) { if (!Files.exists(path)) { throw new IllegalStateException( String.format("Must provide path to a big query credentials file. Please add file with credentials to %s", path.toAbsolutePath())); @@ -213,11 +222,11 @@ public static void beforeAll() throws IOException { }; } - protected void initBigQuery(JsonNode config) throws IOException { + protected void initBigQuery(final JsonNode config) throws IOException { bigquery = BigQueryDestinationTestUtils.initBigQuery(config, projectId); try { dataset = BigQueryDestinationTestUtils.initDataSet(config, bigquery, datasetId); - } catch (Exception ex) { + } catch (final Exception ex) { // ignore } } @@ -254,8 +263,8 @@ void testSpec() throws Exception { @ParameterizedTest @MethodSource("successTestConfigProvider") - void testCheckSuccess(String configName) throws IOException { - JsonNode testConfig = configs.get(configName); + void testCheckSuccess(final String configName) throws IOException { + final JsonNode testConfig = configs.get(configName); final AirbyteConnectionStatus actual = new BigQueryDestination().check(testConfig); final AirbyteConnectionStatus expected = new AirbyteConnectionStatus().withStatus(Status.SUCCEEDED); assertEquals(expected, actual); @@ -263,9 +272,9 @@ void testCheckSuccess(String configName) throws IOException { @ParameterizedTest @MethodSource("failCheckTestConfigProvider") - void testCheckFailures(String configName, String error) { + void testCheckFailures(final String configName, final String error) { // TODO: this should always throw ConfigErrorException - JsonNode testConfig = configs.get(configName); + final JsonNode testConfig = configs.get(configName); final Exception ex = assertThrows(Exception.class, () -> { new BigQueryDestination().check(testConfig); }); @@ -274,9 +283,9 @@ void testCheckFailures(String configName, String error) { @ParameterizedTest @MethodSource("successTestConfigProvider") - void testWriteSuccess(String configName) throws Exception { + void testWriteSuccess(final String configName) throws Exception { initBigQuery(config); - JsonNode testConfig = configs.get(configName); + final JsonNode testConfig = configs.get(configName); final BigQueryDestination destination = new BigQueryDestination(); final AirbyteMessageConsumer consumer = destination.getConsumer(testConfig, catalog, Destination::defaultOutputRecordCollector); @@ -307,11 +316,11 @@ void testWriteSuccess(String configName) throws Exception { @ParameterizedTest @MethodSource("failWriteTestConfigProvider") - void testWriteFailure(String configName, String error) throws Exception { + void testWriteFailure(final String configName, final String error) throws Exception { initBigQuery(config); - JsonNode testConfig = configs.get(configName); + final JsonNode testConfig = configs.get(configName); final Exception ex = assertThrows(Exception.class, () -> { - AirbyteMessageConsumer consumer = spy(new BigQueryDestination().getConsumer(testConfig, catalog, Destination::defaultOutputRecordCollector)); + final AirbyteMessageConsumer consumer = spy(new BigQueryDestination().getConsumer(testConfig, catalog, Destination::defaultOutputRecordCollector)); consumer.start(); }); assertThat(ex.getMessage()).contains(error); @@ -372,9 +381,9 @@ private List retrieveRecords(final String tableName) throws Exception } @ParameterizedTest - @MethodSource("successTestConfigProvider") - void testWritePartitionOverUnpartitioned(String configName) throws Exception { - JsonNode testConfig = configs.get(configName); + @MethodSource("successTestConfigProviderBase") + void testWritePartitionOverUnpartitioned(final String configName) throws Exception { + final JsonNode testConfig = configs.get(configName); initBigQuery(config); final String raw_table_name = String.format("_airbyte_raw_%s", USERS_STREAM_NAME); createUnpartitionedTable(bigquery, dataset, raw_table_name); diff --git a/airbyte-integrations/connectors/destination-gcs/Dockerfile b/airbyte-integrations/connectors/destination-gcs/Dockerfile index c5534e0a9128c..4002dda632613 100644 --- a/airbyte-integrations/connectors/destination-gcs/Dockerfile +++ b/airbyte-integrations/connectors/destination-gcs/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION destination-gcs COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=0.2.12 +LABEL io.airbyte.version=0.2.14 LABEL io.airbyte.name=airbyte/destination-gcs diff --git a/airbyte-integrations/connectors/destination-gcs/sample_files/configured_catalog.json b/airbyte-integrations/connectors/destination-gcs/sample_files/configured_catalog.json new file mode 100644 index 0000000000000..ee132a2e53a77 --- /dev/null +++ b/airbyte-integrations/connectors/destination-gcs/sample_files/configured_catalog.json @@ -0,0 +1,27 @@ +{ + "streams": [ + { + "sync_mode": "full_refresh", + "destination_sync_mode": "append", + "stream": { + "name": "ab-airbyte-testing", + "supported_sync_modes": ["full_refresh"], + "source_defined_cursor": false, + "json_schema": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "body": { + "type": "string" + }, + "attributes": { + "type": ["null", "object"] + } + } + } + } + } + ] +} diff --git a/airbyte-integrations/connectors/destination-gcs/sample_files/messages.jsonl b/airbyte-integrations/connectors/destination-gcs/sample_files/messages.jsonl new file mode 100644 index 0000000000000..e1d0682f9dad2 --- /dev/null +++ b/airbyte-integrations/connectors/destination-gcs/sample_files/messages.jsonl @@ -0,0 +1,2 @@ +{"type": "RECORD", "record": {"stream": "ab-airbyte-testing", "data": {"_ab_pk": "my_value", "column2": 221, "column3": "2021-01-01T20:10:22", "column4": 1.214, "column5": [1,2,3]}, "emitted_at": 1626172757000}} +{"type": "RECORD", "record": {"stream": "ab-airbyte-testing", "data": {"_ab_pk": "my_value2", "column2": 222, "column3": "2021-01-02T22:10:22", "column5": [1,2,null]}, "emitted_at": 1626172757000}} diff --git a/airbyte-integrations/connectors/destination-gcs/sample_secrets/config.json b/airbyte-integrations/connectors/destination-gcs/sample_secrets/config.json index 6340e629e9bbb..9c209b519665d 100644 --- a/airbyte-integrations/connectors/destination-gcs/sample_secrets/config.json +++ b/airbyte-integrations/connectors/destination-gcs/sample_secrets/config.json @@ -6,5 +6,8 @@ "credential_type": "HMAC_KEY", "hmac_key_access_id": "", "hmac_key_secret": "" + }, + "format": { + "format_type": "CSV" } } diff --git a/airbyte-integrations/connectors/destination-gcs/src/main/java/io/airbyte/integrations/destination/gcs/GcsDestination.java b/airbyte-integrations/connectors/destination-gcs/src/main/java/io/airbyte/integrations/destination/gcs/GcsDestination.java index 6ea195359997c..1a3ac18a11307 100644 --- a/airbyte-integrations/connectors/destination-gcs/src/main/java/io/airbyte/integrations/destination/gcs/GcsDestination.java +++ b/airbyte-integrations/connectors/destination-gcs/src/main/java/io/airbyte/integrations/destination/gcs/GcsDestination.java @@ -8,6 +8,7 @@ import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.model.AmazonS3Exception; +import com.amazonaws.services.s3.internal.SkipMd5CheckStrategy; import com.fasterxml.jackson.databind.JsonNode; import io.airbyte.integrations.BaseConnector; import io.airbyte.integrations.base.AirbyteMessageConsumer; @@ -40,6 +41,8 @@ public GcsDestination() { } public static void main(final String[] args) throws Exception { + System.setProperty(SkipMd5CheckStrategy.DISABLE_GET_OBJECT_MD5_VALIDATION_PROPERTY, "true"); + System.setProperty(SkipMd5CheckStrategy.DISABLE_PUT_OBJECT_MD5_VALIDATION_PROPERTY, "true"); new IntegrationRunner(new GcsDestination()).run(args); } diff --git a/airbyte-integrations/connectors/destination-gcs/src/main/java/io/airbyte/integrations/destination/gcs/GcsDestinationConfig.java b/airbyte-integrations/connectors/destination-gcs/src/main/java/io/airbyte/integrations/destination/gcs/GcsDestinationConfig.java index 16ddb90ce1463..e3b260e2fecba 100644 --- a/airbyte-integrations/connectors/destination-gcs/src/main/java/io/airbyte/integrations/destination/gcs/GcsDestinationConfig.java +++ b/airbyte-integrations/connectors/destination-gcs/src/main/java/io/airbyte/integrations/destination/gcs/GcsDestinationConfig.java @@ -15,6 +15,7 @@ import io.airbyte.integrations.destination.gcs.credential.GcsHmacKeyCredentialConfig; import io.airbyte.integrations.destination.s3.S3DestinationConfig; import io.airbyte.integrations.destination.s3.S3DestinationConstants; +import io.airbyte.integrations.destination.s3.S3StorageOperations; import io.airbyte.integrations.destination.s3.S3FormatConfig; import io.airbyte.integrations.destination.s3.S3FormatConfigs; @@ -33,6 +34,7 @@ public GcsDestinationConfig(final String bucketName, final String bucketRegion, final GcsCredentialConfig credentialConfig, final S3FormatConfig formatConfig) { + super(GCS_ENDPOINT, bucketName, bucketPath, @@ -40,7 +42,10 @@ public GcsDestinationConfig(final String bucketName, S3DestinationConstants.DEFAULT_PATH_FORMAT, credentialConfig.getS3CredentialConfig().orElseThrow(), formatConfig, - null); + null, + null, + false, + S3StorageOperations.DEFAULT_UPLOAD_THREADS); this.credentialConfig = credentialConfig; } diff --git a/airbyte-integrations/connectors/destination-gcs/src/test-integration/java/io/airbyte/integrations/destination/gcs/GcsAvroTestDataComparator.java b/airbyte-integrations/connectors/destination-gcs/src/test-integration/java/io/airbyte/integrations/destination/gcs/GcsAvroTestDataComparator.java index edba4c27c6c8c..9fa79be54eb5b 100644 --- a/airbyte-integrations/connectors/destination-gcs/src/test-integration/java/io/airbyte/integrations/destination/gcs/GcsAvroTestDataComparator.java +++ b/airbyte-integrations/connectors/destination-gcs/src/test-integration/java/io/airbyte/integrations/destination/gcs/GcsAvroTestDataComparator.java @@ -37,7 +37,7 @@ protected boolean compareDateTimeValues(String airbyteMessageValue, String desti } @Override - protected boolean compareTime(final String airbyteMessageValue, final String destinationValue) { + protected boolean compareTimeWithoutTimeZone(final String airbyteMessageValue, final String destinationValue) { LocalTime destinationDate = LocalTime.ofInstant(getInstantFromEpoch(destinationValue), ZoneOffset.UTC); LocalTime expectedDate = LocalTime.parse(airbyteMessageValue, DateTimeFormatter.ISO_TIME); return expectedDate.equals(destinationDate); diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java index 2ba0530f51cb8..4af0184a7ed80 100644 --- a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java +++ b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/JdbcSqlOperations.java @@ -5,6 +5,7 @@ package io.airbyte.integrations.destination.jdbc; import com.fasterxml.jackson.databind.JsonNode; +import io.airbyte.commons.exceptions.ConfigErrorException; import io.airbyte.commons.json.Jsons; import io.airbyte.db.jdbc.JdbcDatabase; import io.airbyte.integrations.base.JavaBaseConstants; @@ -43,15 +44,34 @@ protected JdbcSqlOperations(final DataAdapter dataAdapter) { @Override public void createSchemaIfNotExists(final JdbcDatabase database, final String schemaName) throws Exception { - if (!schemaSet.contains(schemaName) && !isSchemaExists(database, schemaName)) { - database.execute(String.format("CREATE SCHEMA IF NOT EXISTS %s;", schemaName)); - schemaSet.add(schemaName); + try { + if (!schemaSet.contains(schemaName) && !isSchemaExists(database, schemaName)) { + database.execute(String.format("CREATE SCHEMA IF NOT EXISTS %s;", schemaName)); + schemaSet.add(schemaName); + } + } catch (Exception e) { + throw checkForKnownConfigExceptions(e).orElseThrow(() -> e); } } + /** + * When an exception occurs, we may recognize it as an issue with the users permissions + * or other configuration options. In these cases, we can wrap the exception in a {@link ConfigErrorException} + * which will exclude the error from our on-call paging/reporting + * @param e the exception to check. + * @return A ConfigErrorException with a message with actionable feedback to the user. + */ + protected Optional checkForKnownConfigExceptions(Exception e) { + return Optional.empty(); + } + @Override public void createTableIfNotExists(final JdbcDatabase database, final String schemaName, final String tableName) throws SQLException { - database.execute(createTableQuery(database, schemaName, tableName)); + try { + database.execute(createTableQuery(database, schemaName, tableName)); + } catch (SQLException e) { + throw checkForKnownConfigExceptions(e).orElseThrow(() -> e); + } } @Override diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java index 895b89a06264b..99d9e17486d36 100644 --- a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java +++ b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/WriteConfig.java @@ -5,8 +5,6 @@ package io.airbyte.integrations.destination.jdbc; import io.airbyte.protocol.models.v0.DestinationSyncMode; -import java.util.ArrayList; -import java.util.List; import org.joda.time.DateTime; import org.joda.time.DateTimeZone; @@ -22,7 +20,6 @@ public class WriteConfig { private final String outputTableName; private final DestinationSyncMode syncMode; private final DateTime writeDatetime; - private final List stagedFiles; public WriteConfig(final String streamName, final String namespace, @@ -46,7 +43,6 @@ public WriteConfig(final String streamName, this.tmpTableName = tmpTableName; this.outputTableName = outputTableName; this.syncMode = syncMode; - this.stagedFiles = new ArrayList<>(); this.writeDatetime = writeDatetime; } @@ -78,18 +74,6 @@ public DateTime getWriteDatetime() { return writeDatetime; } - public List getStagedFiles() { - return stagedFiles; - } - - public void addStagedFile(final String file) { - stagedFiles.add(file); - } - - public void clearStagedFiles() { - stagedFiles.clear(); - } - @Override public String toString() { return "WriteConfig{" + diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java index 51ba727276484..85d5c733bd675 100644 --- a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java +++ b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/jdbc/copy/CopyDestination.java @@ -97,7 +97,7 @@ protected void performCreateInsertTestOnDestination(final String outputSchema, final JdbcDatabase database, final NamingConventionTransformer nameTransformer) throws Exception { - AbstractJdbcDestination.attemptSQLCreateAndDropTableOperations(outputSchema, database, nameTransformer, getSqlOperations()); + AbstractJdbcDestination.attemptTableOperations(outputSchema, database, nameTransformer, getSqlOperations(), true); } } diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java index b732a7c33054f..978d0c9acebd5 100644 --- a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java +++ b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingConsumerFactory.java @@ -132,25 +132,36 @@ private OnStartFunction onStartFunction(final JdbcDatabase database, final StagingOperations stagingOperations, final List writeConfigs) { return () -> { - LOGGER.info("Preparing tmp tables in destination started for {} streams", writeConfigs.size()); + LOGGER.info("Preparing raw tables in destination started for {} streams", writeConfigs.size()); + final List queryList = new ArrayList<>(); for (final WriteConfig writeConfig : writeConfigs) { final String schema = writeConfig.getOutputSchemaName(); final String stream = writeConfig.getStreamName(); - final String tmpTable = writeConfig.getTmpTableName(); + final String dstTableName = writeConfig.getOutputTableName(); final String stageName = stagingOperations.getStageName(schema, stream); final String stagingPath = stagingOperations.getStagingPath(RANDOM_CONNECTION_ID, schema, stream, writeConfig.getWriteDatetime()); - LOGGER.info("Preparing staging area in destination started for schema {} stream {}: tmp table: {}, stage: {}", - schema, stream, tmpTable, stagingPath); + LOGGER.info("Preparing staging area in destination started for schema {} stream {}: target table: {}, stage: {}", + schema, stream, dstTableName, stagingPath); stagingOperations.createSchemaIfNotExists(database, schema); - stagingOperations.createTableIfNotExists(database, schema, tmpTable); + stagingOperations.createTableIfNotExists(database, schema, dstTableName); stagingOperations.createStageIfNotExists(database, stageName); + /* + * When we're in OVERWRITE, clear out the table at the start of a sync, this is an expected + * side effect of checkpoint and the removal of temporary tables + */ + switch (writeConfig.getSyncMode()) { + case OVERWRITE -> queryList.add(stagingOperations.truncateTableQuery(database, schema, dstTableName)); + case APPEND, APPEND_DEDUP -> {} + default -> throw new IllegalStateException("Unrecognized sync mode: " + writeConfig.getSyncMode()); + } + LOGGER.info("Preparing staging area in destination completed for schema {} stream {}", schema, stream); } - - LOGGER.info("Preparing tmp tables in destination completed."); + LOGGER.info("Executing finalization of tables."); + stagingOperations.executeTransaction(database, queryList); }; } @@ -193,7 +204,6 @@ CheckedBiConsumer ); throw new ConfigErrorException(message); } - return (pair, writer) -> { LOGGER.info("Flushing buffer for stream {} ({}) to staging", pair.getName(), FileUtils.byteCountToDisplaySize(writer.getByteCount())); if (!pairToWriteConfig.containsKey(pair)) { @@ -208,24 +218,43 @@ CheckedBiConsumer stagingOperations.getStagingPath(RANDOM_CONNECTION_ID, schemaName, writeConfig.getStreamName(), writeConfig.getWriteDatetime()); try (writer) { writer.flush(); - writeConfig.addStagedFile(stagingOperations.uploadRecordsToStage(database, writer, schemaName, stageName, stagingPath)); + final String stagedFile = stagingOperations.uploadRecordsToStage(database, writer, schemaName, stageName, stagingPath); + copyIntoTableFromStage(database, stageName, stagingPath, List.of(stagedFile), writeConfig.getOutputTableName(), schemaName, stagingOperations); } catch (final Exception e) { - LOGGER.error("Failed to flush and upload buffer to stage:", e); - throw new RuntimeException("Failed to upload buffer to stage", e); + LOGGER.error("Failed to flush and commit buffer data into destination's raw table", e); + throw new RuntimeException("Failed to upload buffer to stage and commit to destination", e); } }; } /** - * Upon processing all {@link AirbyteMessage} wrap up lingering logic. This logic includes: - *
  • Migrating data stored in staging area to temporary tables
  • - *
  • Creates a final table (if one does not already exist)
  • - *
  • Inserts all data from the temporary table into the final table
  • + * Handles copying data from staging area to destination table and clean up of staged files if + * upload was unsuccessful + */ + private void copyIntoTableFromStage(final JdbcDatabase database, + final String stageName, + final String stagingPath, + final List stagedFiles, + final String tableName, + final String schemaName, + final StagingOperations stagingOperations) throws Exception { + try { + stagingOperations.copyIntoTableFromStage(database, stageName, stagingPath, stagedFiles, + tableName, schemaName); + } catch (final Exception e) { + stagingOperations.cleanUpStage(database, stageName, stagedFiles); + LOGGER.info("Cleaning stage path {}", stagingPath); + throw new RuntimeException("Failed to upload data from stage " + stagingPath, e); + } + } + + /** + * Tear down process, will attempt to try to clean out any staging area * * @param database database used for syncing - * @param stagingOperations SQL queries used to write and delete data from the staging folder - * @param writeConfigs list of all write configs for each stream in a {@link ConfiguredAirbyteCatalog} - * @param purgeStagingData purges staging data if true otherwise data retained + * @param stagingOperations collection of SQL queries necessary for writing data into a staging area + * @param writeConfigs configuration settings for all destination connectors needed to write + * @param purgeStagingData drop staging area if true, keep otherwise * @return */ private OnCloseFunction onCloseFunction(final JdbcDatabase database, @@ -234,52 +263,14 @@ private OnCloseFunction onCloseFunction(final JdbcDatabase database, final boolean purgeStagingData) { return (hasFailed) -> { if (!hasFailed) { - final List queryList = new ArrayList<>(); - LOGGER.info("Copying into tables in destination started for {} streams", writeConfigs.size()); - - for (final WriteConfig writeConfig : writeConfigs) { - final String schemaName = writeConfig.getOutputSchemaName(); - final String streamName = writeConfig.getStreamName(); - final String srcTableName = writeConfig.getTmpTableName(); - final String dstTableName = writeConfig.getOutputTableName(); - final String stageName = stagingOperations.getStageName(schemaName, streamName); - final String stagingPath = stagingOperations.getStagingPath(RANDOM_CONNECTION_ID, schemaName, streamName, writeConfig.getWriteDatetime()); - LOGGER.info("Copying stream {} of schema {} into tmp table {} to final table {} from stage path {} with {} file(s) [{}]", - streamName, schemaName, srcTableName, dstTableName, stagingPath, writeConfig.getStagedFiles().size(), - String.join(",", writeConfig.getStagedFiles())); - - // Copies all the data stored in the staging files into a temporary table and creates final table if nonexistent - try { - stagingOperations.copyIntoTmpTableFromStage(database, stageName, stagingPath, writeConfig.getStagedFiles(), srcTableName, schemaName); - } catch (final Exception e) { - stagingOperations.cleanUpStage(database, stageName, writeConfig.getStagedFiles()); - LOGGER.info("Cleaning stage path {}", stagingPath); - throw new RuntimeException("Failed to upload data from stage " + stagingPath, e); - } - writeConfig.clearStagedFiles(); - stagingOperations.createTableIfNotExists(database, schemaName, dstTableName); - switch (writeConfig.getSyncMode()) { - case OVERWRITE -> queryList.add(stagingOperations.truncateTableQuery(database, schemaName, dstTableName)); - case APPEND, APPEND_DEDUP -> {} - default -> throw new IllegalStateException("Unrecognized sync mode: " + writeConfig.getSyncMode()); - } - queryList.add(stagingOperations.insertTableQuery(database, schemaName, srcTableName, dstTableName)); - } stagingOperations.onDestinationCloseOperations(database, writeConfigs); - LOGGER.info("Executing finalization of tables."); - // copies data from temporary table into final table (airbyte_raw) - stagingOperations.executeTransaction(database, queryList); LOGGER.info("Finalizing tables in destination completed."); } - // After moving data from staging area to the finalized table (airybte_raw) clean up temporary tables and the staging area (if user configured) + // After moving data from staging area to the target table (airybte_raw) clean up the staging + // area (if user configured) LOGGER.info("Cleaning up destination started for {} streams", writeConfigs.size()); for (final WriteConfig writeConfig : writeConfigs) { final String schemaName = writeConfig.getOutputSchemaName(); - final String tmpTableName = writeConfig.getTmpTableName(); - LOGGER.info("Cleaning tmp table in destination started for stream {}. schema {}, tmp table name: {}", writeConfig.getStreamName(), schemaName, - tmpTableName); - - stagingOperations.dropTableIfExists(database, schemaName, tmpTableName); if (purgeStagingData) { final String stageName = stagingOperations.getStageName(schemaName, writeConfig.getStreamName()); LOGGER.info("Cleaning stage in destination started for stream {}. schema {}, stage: {}", writeConfig.getStreamName(), schemaName, @@ -290,5 +281,4 @@ private OnCloseFunction onCloseFunction(final JdbcDatabase database, LOGGER.info("Cleaning up destination completed."); }; } - } diff --git a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java index f73648fa7b746..f48c91f5b6a5e 100644 --- a/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java +++ b/airbyte-integrations/connectors/destination-jdbc/src/main/java/io/airbyte/integrations/destination/staging/StagingOperations.java @@ -47,20 +47,20 @@ String uploadRecordsToStage(JdbcDatabase database, SerializableBuffer recordsDat throws Exception; /** - * Load the data stored in the staging area into a temporary table in the destination + * Load the data stored in the stage area into a temporary table in the destination * - * @param database database used for syncing + * @param database database interface * @param stageName name of staging area folder - * @param stagingPath path of staging folder to data files - * @param stagedFiles collection of the staging files - * @param dstTableName name of the table where staged data will be moved to + * @param stagingPath path to staging files + * @param stagedFiles collection of staged files + * @param tableName name of table to write staging files to * @param schemaName name of schema */ - void copyIntoTmpTableFromStage(JdbcDatabase database, + void copyIntoTableFromStage(JdbcDatabase database, String stageName, String stagingPath, List stagedFiles, - String dstTableName, + String tableName, String schemaName) throws Exception; diff --git a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java b/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java index c6dd736a3b815..d573aa6a46fad 100644 --- a/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java +++ b/airbyte-integrations/connectors/destination-jdbc/src/test/java/io/airbyte/integrations/destination/jdbc/TestJdbcSqlOperations.java @@ -6,7 +6,12 @@ import io.airbyte.db.jdbc.JdbcDatabase; import io.airbyte.protocol.models.v0.AirbyteRecordMessage; +import java.sql.SQLException; import java.util.List; +import org.junit.Assert; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; public class TestJdbcSqlOperations extends JdbcSqlOperations { @@ -19,4 +24,18 @@ public void insertRecordsInternal(final JdbcDatabase database, // Not required for the testing } + @Test + public void testCreateSchemaIfNotExists() { + final JdbcDatabase db = Mockito.mock(JdbcDatabase.class); + final var schemaName = "foo"; + try { + Mockito.doThrow(new SQLException("TEST")).when(db).execute(Mockito.anyString()); + } catch (Exception e) { + // This would not be expected, but the `execute` method above will flag as an unhandled exception + assert false; + } + SQLException exception = Assertions.assertThrows(SQLException.class, () -> createSchemaIfNotExists(db, schemaName)); + Assertions.assertEquals(exception.getMessage(), "TEST"); + } + } diff --git a/airbyte-integrations/connectors/destination-redshift/Dockerfile b/airbyte-integrations/connectors/destination-redshift/Dockerfile index 5f06bd32cc8e4..6a56861b7fa51 100644 --- a/airbyte-integrations/connectors/destination-redshift/Dockerfile +++ b/airbyte-integrations/connectors/destination-redshift/Dockerfile @@ -16,5 +16,5 @@ ENV APPLICATION destination-redshift COPY --from=build /airbyte /airbyte -LABEL io.airbyte.version=0.3.53 +LABEL io.airbyte.version=0.3.56 LABEL io.airbyte.name=airbyte/destination-redshift diff --git a/airbyte-integrations/connectors/destination-redshift/src/main/java/io/airbyte/integrations/destination/redshift/RedshiftStagingS3Destination.java b/airbyte-integrations/connectors/destination-redshift/src/main/java/io/airbyte/integrations/destination/redshift/RedshiftStagingS3Destination.java index f185235e4bf8f..6fc5d60710e80 100644 --- a/airbyte-integrations/connectors/destination-redshift/src/main/java/io/airbyte/integrations/destination/redshift/RedshiftStagingS3Destination.java +++ b/airbyte-integrations/connectors/destination-redshift/src/main/java/io/airbyte/integrations/destination/redshift/RedshiftStagingS3Destination.java @@ -170,7 +170,7 @@ public AirbyteMessageConsumer getConsumer(final JsonNode config, */ @VisibleForTesting public int getNumberOfFileBuffers(final JsonNode config) { - int numOfFileBuffers = 1; + int numOfFileBuffers = FileBuffer.DEFAULT_MAX_CONCURRENT_STREAM_IN_BUFFER; if (config.has(FileBuffer.FILE_BUFFER_COUNT_KEY)) { numOfFileBuffers = Math.min(config.get(FileBuffer.FILE_BUFFER_COUNT_KEY).asInt(), FileBuffer.MAX_CONCURRENT_STREAM_IN_BUFFER); } diff --git a/airbyte-integrations/connectors/destination-redshift/src/main/java/io/airbyte/integrations/destination/redshift/operations/RedshiftS3StagingSqlOperations.java b/airbyte-integrations/connectors/destination-redshift/src/main/java/io/airbyte/integrations/destination/redshift/operations/RedshiftS3StagingSqlOperations.java index 63abde3f69663..0caa969ca178c 100644 --- a/airbyte-integrations/connectors/destination-redshift/src/main/java/io/airbyte/integrations/destination/redshift/operations/RedshiftS3StagingSqlOperations.java +++ b/airbyte-integrations/connectors/destination-redshift/src/main/java/io/airbyte/integrations/destination/redshift/operations/RedshiftS3StagingSqlOperations.java @@ -36,9 +36,9 @@ public class RedshiftS3StagingSqlOperations extends RedshiftSqlOperations implem private final ObjectMapper objectMapper; private final byte[] keyEncryptingKey; - public RedshiftS3StagingSqlOperations(NamingConventionTransformer nameTransformer, - AmazonS3 s3Client, - S3DestinationConfig s3Config, + public RedshiftS3StagingSqlOperations(final NamingConventionTransformer nameTransformer, + final AmazonS3 s3Client, + final S3DestinationConfig s3Config, final EncryptionConfig encryptionConfig) { this.nameTransformer = nameTransformer; this.s3StorageOperations = new S3StorageOperations(nameTransformer, s3Client, s3Config); @@ -53,14 +53,14 @@ public RedshiftS3StagingSqlOperations(NamingConventionTransformer nameTransforme } @Override - public String getStageName(String namespace, String streamName) { + public String getStageName(final String namespace, final String streamName) { return nameTransformer.applyDefaultCase(String.join("_", nameTransformer.convertStreamName(namespace), nameTransformer.convertStreamName(streamName))); } @Override - public String getStagingPath(UUID connectionId, String namespace, String streamName, DateTime writeDatetime) { + public String getStagingPath(final UUID connectionId, final String namespace, final String streamName, final DateTime writeDatetime) { final String bucketPath = s3Config.getBucketPath(); final String prefix = bucketPath.isEmpty() ? "" : bucketPath + (bucketPath.endsWith("/") ? "" : "/"); return nameTransformer.applyDefaultCase(String.format("%s%s/%s_%02d_%02d_%02d_%s/", @@ -74,41 +74,45 @@ public String getStagingPath(UUID connectionId, String namespace, String streamN } @Override - public void createStageIfNotExists(JdbcDatabase database, String stageName) throws Exception { + public void createStageIfNotExists(final JdbcDatabase database, final String stageName) throws Exception { final String bucketPath = s3Config.getBucketPath(); final String prefix = bucketPath.isEmpty() ? "" : bucketPath + (bucketPath.endsWith("/") ? "" : "/"); - s3StorageOperations.createBucketObjectIfNotExists(prefix + stageName); + s3StorageOperations.createBucketIfNotExists(); } @Override - public String uploadRecordsToStage(JdbcDatabase database, SerializableBuffer recordsData, String schemaName, String stageName, String stagingPath) + public String uploadRecordsToStage(final JdbcDatabase database, final SerializableBuffer recordsData, final String schemaName, final String stageName, final String stagingPath) throws Exception { return s3StorageOperations.uploadRecordsToBucket(recordsData, schemaName, stageName, stagingPath); } - private String putManifest(final String manifestContents, String stagingPath) { - String manifestFilePath = stagingPath + String.format("%s.manifest", UUID.randomUUID()); + private String putManifest(final String manifestContents, final String stagingPath) { + final String manifestFilePath = stagingPath + String.format("%s.manifest", UUID.randomUUID()); s3StorageOperations.uploadManifest(s3Config.getBucketName(), manifestFilePath, manifestContents); return manifestFilePath; } @Override - public void copyIntoTmpTableFromStage(JdbcDatabase database, - String stageName, - String stagingPath, - List stagedFiles, - String dstTableName, - String schemaName) + public void copyIntoTableFromStage(final JdbcDatabase database, + final String stageName, + final String stagingPath, + final List stagedFiles, + final String tableName, + final String schemaName) throws Exception { - LOGGER.info("Starting copy to tmp table from stage: {} in destination from stage: {}, schema: {}, .", dstTableName, stagingPath, schemaName); + LOGGER.info("Starting copy to target table from stage: {} in destination from stage: {}, schema: {}, .", + tableName, stagingPath, schemaName); final var possibleManifest = Optional.ofNullable(createManifest(stagedFiles, stagingPath)); Exceptions.toRuntime(() -> possibleManifest.stream() .map(manifestContent -> putManifest(manifestContent, stagingPath)) - .forEach(manifestPath -> executeCopy(manifestPath, database, schemaName, dstTableName))); - LOGGER.info("Copy to tmp table {}.{} in destination complete.", schemaName, dstTableName); + .forEach(manifestPath -> executeCopy(manifestPath, database, schemaName, tableName))); + LOGGER.info("Copy to target table {}.{} in destination complete.", schemaName, tableName); } - private void executeCopy(final String manifestPath, JdbcDatabase db, String schemaName, String tmpTableName) { + /** + * Generates the COPY data from staging files into target table + */ + private void executeCopy(final String manifestPath, final JdbcDatabase db, final String schemaName, final String tableName) { final S3AccessKeyCredentialConfig credentialConfig = (S3AccessKeyCredentialConfig) s3Config.getS3CredentialConfig(); final String encryptionClause; if (keyEncryptingKey == null) { @@ -127,7 +131,7 @@ private void executeCopy(final String manifestPath, JdbcDatabase db, String sche STATUPDATE OFF MANIFEST;""", schemaName, - tmpTableName, + tableName, getFullS3Path(s3Config.getBucketName(), manifestPath), credentialConfig.getAccessKeyId(), credentialConfig.getSecretAccessKey(), @@ -137,7 +141,7 @@ private void executeCopy(final String manifestPath, JdbcDatabase db, String sche Exceptions.toRuntime(() -> db.execute(copyQuery)); } - private String createManifest(List stagedFiles, String stagingPath) { + private String createManifest(final List stagedFiles, final String stagingPath) { if (stagedFiles.isEmpty()) { return null; } @@ -159,14 +163,14 @@ private static String getManifestPath(final String s3BucketName, final String s3 } @Override - public void cleanUpStage(JdbcDatabase database, String stageName, List stagedFiles) throws Exception { + public void cleanUpStage(final JdbcDatabase database, final String stageName, final List stagedFiles) throws Exception { final String bucketPath = s3Config.getBucketPath(); final String prefix = bucketPath.isEmpty() ? "" : bucketPath + (bucketPath.endsWith("/") ? "" : "/"); s3StorageOperations.cleanUpBucketObject(prefix + stageName, stagedFiles); } @Override - public void dropStageIfExists(JdbcDatabase database, String stageName) throws Exception { + public void dropStageIfExists(final JdbcDatabase database, final String stageName) throws Exception { final String bucketPath = s3Config.getBucketPath(); final String prefix = bucketPath.isEmpty() ? "" : bucketPath + (bucketPath.endsWith("/") ? "" : "/"); s3StorageOperations.dropBucketObject(prefix + stageName); diff --git a/airbyte-integrations/connectors/destination-redshift/src/main/resources/spec.json b/airbyte-integrations/connectors/destination-redshift/src/main/resources/spec.json index 0e62601e81518..53c686b04f914 100644 --- a/airbyte-integrations/connectors/destination-redshift/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/destination-redshift/src/main/resources/spec.json @@ -207,14 +207,14 @@ } ] }, - "file_buffer_size": { + "file_buffer_count": { "title": "File Buffer Count", "type": "integer", - "minimum": 15, + "minimum": 10, "maximum": 50, - "default": 15, + "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": ["15"] + "examples": ["10"] } } } diff --git a/airbyte-integrations/connectors/destination-s3/Dockerfile b/airbyte-integrations/connectors/destination-s3/Dockerfile index e11e5ea30b84f..73f794c6b7211 100644 --- a/airbyte-integrations/connectors/destination-s3/Dockerfile +++ b/airbyte-integrations/connectors/destination-s3/Dockerfile @@ -40,5 +40,5 @@ RUN /bin/bash -c 'set -e && \ echo "unknown arch" ;\ fi' -LABEL io.airbyte.version=0.3.18 +LABEL io.airbyte.version=0.3.19 LABEL io.airbyte.name=airbyte/destination-s3 diff --git a/airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3AvroParquetTestDataComparator.java b/airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3AvroParquetTestDataComparator.java index 23fdf59b500b1..2fd8964cbcaa5 100644 --- a/airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3AvroParquetTestDataComparator.java +++ b/airbyte-integrations/connectors/destination-s3/src/test-integration/java/io/airbyte/integrations/destination/s3/S3AvroParquetTestDataComparator.java @@ -41,7 +41,7 @@ protected boolean compareDateTimeValues(String airbyteMessageValue, String desti } @Override - protected boolean compareTime(final String airbyteMessageValue, final String destinationValue) { + protected boolean compareTimeWithoutTimeZone(final String airbyteMessageValue, final String destinationValue) { var destinationDate = LocalTime.ofInstant(getInstantFromEpoch(destinationValue), ZoneOffset.UTC); var expectedDate = LocalTime.parse(airbyteMessageValue, DateTimeFormatter.ISO_TIME); return expectedDate.equals(destinationDate); diff --git a/airbyte-integrations/connectors/destination-snowflake/Dockerfile b/airbyte-integrations/connectors/destination-snowflake/Dockerfile index fca0e9654d410..53c560baaab26 100644 --- a/airbyte-integrations/connectors/destination-snowflake/Dockerfile +++ b/airbyte-integrations/connectors/destination-snowflake/Dockerfile @@ -20,5 +20,5 @@ RUN tar xf ${APPLICATION}.tar --strip-components=1 ENV ENABLE_SENTRY true -LABEL io.airbyte.version=0.4.42 +LABEL io.airbyte.version=0.4.47 LABEL io.airbyte.name=airbyte/destination-snowflake diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsStagingDestination.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsStagingDestination.java index d451dab54d52d..ac3fdfc832d74 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsStagingDestination.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsStagingDestination.java @@ -5,9 +5,11 @@ package io.airbyte.integrations.destination.snowflake; import static io.airbyte.integrations.destination.snowflake.SnowflakeS3StagingDestination.isPurgeStagingData; +import static java.nio.charset.StandardCharsets.UTF_8; import com.fasterxml.jackson.databind.JsonNode; import com.google.auth.oauth2.GoogleCredentials; +import com.google.cloud.WriteChannel; import com.google.cloud.storage.BlobId; import com.google.cloud.storage.BlobInfo; import com.google.cloud.storage.Storage; @@ -29,6 +31,7 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.io.InputStream; +import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.Map; @@ -83,12 +86,19 @@ public AirbyteConnectionStatus check(final JsonNode config) { } private static void attemptWriteAndDeleteGcsObject(final GcsConfig gcsConfig, final String outputTableName) throws IOException { - final var storage = getStorageClient(gcsConfig); - final var blobId = BlobId.of(gcsConfig.getBucketName(), "check-content/" + outputTableName); - final var blobInfo = BlobInfo.newBuilder(blobId).build(); + final Storage storageClient = getStorageClient(gcsConfig); + final BlobId blobId = BlobId.of(gcsConfig.getBucketName(), "check-content/" + outputTableName); + final BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("text/plain").build(); - storage.create(blobInfo, "".getBytes(StandardCharsets.UTF_8)); - storage.delete(blobId); + storageClient.create(blobInfo); + + try (WriteChannel writer = storageClient.writer(blobInfo)) { + // Try to write a dummy message to make sure user has all required permissions + final byte[] content = "Hello, World!".getBytes(UTF_8); + writer.write(ByteBuffer.wrap(content, 0, content.length)); + } finally { + storageClient.delete(blobId); + } } public static Storage getStorageClient(final GcsConfig gcsConfig) throws IOException { diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsStagingSqlOperations.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsStagingSqlOperations.java index a114ec189aaeb..383547ffe8f0f 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsStagingSqlOperations.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsStagingSqlOperations.java @@ -40,13 +40,13 @@ public class SnowflakeGcsStagingSqlOperations extends SnowflakeSqlOperations imp private final GcsConfig gcsConfig; private final Set fullObjectKeys = new HashSet<>(); - public SnowflakeGcsStagingSqlOperations(NamingConventionTransformer nameTransformer, GcsConfig gcsConfig) { + public SnowflakeGcsStagingSqlOperations(final NamingConventionTransformer nameTransformer, final GcsConfig gcsConfig) { this.nameTransformer = nameTransformer; this.gcsConfig = gcsConfig; this.storageClient = getStorageClient(gcsConfig); } - private Storage getStorageClient(GcsConfig gcsConfig) { + private Storage getStorageClient(final GcsConfig gcsConfig) { try { final InputStream credentialsInputStream = new ByteArrayInputStream(gcsConfig.getCredentialsJson().getBytes(StandardCharsets.UTF_8)); final GoogleCredentials credentials = GoogleCredentials.fromStream(credentialsInputStream); @@ -55,21 +55,21 @@ private Storage getStorageClient(GcsConfig gcsConfig) { .setProjectId(gcsConfig.getProjectId()) .build() .getService(); - } catch (Exception e) { + } catch (final Exception e) { throw new RuntimeException(e); } } @Override - public String getStageName(String namespace, String streamName) { + public String getStageName(final String namespace, final String streamName) { return nameTransformer.applyDefaultCase(String.join("_", nameTransformer.convertStreamName(namespace), nameTransformer.convertStreamName(streamName))); } @Override - public String getStagingPath(UUID connectionId, String namespace, String streamName, DateTime writeDatetime) { + public String getStagingPath(final UUID connectionId, final String namespace, final String streamName, final DateTime writeDatetime) { // see https://docs.snowflake.com/en/user-guide/data-load-considerations-stage.html return nameTransformer.applyDefaultCase(String.format("%s/%s_%02d_%02d_%02d/%s/", getStageName(namespace, streamName), @@ -81,7 +81,7 @@ public String getStagingPath(UUID connectionId, String namespace, String streamN } @Override - public void createStageIfNotExists(JdbcDatabase database, String stageName) throws Exception { + public void createStageIfNotExists(final JdbcDatabase database, final String stageName) throws Exception { final String bucket = gcsConfig.getBucketName(); if (!doesBucketExist(bucket)) { LOGGER.info("Bucket {} does not exist; creating...", bucket); @@ -90,12 +90,12 @@ public void createStageIfNotExists(JdbcDatabase database, String stageName) thro } } - private boolean doesBucketExist(String bucket) { + private boolean doesBucketExist(final String bucket) { return storageClient.get(bucket, Storage.BucketGetOption.fields()) != null; } @Override - public String uploadRecordsToStage(JdbcDatabase database, SerializableBuffer recordsData, String schemaName, String stageName, String stagingPath) + public String uploadRecordsToStage(final JdbcDatabase database, final SerializableBuffer recordsData, final String schemaName, final String stageName, final String stagingPath) throws Exception { final List exceptionsThrown = new ArrayList<>(); while (exceptionsThrown.size() < UPLOAD_RETRY_LIMIT) { @@ -120,7 +120,7 @@ private String loadDataIntoBucket(final String objectPath, final SerializableBuf final var channel = blob.writer(); try (channel) { final OutputStream outputStream = Channels.newOutputStream(channel); - InputStream dataInputStream = recordsData.getInputStream(); + final InputStream dataInputStream = recordsData.getInputStream(); dataInputStream.transferTo(outputStream); } catch (final Exception e) { LOGGER.error("Failed to load data into storage {}", objectPath, e); @@ -130,20 +130,22 @@ private String loadDataIntoBucket(final String objectPath, final SerializableBuf } @Override - public void copyIntoTmpTableFromStage(JdbcDatabase database, - String stageName, - String stagingPath, - List stagedFiles, - String dstTableName, - String schemaName) + public void copyIntoTableFromStage(final JdbcDatabase database, + final String stageName, + final String stagingPath, + final List stagedFiles, + final String tableName, + final String schemaName) throws Exception { - LOGGER.info("Starting copy to tmp table from stage: {} in destination from stage: {}, schema: {}, .", dstTableName, stagingPath, schemaName); + LOGGER.info("Starting copy to target table from stage: {} in destination from stage: {}, schema: {}, .", + tableName, stagingPath, schemaName); // Print actual SQL query if user needs to manually force reload from staging - Exceptions.toRuntime(() -> database.execute(getCopyQuery(stagingPath, stagedFiles, dstTableName, schemaName))); - LOGGER.info("Copy to tmp table {}.{} in destination complete.", schemaName, dstTableName); + Exceptions.toRuntime(() -> database.execute(getCopyQuery(stagingPath, stagedFiles, + tableName, schemaName))); + LOGGER.info("Copy to target table {}.{} in destination complete.", schemaName, tableName); } - private String getCopyQuery(String stagingPath, List stagedFiles, String dstTableName, String schemaName) { + private String getCopyQuery(final String stagingPath, final List stagedFiles, final String dstTableName, final String schemaName) { return String.format( "COPY INTO %s.%s FROM '%s' storage_integration = gcs_airbyte_integration " @@ -154,16 +156,16 @@ private String getCopyQuery(String stagingPath, List stagedFiles, String generateBucketPath(stagingPath)); } - private String generateBucketPath(String stagingPath) { + private String generateBucketPath(final String stagingPath) { return "gcs://" + gcsConfig.getBucketName() + "/" + stagingPath; } @Override - public void cleanUpStage(JdbcDatabase database, String stageName, List stagedFiles) throws Exception { + public void cleanUpStage(final JdbcDatabase database, final String stageName, final List stagedFiles) throws Exception { cleanUpBucketObject(stagedFiles); } - private void cleanUpBucketObject(List currentStagedFiles) { + private void cleanUpBucketObject(final List currentStagedFiles) { currentStagedFiles.forEach(candidate -> fullObjectKeys.forEach(fullBlobPath -> { if (fullBlobPath.contains(candidate)) { removeBlob(fullBlobPath); @@ -171,21 +173,21 @@ private void cleanUpBucketObject(List currentStagedFiles) { })); } - private void removeBlob(String file) { + private void removeBlob(final String file) { final var blobId = BlobId.of(gcsConfig.getBucketName(), file); storageClient.delete(blobId); } @Override - public void dropStageIfExists(JdbcDatabase database, String stageName) throws Exception { + public void dropStageIfExists(final JdbcDatabase database, final String stageName) throws Exception { dropBucketObject(); } private void dropBucketObject() { if (!fullObjectKeys.isEmpty()) { - Iterator iterator = fullObjectKeys.iterator(); + final Iterator iterator = fullObjectKeys.iterator(); while (iterator.hasNext()) { - String element = iterator.next(); + final String element = iterator.next(); if (element != null) { removeBlob(element); iterator.remove(); diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeInternalStagingSqlOperations.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeInternalStagingSqlOperations.java index e1765ecbd5bfc..5b555a36e03fb 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeInternalStagingSqlOperations.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeInternalStagingSqlOperations.java @@ -130,11 +130,16 @@ protected String getListQuery(final String stageName, final String stagingPath, public void createStageIfNotExists(final JdbcDatabase database, final String stageName) throws Exception { final String query = getCreateStageQuery(stageName); LOGGER.debug("Executing query: {}", query); - database.execute(query); + try { + database.execute(query); + } catch (Exception e) { + throw checkForKnownConfigExceptions(e).orElseThrow(() -> e); + } } /** - * Creates a SQL query to create a staging folder. This query will create a staging folder if one previously did not exist + * Creates a SQL query to create a staging folder. This query will create a staging folder if one + * previously did not exist * * @param stageName name of the staging folder * @return SQL query string @@ -144,21 +149,21 @@ protected String getCreateStageQuery(final String stageName) { } @Override - public void copyIntoTmpTableFromStage(final JdbcDatabase database, + public void copyIntoTableFromStage(final JdbcDatabase database, final String stageName, final String stagingPath, final List stagedFiles, - final String dstTableName, + final String tableName, final String schemaName) throws SQLException { - final String query = getCopyQuery(stageName, stagingPath, stagedFiles, dstTableName, schemaName); + final String query = getCopyQuery(stageName, stagingPath, stagedFiles, tableName, schemaName); LOGGER.debug("Executing query: {}", query); database.execute(query); } /** - * Creates a SQL query to bulk copy data into fully qualified destination table - * See https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html for more context + * Creates a SQL query to bulk copy data into fully qualified destination table See + * https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html for more context * * @param stageName name of staging folder * @param stagingPath path of staging folder to data files @@ -200,8 +205,8 @@ public void cleanUpStage(final JdbcDatabase database, final String stageName, fi } /** - * Creates a SQL query used to remove staging files that were just staged - * See https://docs.snowflake.com/en/sql-reference/sql/remove.html for more context + * Creates a SQL query used to remove staging files that were just staged See + * https://docs.snowflake.com/en/sql-reference/sql/remove.html for more context * * @param stageName name of staging folder * @return SQL query string diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3StagingDestination.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3StagingDestination.java index ead94c94ba9eb..bf1f5c220c3c1 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3StagingDestination.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3StagingDestination.java @@ -13,15 +13,18 @@ import io.airbyte.integrations.destination.NamingConventionTransformer; import io.airbyte.integrations.destination.jdbc.AbstractJdbcDestination; import io.airbyte.integrations.destination.record_buffer.FileBuffer; +import io.airbyte.integrations.destination.record_buffer.InMemoryBuffer; import io.airbyte.integrations.destination.s3.AesCbcEnvelopeEncryption; import io.airbyte.integrations.destination.s3.AesCbcEnvelopeEncryption.KeyType; import io.airbyte.integrations.destination.s3.EncryptionConfig; import io.airbyte.integrations.destination.s3.S3DestinationConfig; import io.airbyte.integrations.destination.s3.csv.CsvSerializedBuffer; +import io.airbyte.integrations.destination.s3.csv.StagingDatabaseCsvSheetGenerator; import io.airbyte.integrations.destination.staging.StagingConsumerFactory; import io.airbyte.protocol.models.v0.AirbyteConnectionStatus; import io.airbyte.protocol.models.v0.AirbyteConnectionStatus.Status; import io.airbyte.protocol.models.v0.AirbyteMessage; +import io.airbyte.protocol.models.v0.AirbyteRecordMessage; import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; import java.util.Collections; import java.util.Map; @@ -90,7 +93,26 @@ private static void attemptStageOperations(final String outputSchema, final String outputTableName = namingResolver.getIdentifier("_airbyte_connection_test_" + UUID.randomUUID()); final String stageName = sqlOperations.getStageName(outputSchema, outputTableName); sqlOperations.createStageIfNotExists(database, stageName); - sqlOperations.dropStageIfExists(database, stageName); + + // try to make test write to make sure we have required role + try { + final CsvSerializedBuffer csvSerializedBuffer = new CsvSerializedBuffer( + new InMemoryBuffer(".csv"), + new StagingDatabaseCsvSheetGenerator(), + true); + + // create a dummy stream\records that will bed used to test uploading + csvSerializedBuffer.accept(new AirbyteRecordMessage() + .withData(Jsons.jsonNode(Map.of("testKey", "testValue"))) + .withEmittedAt(System.currentTimeMillis())); + csvSerializedBuffer.flush(); + + sqlOperations.uploadRecordsToStage(database, csvSerializedBuffer, outputSchema, stageName, + stageName.endsWith("/") ? stageName : stageName + "/"); + } finally { + // drop created tmp stage + sqlOperations.dropStageIfExists(database, stageName); + } } @Override diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3StagingSqlOperations.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3StagingSqlOperations.java index 9cdc3058be4e9..427c5bbd0f1f7 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3StagingSqlOperations.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3StagingSqlOperations.java @@ -82,20 +82,22 @@ public String uploadRecordsToStage(final JdbcDatabase database, @Override public void createStageIfNotExists(final JdbcDatabase database, final String stageName) { - s3StorageOperations.createBucketObjectIfNotExists(stageName); + s3StorageOperations.createBucketIfNotExists(); } @Override - public void copyIntoTmpTableFromStage(final JdbcDatabase database, + public void copyIntoTableFromStage(final JdbcDatabase database, final String stageName, final String stagingPath, final List stagedFiles, - final String dstTableName, + final String tableName, final String schemaName) { - LOGGER.info("Starting copy to tmp table from stage: {} in destination from stage: {}, schema: {}, .", dstTableName, stagingPath, schemaName); + LOGGER.info("Starting copy to target table from stage: {} in destination from stage: {}, schema: {}, .", + tableName, stagingPath, schemaName); // Print actual SQL query if user needs to manually force reload from staging - Exceptions.toRuntime(() -> database.execute(getCopyQuery(stagingPath, stagedFiles, dstTableName, schemaName))); - LOGGER.info("Copy to tmp table {}.{} in destination complete.", schemaName, dstTableName); + Exceptions.toRuntime(() -> database.execute(getCopyQuery(stagingPath, stagedFiles, + tableName, schemaName))); + LOGGER.info("Copy to target table {}.{} in destination complete.", schemaName, tableName); } protected String getCopyQuery(final String stagingPath, diff --git a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeSqlOperations.java b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeSqlOperations.java index 5675dcd40367a..f414697775f5f 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeSqlOperations.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/main/java/io/airbyte/integrations/destination/snowflake/SnowflakeSqlOperations.java @@ -5,6 +5,7 @@ package io.airbyte.integrations.destination.snowflake; import com.fasterxml.jackson.databind.JsonNode; +import io.airbyte.commons.exceptions.ConfigErrorException; import io.airbyte.db.jdbc.JdbcDatabase; import io.airbyte.integrations.base.JavaBaseConstants; import io.airbyte.integrations.destination.jdbc.JdbcSqlOperations; @@ -13,8 +14,10 @@ import io.airbyte.protocol.models.v0.AirbyteRecordMessage; import java.sql.SQLException; import java.util.List; +import java.util.Optional; import java.util.StringJoiner; import java.util.stream.Stream; +import net.snowflake.client.jdbc.SnowflakeSQLException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,6 +26,10 @@ class SnowflakeSqlOperations extends JdbcSqlOperations implements SqlOperations private static final Logger LOGGER = LoggerFactory.getLogger(SnowflakeSqlOperations.class); private static final int MAX_FILES_IN_LOADING_QUERY_LIMIT = 1000; + // This is an unfortunately fragile way to capture this, but Snowflake doesn't + // provide a more specific permission exception error code + private static final String NO_PRIVILEGES_ERROR_MESSAGE = "but current role has no privileges on it"; + @Override public String createTableQuery(final JdbcDatabase database, final String schemaName, final String tableName) { return String.format( @@ -73,4 +80,14 @@ protected String generateFilesList(final List files) { } } + @Override + protected Optional checkForKnownConfigExceptions(Exception e) { + if (e instanceof SnowflakeSQLException && e.getMessage().contains(NO_PRIVILEGES_ERROR_MESSAGE)) { + return Optional.of(new ConfigErrorException( + "Encountered Error with Snowflake Configuration: Current role does not have permissions on the target schema please verify your privileges", + e)); + } + return Optional.empty(); + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsCopyDestinationAcceptanceTest.java b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsCopyDestinationAcceptanceTest.java index 1e8e5863d5db1..eb85788f6c642 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsCopyDestinationAcceptanceTest.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeGcsCopyDestinationAcceptanceTest.java @@ -4,14 +4,23 @@ package io.airbyte.integrations.destination.snowflake; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + import com.fasterxml.jackson.databind.JsonNode; import com.google.common.base.Preconditions; import io.airbyte.commons.io.IOs; import io.airbyte.commons.json.Jsons; +import io.airbyte.config.StandardCheckConnectionOutput; +import io.airbyte.config.StandardCheckConnectionOutput.Status; import java.nio.file.Path; +import org.junit.jupiter.api.Test; public class SnowflakeGcsCopyDestinationAcceptanceTest extends SnowflakeInsertDestinationAcceptanceTest { + private static final String NO_GCS_PRIVILEGES_ERR_MSG = + "Permission 'storage.objects.create' denied on resource (or it may not exist)."; + @Override public JsonNode getStaticConfig() { final JsonNode copyConfig = Jsons.deserialize(IOs.readFile(Path.of("secrets/copy_gcs_config.json"))); @@ -20,4 +29,16 @@ public JsonNode getStaticConfig() { return copyConfig; } + @Test + public void testCheckWithNoProperGcsPermissionConnection() throws Exception { + // Config to user (creds) that has no permission to schema + final JsonNode config = Jsons.deserialize(IOs.readFile( + Path.of("secrets/copy_insufficient_gcs_roles_config.json"))); + + StandardCheckConnectionOutput standardCheckConnectionOutput = runCheck(config); + + assertEquals(Status.FAILED, standardCheckConnectionOutput.getStatus()); + assertThat(standardCheckConnectionOutput.getMessage()).contains(NO_GCS_PRIVILEGES_ERR_MSG); + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeInsertDestinationAcceptanceTest.java b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeInsertDestinationAcceptanceTest.java index cd38967a25786..b0f766fcad164 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeInsertDestinationAcceptanceTest.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeInsertDestinationAcceptanceTest.java @@ -47,7 +47,7 @@ public class SnowflakeInsertDestinationAcceptanceTest extends DestinationAccepta "No active warehouse selected in the current session. Select an active warehouse with the 'use warehouse' command."; protected static final String NO_USER_PRIVILEGES_ERR_MSG = - "Schema 'TEXT_SCHEMA' already exists, but current role has no privileges on it."; + "Encountered Error with Snowflake Configuration: Current role does not have permissions on the target schema please verify your privileges"; // this config is based on the static config, and it contains a random // schema name that is different for each test run diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3CopyEncryptedDestinationAcceptanceTest.java b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3CopyEncryptedDestinationAcceptanceTest.java index 2fba654e1c02b..61bcb7b9f71ea 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3CopyEncryptedDestinationAcceptanceTest.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeS3CopyEncryptedDestinationAcceptanceTest.java @@ -4,14 +4,22 @@ package io.airbyte.integrations.destination.snowflake; +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; + import com.fasterxml.jackson.databind.JsonNode; import com.google.common.base.Preconditions; import io.airbyte.commons.io.IOs; import io.airbyte.commons.json.Jsons; +import io.airbyte.config.StandardCheckConnectionOutput; +import io.airbyte.config.StandardCheckConnectionOutput.Status; import java.nio.file.Path; +import org.junit.jupiter.api.Test; public class SnowflakeS3CopyEncryptedDestinationAcceptanceTest extends SnowflakeInsertDestinationAcceptanceTest { + private static final String NO_S3_PRIVILEGES_ERR_MSG = "Could not connect with provided configuration."; + @Override public JsonNode getStaticConfig() { final JsonNode copyConfig = Jsons.deserialize(IOs.readFile(Path.of("secrets/copy_s3_encrypted_config.json"))); @@ -20,4 +28,16 @@ public JsonNode getStaticConfig() { return copyConfig; } + @Test + public void testCheckWithNoProperS3PermissionConnection() throws Exception { + // Config to user (creds) that has no permission to schema + final JsonNode config = Jsons.deserialize(IOs.readFile( + Path.of("secrets/copy_s3_wrong_location_config.json"))); + + StandardCheckConnectionOutput standardCheckConnectionOutput = runCheck(config); + + assertEquals(Status.FAILED, standardCheckConnectionOutput.getStatus()); + assertThat(standardCheckConnectionOutput.getMessage()).contains(NO_S3_PRIVILEGES_ERR_MSG); + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeTestSourceOperations.java b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeTestSourceOperations.java index f2958524dcdfc..46ee859f39091 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeTestSourceOperations.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test-integration/java/io/airbyte/integrations/destination/snowflake/SnowflakeTestSourceOperations.java @@ -4,6 +4,9 @@ package io.airbyte.integrations.destination.snowflake; +import static io.airbyte.db.jdbc.DateTimeConverter.putJavaSQLDate; +import static io.airbyte.db.jdbc.DateTimeConverter.putJavaSQLTime; + import com.fasterxml.jackson.databind.node.ObjectNode; import io.airbyte.db.jdbc.JdbcSourceOperations; import io.airbyte.integrations.standardtest.destination.DestinationAcceptanceTestUtils; @@ -17,4 +20,22 @@ protected void putString(ObjectNode node, String columnName, ResultSet resultSet DestinationAcceptanceTestUtils.putStringIntoJson(resultSet.getString(index), columnName, node); } + @Override + protected void putDate(final ObjectNode node, + final String columnName, + final ResultSet resultSet, + final int index) + throws SQLException { + putJavaSQLDate(node, columnName, resultSet, index); + } + + @Override + protected void putTime(final ObjectNode node, + final String columnName, + final ResultSet resultSet, + final int index) + throws SQLException { + putJavaSQLTime(node, columnName, resultSet, index); + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeDestinationTest.java b/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeDestinationTest.java index 7d60c7e4cb9cd..9658803245286 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeDestinationTest.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeDestinationTest.java @@ -6,44 +6,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.params.provider.Arguments.arguments; -import static org.mockito.ArgumentMatchers.anyList; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.any; -import static org.mockito.Mockito.doThrow; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.collect.ImmutableMap; import io.airbyte.commons.jackson.MoreMappers; import io.airbyte.commons.json.Jsons; import io.airbyte.commons.resources.MoreResources; -import io.airbyte.db.jdbc.JdbcDatabase; -import io.airbyte.integrations.base.AirbyteMessageConsumer; -import io.airbyte.integrations.base.Destination; -import io.airbyte.integrations.destination.record_buffer.FileBuffer; -import io.airbyte.integrations.destination.s3.csv.CsvSerializedBuffer; import io.airbyte.integrations.destination.snowflake.SnowflakeDestination.DestinationType; -import io.airbyte.integrations.destination.staging.StagingConsumerFactory; -import io.airbyte.protocol.models.Field; -import io.airbyte.protocol.models.JsonSchemaType; -import io.airbyte.protocol.models.v0.AirbyteMessage; -import io.airbyte.protocol.models.v0.AirbyteRecordMessage; -import io.airbyte.protocol.models.v0.CatalogHelpers; -import io.airbyte.protocol.models.v0.ConfiguredAirbyteCatalog; -import io.airbyte.protocol.models.v0.DestinationSyncMode; -import java.sql.SQLException; -import java.time.Instant; -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.IntStream; import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -92,35 +63,6 @@ public void useInsertStrategyTest() { assertFalse(SnowflakeDestinationResolver.isS3Copy(stubConfig)); } - @Test - public void testCleanupStageOnFailure() throws Exception { - - final JdbcDatabase mockDb = mock(JdbcDatabase.class); - final SnowflakeInternalStagingSqlOperations sqlOperations = mock(SnowflakeInternalStagingSqlOperations.class); - when(sqlOperations.getStageName(anyString(), anyString())).thenReturn("stage_name"); - when(sqlOperations.getStagingPath(any(UUID.class), anyString(), anyString(), any())).thenReturn("staging_path"); - final var testMessages = generateTestMessages(); - final JsonNode config = Jsons.deserialize(MoreResources.readResource("insert_config.json"), JsonNode.class); - final AirbyteMessageConsumer airbyteMessageConsumer = new StagingConsumerFactory().create( - Destination::defaultOutputRecordCollector, - mockDb, - sqlOperations, - new SnowflakeSQLNameTransformer(), - CsvSerializedBuffer.createFunction(null, () -> new FileBuffer(".csv")), - config, - getCatalog(), - true); - doThrow(SQLException.class).when(sqlOperations).copyIntoTmpTableFromStage(any(), anyString(), anyString(), anyList(), anyString(), anyString()); - - airbyteMessageConsumer.start(); - for (final AirbyteMessage m : testMessages) { - airbyteMessageConsumer.accept(m); - } - assertThrows(RuntimeException.class, airbyteMessageConsumer::close); - - verify(sqlOperations, times(1)).cleanUpStage(any(), anyString(), anyList()); - } - @ParameterizedTest @MethodSource("destinationTypeToConfig") public void testS3ConfigType(final String configFileName, final DestinationType expectedDestinationType) throws Exception { @@ -135,28 +77,4 @@ private static Stream destinationTypeToConfig() { arguments("copy_s3_config.json", DestinationType.COPY_S3), arguments("insert_config.json", DestinationType.INTERNAL_STAGING)); } - - private List generateTestMessages() { - return IntStream.range(0, 3) - .boxed() - .map(i -> new AirbyteMessage() - .withType(AirbyteMessage.Type.RECORD) - .withRecord(new AirbyteRecordMessage() - .withStream("test") - .withNamespace("test_staging") - .withEmittedAt(Instant.now().toEpochMilli()) - .withData(Jsons.jsonNode(ImmutableMap.of("id", i, "name", "human " + i))))) - .collect(Collectors.toList()); - } - - ConfiguredAirbyteCatalog getCatalog() { - return new ConfiguredAirbyteCatalog().withStreams(List.of( - CatalogHelpers.createConfiguredAirbyteStream( - "test", - "test_staging", - Field.of("id", JsonSchemaType.NUMBER), - Field.of("name", JsonSchemaType.STRING)) - .withDestinationSyncMode(DestinationSyncMode.OVERWRITE))); - } - } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeInternalStagingSqlOperationsTest.java b/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeInternalStagingSqlOperationsTest.java index 77385c67fce0d..6038e86b401cc 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeInternalStagingSqlOperationsTest.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeInternalStagingSqlOperationsTest.java @@ -5,10 +5,19 @@ package io.airbyte.integrations.destination.snowflake; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; import static org.junit.jupiter.api.Assertions.assertTrue; +import io.airbyte.commons.exceptions.ConfigErrorException; +import io.airbyte.db.jdbc.JdbcDatabase; +import java.sql.SQLException; import java.util.List; +import net.snowflake.client.jdbc.SnowflakeSQLException; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.mockito.Mockito; class SnowflakeInternalStagingSqlOperationsTest { @@ -66,4 +75,24 @@ void removeStage() { assertEquals(expectedQuery, actualRemoveQuery); } + @ParameterizedTest + @CsvSource({"TEST,false", "but current role has no privileges on it,true"}) + public void testCreateStageIfNotExists(final String message, final boolean shouldCapture) { + final JdbcDatabase db = Mockito.mock(JdbcDatabase.class); + final String stageName = "foo"; + try { + Mockito.doThrow(new SnowflakeSQLException(message)).when(db).execute(Mockito.anyString()); + } catch (SQLException e) { + // This would not be expected, but the `execute` method above will flag as an unhandled exception + assert false; + } + final Exception exception = Assertions.assertThrows(Exception.class, () -> snowflakeStagingSqlOperations.createStageIfNotExists(db, stageName)); + if (shouldCapture) { + assertInstanceOf(ConfigErrorException.class, exception); + } else { + assertInstanceOf(SnowflakeSQLException.class, exception); + assertEquals(exception.getMessage(), message); + } + } + } diff --git a/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeSqlOperationsTest.java b/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeSqlOperationsTest.java index dfaf972e0de50..ce86c3c109ae2 100644 --- a/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeSqlOperationsTest.java +++ b/airbyte-integrations/connectors/destination-snowflake/src/test/java/io/airbyte/integrations/destination/snowflake/SnowflakeSqlOperationsTest.java @@ -5,12 +5,15 @@ package io.airbyte.integrations.destination.snowflake; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import io.airbyte.commons.exceptions.ConfigErrorException; import io.airbyte.commons.functional.CheckedConsumer; import io.airbyte.db.jdbc.JdbcDatabase; import io.airbyte.integrations.base.JavaBaseConstants; @@ -18,7 +21,11 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; +import net.snowflake.client.jdbc.SnowflakeSQLException; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import org.mockito.Mockito; class SnowflakeSqlOperationsTest { @@ -53,4 +60,46 @@ void insertRecordsInternal() throws SQLException { verify(db, times(1)).execute(any(CheckedConsumer.class)); } + @ParameterizedTest + @CsvSource({"TEST,false", "but current role has no privileges on it,true"}) + public void testCreateSchemaIfNotExists(final String message, final boolean shouldCapture) { + final JdbcDatabase db = Mockito.mock(JdbcDatabase.class); + final var schemaName = "foo"; + try { + Mockito.doThrow(new SnowflakeSQLException(message)).when(db).execute(Mockito.anyString()); + } catch (Exception e) { + // This would not be expected, but the `execute` method above will flag as an unhandled exception + assert false; + } + Exception exception = assertThrows(Exception.class, () -> snowflakeSqlOperations.createSchemaIfNotExists(db, schemaName)); + if (shouldCapture) { + assertInstanceOf(ConfigErrorException.class, exception); + } else { + assertInstanceOf(SnowflakeSQLException.class, exception); + assertEquals(exception.getMessage(), message); + } + } + + @ParameterizedTest + @CsvSource({"TEST,false", "but current role has no privileges on it,true"}) + public void testCreateTableIfNotExists(final String message, final boolean shouldCapture) { + final JdbcDatabase db = Mockito.mock(JdbcDatabase.class); + final String schemaName = "foo"; + final String tableName = "bar"; + try { + Mockito.doThrow(new SnowflakeSQLException(message)).when(db).execute(Mockito.anyString()); + } catch (SQLException e) { + // This would not be expected, but the `execute` method above will flag as an unhandled exception + assert false; + } + final Exception exception = + assertThrows(Exception.class, () -> snowflakeSqlOperations.createTableIfNotExists(db, schemaName, tableName)); + if (shouldCapture) { + assertInstanceOf(ConfigErrorException.class, exception); + } else { + assertInstanceOf(SnowflakeSQLException.class, exception); + assertEquals(exception.getMessage(), message); + } + } + } diff --git a/airbyte-integrations/connectors/source-activecampaign/source_activecampaign/activecampaign.yaml b/airbyte-integrations/connectors/source-activecampaign/source_activecampaign/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-activecampaign/source_activecampaign/activecampaign.yaml rename to airbyte-integrations/connectors/source-activecampaign/source_activecampaign/manifest.yaml diff --git a/airbyte-integrations/connectors/source-activecampaign/source_activecampaign/source.py b/airbyte-integrations/connectors/source-activecampaign/source_activecampaign/source.py index 5ef118e941758..5d5d94ae7f837 100644 --- a/airbyte-integrations/connectors/source-activecampaign/source_activecampaign/source.py +++ b/airbyte-integrations/connectors/source-activecampaign/source_activecampaign/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceActivecampaign(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "activecampaign.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-aha/source_aha/aha.yaml b/airbyte-integrations/connectors/source-aha/source_aha/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-aha/source_aha/aha.yaml rename to airbyte-integrations/connectors/source-aha/source_aha/manifest.yaml diff --git a/airbyte-integrations/connectors/source-aha/source_aha/source.py b/airbyte-integrations/connectors/source-aha/source_aha/source.py index e91575fa8cd90..427dbc05d4ab2 100644 --- a/airbyte-integrations/connectors/source-aha/source_aha/source.py +++ b/airbyte-integrations/connectors/source-aha/source_aha/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceAha(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "aha.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-airtable/Dockerfile b/airbyte-integrations/connectors/source-airtable/Dockerfile index d93beddbddecb..a0b9f2b6dc296 100644 --- a/airbyte-integrations/connectors/source-airtable/Dockerfile +++ b/airbyte-integrations/connectors/source-airtable/Dockerfile @@ -34,5 +34,5 @@ COPY source_airtable ./source_airtable ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.0.1 +LABEL io.airbyte.version=2.0.0 LABEL io.airbyte.name=airbyte/source-airtable diff --git a/airbyte-integrations/connectors/source-airtable/acceptance-test-config.yml b/airbyte-integrations/connectors/source-airtable/acceptance-test-config.yml index 526086b6b9a61..965765ef04486 100644 --- a/airbyte-integrations/connectors/source-airtable/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-airtable/acceptance-test-config.yml @@ -1,6 +1,7 @@ # 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-airtable:dev +test_strictness_level: high acceptance_tests: spec: tests: @@ -11,18 +12,37 @@ acceptance_tests: status: "succeed" - config_path: "integration_tests/invalid_config.json" status: "failed" + - config_path: "secrets/config_oauth.json" + status: "succeed" + - config_path: "integration_tests/invalid_config_oauth.json" + status: "failed" discovery: tests: - config_path: "secrets/config.json" - # bypassed this check, because discovery mechanism was changed + # the static `string` schema is replaced with casted to JSONSchema + backward_compatibility_tests_config: + disable_for_version: "1.0.2" + - config_path: "secrets/config_oauth.json" + # the static `string` schema is replaced with casted to JSONSchema backward_compatibility_tests_config: - disable_for_version: "0.1.3" + disable_for_version: "1.0.2" 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: true + exact_order: true + extra_records: false + - config_path: "secrets/config_oauth.json" + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: true + exact_order: true + extra_records: false full_refresh: tests: - config_path: "secrets/config.json" configured_catalog_path: "integration_tests/configured_catalog.json" + incremental: + bypass_reason: "Incremental syncs are not supported on this connector." diff --git a/airbyte-integrations/connectors/source-airtable/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-airtable/integration_tests/configured_catalog.json index 44ede810e797a..c4730a9e41c82 100644 --- a/airbyte-integrations/connectors/source-airtable/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-airtable/integration_tests/configured_catalog.json @@ -28,6 +28,20 @@ "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" }, + { + "stream": { + "name": "users/table_6", + "json_schema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "properties": {} + }, + "supported_sync_modes": ["full_refresh"], + "supported_destination_sync_modes": ["overwrite", "append_dedup"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "users/field_type_test", diff --git a/airbyte-integrations/connectors/source-airtable/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-airtable/integration_tests/expected_records.jsonl new file mode 100644 index 0000000000000..3f293d2a7e947 --- /dev/null +++ b/airbyte-integrations/connectors/source-airtable/integration_tests/expected_records.jsonl @@ -0,0 +1,42 @@ +{"stream": "users/table_1", "data": {"_airtable_id": "recgRMRMHxgcgJeDe", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "name": "test2", "status": "test", "notes": "test_note2"}, "emitted_at": 1674743461677} +{"stream": "users/table_1", "data": {"_airtable_id": "recmJkSF51IKUGmlJ", "_airtable_created_time": "2022-12-22T20:58:05.000Z", "name": "test4_after_empty", "clo_with_empty_strings": "bla bla bla", "status": "In progress", "notes": "test_note4"}, "emitted_at": 1674743461678} +{"stream": "users/table_1", "data": {"_airtable_id": "recvp1qYYBlcOrzsc", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "name": "test3", "clo_with_empty_strings": "test text here", "status": "test", "notes": "test-note3"}, "emitted_at": 1674743461678} +{"stream": "users/table_1", "data": {"_airtable_id": "reczEeQV9NrzFlVFF", "_airtable_created_time": "2021-11-16T13:30:17.000Z", "name": "test", "status": "test", "notes": "test_note"}, "emitted_at": 1674743461679} +{"stream": "users/table_2", "data": {"_airtable_id": "recB3upao4wpmeCEf", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "status": "In progress", "name": "test2", "notes": "test2"}, "emitted_at": 1674743462304} +{"stream": "users/table_2", "data": {"_airtable_id": "recWeE6SiYeri4Duq", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "status": "Todo", "name": "test", "notes": "test"}, "emitted_at": 1674743462304} +{"stream": "users/table_2", "data": {"_airtable_id": "recXn7kXbeEsJfDJQ", "_airtable_created_time": "2022-12-28T11:41:10.000Z", "name": " "}, "emitted_at": 1674743462305} +{"stream": "users/table_2", "data": {"_airtable_id": "recmMfFAec8plcOUY", "_airtable_created_time": "2021-11-16T13:32:31.000Z", "status": "Done", "name": "test 3", "notes": "test 3"}, "emitted_at": 1674743462305} +{"stream": "users/table_6", "data": {"_airtable_id": "recHyy86oge9j5cYP", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "name": "test_negative", "table_6": ["recHyy86oge9j5cYP", "recoY6ShPkGpav3Se"], "float": 0.3, "status": "In progress", "integer": -1.0, "assignee": [2.0], "assignee_(from_table_6)": [2.0, 2.0]}, "emitted_at": 1674743462941} +{"stream": "users/table_6", "data": {"_airtable_id": "recLhKYa9btCCqmxs", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "name": "test_attachment", "table_6": ["recLhKYa9btCCqmxs", "recoY6ShPkGpav3Se"], "float": 0.3, "status": "Todo", "integer": 1.0, "assignee": [2.0], "assignee_(from_table_6)": [2.0, 2.0]}, "emitted_at": 1674743462941} +{"stream": "users/table_6", "data": {"_airtable_id": "recoY6ShPkGpav3Se", "_airtable_created_time": "2023-01-25T02:04:26.000Z", "name": "test_normal", "table_6": ["recoY6ShPkGpav3Se", "recHyy86oge9j5cYP", "recLhKYa9btCCqmxs"], "float": 0.7, "status": "Done", "integer": 2.0, "assignee": [2.0], "assignee_(from_table_6)": [2.0, 2.0, 2.0]}, "emitted_at": 1674743462942} +{"stream": "users/field_type_test", "data": {"_airtable_id": "rec0UJKftqCPj7zJu", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 17.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463539} +{"stream": "users/field_type_test", "data": {"_airtable_id": "rec3tSj3Yzi42uuS0", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "id": 3.0, "100_columns": ["reccHYZ004lOuxLFH"], "name": "Blank", "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_(w/o_time)": "2022-09-30", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463540} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recAa5DUEhppIeeax", "_airtable_created_time": "2022-12-01T20:27:30.000Z", "email": "integration-test-user@airbyte.io", "id": 9.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:30.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463540} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recG989xsdfSxookl", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 23.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463541} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recGVqF9BIpDD7Gj1", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 22.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463542} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recHNlOoFvp6KjeZD", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "id": 16.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463543} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recL6sfQP0FyJr3Ua", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "id": 21.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463544} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recMtt4tMmdNbwV5R", "_airtable_created_time": "2022-12-01T20:27:20.000Z", "id": 8.0, "name": "Blank", "created_(with_time)": "2022-12-01T20:27:20.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463544} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recOz5BBo3Ey3ldb8", "_airtable_created_time": "2022-12-01T20:27:11.000Z", "email": "integration-test-user@airbyte.io", "id": 5.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "100_columns": ["recXVzpNmtsBcjrA2"], "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:11.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463544} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recSbSBPspxs22165", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 15.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463545} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recUzRSGAf5VYtXfZ", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "email": "integration-test-user@airbyte.io", "id": 1.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "checkbox": true, "100_columns": ["rec2lCkcy9d0fZi8h"], "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_(w/o_time)": "2022-09-30", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463546} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recbQy9sb5BM1K3Z1", "_airtable_created_time": "2022-12-01T20:27:17.000Z", "email": "integration-test-user@airbyte.io", "id": 6.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:17.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463547} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recehwpjPyD1PLFkr", "_airtable_created_time": "2022-12-01T20:27:10.000Z", "email": "integration-test-user@airbyte.io", "id": 4.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:10.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463548} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recfdnbGNkUx1Rs5F", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 19.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463549} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recpkKhLwcFYbJLtJ", "_airtable_created_time": "2022-12-01T20:27:43.000Z", "email": "integration-test-user@airbyte.io", "id": 14.0, "date": "2022-09-30", "multiple_select_(no_colors)": ["1", "2", "3"], "percent": 0.0, "rating": 5.0, "multiple_select_(colors)": ["1", "2", "3"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "checkbox": true, "number": 1.0, "duration": 0.0, "name": "John", "single_line": "Singe line", "phone": "(937) 999-999", "value": 1.0, "long_text": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas vitae nisi nec justo laoreet tincidunt. Vivamus eget porttitor velit. Pellentesque gravida euismod massa, eget egestas sem facilisis gravida. Suspendisse quis mauris eget velit faucibus aliquam. Mauris porttitor urna lorem, eget tincidunt ex faucibus et. Nam viverra nibh quis turpis scelerisque, et condimentum nibh vulputate. Vivamus eu dolor posuere, finibus ligula vel, finibus erat. Sed hendrerit luctus erat, eu finibus ante blandit ut. Sed id mi ullamcorper, cursus urna nec, molestie lorem. In vulputate tempor nulla in laoreet. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed a risus risus. Praesent neque lorem, fringilla vitae rhoncus a, semper eu augue.", "single_select_(colors)": "1", "single_select_(no_colors)": "1", "url": "airbyte.io", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:43.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463550} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recqurXMR6u1PO5wT", "_airtable_created_time": "2022-12-01T20:27:18.000Z", "email": "integration-test-user@airbyte.io", "id": 7.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:18.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463551} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recuYRu9z5dlkHxop", "_airtable_created_time": "2022-12-01T20:27:30.000Z", "email": "integration-test-user@airbyte.io", "id": 10.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:30.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463551} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recw3jDJFziB562hu", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 18.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463552} +{"stream": "users/field_type_test", "data": {"_airtable_id": "recyJGdkZikJbLFRi", "_airtable_created_time": "2022-09-30T16:06:49.000Z", "email": "integration-test-user@airbyte.io", "id": 2.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-09-30T16:06:49.000Z", "created_(w/o_time)": "2022-09-30", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463553} +{"stream": "users/field_type_test", "data": {"_airtable_id": "reczDi9vTuH3ezfJM", "_airtable_created_time": "2022-12-01T20:27:46.000Z", "email": "integration-test-user@airbyte.io", "id": 20.0, "date": "2022-10-03", "multiple_select_(no_colors)": ["a", "b", "c"], "percent": 1.0, "rating": 3.0, "multiple_select_(colors)": ["a", "b", "c"], "user_(non-multiple)": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 123123871234.33, "duration": 169409880.0, "name": "Jane", "single_line": "09-30-2022", "phone": "(937) 999-999", "value": 1128312.23, "long_text": "18923671273628376328495623874562981345982 234953249857239045798 342098523495723495732 23489532475\n\n23453245234532453245234523453245\n\n2345234532452345", "single_select_(colors)": "a", "single_select_(no_colors)": "a", "url": "www.google.com", "user_(multiple)": ["{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"], "created_(with_time)": "2022-12-01T20:27:46.000Z", "created_(w/o_time)": "2022-12-01", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743463554} +{"stream": "users/50_columns", "data": {"_airtable_id": "rec2lCkcy9d0fZi8h", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "notes": "dasdafsdag", "phone_3": "(999) 999-9999", "tags_2": ["alpha", "issue"], "select_2": "top", "date_2": "2023-01-03", "euro": 136.46, "collaborator": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 423.0, "assignee": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "percent_2": 0.45299999999999996, "url": "airbyte.com", "duration": 9900.0, "notes_3": " dfhsh f g dh", "status": "Done", "rating_2": 1.0, "barcode": "{'text': '312515435'}", "number_2": 3453.0, "rating": 4.0, "field_type_test": ["recUzRSGAf5VYtXfZ"], "usd": 143.64, "done": true, "id": 1.0, "notes_2": "1. fsafsf sfkjkl fsafs", "phone_2": "(222) 222-2222", "email": "email@airbyte.io", "percent_3": 0.24300000000000002, "select": "1st", "int": 65.0, "label_2": "Lorem", "date": "2022-12-02", "label_3": "line", "name": "Thing 1", "phone": "(999) 999-9999", "label": "Nulla quis lorem ut libero malesuada feugiat.", "duration_2": 20580.0, "tags": ["tag1"], "decimal": 5.8797, "percent": 0.2, "email_(from_field_type_test)": ["integration-test-user@airbyte.io"], "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-09-30"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:27.000Z", "last_modified_2": "2023-01-24T11:12:27.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743464164} +{"stream": "users/50_columns", "data": {"_airtable_id": "recXVzpNmtsBcjrA2", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "notes": "opoiwepoirwe", "phone_3": "(999) 999-9999", "tags_2": ["ga"], "select_2": "bottom", "date_2": "2023-01-31", "euro": 279.62, "collaborator": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "number": 34535.5, "percent_2": 0.624, "duration": 10440.0, "notes_3": "hdfhe e et e true ttue ", "status": "Todo", "rating_2": 4.0, "barcode": "{'text': '351164554'}", "rating": 3.0, "field_type_test": ["recOz5BBo3Ey3ldb8"], "usd": 294.34, "done": true, "url_2": "airbyte.com", "id": 3.0, "notes_2": "3. flsflkj;flkjsf fskjlf lakjf; lskaj;klsjf", "phone_2": "(444) 444-4444", "percent_3": 0.13699999999999998, "select": "3rd", "int": 98.0, "date": "2022-12-14", "label_3": "line", "name": "Thing 3", "phone": "(999) 999-9999", "label": "Curabitur aliquet quam id dui posuere blandit.", "duration_2": 19740.0, "decimal": 6.6, "percent": 0.3, "email_(from_field_type_test)": ["integration-test-user@airbyte.io"], "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-12-01"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:12.000Z", "last_modified_2": "2023-01-24T11:12:12.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743464165} +{"stream": "users/50_columns", "data": {"_airtable_id": "reccHYZ004lOuxLFH", "_airtable_created_time": "2022-12-02T17:29:41.000Z", "notes": "hjyyfhgjjfgjr", "phone_3": "(999) 999-9999", "tags_2": ["beta", "no issue"], "select_2": "mid", "date_2": "2023-01-17", "euro": 325.13, "number": 22424.5, "assignee": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "percent_2": 0.562, "duration": 11520.0, "notes_3": "fhdfhdhgf hfh hdfgh", "status": "In progress", "barcode": "{'text': '5531515315'}", "number_2": 3452.0, "rating": 5.0, "field_type_test": ["rec3tSj3Yzi42uuS0"], "usd": 342.24, "url_2": "docs.airbyte.com", "id": 2.0, "notes_2": "2. fskldf f;sfkjk s;lkjfkls", "phone_2": "(333) 333-3333", "email": "what@airbyte.io", "percent_3": 0.532, "select": "2nd", "int": 53.0, "date": "2022-11-10", "label_3": "line", "name": "Thing 2", "phone": "(999) 999-9999", "label": "Quisque velit nisi, pretium ut lacinia in, elementum id enim.", "duration_2": 18180.0, "collaborator_2": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "tags": ["tag2", "tag3"], "done_2": true, "decimal": 4.134, "percent": 0.15, "count_(field_type_test)": 1.0, "created_(w/o_time)_(from_field_type_test)": ["2022-09-30"], "created": "2022-12-02T17:29:41.000Z", "last_modified": "2023-01-24T11:12:11.000Z", "last_modified_2": "2023-01-24T11:12:11.000Z", "created_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}", "last_modified_by": "{'id': 'usrr0cUCbVccLxU7x', 'email': 'integration-test@airbyte.io', 'name': 'Augustin Lafanechere'}"}, "emitted_at": 1674743464167} +{"stream": "users/checkboxes", "data": {"_airtable_id": "recLvpJ4k4mRG38My", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "done_18": true, "done_21": true, "done_6": true, "done_11": true, "done_24": true, "done_2": true, "done_12": true, "done_16": true, "done_4": true, "done_10": true, "done_7": true, "done_22": true, "done_23": true, "done_20": true, "name": "Cloud"}, "emitted_at": 1674743464782} +{"stream": "users/checkboxes", "data": {"_airtable_id": "reckszXRiFfg11IYD", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "done_21": true, "done_6": true, "done_17": true, "done_5": true, "done_9": true, "done_11": true, "done_16": true, "done_25": true, "done_7": true, "done_22": true, "done_13": true, "done_3": true, "name": "Support"}, "emitted_at": 1674743464782} +{"stream": "users/checkboxes", "data": {"_airtable_id": "recmaYwfPMvZtwTSJ", "_airtable_created_time": "2022-12-02T19:50:00.000Z", "done_5": true, "done_9": true, "done_19": true, "done_12": true, "done": true, "done_16": true, "done_14": true, "done_4": true, "done_25": true, "done_7": true, "done_23": true, "done_20": true, "name": "Airbyte"}, "emitted_at": 1674743464783} +{"stream": "untitled_base/table_1", "data": {"_airtable_id": "recJ0l923fOFw6qbl", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "name": "test2", "notes": "test2", "status": "In progress"}, "emitted_at": 1674743465388} +{"stream": "untitled_base/table_1", "data": {"_airtable_id": "recNbrGzLJfOy6EjC", "_airtable_created_time": "2022-12-28T11:43:37.000Z", "name": "blank"}, "emitted_at": 1674743465389} +{"stream": "untitled_base/table_1", "data": {"_airtable_id": "recZX1Je5k4nXhTi0", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "name": "blank"}, "emitted_at": 1674743465389} +{"stream": "untitled_base/table_1", "data": {"_airtable_id": "recxXAoQ0cC5yCMZ7", "_airtable_created_time": "2021-12-09T07:54:15.000Z", "name": "test1", "notes": "test", "status": "Todo"}, "emitted_at": 1674743465390} +{"stream": "untitled_base/table_1", "data": {"_airtable_id": "reczJvdeo0b8KsM6K", "_airtable_created_time": "2022-12-28T11:43:38.000Z", "name": "test3", "notes": "test3", "status": "Done"}, "emitted_at": 1674743465390} diff --git a/airbyte-integrations/connectors/source-airtable/integration_tests/invalid_config_oauth.json b/airbyte-integrations/connectors/source-airtable/integration_tests/invalid_config_oauth.json new file mode 100644 index 0000000000000..2e0cc51ef89c5 --- /dev/null +++ b/airbyte-integrations/connectors/source-airtable/integration_tests/invalid_config_oauth.json @@ -0,0 +1,10 @@ +{ + "credentials": { + "auth_method": "oauth2.0", + "client_id": "client_id", + "client_secret": "client_secret", + "access_token": "access_token", + "refresh_token": "refresh_token", + "token_expiry_date": "2023-01-01T12:12:12.000000+00:00" + } +} diff --git a/airbyte-integrations/connectors/source-airtable/source_airtable/auth.py b/airbyte-integrations/connectors/source-airtable/source_airtable/auth.py new file mode 100644 index 0000000000000..0a51c0af623e4 --- /dev/null +++ b/airbyte-integrations/connectors/source-airtable/source_airtable/auth.py @@ -0,0 +1,55 @@ +# +# Copyright (c) 2022 Airbyte, Inc., all rights reserved. +# + +from typing import Any, Mapping, Union + +import requests +from airbyte_cdk.sources.streams.http.requests_native_auth import ( + BasicHttpAuthenticator, + SingleUseRefreshTokenOauth2Authenticator, + TokenAuthenticator, +) + + +class AirtableOAuth(SingleUseRefreshTokenOauth2Authenticator): + """ + https://airtable.com/developers/web/api/oauth-reference#token-expiry-refresh-tokens + """ + + def build_refresh_request_headers(self) -> Mapping[str, Any]: + """ + https://airtable.com/developers/web/api/oauth-reference#token-refresh-request-headers + """ + return { + "Authorization": BasicHttpAuthenticator(self.get_client_id(), self.get_client_secret()).token, + "Content-Type": "application/x-www-form-urlencoded", + } + + def build_refresh_request_body(self) -> Mapping[str, Any]: + """ + https://airtable.com/developers/web/api/oauth-reference#token-refresh-request-body + """ + return { + "grant_type": self.get_grant_type(), + "refresh_token": self.get_refresh_token(), + } + + def _get_refresh_access_token_response(self) -> Mapping[str, Any]: + response = requests.request( + method="POST", + url=self.get_token_refresh_endpoint(), + data=self.build_refresh_request_body(), + headers=self.build_refresh_request_headers(), + ) + response.raise_for_status() + return response.json() + + +class AirtableAuth: + def __new__(cls, config: dict) -> Union[TokenAuthenticator, AirtableOAuth]: + # for old configs with api_key provided + if "api_key" in config: + return TokenAuthenticator(token=(config or {}).get("api_key")) + # for new oauth configs + return AirtableOAuth(config, "https://airtable.com/oauth2/v1/token") diff --git a/airbyte-integrations/connectors/source-airtable/source_airtable/schema_helpers.py b/airbyte-integrations/connectors/source-airtable/source_airtable/schema_helpers.py index edb5cffe466b5..43e253dc9d72c 100644 --- a/airbyte-integrations/connectors/source-airtable/source_airtable/schema_helpers.py +++ b/airbyte-integrations/connectors/source-airtable/source_airtable/schema_helpers.py @@ -3,12 +3,75 @@ # +from copy import deepcopy from typing import Any, Dict from airbyte_cdk.models import AirbyteStream from airbyte_cdk.models.airbyte_protocol import DestinationSyncMode, SyncMode +class SchemaTypes: + + string: Dict = {"type": ["null", "string"]} + + number: Dict = {"type": ["null", "number"]} + + boolean: Dict = {"type": ["null", "boolean"]} + + date: Dict = {"type": ["null", "string"], "format": "date"} + + datetime: Dict = {"type": ["null", "string"], "format": "date-time"} + + array_with_strings: Dict = {"type": ["null", "array"], "items": {"type": ["null", "string"]}} + + # array items should be automatically determined + # based on field complexity + array_with_any: Dict = {"type": ["null", "array"], "items": {}} + + +# More info about internal Airtable Data Types +# https://airtable.com/developers/web/api/field-model +SIMPLE_AIRTABLE_TYPES: Dict = { + "multipleAttachments": SchemaTypes.string, + "autoNumber": SchemaTypes.number, + "barcode": SchemaTypes.string, + "button": SchemaTypes.string, + "checkbox": SchemaTypes.boolean, + "singleCollaborator": SchemaTypes.string, + "count": SchemaTypes.number, + "createdBy": SchemaTypes.string, + "createdTime": SchemaTypes.datetime, + "currency": SchemaTypes.number, + "email": SchemaTypes.string, + "date": SchemaTypes.date, + "dateTime": SchemaTypes.datetime, + "duration": SchemaTypes.number, + "lastModifiedBy": SchemaTypes.string, + "lastModifiedTime": SchemaTypes.datetime, + "multipleRecordLinks": SchemaTypes.array_with_strings, + "multilineText": SchemaTypes.string, + "multipleCollaborators": SchemaTypes.array_with_strings, + "multipleSelects": SchemaTypes.array_with_strings, + "number": SchemaTypes.number, + "percent": SchemaTypes.number, + "phoneNumber": SchemaTypes.string, + "rating": SchemaTypes.number, + "richText": SchemaTypes.string, + "singleLineText": SchemaTypes.string, + "externalSyncSource": SchemaTypes.string, + "url": SchemaTypes.string, +} + +# returns the `array of Any` where Any is based on Simple Types. +# the final array is fulled with some simple type. +COMPLEX_AIRTABLE_TYPES: Dict = { + "formula": SchemaTypes.array_with_any, + "lookup": SchemaTypes.array_with_any, + "multipleLookupValues": SchemaTypes.array_with_any, + "rollup": SchemaTypes.array_with_any, +} + + class SchemaHelpers: @staticmethod def clean_name(name_str: str) -> str: @@ -16,22 +79,39 @@ def clean_name(name_str: str) -> str: @staticmethod def get_json_schema(table: Dict[str, Any]) -> Dict[str, str]: - fields = table.get("fields", {}) - properties = { - "_airtable_id": {"type": ["null", "string"]}, - "_airtable_created_time": {"type": ["null", "string"]}, + properties: Dict = { + "_airtable_id": SchemaTypes.string, + "_airtable_created_time": SchemaTypes.string, } + fields: Dict = table.get("fields", {}) for field in fields: - field_name = SchemaHelpers.clean_name(field.get("name")) - properties[field_name] = {"type": ["null", "string"]} + name: str = SchemaHelpers.clean_name(field.get("name")) + original_type: str = field.get("type") + options: Dict = field.get("options", {}) + exec_type: str = options.get("result", {}).get("type") if options else None + field_type: str = exec_type if exec_type else original_type + + # choose the JsonSchema Type for known Airtable Types + if original_type in COMPLEX_AIRTABLE_TYPES.keys(): + complex_type = deepcopy(COMPLEX_AIRTABLE_TYPES.get(original_type)) + # process arrays with values + if complex_type == SchemaTypes.array_with_any: + complex_type["items"] = deepcopy(SIMPLE_AIRTABLE_TYPES.get(field_type)) + properties.update(**{name: complex_type}) + elif original_type in SIMPLE_AIRTABLE_TYPES.keys(): + properties.update(**{name: deepcopy(SIMPLE_AIRTABLE_TYPES.get(field_type))}) + else: + # Airtable may add more field types in the future and don't consider it a breaking change + properties.update(**{name: SchemaTypes.string}) - json_schema = { + json_schema: Dict = { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "additionalProperties": True, "properties": properties, } + return json_schema @staticmethod diff --git a/airbyte-integrations/connectors/source-airtable/source_airtable/source.py b/airbyte-integrations/connectors/source-airtable/source_airtable/source.py index 22da4729e45c3..6d1734fcb72e8 100644 --- a/airbyte-integrations/connectors/source-airtable/source_airtable/source.py +++ b/airbyte-integrations/connectors/source-airtable/source_airtable/source.py @@ -10,8 +10,8 @@ from airbyte_cdk.models import AirbyteCatalog from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream -from airbyte_cdk.sources.streams.http.requests_native_auth import TokenAuthenticator +from .auth import AirtableAuth from .schema_helpers import SchemaHelpers from .streams import AirtableBases, AirtableStream, AirtableTables @@ -19,12 +19,11 @@ class SourceAirtable(AbstractSource): logger: logging.Logger = logging.getLogger("airbyte") - - # prepared streams catalog streams_catalog: Iterable[Mapping[str, Any]] = [] + _auth: AirtableAuth = None def check_connection(self, logger: AirbyteLogger, config: Mapping[str, Any]) -> Tuple[bool, Any]: - auth = TokenAuthenticator(token=config["api_key"]) + auth = AirtableAuth(config) try: # try reading first table from each base, to check the connectivity, for base in AirtableBases(authenticator=auth).read_records(sync_mode=None): @@ -43,7 +42,7 @@ def discover(self, logger: AirbyteLogger, config) -> AirbyteCatalog: Retrieve: Bases, Tables from each Base, generate JSON Schema for each table. """ - auth = TokenAuthenticator(token=config["api_key"]) + auth = self._auth or AirtableAuth(config) # list all bases available for authenticated account for base in AirtableBases(authenticator=auth).read_records(sync_mode=None): base_id = base.get("id") @@ -62,6 +61,7 @@ def discover(self, logger: AirbyteLogger, config) -> AirbyteCatalog: return AirbyteCatalog(streams=[stream["stream"] for stream in self.streams_catalog]) def streams(self, config: Mapping[str, Any]) -> List[Stream]: + self._auth = AirtableAuth(config) # trigger discovery to populate the streams_catalog if not self.streams_catalog: self.discover(None, config) @@ -71,5 +71,5 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: stream_path=stream["stream_path"], stream_name=stream["stream"].name, stream_schema=stream["stream"].json_schema, - authenticator=TokenAuthenticator(token=config["api_key"]), + authenticator=self._auth, ) diff --git a/airbyte-integrations/connectors/source-airtable/source_airtable/spec.json b/airbyte-integrations/connectors/source-airtable/source_airtable/spec.json index 14b447101fbc5..26383df1b3058 100644 --- a/airbyte-integrations/connectors/source-airtable/source_airtable/spec.json +++ b/airbyte-integrations/connectors/source-airtable/source_airtable/spec.json @@ -4,14 +4,119 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Airtable Source Spec", "type": "object", - "required": ["api_key"], + "additionalProperties": true, "properties": { - "api_key": { - "type": "string", - "description": "The API Key or PAT for the Airtable account. See the Support Guide for more information on how to obtain this key.", - "title": "API Key", - "airbyte_secret": true, - "examples": ["key1234567890"] + "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": "API Key", + "type": "object", + "required": ["api_key"], + "properties": { + "auth_method": { + "type": "string", + "const": "api_key" + }, + "api_key": { + "type": "string", + "description": "The API Key or PAT for the Airtable account. See the Support Guide for more information on how to obtain this key.", + "title": "API Key", + "airbyte_secret": true, + "examples": ["key1234567890"] + } + } + } + ] + } + } + }, + "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"] + } + } } } } diff --git a/airbyte-integrations/connectors/source-alloydb-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-alloydb-strict-encrypt/Dockerfile index 9e6ce4500d97d..e02b1482975ad 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=1.0.35 +LABEL io.airbyte.version=1.0.36 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 6a1441b16c7f4..c18c20b855713 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=1.0.35 +LABEL io.airbyte.version=1.0.36 LABEL io.airbyte.name=airbyte/source-alloydb diff --git a/airbyte-integrations/connectors/source-alpha-vantage/source_alpha_vantage/alpha_vantage.yaml b/airbyte-integrations/connectors/source-alpha-vantage/source_alpha_vantage/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-alpha-vantage/source_alpha_vantage/alpha_vantage.yaml rename to airbyte-integrations/connectors/source-alpha-vantage/source_alpha_vantage/manifest.yaml diff --git a/airbyte-integrations/connectors/source-alpha-vantage/source_alpha_vantage/source.py b/airbyte-integrations/connectors/source-alpha-vantage/source_alpha_vantage/source.py index b8e22cf0db5d2..11a6cf720195d 100644 --- a/airbyte-integrations/connectors/source-alpha-vantage/source_alpha_vantage/source.py +++ b/airbyte-integrations/connectors/source-alpha-vantage/source_alpha_vantage/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceAlphaVantage(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "alpha_vantage.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-amazon-ads/acceptance-test-config.yml b/airbyte-integrations/connectors/source-amazon-ads/acceptance-test-config.yml index 56965ac155621..b9fb62d8f7e11 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-amazon-ads/acceptance-test-config.yml @@ -1,53 +1,65 @@ -# 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-amazon-ads:dev acceptance_tests: - spec: + basic_read: tests: - - spec_path: "integration_tests/spec.json" + - config_path: secrets/config.json + empty_streams: + - name: sponsored_brands_ad_groups + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: sponsored_brands_campaigns + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: sponsored_brands_keywords + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: attribution_report_performance_creative + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: attribution_report_performance_adgroup + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: attribution_report_products + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: attribution_report_performance_campaign + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: sponsored_display_report_stream + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: sponsored_brands_report_stream + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: sponsored_brands_video_report_stream + bypass_reason: "can't populate stream because it requires real ad campaign" + - name: sponsored_products_report_stream + bypass_reason: "can't populate stream because it requires real ad campaign" + timeout_seconds: 2400 + expect_records: + path: integration_tests/expected_records.jsonl + exact_order: no + extra_fields: no + extra_records: no 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" - basic_read: + - config_path: secrets/config.json + full_refresh: tests: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - expect_records: - path: "integration_tests/expected_records.jsonl" - extra_fields: no - exact_order: no - extra_records: no - empty_streams: - - name: "profiles" - - name: "sponsored_brands_ad_groups" - - name: "sponsored_brands_campaigns" - - name: "sponsored_brands_keywords" - - name: "attribution_report_performance_creative" - - name: "attribution_report_performance_adgroup" - - name: "attribution_report_products" - - name: "attribution_report_performance_campaign" - - config_path: "secrets/config_report.json" - configured_catalog_path: "integration_tests/configured_catalog_report.json" - timeout_seconds: 2400 + - config_path: secrets/config.json + configured_catalog_path: integration_tests/configured_catalog.json + - config_path: secrets/config_report.json + configured_catalog_path: integration_tests/configured_catalog_report.json + timeout_seconds: 3600 incremental: tests: - - config_path: "secrets/config_report.json" - configured_catalog_path: "integration_tests/configured_catalog_report.json" - future_state: - future_state_path: "integration_tests/abnormal_state.json" - cursor_paths: - sponsored_products_report_stream: ["1861552880916640", "reportDate"] - timeout_seconds: 2400 - full_refresh: + - config_path: secrets/config_report.json + configured_catalog_path: integration_tests/configured_catalog_report.json + cursor_paths: + sponsored_products_report_stream: + - '1861552880916640' + - reportDate + future_state: + future_state_path: integration_tests/abnormal_state.json + timeout_seconds: 2400 + spec: tests: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - - config_path: "secrets/config_report.json" - configured_catalog_path: "integration_tests/configured_catalog_report.json" - timeout_seconds: 3600 + - spec_path: integration_tests/spec.json +connector_image: airbyte/source-amazon-ads:dev +test_strictness_level: high diff --git a/airbyte-integrations/connectors/source-amazon-ads/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-amazon-ads/integration_tests/expected_records.jsonl index baecd065086b6..c5951a72ca593 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-amazon-ads/integration_tests/expected_records.jsonl @@ -1,3 +1,10 @@ +{"stream": "profiles", "data": {"profileId": 3991703629696934, "countryCode": "CA", "currencyCode": "CAD", "dailyBudget": 999999999.0, "timezone": "America/Los_Angeles", "accountInfo": {"marketplaceStringId": "A2EUQ1WTGCTBG2", "id": "A3LUQZ2NBMFGO4", "type": "seller", "name": "The Airbyte Store", "validPaymentMethod": true}}, "emitted_at": 1674212646241} +{"stream": "profiles", "data": {"profileId": 2935840597082037, "countryCode": "CA", "currencyCode": "CAD", "timezone": "America/Los_Angeles", "accountInfo": {"marketplaceStringId": "A2EUQ1WTGCTBG2", "id": "ENTITY1T4PQ8E0Y1LVJ", "type": "vendor", "name": "test", "validPaymentMethod": false}}, "emitted_at": 1674212646242} +{"stream": "profiles", "data": {"profileId": 3664951271230581, "countryCode": "MX", "currencyCode": "MXN", "dailyBudget": 999999999.0, "timezone": "America/Los_Angeles", "accountInfo": {"marketplaceStringId": "A1AM78C64UM0Y8", "id": "A3LUQZ2NBMFGO4", "type": "seller", "name": "The Airbyte Store", "validPaymentMethod": true}}, "emitted_at": 1674212646242} +{"stream": "profiles", "data": {"profileId": 1861552880916640, "countryCode": "US", "currencyCode": "USD", "timezone": "America/Los_Angeles", "accountInfo": {"marketplaceStringId": "ATVPDKIKX0DER", "id": "ENTITYVFIQ1E6W9INI", "type": "vendor", "name": "Sponsored ads - KDP", "subType": "KDP_AUTHOR", "validPaymentMethod": true}}, "emitted_at": 1674212646242} +{"stream": "profiles", "data": {"profileId": 3312910465837761, "countryCode": "US", "currencyCode": "USD", "dailyBudget": 999999999.0, "timezone": "America/Los_Angeles", "accountInfo": {"marketplaceStringId": "ATVPDKIKX0DER", "id": "A3LUQZ2NBMFGO4", "type": "seller", "name": "The Airbyte Store", "validPaymentMethod": true}}, "emitted_at": 1674212646243} +{"stream": "profiles", "data": {"profileId": 2445745172318948, "countryCode": "US", "currencyCode": "USD", "timezone": "America/Los_Angeles", "accountInfo": {"marketplaceStringId": "ATVPDKIKX0DER", "id": "ENTITY3QRPN1GHC1Q0U", "type": "vendor", "name": "3PTestBrand-A3LUQZ2NBMFGO46750119612846", "validPaymentMethod": true}}, "emitted_at": 1674212646243} +{"stream": "profiles", "data": {"profileId": 3039403378822505, "countryCode": "US", "currencyCode": "USD", "timezone": "America/Los_Angeles", "accountInfo": {"marketplaceStringId": "ATVPDKIKX0DER", "id": "ENTITY2ZP3PPFBG2043", "type": "vendor", "name": "3PTestBrand-A3LUQZ2NBMFGO4215634471126", "validPaymentMethod": true}}, "emitted_at": 1674212646243} {"stream":"sponsored_display_ad_groups","data":{"adGroupId": 239470166910761, "campaignId": 25934734632378, "defaultBid": 0.02, "name": "Ad group - 7/20/2022 15:45:46", "state": "enabled", "bidOptimization": "clicks", "tactic": "T00020", "creativeType": "IMAGE"},"emitted_at":1659020218593} {"stream":"sponsored_display_campaigns","data":{"campaignId":25934734632378,"name":"Campaign - 7/20/2022 15:45:46","tactic":"T00020","startDate":"20240510","state":"enabled","costType":"cpc","budget":1,"budgetType":"daily","deliveryProfile":"as_soon_as_possible"},"emitted_at":1659020217679} {"stream":"sponsored_display_product_ads","data":{"adId":125773733335504,"adGroupId":239470166910761,"campaignId":25934734632378,"asin":"B000BNT390","state":"enabled"},"emitted_at":1659020219604} diff --git a/airbyte-integrations/connectors/source-amazon-ads/integration_tests/spec.json b/airbyte-integrations/connectors/source-amazon-ads/integration_tests/spec.json index 9400deac956e6..2dbf91ddb1744 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/integration_tests/spec.json +++ b/airbyte-integrations/connectors/source-amazon-ads/integration_tests/spec.json @@ -64,6 +64,14 @@ "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", + "default": 3, + "examples": [3, 10], + "order": 8, + "type": "integer" } }, "required": ["client_id", "client_secret", "refresh_token"], diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py index 5810971db1d52..7466c746817a1 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py +++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/source.py @@ -52,6 +52,9 @@ def _validate_and_transform(self, config: Mapping[str, Any]): if not config.get("region"): source_spec = self.spec(logging.getLogger("airbyte")) config["region"] = source_spec.connectionSpecification["properties"]["region"]["default"] + if not config.get("look_back_window"): + source_spec = self.spec(logging.getLogger("airbyte")) + config["look_back_window"] = source_spec.connectionSpecification["properties"]["look_back_window"]["default"] return config def check_connection(self, logger: logging.Logger, config: Mapping[str, Any]) -> Tuple[bool, Optional[Any]]: diff --git a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.yaml b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.yaml index d77e1120f72fb..c91e8263600c7 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.yaml +++ b/airbyte-integrations/connectors/source-amazon-ads/source_amazon_ads/spec.yaml @@ -77,6 +77,15 @@ connectionSpecification: 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 required: - client_id - client_secret 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 bde4c626830dd..888b5165febe4 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 @@ -90,8 +90,6 @@ class ReportStream(BasicAmazonAdsStream, ABC): """ primary_key = ["profileId", "recordType", "reportDate", "recordId"] - # Amazon ads updates the data for the next 3 days - LOOK_BACK_WINDOW = 3 # https://advertising.amazon.com/API/docs/en-us/reporting/v2/faq#what-is-the-available-report-history-for-the-version-2-reporting-api REPORTING_PERIOD = 60 # (Service limits section) @@ -118,6 +116,7 @@ def __init__(self, config: Mapping[str, Any], profiles: List[Profile], authentic self._session = requests.Session() self._model = self._generate_model() self._start_date: Optional[Date] = config.get("start_date") + self._look_back_window: int = config["look_back_window"] # Timeout duration in minutes for Reports. Default is 180 minutes. self.report_wait_timeout: int = get_typed_env("REPORT_WAIT_TIMEOUT", 180) # Maximum retries Airbyte will attempt for fetching report data. Default is 5. @@ -337,7 +336,7 @@ def get_updated_state(self, current_stream_state: Dict[str, Any], latest_data: M def _update_state(self, profile: Profile, report_date: str): report_date = pendulum.from_format(report_date, self.REPORT_DATE_FORMAT).date() - look_back_date = pendulum.today(tz=profile.timezone).date().subtract(days=self.LOOK_BACK_WINDOW - 1) + look_back_date = pendulum.today(tz=profile.timezone).date().subtract(days=self._look_back_window - 1) start_date = self.get_start_date(profile, self._state) updated_state = max(min(report_date, look_back_date), start_date).format(self.REPORT_DATE_FORMAT) diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py index 6cf2617a71c27..2ac66a0eb488a 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py +++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/conftest.py @@ -15,6 +15,7 @@ def config(): "client_secret": "test_client_secret", "refresh_token": "test_refresh", "region": "NA", + "look_back_window": 3 } diff --git a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py index 5a28cf92975e5..2d648396bf474 100644 --- a/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-amazon-ads/unit_tests/test_source.py @@ -68,6 +68,8 @@ def test_check(config_gen): assert len(responses.calls) == 8 assert url_strip_query(responses.calls[7].request.url) == "https://advertising-api.amazon.com/v2/profiles" + assert command_check(source, config_gen(look_back_window=...)) == AirbyteConnectionStatus(status=Status.SUCCEEDED) + @responses.activate def test_source_streams(config): diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/Dockerfile b/airbyte-integrations/connectors/source-amazon-seller-partner/Dockerfile index 5431001a6c31b..649f9f2521652 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/Dockerfile +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/Dockerfile @@ -12,5 +12,6 @@ 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.30 + +LABEL io.airbyte.version=0.2.31 LABEL io.airbyte.name=airbyte/source-amazon-seller-partner diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/README.md b/airbyte-integrations/connectors/source-amazon-seller-partner/README.md index 97ab0ed69a220..3f19a0c98a5ad 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/README.md +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/README.md @@ -77,7 +77,7 @@ docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integrat 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] +pip install .'[tests]' ``` ### Unit Tests To run unit tests locally, from the connector directory run: diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/acceptance-test-config.yml b/airbyte-integrations/connectors/source-amazon-seller-partner/acceptance-test-config.yml index 135f5de1a6b42..9ff79ab2c2339 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/acceptance-test-config.yml @@ -1,100 +1,127 @@ connector_image: airbyte/source-amazon-seller-partner:dev -tests: +acceptance_tests: spec: - - spec_path: "integration_tests/spec.json" + tests: + - spec_path: "integration_tests/spec.json" + backward_compatibility_tests_config: + disable_for_version: "0.2.30" connection: - # - config_path: "secrets/config.json" - # status: "succeed" - # timeout_seconds: 60 - - config_path: "integration_tests/invalid_config.json" - status: "failed" - timeout_seconds: 60 + tests: + - config_path: "secrets/config.json" + status: "succeed" + timeout_seconds: 60 + - config_path: "integration_tests/invalid_config.json" + status: "failed" + timeout_seconds: 60 discovery: - - config_path: "secrets/config.json" -# TODO: uncomment when at least one record exist -# basic_read: -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog.json" -# empty_streams: -# [ -# "Orders", -# "GET_FLAT_FILE_ALL_ORDERS_DATA_BY_ORDER_DATE_GENERAL", -# "GET_MERCHANT_LISTINGS_ALL_DATA", -# "GET_FBA_INVENTORY_AGED_DATA", -# "GET_AMAZON_FULFILLED_SHIPMENTS_DATA_GENERAL", -# "GET_FLAT_FILE_OPEN_LISTINGS_DATA", -# "GET_FBA_FULFILLMENT_REMOVAL_ORDER_DETAIL_DATA", -# "GET_FBA_FULFILLMENT_REMOVAL_SHIPMENT_DETAIL_DATA", -# "GET_VENDOR_INVENTORY_HEALTH_AND_PLANNING_REPORT", -# "VendorDirectFulfillmentShipping" -# ] -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_brand_analytics_alternate_purchase.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_brand_analytics_item_comparison.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_brand_analytics_market_basket.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_brand_analytics_repeat_purchase.json.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_brand_analytics_search_terms.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_fba_fulfillment_customer_shipment_replacement_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_browse_tree_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_restock_inventory.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_estimated_fba_fees_txt_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_fulfillment_current_inventory_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_fulfillment_customer_shipment_promotion_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_fulfillment_inventory_adjustments_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_fulfillment_inventory_receipts_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_fulfillment_inventory_summary_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_fulfillment_monthly_inventory_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_myi_unsuppressed_inventory_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_sns_forecast_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_sns_performance_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_flat_file_archived_orders_data_by_order_date.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_flat_file_returns_data_by_return_date.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_merchant_cancelled_listings_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_merchant_listings_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_merchant_listings_data_back_compat.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_merchants_listings_fyp_report.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_merchant_listings_inactive_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_stranded_inventory_ui_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_xml_all_orders_data_by_order_date_general.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_ledger_detail_view_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_fba_inventory_planning_data.json" -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog_get_ledger_summary_view_data.json" -# TODO: uncomment when Orders (or any other incremental) stream is filled with data -# incremental: -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog.json" -# future_state_path: "integration_tests/future_state.json" -# cursor_paths: -# Orders: ["LastUpdateDate"] -# full_refresh: -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog.json" + tests: + - config_path: "secrets/config.json" + backward_compatibility_tests_config: + disable_for_version: "0.2.30" + basic_read: + tests: + - config_path: "secrets/config.json" + timeout_seconds: 2400 + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: no + exact_order: no + extra_records: yes + # TODO: Add records for empty streams - https://github.com/airbytehq/airbyte/issues/21555 + empty_streams: + - name: Orders + bypass_reason: "no records" + - name: GET_FLAT_FILE_ALL_ORDERS_DATA_BY_ORDER_DATE_GENERAL + bypass_reason: "no records" + - name: GET_AMAZON_FULFILLED_SHIPMENTS_DATA_GENERAL + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_REMOVAL_ORDER_DETAIL_DATA + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_REMOVAL_SHIPMENT_DETAIL_DATA + bypass_reason: "no records" + - name: GET_SELLER_FEEDBACK_DATA + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_CUSTOMER_SHIPMENT_REPLACEMENT_DATA + bypass_reason: "no records" + - name: GET_RESTOCK_INVENTORY_RECOMMENDATIONS_REPORT + bypass_reason: "no records" + - name: GET_LEDGER_DETAIL_VIEW_DATA + bypass_reason: "no records" + - name: GET_AFN_INVENTORY_DATA_BY_COUNTRY + bypass_reason: "no records" + - name: GET_FLAT_FILE_RETURNS_DATA_BY_RETURN_DATE + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_MONTHLY_INVENTORY_DATA + bypass_reason: "no records" + - name: GET_VENDOR_SALES_REPORT + bypass_reason: "no records" + - name: GET_BRAND_ANALYTICS_MARKET_BASKET_REPORT + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA + bypass_reason: "no records" + - name: GET_FBA_SNS_FORECAST_DATA + bypass_reason: "no records" + - name: GET_V2_SETTLEMENT_REPORT_DATA_FLAT_FILE + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_INVENTORY_SUMMARY_DATA + bypass_reason: "no records" + - name: GET_BRAND_ANALYTICS_ITEM_COMPARISON_REPORT + bypass_reason: "no records" + - name: GET_AFN_INVENTORY_DATA + bypass_reason: "no records" + - name: GET_MERCHANT_CANCELLED_LISTINGS_DATA + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_CUSTOMER_SHIPMENT_PROMOTION_DATA + bypass_reason: "no records" + - name: GET_LEDGER_SUMMARY_VIEW_DATA + bypass_reason: "no records" + - name: GET_BRAND_ANALYTICS_ALTERNATE_PURCHASE_REPORT + bypass_reason: "no records" + - name: GET_BRAND_ANALYTICS_SEARCH_TERMS_REPORT + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_INVENTORY_ADJUSTMENTS_DATA + bypass_reason: "no records" + - name: GET_MERCHANT_LISTINGS_DATA_BACK_COMPAT + bypass_reason: "no records" + - name: GET_BRAND_ANALYTICS_REPEAT_PURCHASE_REPORT + bypass_reason: "no records" + - name: VendorDirectFulfillmentShipping + bypass_reason: "no records" + - name: GET_FLAT_FILE_ARCHIVED_ORDERS_DATA_BY_ORDER_DATE + bypass_reason: "no records" + - name: GET_VENDOR_INVENTORY_REPORT + bypass_reason: "no records" + - name: GET_FBA_SNS_PERFORMANCE_DATA + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_CURRENT_INVENTORY_DATA + bypass_reason: "no records" + - name: GET_FBA_ESTIMATED_FBA_FEES_TXT_DATA + bypass_reason: "no records" + - name: GET_FBA_INVENTORY_PLANNING_DATA + bypass_reason: "no records" + - name: GET_FBA_STORAGE_FEE_CHARGES_DATA + bypass_reason: "no records" + - name: GET_FLAT_FILE_ALL_ORDERS_DATA_BY_LAST_UPDATE_GENERAL + bypass_reason: "no records" + - name: GET_SALES_AND_TRAFFIC_REPORT + bypass_reason: "no records" + - name: GET_FBA_MYI_UNSUPPRESSED_INVENTORY_DATA + bypass_reason: "no records" + - name: GET_STRANDED_INVENTORY_UI_DATA + bypass_reason: "no records" + - name: GET_FBA_FULFILLMENT_INVENTORY_RECEIPTS_DATA + bypass_reason: "no records" + - name: GET_XML_ALL_ORDERS_DATA_BY_ORDER_DATE_GENERAL + bypass_reason: "no records" + - name: ListFinancialEvents + bypass_reason: "no records" + incremental: + tests: + - config_path: "secrets/config_old_data.json" + configured_catalog_path: "integration_tests/configured_catalog_incremental.json" + future_state: + future_state_path: "integration_tests/future_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-amazon-seller-partner/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog.json index 5c897b44e0b2d..2246774c2256a 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog.json @@ -1,26 +1,5 @@ { "streams": [ - { - "stream": { - "name": "Orders", - "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["LastUpdateDate"] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append", - "cursor_field": ["LastUpdateDate"] - }, - { - "stream": { - "name": "GET_FLAT_FILE_ALL_ORDERS_DATA_BY_ORDER_DATE_GENERAL", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, { "stream": { "name": "GET_MERCHANT_LISTINGS_ALL_DATA", @@ -32,16 +11,7 @@ }, { "stream": { - "name": "GET_FBA_INVENTORY_AGED_DATA", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"] - }, - "sync_mode": "full_refresh", - "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "GET_AMAZON_FULFILLED_SHIPMENTS_DATA_GENERAL", + "name": "GET_FLAT_FILE_OPEN_LISTINGS_DATA", "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, @@ -50,7 +20,7 @@ }, { "stream": { - "name": "GET_FLAT_FILE_OPEN_LISTINGS_DATA", + "name": "GET_XML_BROWSE_TREE_DATA", "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, @@ -59,7 +29,7 @@ }, { "stream": { - "name": "GET_FBA_FULFILLMENT_REMOVAL_ORDER_DETAIL_DATA", + "name": "GET_MERCHANTS_LISTINGS_FYP_REPORT", "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, @@ -68,7 +38,7 @@ }, { "stream": { - "name": "GET_FBA_FULFILLMENT_REMOVAL_SHIPMENT_DETAIL_DATA", + "name": "ListFinancialEventGroups", "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, @@ -77,7 +47,7 @@ }, { "stream": { - "name": "GET_VENDOR_INVENTORY_HEALTH_AND_PLANNING_REPORT", + "name": "GET_MERCHANT_LISTINGS_DATA", "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, @@ -86,24 +56,12 @@ }, { "stream": { - "name": "VendorDirectFulfillmentShipping", + "name": "GET_MERCHANT_LISTINGS_INACTIVE_DATA", "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" - }, - { - "stream": { - "name": "GET_SELLER_FEEDBACK_DATA", - "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["Date"] - }, - "sync_mode": "incremental", - "destination_sync_mode": "append", - "cursor_field": ["Date"] } ] } diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_browse_tree_data.json b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_browse_tree_data.json index ae500e45eb328..1ce01e2998e3b 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_browse_tree_data.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_browse_tree_data.json @@ -3,100 +3,7 @@ { "stream": { "name": "GET_XML_BROWSE_TREE_DATA", - "json_schema": { - "title": "XML Browse Tree Data", - "type": "object", - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "browseNodeId": { - "type": ["string"] - }, - "browseNodeAttributes": { - "type": ["null", "object"], - "properties": { - "attribute": { - "type": ["array"], - "items": { - "type": ["null", "object"] - }, - "properties": { - "name": { - "type": ["null", "string"] - }, - "text": { - "type": ["null", "string"] - } - } - }, - "count": { - "type": ["null", "string"] - } - } - }, - "browseNodeName": { - "type": ["null", "string"] - }, - "browseNodeStoreContextName": { - "type": ["null", "string"] - }, - "browsePathById": { - "type": ["null", "string"] - }, - "browsePathByName": { - "type": ["null", "string"] - }, - "hasChildren": { - "type": ["string"] - }, - "childNodes": { - "type": ["null", "object"], - "properties": { - "count": { - "type": ["null", "string"] - }, - "id": { - "type": ["array"], - "items": { - "type": ["null", "string"] - } - } - } - }, - "productTypeDefinitions": { - "type": ["null", "string"] - }, - "refinementsInformation": { - "type": ["array"], - "items": { - "type": ["null", "object"] - }, - "properties": { - "refinementName": { - "type": ["object"], - "properties": { - "refinementField": { - "type": ["null", "object"], - "properties": { - "acceptedValues": { - "type": ["null", "string"] - }, - "hasModifier": { - "type": ["null", "string"] - }, - "modifiers": { - "type": ["null", "string"] - }, - "refinementAttribute": { - "type": ["null", "string"] - } - } - } - } - } - } - } - } - }, + "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, "sync_mode": "full_refresh", diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_fba_fulfillment_customer_shipment_replacement_data.json b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_fba_fulfillment_customer_shipment_replacement_data.json index f4134321139d3..8c42293972eb8 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_fba_fulfillment_customer_shipment_replacement_data.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_fba_fulfillment_customer_shipment_replacement_data.json @@ -3,60 +3,7 @@ { "stream": { "name": "GET_FBA_FULFILLMENT_CUSTOMER_SHIPMENT_REPLACEMENT_DATA", - "json_schema": { - "title": "FBA Fulfillment Customer Shipment Replacement Data", - "description": "FBA Fulfillment Customer Shipment Replacement Data Reports", - "type": "object", - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "shipment-date": { - "title": "Date", - "description": "DD-MON-YYYY. Date of free replacement shipment", - "type": ["null", "string"], - "format": "date-time" - }, - "sku": { - "title": "Merchant SKU", - "description": "Seller's item identifier", - "type": ["null", "string"] - }, - "asin": { - "title": "ASIN", - "description": "Amazon Standard Inventory Number", - "type": ["null", "string"] - }, - "fulfillment-center-id": { - "title": "Warehouse ID", - "description": "Fulfillment center shipping this unit.", - "type": ["null", "string"] - }, - "original-fulfillment-center-id": { - "title": "Original Warehouse ID", - "description": "Original fulfillment center shipping free replaced item.", - "type": ["null", "string"] - }, - "quantity": { - "title": "Quantity", - "description": "Units shipped in replacement shipment", - "type": ["null", "string"] - }, - "replacement-reason-code": { - "title": "Replacement Reason Code", - "description": "Reason for replacement", - "type": ["null", "string"] - }, - "replacement-customer-order-id": { - "title": "Replacement Customer Order Id", - "description": "Order ID of the replacement order", - "type": ["null", "string"] - }, - "original-amazon-order-id": { - "title": "Original Customer Order ID", - "description": "Order ID of original shipment", - "type": ["null", "string"] - } - } - }, + "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, "sync_mode": "full_refresh", diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_incremental.json b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_incremental.json new file mode 100644 index 0000000000000..9f2a3465ecdea --- /dev/null +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_incremental.json @@ -0,0 +1,16 @@ +{ + "streams": [ + { + "stream": { + "name": "Orders", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["LastUpdateDate"] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["LastUpdateDate"] + } + ] +} diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_restock_inventory.json b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_restock_inventory.json index 35fa951e3dfa6..7998d2cc92c4d 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_restock_inventory.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/configured_catalog_restock_inventory.json @@ -3,101 +3,7 @@ { "stream": { "name": "GET_RESTOCK_INVENTORY_RECOMMENDATIONS_REPORT", - "json_schema": { - "title": "Restock Inventory Report", - "description": "Restock Inventory Report", - "type": "object", - "$schema": "http://json-schema.org/draft-07/schema#", - "properties": { - "Country": { - "type": ["null", "string"] - }, - "Product Name": { - "type": ["null", "string"] - }, - "FNSKU": { - "type": ["null", "string"] - }, - "Merchant SKU": { - "type": ["null", "string"] - }, - "ASIN": { - "type": ["null", "string"] - }, - "Condition": { - "type": ["null", "string"] - }, - "Supplier": { - "type": ["null", "string"] - }, - "Supplier part no.": { - "type": ["null", "string"] - }, - "Currency code": { - "type": ["null", "string"] - }, - "Price": { - "type": ["null", "string"] - }, - "Sales last 30 days": { - "type": ["null", "string"] - }, - "Units Sold Last 30 Days": { - "type": ["null", "string"] - }, - "Total Units": { - "type": ["null", "string"] - }, - "Inbound": { - "type": ["null", "string"] - }, - "Available": { - "type": ["null", "string"] - }, - "FC transfer": { - "type": ["null", "string"] - }, - "FC Processing": { - "type": ["null", "string"] - }, - "Customer Order": { - "type": ["null", "string"] - }, - "Unfulfillable": { - "type": ["null", "string"] - }, - "Working": { - "type": ["null", "string"] - }, - "Shipped": { - "type": ["null", "string"] - }, - "Receiving": { - "type": ["null", "string"] - }, - "Fulfilled by": { - "type": ["null", "string"] - }, - "Total Days of Supply (including units from open shipments)": { - "type": ["null", "string"] - }, - "Days of Supply at Amazon Fulfillment Network": { - "type": ["null", "string"] - }, - "Alert": { - "type": ["null", "string"] - }, - "Recommended replenishment qty": { - "type": ["null", "string"] - }, - "Recommended ship date": { - "type": ["null", "string"] - }, - "Recommended action": { - "type": ["null", "string"] - } - } - }, + "json_schema": {}, "supported_sync_modes": ["full_refresh"] }, "sync_mode": "full_refresh", diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/expected_records.jsonl new file mode 100644 index 0000000000000..9d1913d4e8ce0 --- /dev/null +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/expected_records.jsonl @@ -0,0 +1,40 @@ +{"stream": "GET_MERCHANT_LISTINGS_ALL_DATA", "data": {"item-name": "House Foods, Tofu Shirataki, Spaghetti Shaped Tofu, 8 oz", "item-description": "", "listing-id": "0705Z8IQ8GS", "seller-sku": "0R-4KDA-Z2U8", "price": "5", "quantity": "983", "open-date": "2022-07-05 08:09:12 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B000VHYM2E", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B000VHYM2E", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template", "status": "Inactive"}, "emitted_at": 1673447236350} +{"stream": "GET_MERCHANT_LISTINGS_ALL_DATA", "data": {"item-name": "Beyond Meat Beyond Burger Plant-Based Patties 2 pk, 8 oz (Frozen)", "item-description": "", "listing-id": "0708ZF4UYHW", "seller-sku": "2J-D6V7-C8XI", "price": "7", "quantity": "922", "open-date": "2022-07-08 03:50:23 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B074K5MDLW", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B074K5MDLW", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template", "status": "Inactive"}, "emitted_at": 1673447236353} +{"stream": "GET_MERCHANT_LISTINGS_ALL_DATA", "data": {"item-name": "GiftBox", "item-description": "", "listing-id": "0711ZJWAW1J", "seller-sku": "G3-8N7Y-L93I", "price": "6", "quantity": "1000", "open-date": "2022-07-11 01:48:47 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B0B68NBQ1Y", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B0B68NBQ1Y", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template", "status": "Inactive"}, "emitted_at": 1673447236353} +{"stream": "GET_MERCHANT_LISTINGS_ALL_DATA", "data": {"item-name": "GiftBox", "item-description": "Monitor and optimize the GiftBox to reward your customers and increase the average order value", "listing-id": "0711ZJUYPNS", "seller-sku": "I0-RALD-N1UR", "price": "5", "quantity": "0", "open-date": "2022-07-11 01:34:18 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B0B68NBQ1Y", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B0B68NBQ1Y", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template", "status": "Inactive"}, "emitted_at": 1673447236354} +{"stream": "GET_MERCHANT_LISTINGS_ALL_DATA", "data": {"item-name": "Beyond Meat Beyond Burger Plant-Based Patties 2 pk, 8 oz (Frozen)", "item-description": "", "listing-id": "0711ZJW1CW7", "seller-sku": "M6-KYAA-V7O7", "price": "10", "quantity": "999999", "open-date": "2022-07-11 01:16:54 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B074K5MDLW", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B074K5MDLW", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template", "status": "Inactive"}, "emitted_at": 1673447236354} +{"stream": "GET_MERCHANT_LISTINGS_ALL_DATA", "data": {"item-name": "House Foods, Organic Firm Tofu, 14 oz", "item-description": "", "listing-id": "0705Z8HWWAY", "seller-sku": "MP-V4RG-EDEY", "price": "5", "quantity": "1518", "open-date": "2022-07-05 08:00:10 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "1", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B000VHRNUW", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B000VHRNUW", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template", "status": "Inactive"}, "emitted_at": 1673447236354} +{"stream": "GET_FLAT_FILE_OPEN_LISTINGS_DATA", "data": {"sku": "I0-RALD-N1UR", "asin": "B0B68NBQ1Y", "price": "5.00", "quantity": "0", "Business Price": "6.0", "Quantity Price Type": "", "Quantity Lower Bound 1": "", "Quantity Price 1": "", "Quantity Lower Bound 2": "", "Quantity Price 2": "", "Quantity Lower Bound 3": "", "Quantity Price 3": "", "Quantity Lower Bound 4": "", "Quantity Price 4": "", "Quantity Lower Bound 5": "", "Quantity Price 5": "", "Progressive Price Type": "", "Progressive Lower Bound 1": "", "Progressive Price 1": "", "Progressive Lower Bound 2": "", "Progressive Price 2": "", "Progressive Lower Bound 3": "", "Progressive Price 3": ""}, "emitted_at": 1673447298434} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718301", "browseNodeAttributes": {"count": "0"}, "browseNodeName": "Car Polishes & Waxes", "browseNodeStoreContextName": "Automotive Polish, Scratch Removers & Waxes", "browsePathById": "15684181,15690151,15718271,15718291,15718301", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Polishes & Waxes", "hasChildren": "true", "childNodes": {"count": "3", "id": ["19351186011", "15718311", "15718371"]}, "productTypeDefinitions": "ABRASIVES,SURFACE_PROTECTION_WAX,CLEANING_AGENT", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762672} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "19351186011", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-bug-sap-and-tar-removers"}]}, "browseNodeName": "Bug, Sap & Tar Removers", "browseNodeStoreContextName": "Automotive Bug, Sap & Tar Removers", "browsePathById": "15684181,15690151,15718271,15718291,15718301,19351186011", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Polishes & Waxes,Bug, Sap & Tar Removers", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "CLEANING_AGENT", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762673} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718311", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-metal-cleaners"}]}, "browseNodeName": "Chrome & Metal Polishes", "browseNodeStoreContextName": "Chrome & Metal Polishes", "browsePathById": "15684181,15690151,15718271,15718291,15718301,15718311", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Polishes & Waxes,Chrome & Metal Polishes", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "ABRASIVES", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762673} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718371", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "car-waxes"}]}, "browseNodeName": "Waxes", "browseNodeStoreContextName": "Waxes", "browsePathById": "15684181,15690151,15718271,15718291,15718301,15718371", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Polishes & Waxes,Waxes", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "SURFACE_PROTECTION_WAX", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762673} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718381", "browseNodeAttributes": {"count": "0"}, "browseNodeName": "Car Wash Equipment", "browseNodeStoreContextName": "Car Wash Equipment", "browsePathById": "15684181,15690151,15718271,15718291,15718381", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Wash Equipment", "hasChildren": "true", "childNodes": {"count": "7", "id": ["15718391", "15718401", "15718451", "15718411", "15718421", "15718431", "15718441"]}, "productTypeDefinitions": "SQUEEGEE,AUTO_ACCESSORY,CLEANING_AGENT", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762673} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718391", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "car-washing-applicators"}]}, "browseNodeName": "Applicators", "browseNodeStoreContextName": "Car Washing Applicators", "browsePathById": "15684181,15690151,15718271,15718291,15718381,15718391", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Wash Equipment,Applicators", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762674} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718401", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-buckets-grit-guards-and-kits"}]}, "browseNodeName": "Buckets, Grit Guards & Kits", "browseNodeStoreContextName": "Automotive Buckets, Grit Guards & Kits", "browsePathById": "15684181,15690151,15718271,15718291,15718381,15718401", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Wash Equipment,Buckets, Grit Guards & Kits", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762674} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718451", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-exterior-cleaners"}]}, "browseNodeName": "Cleaners", "browseNodeStoreContextName": "Cleaners", "browsePathById": "15684181,15690151,15718271,15718291,15718381,15718451", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Wash Equipment,Cleaners", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "CLEANING_AGENT", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762674} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718411", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-washing-nozzles"}]}, "browseNodeName": "Nozzles & Hose Attachments", "browseNodeStoreContextName": "Car Washing Nozzles & Hose Attachments", "browsePathById": "15684181,15690151,15718271,15718291,15718381,15718411", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Wash Equipment,Nozzles & Hose Attachments", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762674} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718421", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-cleaning-sponges-and-mitts"}]}, "browseNodeName": "Sponges & Mitts", "browseNodeStoreContextName": "Car Washing Sponges & Mitts", "browsePathById": "15684181,15690151,15718271,15718291,15718381,15718421", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Wash Equipment,Sponges & Mitts", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762674} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718431", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "waterless-automotive-wash-treatments"}]}, "browseNodeName": "Waterless Wash Treatments", "browseNodeStoreContextName": "Waterless Car Washing Treatments", "browsePathById": "15684181,15690151,15718271,15718291,15718381,15718431", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Wash Equipment,Waterless Wash Treatments", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762675} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718441", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "windshield-squeegees"}]}, "browseNodeName": "Windshield Squeegees", "browseNodeStoreContextName": "Car Washing Windshield Squeegees", "browsePathById": "15684181,15690151,15718271,15718291,15718381,15718441", "browsePathByName": "Automotive,Car Care,Exterior Care,Car Wash Equipment,Windshield Squeegees", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "SQUEEGEE", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762675} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718461", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-roof-and-convertible-top-cleaners"}]}, "browseNodeName": "Convertible Top Cleaners", "browseNodeStoreContextName": "Convertible Top Cleaners", "browsePathById": "15684181,15690151,15718271,15718291,15718461", "browsePathByName": "Automotive,Car Care,Exterior Care,Convertible Top Cleaners", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "CLEANING_AGENT", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762675} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718471", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-polishing-clays"}]}, "browseNodeName": "Polishing & Rubbing Compounds", "browseNodeStoreContextName": "Polishing & Rubbing Compounds", "browsePathById": "15684181,15690151,15718271,15718291,15718471", "browsePathByName": "Automotive,Car Care,Exterior Care,Polishing & Rubbing Compounds", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "ABRASIVES", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762675} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718481", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-polishing-and-waxing-kits"}]}, "browseNodeName": "Polishing & Waxing Kits", "browseNodeStoreContextName": "Polishing & Waxing Kits", "browsePathById": "15684181,15690151,15718271,15718291,15718481", "browsePathByName": "Automotive,Car Care,Exterior Care,Polishing & Waxing Kits", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762676} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "155340011", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-cleaning-squeegee-blades"}]}, "browseNodeName": "Water Blades", "browseNodeStoreContextName": "Cleaning Water Squeegee Blades", "browsePathById": "15684181,15690151,15718271,15718291,155340011", "browsePathByName": "Automotive,Car Care,Exterior Care,Water Blades", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762676} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "21557050011", "browseNodeAttributes": {"count": "0"}, "browseNodeName": "Fillers, Adhesives & Sealants", "browseNodeStoreContextName": "Automotive Fillers, Adhesives & Sealants", "browsePathById": "15684181,15690151,15718271,21557050011", "browsePathByName": "Automotive,Car Care,Fillers, Adhesives & Sealants", "hasChildren": "true", "childNodes": {"count": "3", "id": ["15718921", "3097823011", "15718491"]}, "productTypeDefinitions": "SEALANT,AUTO_ACCESSORY,BONDING_ADHESIVES", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762676} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718921", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-adhesives"}]}, "browseNodeName": "Adhesives", "browseNodeStoreContextName": "Body Repair & Restoration Adhesives", "browsePathById": "15684181,15690151,15718271,21557050011,15718921", "browsePathByName": "Automotive,Car Care,Fillers, Adhesives & Sealants,Adhesives", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "BONDING_ADHESIVES", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762676} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "3097823011", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-body-repair-putties"}]}, "browseNodeName": "Putty", "browseNodeStoreContextName": "Body Repair Putty", "browsePathById": "15684181,15690151,15718271,21557050011,3097823011", "browsePathByName": "Automotive,Car Care,Fillers, Adhesives & Sealants,Putty", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762676} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15718491", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-sealants"}]}, "browseNodeName": "Sealants", "browseNodeStoreContextName": "Automotive Sealants", "browsePathById": "15684181,15690151,15718271,21557050011,15718491", "browsePathByName": "Automotive,Car Care,Fillers, Adhesives & Sealants,Sealants", "hasChildren": "true", "childNodes": {"count": "5", "id": ["15719581", "15709931", "15719601", "15719611", "15719631"]}, "productTypeDefinitions": "SEALANT", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762676} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15719581", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-liquid-gasket-makers"}]}, "browseNodeName": "Gasket", "browseNodeStoreContextName": "Gasket Sealers", "browsePathById": "15684181,15690151,15718271,21557050011,15718491,15719581", "browsePathByName": "Automotive,Car Care,Fillers, Adhesives & Sealants,Sealants,Gasket", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "AUTO_ACCESSORY", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762676} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15709931", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-paint-sealers"}]}, "browseNodeName": "Paint", "browseNodeStoreContextName": "Automotive Sealers", "browsePathById": "15684181,15690151,15718271,21557050011,15718491,15709931", "browsePathByName": "Automotive,Car Care,Fillers, Adhesives & Sealants,Sealants,Paint", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "SEALANT", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762677} +{"stream": "GET_XML_BROWSE_TREE_DATA", "data": {"browseNodeId": "15719601", "browseNodeAttributes": {"count": "1", "attribute": [{"name": "item_type_keyword", "text": "automotive-radiator-sealers"}]}, "browseNodeName": "Radiator", "browseNodeStoreContextName": "Radiator Sealers", "browsePathById": "15684181,15690151,15718271,21557050011,15718491,15719601", "browsePathByName": "Automotive,Car Care,Fillers, Adhesives & Sealants,Sealants,Radiator", "hasChildren": "false", "childNodes": {"count": "0"}, "productTypeDefinitions": "SEALANT", "refinementsInformation": {"count": "0"}}, "emitted_at": 1673447762677} +{"stream": "GET_MERCHANTS_LISTINGS_FYP_REPORT", "data": {"Status": "Search Suppressed", "Reason": "Missing info", "SKU": "G3-8N7Y-L93I", "ASIN": "B0B68NBQ1Y", "Product name": "GiftBox", "Condition": "11", "Status Change Date": "Jul 29, 2022", "Issue Description": "'[brand]' is required but not supplied."}, "emitted_at": 1673450133231} +{"stream": "GET_MERCHANTS_LISTINGS_FYP_REPORT", "data": {"Status": "Search Suppressed", "Reason": "Missing info", "SKU": "I0-RALD-N1UR", "ASIN": "B0B68NBQ1Y", "Product name": "GiftBox", "Condition": "11", "Status Change Date": "Jul 29, 2022", "Issue Description": "'[brand]' is required but not supplied."}, "emitted_at": 1673450133232} +{"stream": "ListFinancialEventGroups", "data": {"FinancialEventGroupId": "biM60XKT9qekhLpYdH9-ktjaaCDakRl5bhkXarpufys", "ProcessingStatus": "Open", "OriginalTotal": {"CurrencyCode": "USD", "CurrencyAmount": 0.0}, "BeginningBalance": {"CurrencyCode": "USD", "CurrencyAmount": -58.86}, "FinancialEventGroupStart": "2022-08-08T22:51:31Z"}, "emitted_at": 1673450203988} +{"stream": "GET_MERCHANT_LISTINGS_DATA", "data": {"item-name": "GiftBox", "item-description": "Monitor and optimize the GiftBox to reward your customers and increase the average order value", "listing-id": "0711ZJUYPNS", "seller-sku": "I0-RALD-N1UR", "price": "5", "quantity": "0", "open-date": "2022-07-11 01:34:18 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B0B68NBQ1Y", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B0B68NBQ1Y", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "Business Price": "6.0", "Quantity Price Type": "", "Quantity Lower Bound 1": "", "Quantity Price 1": "", "Quantity Lower Bound 2": "", "Quantity Price 2": "", "Quantity Lower Bound 3": "", "Quantity Price 3": "", "Quantity Lower Bound 4": "", "Quantity Price 4": "", "Quantity Lower Bound 5": "", "Quantity Price 5": "", "merchant-shipping-group": "Migrated Template", "Progressive Price Type": "", "Progressive Lower Bound 1": "", "Progressive Price 1": "", "Progressive Lower Bound 2": "", "Progressive Price 2": "", "Progressive Lower Bound 3": "", "Progressive Price 3": ""}, "emitted_at": 1673450377952} +{"stream": "GET_MERCHANT_LISTINGS_INACTIVE_DATA", "data": {"item-name": "House Foods, Tofu Shirataki, Spaghetti Shaped Tofu, 8 oz", "item-description": "", "listing-id": "0705Z8IQ8GS", "seller-sku": "0R-4KDA-Z2U8", "price": "5", "quantity": "983", "open-date": "2022-07-05 08:09:12 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B000VHYM2E", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B000VHYM2E", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template"}, "emitted_at": 1673450467120} +{"stream": "GET_MERCHANT_LISTINGS_INACTIVE_DATA", "data": {"item-name": "Beyond Meat Beyond Burger Plant-Based Patties 2 pk, 8 oz (Frozen)", "item-description": "", "listing-id": "0708ZF4UYHW", "seller-sku": "2J-D6V7-C8XI", "price": "7", "quantity": "922", "open-date": "2022-07-08 03:50:23 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B074K5MDLW", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B074K5MDLW", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template"}, "emitted_at": 1673450467121} +{"stream": "GET_MERCHANT_LISTINGS_INACTIVE_DATA", "data": {"item-name": "GiftBox", "item-description": "", "listing-id": "0711ZJWAW1J", "seller-sku": "G3-8N7Y-L93I", "price": "6", "quantity": "1000", "open-date": "2022-07-11 01:48:47 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B0B68NBQ1Y", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B0B68NBQ1Y", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template"}, "emitted_at": 1673450467122} +{"stream": "GET_MERCHANT_LISTINGS_INACTIVE_DATA", "data": {"item-name": "GiftBox", "item-description": "Monitor and optimize the GiftBox to reward your customers and increase the average order value", "listing-id": "0711ZJUYPNS", "seller-sku": "I0-RALD-N1UR", "price": "5", "quantity": "0", "open-date": "2022-07-11 01:34:18 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B0B68NBQ1Y", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B0B68NBQ1Y", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template"}, "emitted_at": 1673450467122} +{"stream": "GET_MERCHANT_LISTINGS_INACTIVE_DATA", "data": {"item-name": "Beyond Meat Beyond Burger Plant-Based Patties 2 pk, 8 oz (Frozen)", "item-description": "", "listing-id": "0711ZJW1CW7", "seller-sku": "M6-KYAA-V7O7", "price": "10", "quantity": "999999", "open-date": "2022-07-11 01:16:54 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "11", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B074K5MDLW", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B074K5MDLW", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template"}, "emitted_at": 1673450467123} +{"stream": "GET_MERCHANT_LISTINGS_INACTIVE_DATA", "data": {"item-name": "House Foods, Organic Firm Tofu, 14 oz", "item-description": "", "listing-id": "0705Z8HWWAY", "seller-sku": "MP-V4RG-EDEY", "price": "5", "quantity": "1518", "open-date": "2022-07-05 08:00:10 PDT", "image-url": "", "item-is-marketplace": "y", "product-id-type": "1", "zshop-shipping-fee": "", "item-note": "", "item-condition": "1", "zshop-category1": "", "zshop-browse-path": "", "zshop-storefront-feature": "", "asin1": "B000VHRNUW", "asin2": "", "asin3": "", "will-ship-internationally": "", "expedited-shipping": "", "zshop-boldface": "", "product-id": "B000VHRNUW", "bid-for-featured-placement": "", "add-delete": "", "pending-quantity": "0", "fulfillment-channel": "DEFAULT", "merchant-shipping-group": "Migrated Template"}, "emitted_at": 1673450467123} diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/future_state.json b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/future_state.json index 2676de94b9bff..f7a73ecd7d11b 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/future_state.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/future_state.json @@ -1,5 +1,13 @@ -{ - "Orders": { - "LastUpdateDate": "2121-07-01T00:00:00Z" - } -} +[ + { + "type": "STREAM", + "stream": { + "stream_state": { + "LastUpdateDate": "2121-07-01T00:00:00Z" + }, + "stream_descriptor": { + "name": "Orders" + } + } + } + ] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/spec.json b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/spec.json index 8b0b764c12a0b..367e5695099dd 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/spec.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/integration_tests/spec.json @@ -78,8 +78,9 @@ "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": 30, - "examples": ["30", "365"], + "default": 90, + "maximum": 90, + "examples": ["1", "10", "30", "60", "90"], "order": 10, "type": "integer" }, diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/GET_MERCHANT_LISTINGS_ALL_DATA.json b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/GET_MERCHANT_LISTINGS_ALL_DATA.json index 086973b8f6bf4..c4d4459eb0995 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/GET_MERCHANT_LISTINGS_ALL_DATA.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/GET_MERCHANT_LISTINGS_ALL_DATA.json @@ -17,10 +17,10 @@ "type": ["null", "string"] }, "price": { - "type": ["null", "number"] + "type": ["null", "string"] }, "quantity": { - "type": ["null", "number"] + "type": ["null", "string"] }, "open-date": { "type": ["null", "string"] @@ -80,7 +80,7 @@ "type": ["null", "string"] }, "pending-quantity": { - "type": ["null", "number"] + "type": ["null", "string"] }, "fulfillment-channel": { "type": ["null", "string"] diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/GET_XML_BROWSE_TREE_DATA.json b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/GET_XML_BROWSE_TREE_DATA.json index 1b28d79be705f..be41d2108a457 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/GET_XML_BROWSE_TREE_DATA.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/GET_XML_BROWSE_TREE_DATA.json @@ -61,13 +61,13 @@ "type": ["null", "string"] }, "refinementsInformation": { - "type": ["array"], - "items": { - "type": ["null", "object"] - }, + "type": ["null", "object"], "properties": { + "count": { + "type": ["null", "string"] + }, "refinementName": { - "type": ["object"], + "type": ["null", "object"], "properties": { "refinementField": { "type": ["null", "object"], diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/ListFinancialEvents.json b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/ListFinancialEvents.json index 3e21f32595b20..d505714f157ec 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/ListFinancialEvents.json +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/schemas/ListFinancialEvents.json @@ -1,22 +1,22 @@ { "title": "ListFinancialEvents", "description": "List of Financial Events", - "type": "object", + "type": ["null", "object"], "$schema": "http://json-schema.org/draft-07/schema#", "properties": { "ShipmentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "SellerOrderId": { - "type": "string" + "type": ["null", "string"] }, "MarketplaceName": { - "type": "string" + "type": ["null", "string"] }, "OrderChargeList": { "type": ["null", "array"] @@ -40,7 +40,7 @@ "type": ["null", "array"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "ShipmentItemList": { @@ -55,16 +55,16 @@ "RefundEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "SellerOrderId": { - "type": "string" + "type": ["null", "string"] }, "MarketplaceName": { - "type": "string" + "type": ["null", "string"] }, "OrderChargeList": { "type": ["null", "array"] @@ -88,7 +88,7 @@ "type": ["null", "array"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "ShipmentItemList": { @@ -103,16 +103,16 @@ "GuaranteeClaimEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "SellerOrderId": { - "type": "string" + "type": ["null", "string"] }, "MarketplaceName": { - "type": "string" + "type": ["null", "string"] }, "OrderChargeList": { "type": ["null", "array"] @@ -136,7 +136,7 @@ "type": ["null", "array"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "ShipmentItemList": { @@ -151,16 +151,16 @@ "ChargebackEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "SellerOrderId": { - "type": "string" + "type": ["null", "string"] }, "MarketplaceName": { - "type": "string" + "type": ["null", "string"] }, "OrderChargeList": { "type": ["null", "array"] @@ -184,7 +184,7 @@ "type": ["null", "array"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "ShipmentItemList": { @@ -199,20 +199,20 @@ "PayWithAmazonEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "SellerOrderId": { - "type": "string" + "type": ["null", "string"] }, "TransactionPostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "BusinessObjectType": { - "type": "string" + "type": ["null", "string"] }, "SalesChannel": { - "type": "string" + "type": ["null", "string"] }, "Charge": { "type": ["null", "object"] @@ -221,16 +221,16 @@ "type": ["null", "array"] }, "PaymentAmountType": { - "type": "string" + "type": ["null", "string"] }, "AmountDescription": { - "type": "string" + "type": ["null", "string"] }, "FulfillmentChannel": { - "type": "string" + "type": ["null", "string"] }, "StoreName": { - "type": "string" + "type": ["null", "string"] } } } @@ -238,37 +238,37 @@ "ServiceProviderCreditEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "ProviderTransactionType": { - "type": "string" + "type": ["null", "string"] }, "SellerOrderId": { - "type": "string" + "type": ["null", "string"] }, "MarketplaceId": { - "type": "string" + "type": ["null", "string"] }, "MarketplaceCountryCode": { - "type": "string" + "type": ["null", "string"] }, "SellerId": { - "type": "string" + "type": ["null", "string"] }, "SellerStoreName": { - "type": "string" + "type": ["null", "string"] }, "ProviderId": { - "type": "string" + "type": ["null", "string"] }, "ProviderStoreName": { - "type": "string" + "type": ["null", "string"] }, "TransactionAmount": { "type": ["null", "object"] }, "TransactionCreationDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" } } @@ -277,16 +277,16 @@ "RetrochargeEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "RetrochargeEventType": { - "type": "string" + "type": ["null", "string"] }, "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "BaseTax": { @@ -296,7 +296,7 @@ "type": ["null", "object"] }, "MarketplaceName": { - "type": "string" + "type": ["null", "string"] }, "RetrochargeTaxWithheldList": { "type": ["null", "array"] @@ -307,20 +307,20 @@ "RentalTransactionEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "RentalEventType": { - "type": "string" + "type": ["null", "string"] }, "ExtensionLength": { "type": "integer", "format": "int32" }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "RentalChargeList": { @@ -330,7 +330,7 @@ "type": ["null", "array"] }, "MarketplaceName": { - "type": "string" + "type": ["null", "string"] }, "RentalInitialValue": { "type": ["null", "object"] @@ -344,20 +344,24 @@ } } }, + "PerformanceBondRefundEventList": { + "type": "array", + "items": {} + }, "ProductAdsPaymentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "postedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "transactionType": { - "type": "string" + "type": ["null", "string"] }, "invoiceId": { - "type": "string" + "type": ["null", "string"] }, "baseValue": { "type": ["null", "object"] @@ -374,28 +378,28 @@ "ServiceFeeEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "FeeReason": { - "type": "string" + "type": ["null", "string"] }, "FeeList": { "type": ["null", "array"] }, "SellerSKU": { - "type": "string" + "type": ["null", "string"] }, "FnSKU": { - "type": "string" + "type": ["null", "string"] }, "FeeDescription": { - "type": "string" + "type": ["null", "string"] }, "ASIN": { - "type": "string" + "type": ["null", "string"] } } } @@ -403,23 +407,23 @@ "SellerDealPaymentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "postedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "dealId": { - "type": "string" + "type": ["null", "string"] }, "dealDescription": { - "type": "string" + "type": ["null", "string"] }, "eventType": { - "type": "string" + "type": ["null", "string"] }, "feeType": { - "type": "string" + "type": ["null", "string"] }, "feeAmount": { "type": ["null", "object"] @@ -436,10 +440,10 @@ "DebtRecoveryEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "DebtRecoveryType": { - "type": "string" + "type": ["null", "string"] }, "RecoveryAmount": { "type": ["null", "object"] @@ -459,13 +463,13 @@ "LoanServicingEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "LoanAmount": { "type": ["null", "object"] }, "SourceBusinessEventType": { - "type": "string" + "type": ["null", "string"] } } } @@ -473,13 +477,13 @@ "AdjustmentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AdjustmentType": { - "type": "string" + "type": ["null", "string"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "AdjustmentAmount": { @@ -494,20 +498,20 @@ "SAFETReimbursementEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "SAFETClaimId": { - "type": "string" + "type": ["null", "string"] }, "ReimbursedAmount": { "type": ["null", "object"] }, "ReasonCode": { - "type": "string" + "type": ["null", "string"] }, "SAFETReimbursementItemList": { "type": ["null", "array"] @@ -518,17 +522,17 @@ "SellerReviewEnrollmentPaymentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "EnrollmentId": { - "type": "string" + "type": ["null", "string"] }, "ParentASIN": { - "type": "string" + "type": ["null", "string"] }, "FeeComponent": { "type": ["null", "object"] @@ -545,14 +549,14 @@ "FBALiquidationEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "OriginalRemovalOrderId": { - "type": "string" + "type": ["null", "string"] }, "LiquidationProceedsAmount": { "type": ["null", "object"] @@ -566,24 +570,24 @@ "CouponPaymentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "CouponId": { - "type": "string" + "type": ["null", "string"] }, "SellerCouponDescription": { - "type": "string" + "type": ["null", "string"] }, "ClipOrRedemptionCount": { "type": "integer", "format": "int64" }, "PaymentEventId": { - "type": "string" + "type": ["null", "string"] }, "FeeComponent": { "type": ["null", "object"] @@ -600,16 +604,16 @@ "ImagingServicesFeeEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "ImagingRequestBillingItemID": { - "type": "string" + "type": ["null", "string"] }, "ASIN": { - "type": "string" + "type": ["null", "string"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "FeeList": { @@ -621,26 +625,26 @@ "NetworkComminglingTransactionEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "TransactionType": { - "type": "string" + "type": ["null", "string"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "NetCoTransactionID": { - "type": "string" + "type": ["null", "string"] }, "SwapReason": { - "type": "string" + "type": ["null", "string"] }, "ASIN": { - "type": "string" + "type": ["null", "string"] }, "MarketplaceId": { - "type": "string" + "type": ["null", "string"] }, "TaxExclusiveAmount": { "type": ["null", "object"] @@ -654,20 +658,20 @@ "AffordabilityExpenseEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "MarketplaceId": { - "type": "string" + "type": ["null", "string"] }, "TransactionType": { - "type": "string" + "type": ["null", "string"] }, "BaseExpense": { "type": ["null", "object"] @@ -690,20 +694,20 @@ "AffordabilityExpenseReversalEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "MarketplaceId": { - "type": "string" + "type": ["null", "string"] }, "TransactionType": { - "type": "string" + "type": ["null", "string"] }, "BaseExpense": { "type": ["null", "object"] @@ -726,20 +730,44 @@ "TrialShipmentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], + "properties": { + "AmazonOrderId": { + "type": ["null", "string"] + }, + "FinancialEventGroupId": { + "type": ["null", "string"] + }, + "PostedDate": { + "type": ["null", "string"], + "format": "date-time" + }, + "SKU": { + "type": ["null", "string"] + }, + "FeeList": { + "type": ["null", "array"] + } + } + } + }, + "TDSReimbursementEventList": { + "type": ["null", "array"], + "items": { + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "FinancialEventGroupId": { - "type": "string" + "type": ["null", "string"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "SKU": { - "type": "string" + "type": ["null", "string"] }, "FeeList": { "type": ["null", "array"] @@ -747,19 +775,40 @@ } } }, + "AdhocDisbursementEventList": { + "type": ["null","array"], + "items": { + "type": ["null", "object"], + "properties": { + "AdjustmentType": { + "type": ["null", "string"] + }, + "PostedDate": { + "type": ["null", "string"], + "format": "date-time" + }, + "AdjustmentAmount": { + "type": ["null", "object"] + }, + "AdjustmentItemList": { + "type": ["null", "array"] + } + } + } + }, "ShipmentSettleEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "AmazonOrderId": { - "type": "string" + "type": ["null", "string"] }, "SellerOrderId": { - "type": "string" + "type": ["null", "string"] }, "MarketplaceName": { - "type": "string" + "type": ["null", "string"] }, "OrderChargeList": { "type": ["null", "array"] @@ -783,7 +832,7 @@ "type": ["null", "array"] }, "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "ShipmentItemList": { @@ -795,13 +844,82 @@ } } }, + "ChargeRefundEventList": { + "type": ["null","array"], + "items": { + "type": ["null", "object"], + "properties": { + "ChargeAmount": { + "type": ["null", "object"] + }, + "ChargeType": { + "type": ["null", "string"] + } + } + } + }, + "FailedAdhocDisbursementEventList": { + "type": ["null","array"], + "items": { + "type": ["null", "object"], + "properties": { + "FundsTransfersType": { + "type": ["null", "string"] + }, + "TransferId": { + "type": ["null", "string"] + }, + "DisbursementId": { + "type": ["null", "string"] + }, + "PaymentDisbursementType": { + "type": ["null", "string"] + }, + "Status": { + "type": ["null", "string"] + }, + "TransferAmount": { + "type": ["null", "object"] + }, + "PostedDate": { + "type": ["null", "string"], + "format": "date-time" + } + } + } + }, + "ValueAddedServiceChargeEventList": { + "type": ["null","array"], + "items": { + "type": ["null", "object"], + "properties": { + "TransactionType": { + "type": ["null", "string"] + }, + "Description": { + "type": ["null", "string"] + }, + "TransactionAmount": { + "type": ["null", "object"] + }, + "PostedDate": { + "type": ["null", "string"], + "format": "date-time" + } + } + } + }, + "CapacityReservationBillingEventList": { + "type": "array", + "items": {} + }, "TaxWithholdingEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "BaseAmount": { @@ -819,20 +937,20 @@ "RemovalShipmentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "MerchantOrderId": { - "type": "string" + "type": ["null", "string"] }, "OrderId": { - "type": "string" + "type": ["null", "string"] }, "TransactionType": { - "type": "string" + "type": ["null", "string"] }, "RemovalShipmentItemList": { "type": ["null", "array"] @@ -843,23 +961,23 @@ "RemovalShipmentAdjustmentEventList": { "type": ["null", "array"], "items": { - "type": "object", + "type": ["null", "object"], "properties": { "PostedDate": { - "type": "string", + "type": ["null", "string"], "format": "date-time" }, "AdjustmentEventId": { - "type": "string" + "type": ["null", "string"] }, "MerchantOrderId": { - "type": "string" + "type": ["null", "string"] }, "OrderId": { - "type": "string" + "type": ["null", "string"] }, "TransactionType": { - "type": "string" + "type": ["null", "string"] }, "RemovalShipmentItemAdjustmentList": { "type": ["null", "array"] diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/source.py b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/source.py index de7ef7fcc0f6d..dcfebec39b935 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/source.py +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/source.py @@ -29,7 +29,6 @@ FbaFulfillmentInventorySummaryReport, FbaFulfillmentMonthlyInventoryReport, FbaInventoryPlaningReport, - FbaInventoryReports, FbaMyiUnsuppressedInventoryReport, FbaOrdersReports, FbaReplacementsReports, @@ -61,7 +60,6 @@ SellerFeedbackReports, StrandedInventoryUiReport, VendorDirectFulfillmentShipping, - VendorInventoryHealthReports, VendorInventoryReports, VendorSalesReports, XmlAllOrdersDataByOrderDataGeneral, @@ -158,7 +156,6 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: return [ FbaCustomerReturnsReports(**stream_kwargs), - FbaInventoryReports(**stream_kwargs), FbaAfnInventoryReports(**stream_kwargs), FbaAfnInventoryByCountryReports(**stream_kwargs), FbaOrdersReports(**stream_kwargs), @@ -173,7 +170,6 @@ def streams(self, config: Mapping[str, Any]) -> List[Stream]: FulfilledShipmentsReports(**stream_kwargs), MerchantListingsReports(**stream_kwargs), VendorDirectFulfillmentShipping(**stream_kwargs), - VendorInventoryHealthReports(**stream_kwargs), VendorInventoryReports(**stream_kwargs), VendorSalesReports(**stream_kwargs), Orders(**stream_kwargs), diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/spec.py b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/spec.py index 4bd603705b700..e6461ad68ce51 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/spec.py +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/spec.py @@ -85,9 +85,10 @@ class Config: ) period_in_days: int = Field( - 30, + 90, + le=90, + examples=["1", "10", "30", "60", "90"], 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.", - examples=["30", "365"], order=10, ) report_options: str = Field( @@ -99,7 +100,8 @@ class Config: max_wait_seconds: int = Field( 500, 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.", + 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.", examples=["500", "1980"], order=12, ) diff --git a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/streams.py b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/streams.py index 2a67e74d58c28..47028b22aa52c 100644 --- a/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/streams.py +++ b/airbyte-integrations/connectors/source-amazon-seller-partner/source_amazon_seller_partner/streams.py @@ -182,8 +182,8 @@ def __init__( self._replication_start_date = replication_start_date self._replication_end_date = replication_end_date self.marketplace_id = marketplace_id - self.period_in_days = period_in_days - self._report_options = report_options + self.period_in_days = max(period_in_days, self.replication_start_date_limit_in_days) # ensure old configs work as well + self._report_options = report_options or "{}" self.max_wait_seconds = max_wait_seconds @property @@ -241,24 +241,7 @@ def _report_data( stream_slice: Mapping[str, Any] = None, stream_state: Mapping[str, Any] = None, ) -> Mapping[str, Any]: - replication_start_date = max( - pendulum.parse(self._replication_start_date), pendulum.now("utc").subtract(days=self.replication_start_date_limit_in_days) - ) - - params = { - "reportType": self.name, - "marketplaceIds": [self.marketplace_id], - "dataStartTime": replication_start_date.strftime(DATE_TIME_FORMAT), - } - - if self._replication_end_date and sync_mode == SyncMode.full_refresh: - params["dataEndTime"] = self._replication_end_date - # if replication_start_date is older than 90 days(from current date), we are overriding the value above. - # when replication_end_date is present, we should use the user provided replication_start_date. - # user may provide a date range which is older than 90 days. - params["dataStartTime"] = self._replication_start_date - - return params + return {"reportType": self.name, "marketplaceIds": [self.marketplace_id], **stream_slice} def _create_report( self, @@ -317,6 +300,31 @@ def report_options(self) -> Mapping[str, Any]: else: return {} + def stream_slices( + self, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None + ) -> Iterable[Optional[Mapping[str, Any]]]: + start_date = max(pendulum.parse(self._replication_start_date), pendulum.now("utc").subtract(days=90)) + end_date = pendulum.now() + if self._replication_end_date and sync_mode == SyncMode.full_refresh: + # if replication_start_date is older than 90 days(from current date), we are overriding the value above. + # when replication_end_date is present, we should use the user provided replication_start_date. + # user may provide a date range which is older than 90 days. + end_date = min(end_date, pendulum.parse(self._replication_end_date)) + start_date = pendulum.parse(self._replication_start_date) + + if stream_state: + state = stream_state.get(self.cursor_field) + start_date = state and pendulum.parse(state) or start_date + + start_date = min(start_date, end_date) + while start_date < end_date: + end_date_slice = start_date.add(days=self.period_in_days) + yield { + "dataStartTime": start_date.strftime(DATE_TIME_FORMAT), + "dataEndTime": min(end_date_slice.subtract(seconds=1), end_date).strftime(DATE_TIME_FORMAT), + } + start_date = end_date_slice + def read_records( self, sync_mode: SyncMode, @@ -376,14 +384,6 @@ class FlatFileOrdersReports(ReportsAmazonSPStream): name = "GET_FLAT_FILE_ALL_ORDERS_DATA_BY_ORDER_DATE_GENERAL" -class FbaInventoryReports(ReportsAmazonSPStream): - """ - Field definitions: https://sellercentral.amazon.com/gp/help/200740930 - """ - - name = "GET_FBA_INVENTORY_AGED_DATA" - - class FbaAfnInventoryReports(ReportsAmazonSPStream): """ Field definitions: https://developer-docs.amazon.com/sp-api/docs/report-type-values#inventory-reports @@ -456,10 +456,6 @@ class RestockInventoryReports(ReportsAmazonSPStream): name = "GET_RESTOCK_INVENTORY_RECOMMENDATIONS_REPORT" -class VendorInventoryHealthReports(ReportsAmazonSPStream): - name = "GET_VENDOR_INVENTORY_HEALTH_AND_PLANNING_REPORT" - - class GetXmlBrowseTreeData(ReportsAmazonSPStream): def parse_document(self, document): parsed = xmltodict.parse( @@ -581,6 +577,8 @@ class FlatFileArchivedOrdersDataByOrderDate(ReportsAmazonSPStream): class FlatFileReturnsDataByReturnDate(ReportsAmazonSPStream): name = "GET_FLAT_FILE_RETURNS_DATA_BY_RETURN_DATE" + replication_start_date_limit_in_days = 60 + class FbaInventoryPlaningReport(ReportsAmazonSPStream): name = "GET_FBA_INVENTORY_PLANNING_DATA" @@ -703,24 +701,6 @@ class IncrementalReportsAmazonSPStream(ReportsAmazonSPStream): def cursor_field(self) -> Union[str, List[str]]: pass - def _report_data( - self, - sync_mode: SyncMode, - cursor_field: List[str] = None, - stream_slice: Mapping[str, Any] = None, - stream_state: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - data = super()._report_data(sync_mode, cursor_field, stream_slice, stream_state) - if stream_slice: - data_times = {} - if stream_slice.get("dataStartTime"): - data_times["dataStartTime"] = stream_slice["dataStartTime"] - if stream_slice.get("dataEndTime"): - data_times["dataEndTime"] = stream_slice["dataEndTime"] - data.update(data_times) - - return data - def get_updated_state(self, current_stream_state: MutableMapping[str, Any], latest_record: Mapping[str, Any]) -> Mapping[str, Any]: """ Return the latest state by comparing the cursor value in the latest record with the stream's most recent state object @@ -731,35 +711,6 @@ def get_updated_state(self, current_stream_state: MutableMapping[str, Any], late return {self.cursor_field: max(latest_benchmark, current_stream_state[self.cursor_field])} return {self.cursor_field: latest_benchmark} - def stream_slices( - self, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None - ) -> Iterable[Optional[Mapping[str, Any]]]: - - start_date = pendulum.parse(self._replication_start_date) - end_date = pendulum.now() - - if self._replication_end_date and sync_mode == SyncMode.full_refresh: - end_date = pendulum.parse(self._replication_end_date) - - if stream_state: - state = stream_state.get(self.cursor_field) - start_date = pendulum.parse(state) - - start_date = min(start_date, end_date) - slices = [] - - while start_date < end_date: - end_date_slice = start_date.add(days=self.period_in_days) - slices.append( - { - "dataStartTime": start_date.strftime(DATE_TIME_FORMAT), - "dataEndTime": min(end_date_slice.subtract(seconds=1), end_date).strftime(DATE_TIME_FORMAT), - } - ) - start_date = end_date_slice - - return slices - class SellerFeedbackReports(IncrementalReportsAmazonSPStream): """ @@ -1145,22 +1096,6 @@ class FbaCustomerReturnsReports(ReportsAmazonSPStream): name = "GET_FBA_FULFILLMENT_CUSTOMER_RETURNS_DATA" - def _report_data( - self, - sync_mode: SyncMode, - cursor_field: List[str] = None, - stream_slice: Mapping[str, Any] = None, - stream_state: Mapping[str, Any] = None, - ) -> Mapping[str, Any]: - replication_start_date = pendulum.parse(self._replication_start_date) - - data = { - "reportType": self.name, - "marketplaceIds": [self.marketplace_id], - "dataStartTime": replication_start_date.strftime(DATE_TIME_FORMAT), - } - return data - class FlatFileSettlementV2Reports(ReportsAmazonSPStream): diff --git a/airbyte-integrations/connectors/source-amplitude/Dockerfile b/airbyte-integrations/connectors/source-amplitude/Dockerfile index d1a4466b53053..97c29296b0ecf 100644 --- a/airbyte-integrations/connectors/source-amplitude/Dockerfile +++ b/airbyte-integrations/connectors/source-amplitude/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.19 +LABEL io.airbyte.version=0.1.20 LABEL io.airbyte.name=airbyte/source-amplitude diff --git a/airbyte-integrations/connectors/source-amplitude/integration_tests/acceptance.py b/airbyte-integrations/connectors/source-amplitude/integration_tests/acceptance.py index 480378d7bf203..1302b2f57e10e 100644 --- a/airbyte-integrations/connectors/source-amplitude/integration_tests/acceptance.py +++ b/airbyte-integrations/connectors/source-amplitude/integration_tests/acceptance.py @@ -3,5 +3,14 @@ # -def test_dummy_test(): - assert True +import pytest + +pytest_plugins = ("source_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-amplitude/source_amplitude/api.py b/airbyte-integrations/connectors/source-amplitude/source_amplitude/api.py index 89289c795ec65..25d93810f4c36 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/api.py +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/api.py @@ -88,14 +88,19 @@ def _get_date_time_items_from_schema(self): result.append(key) return result - def _date_time_to_rfc3339(self, record: Mapping[str, Any]) -> Mapping[str, Any]: + 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: - record[item] = pendulum.parse(record[item]).to_rfc3339_string() + 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()): @@ -168,7 +173,7 @@ def parse_response(self, response: requests.Response, stream_state: Mapping[str, 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[Mapping]: + 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) diff --git a/airbyte-integrations/connectors/source-amplitude/source_amplitude/source.py b/airbyte-integrations/connectors/source-amplitude/source_amplitude/source.py index e77f6a3210725..721d2f2ebd36d 100644 --- a/airbyte-integrations/connectors/source-amplitude/source_amplitude/source.py +++ b/airbyte-integrations/connectors/source-amplitude/source_amplitude/source.py @@ -26,7 +26,7 @@ def _convert_auth_to_token(self, username: str, password: str) -> str: 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["data_region"]).read_records(SyncMode.full_refresh)) + 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)}" diff --git a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_api.py b/airbyte-integrations/connectors/source-amplitude/unit_tests/test_api.py index 1f781aa95a943..0d9a2e35a79e9 100644 --- a/airbyte-integrations/connectors/source-amplitude/unit_tests/test_api.py +++ b/airbyte-integrations/connectors/source-amplitude/unit_tests/test_api.py @@ -237,8 +237,10 @@ def test_get_date_time_items_from_schema(self): [ ({}, {}), ({"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"], + 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") diff --git a/airbyte-integrations/connectors/source-ashby/source_ashby/ashby.yaml b/airbyte-integrations/connectors/source-ashby/source_ashby/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-ashby/source_ashby/ashby.yaml rename to airbyte-integrations/connectors/source-ashby/source_ashby/manifest.yaml diff --git a/airbyte-integrations/connectors/source-ashby/source_ashby/source.py b/airbyte-integrations/connectors/source-ashby/source_ashby/source.py index 80b47fd139eab..b90cb178f060b 100644 --- a/airbyte-integrations/connectors/source-ashby/source_ashby/source.py +++ b/airbyte-integrations/connectors/source-ashby/source_ashby/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceAshby(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "ashby.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) 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 b3e4cd309dcba..071d4346986f5 100644 --- a/airbyte-integrations/connectors/source-bing-ads/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-bing-ads/acceptance-test-config.yml @@ -13,6 +13,7 @@ tests: - config_path: "secrets/config.json" basic_read: - config_path: "secrets/config.json" + timeout_seconds: 600 configured_catalog_path: "integration_tests/configured_catalog.json" empty_streams: ["account_performance_report_hourly","ad_group_performance_report_hourly","ad_performance_report_hourly","campaign_performance_report_hourly","keyword_performance_report_hourly"] # incremental test doesn"t work if a single stream has multiple states diff --git a/airbyte-integrations/connectors/source-bing-ads/unit_tests/test_source.py b/airbyte-integrations/connectors/source-bing-ads/unit_tests/test_source.py index e28cfa5c538f9..101f80741ac68 100644 --- a/airbyte-integrations/connectors/source-bing-ads/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-bing-ads/unit_tests/test_source.py @@ -140,4 +140,4 @@ def test_accounts_live(config): client = Client(**config) accounts = Accounts(client, config) records = accounts.read_records(SyncMode.full_refresh) - assert len(list(records)) == 4 + assert len(list(records)) == 3 diff --git a/airbyte-integrations/connectors/source-braze/source_braze/braze.yaml b/airbyte-integrations/connectors/source-braze/source_braze/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-braze/source_braze/braze.yaml rename to airbyte-integrations/connectors/source-braze/source_braze/manifest.yaml diff --git a/airbyte-integrations/connectors/source-braze/source_braze/source.py b/airbyte-integrations/connectors/source-braze/source_braze/source.py index 98996555af39a..7c19af1a6a3b9 100644 --- a/airbyte-integrations/connectors/source-braze/source_braze/source.py +++ b/airbyte-integrations/connectors/source-braze/source_braze/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceBraze(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "braze.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-breezometer/source_breezometer/breezometer.yaml b/airbyte-integrations/connectors/source-breezometer/source_breezometer/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-breezometer/source_breezometer/breezometer.yaml rename to airbyte-integrations/connectors/source-breezometer/source_breezometer/manifest.yaml diff --git a/airbyte-integrations/connectors/source-breezometer/source_breezometer/source.py b/airbyte-integrations/connectors/source-breezometer/source_breezometer/source.py index 1ed8d1f8927d0..67b0e830e1bac 100644 --- a/airbyte-integrations/connectors/source-breezometer/source_breezometer/source.py +++ b/airbyte-integrations/connectors/source-breezometer/source_breezometer/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceBreezometer(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "breezometer.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-callrail/source_callrail/callrail.yaml b/airbyte-integrations/connectors/source-callrail/source_callrail/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-callrail/source_callrail/callrail.yaml rename to airbyte-integrations/connectors/source-callrail/source_callrail/manifest.yaml diff --git a/airbyte-integrations/connectors/source-callrail/source_callrail/source.py b/airbyte-integrations/connectors/source-callrail/source_callrail/source.py index 63b2db66475c7..ac2a1118166fe 100644 --- a/airbyte-integrations/connectors/source-callrail/source_callrail/source.py +++ b/airbyte-integrations/connectors/source-callrail/source_callrail/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceCallrail(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "callrail.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-chartmogul/source_chartmogul/chartmogul.yaml b/airbyte-integrations/connectors/source-chartmogul/source_chartmogul/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-chartmogul/source_chartmogul/chartmogul.yaml rename to airbyte-integrations/connectors/source-chartmogul/source_chartmogul/manifest.yaml diff --git a/airbyte-integrations/connectors/source-chartmogul/source_chartmogul/source.py b/airbyte-integrations/connectors/source-chartmogul/source_chartmogul/source.py index b60e85a3a90a4..7cdeacb6f0a56 100644 --- a/airbyte-integrations/connectors/source-chartmogul/source_chartmogul/source.py +++ b/airbyte-integrations/connectors/source-chartmogul/source_chartmogul/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceChartmogul(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "chartmogul.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-clickup-api/source_clickup_api/clickup_api.yaml b/airbyte-integrations/connectors/source-clickup-api/source_clickup_api/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-clickup-api/source_clickup_api/clickup_api.yaml rename to airbyte-integrations/connectors/source-clickup-api/source_clickup_api/manifest.yaml diff --git a/airbyte-integrations/connectors/source-clickup-api/source_clickup_api/source.py b/airbyte-integrations/connectors/source-clickup-api/source_clickup_api/source.py index 43d94a1e2a852..258fc1bc85d99 100644 --- a/airbyte-integrations/connectors/source-clickup-api/source_clickup_api/source.py +++ b/airbyte-integrations/connectors/source-clickup-api/source_clickup_api/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceClickupApi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "clickup_api.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-close-com/source_close_com/close_com.yaml b/airbyte-integrations/connectors/source-close-com/source_close_com/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-close-com/source_close_com/close_com.yaml rename to airbyte-integrations/connectors/source-close-com/source_close_com/manifest.yaml diff --git a/airbyte-integrations/connectors/source-close-com/source_close_com/source_lc.py b/airbyte-integrations/connectors/source-close-com/source_close_com/source_lc.py index e35e47263acb8..0ee117f81e6b8 100644 --- a/airbyte-integrations/connectors/source-close-com/source_close_com/source_lc.py +++ b/airbyte-integrations/connectors/source-close-com/source_close_com/source_lc.py @@ -15,4 +15,4 @@ # Declarative Source class SourceCloseCom(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "close_com.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-coin-api/source_coin_api/coin_api.yaml b/airbyte-integrations/connectors/source-coin-api/source_coin_api/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-coin-api/source_coin_api/coin_api.yaml rename to airbyte-integrations/connectors/source-coin-api/source_coin_api/manifest.yaml diff --git a/airbyte-integrations/connectors/source-coin-api/source_coin_api/source.py b/airbyte-integrations/connectors/source-coin-api/source_coin_api/source.py index 43fc49e48bc4c..88f81b83c09aa 100644 --- a/airbyte-integrations/connectors/source-coin-api/source_coin_api/source.py +++ b/airbyte-integrations/connectors/source-coin-api/source_coin_api/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceCoinApi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "coin_api.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-coingecko-coins/source_coingecko_coins/coingecko_coins.yaml b/airbyte-integrations/connectors/source-coingecko-coins/source_coingecko_coins/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-coingecko-coins/source_coingecko_coins/coingecko_coins.yaml rename to airbyte-integrations/connectors/source-coingecko-coins/source_coingecko_coins/manifest.yaml diff --git a/airbyte-integrations/connectors/source-coingecko-coins/source_coingecko_coins/source.py b/airbyte-integrations/connectors/source-coingecko-coins/source_coingecko_coins/source.py index 9ed8e8ca9909b..1eb6aeceeca3f 100644 --- a/airbyte-integrations/connectors/source-coingecko-coins/source_coingecko_coins/source.py +++ b/airbyte-integrations/connectors/source-coingecko-coins/source_coingecko_coins/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceCoingeckoCoins(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "coingecko_coins.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-coinmarketcap/source_coinmarketcap/coinmarketcap.yaml b/airbyte-integrations/connectors/source-coinmarketcap/source_coinmarketcap/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-coinmarketcap/source_coinmarketcap/coinmarketcap.yaml rename to airbyte-integrations/connectors/source-coinmarketcap/source_coinmarketcap/manifest.yaml diff --git a/airbyte-integrations/connectors/source-coinmarketcap/source_coinmarketcap/source.py b/airbyte-integrations/connectors/source-coinmarketcap/source_coinmarketcap/source.py index a9cc2eae44dc4..a7480df3f8cc7 100644 --- a/airbyte-integrations/connectors/source-coinmarketcap/source_coinmarketcap/source.py +++ b/airbyte-integrations/connectors/source-coinmarketcap/source_coinmarketcap/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceCoinmarketcap(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "coinmarketcap.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-configcat/source_configcat/configcat.yaml b/airbyte-integrations/connectors/source-configcat/source_configcat/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-configcat/source_configcat/configcat.yaml rename to airbyte-integrations/connectors/source-configcat/source_configcat/manifest.yaml diff --git a/airbyte-integrations/connectors/source-configcat/source_configcat/source.py b/airbyte-integrations/connectors/source-configcat/source_configcat/source.py index 840d14c60b316..c32f7f39fdb2f 100644 --- a/airbyte-integrations/connectors/source-configcat/source_configcat/source.py +++ b/airbyte-integrations/connectors/source-configcat/source_configcat/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceConfigcat(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "configcat.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-convertkit/source_convertkit/convertkit.yaml b/airbyte-integrations/connectors/source-convertkit/source_convertkit/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-convertkit/source_convertkit/convertkit.yaml rename to airbyte-integrations/connectors/source-convertkit/source_convertkit/manifest.yaml diff --git a/airbyte-integrations/connectors/source-convertkit/source_convertkit/source.py b/airbyte-integrations/connectors/source-convertkit/source_convertkit/source.py index 6fd59d24c59fb..a57d7d0a9fcab 100644 --- a/airbyte-integrations/connectors/source-convertkit/source_convertkit/source.py +++ b/airbyte-integrations/connectors/source-convertkit/source_convertkit/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceConvertkit(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "convertkit.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-courier/source_courier/courier.yaml b/airbyte-integrations/connectors/source-courier/source_courier/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-courier/source_courier/courier.yaml rename to airbyte-integrations/connectors/source-courier/source_courier/manifest.yaml diff --git a/airbyte-integrations/connectors/source-courier/source_courier/source.py b/airbyte-integrations/connectors/source-courier/source_courier/source.py index e0559ab14b7e9..26f20c0358cd7 100644 --- a/airbyte-integrations/connectors/source-courier/source_courier/source.py +++ b/airbyte-integrations/connectors/source-courier/source_courier/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceCourier(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "courier.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-datascope/source_datascope/datascope.yaml b/airbyte-integrations/connectors/source-datascope/source_datascope/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-datascope/source_datascope/datascope.yaml rename to airbyte-integrations/connectors/source-datascope/source_datascope/manifest.yaml diff --git a/airbyte-integrations/connectors/source-datascope/source_datascope/source.py b/airbyte-integrations/connectors/source-datascope/source_datascope/source.py index 44a433d095533..b5d7775e60243 100644 --- a/airbyte-integrations/connectors/source-datascope/source_datascope/source.py +++ b/airbyte-integrations/connectors/source-datascope/source_datascope/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceDatascope(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "datascope.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-delighted/source_delighted/delighted.yaml b/airbyte-integrations/connectors/source-delighted/source_delighted/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-delighted/source_delighted/delighted.yaml rename to airbyte-integrations/connectors/source-delighted/source_delighted/manifest.yaml diff --git a/airbyte-integrations/connectors/source-delighted/source_delighted/source.py b/airbyte-integrations/connectors/source-delighted/source_delighted/source.py index 2f2e7e7de1601..0555e0860a890 100644 --- a/airbyte-integrations/connectors/source-delighted/source_delighted/source.py +++ b/airbyte-integrations/connectors/source-delighted/source_delighted/source.py @@ -14,4 +14,4 @@ # Declarative Source class SourceDelighted(YamlDeclarativeSource): def __init__(self): - super().__init__(path_to_yaml="delighted.yaml") + super().__init__(path_to_yaml="manifest.yaml") diff --git a/airbyte-integrations/connectors/source-dremio/source_dremio/dremio.yaml b/airbyte-integrations/connectors/source-dremio/source_dremio/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-dremio/source_dremio/dremio.yaml rename to airbyte-integrations/connectors/source-dremio/source_dremio/manifest.yaml diff --git a/airbyte-integrations/connectors/source-dremio/source_dremio/source.py b/airbyte-integrations/connectors/source-dremio/source_dremio/source.py index c8d6b38f4862b..c3dfa0dc3e13f 100644 --- a/airbyte-integrations/connectors/source-dremio/source_dremio/source.py +++ b/airbyte-integrations/connectors/source-dremio/source_dremio/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceDremio(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "dremio.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-emailoctopus/source_emailoctopus/emailoctopus.yaml b/airbyte-integrations/connectors/source-emailoctopus/source_emailoctopus/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-emailoctopus/source_emailoctopus/emailoctopus.yaml rename to airbyte-integrations/connectors/source-emailoctopus/source_emailoctopus/manifest.yaml diff --git a/airbyte-integrations/connectors/source-emailoctopus/source_emailoctopus/source.py b/airbyte-integrations/connectors/source-emailoctopus/source_emailoctopus/source.py index 738ef2970b88b..9019d615ac595 100644 --- a/airbyte-integrations/connectors/source-emailoctopus/source_emailoctopus/source.py +++ b/airbyte-integrations/connectors/source-emailoctopus/source_emailoctopus/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceEmailoctopus(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "emailoctopus.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile b/airbyte-integrations/connectors/source-facebook-marketing/Dockerfile index 03e57ca90bfa2..79ae0360b5f59 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.2.83 +LABEL io.airbyte.version=0.2.84 LABEL io.airbyte.name=airbyte/source-facebook-marketing diff --git a/airbyte-integrations/connectors/source-facebook-marketing/acceptance-test-config.yml b/airbyte-integrations/connectors/source-facebook-marketing/acceptance-test-config.yml index f7b5a6e5a19c1..3799cbc2e64ca 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-facebook-marketing/acceptance-test-config.yml @@ -1,26 +1,55 @@ # 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-facebook-marketing:dev -tests: +test_strictness_level: "high" +acceptance_tests: spec: - - spec_path: "integration_tests/spec.json" + tests: + - spec_path: "integration_tests/spec.json" connection: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: - - config_path: "secrets/config.json" - backward_compatibility_tests_config: - disable_for_version: "0.2.81" + tests: + - config_path: "secrets/config.json" basic_read: - - config_path: "secrets/config.json" - empty_streams: ["videos"] - timeout_seconds: 2400 + tests: + - config_path: "secrets/config.json" + empty_streams: + - name: "ad_account" + bypass_reason: "Cannot populate" + - name: "ad_sets" + bypass_reason: "Thumbnail urls changes permanently" + - name: "ad_creatives" + bypass_reason: "Thumbnail urls changes permanently" + - name: "ads_insights_age_and_gender" + bypass_reason: "Data not permanent" + - name: "ads_insights_region" + bypass_reason: "Data not permanent" + - name: "ads_insights_dma" + bypass_reason: "Data not permanent" + - name: "ads_insights_platform_and_device" + bypass_reason: "Data not permanent" + - name: "activities" + bypass_reason: "age field autoupdated" + - name: "custom_conversions" + bypass_reason: "Cannot populate" + - name: "images" + bypass_reason: "Links not permanent" + - name: "videos" + bypass_reason: "Cannot populate" + timeout_seconds: 2400 + expect_records: + path: "integration_tests/expected_records.jsonl" incremental: - - config_path: "secrets/config.json" - timeout_seconds: 2400 - future_state_path: "integration_tests/future_state.json" - skip_comprehensive_incremental_tests: true + tests: + - config_path: "secrets/config.json" + timeout_seconds: 2400 + future_state: + future_state_path: "integration_tests/future_state.json" full_refresh: - - config_path: "secrets/config.json" + tests: + - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/expected_records.jsonl new file mode 100644 index 0000000000000..e4c6d4b9ac176 --- /dev/null +++ b/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/expected_records.jsonl @@ -0,0 +1,109 @@ +{"stream":"ads","data":{"bid_type":"ABSOLUTE_OCPM","account_id":"212551616838260","campaign_id":"23846765228240398","adset_id":"23846765228280398","status":"ACTIVE","creative":{"id":"23846784944290398"},"id":"23846784938030398","updated_time":"2021-08-27T08:32:19-0700","created_time":"2021-02-11T18:24:12-0800","name":"Stock photo ad 2","targeting":{"age_max":65,"age_min":18,"geo_locations":{"countries":["US"],"location_types":["home","recent"]},"brand_safety_content_filter_levels":["FACEBOOK_STANDARD","AN_STANDARD"]},"effective_status":"CAMPAIGN_PAUSED","last_updated_by_app_id":"119211728144504","source_ad_id":"0","tracking_specs":[{"action.type":["dwell"],"creative":["23846784944290398"]},{"action.type":["attention_event"],"creative":["23846784944290398"]},{"action.type":["link_click"],"post":["243077367363346"],"post.wall":["112704783733939"]},{"action.type":["post_engagement"],"page":["112704783733939"],"post":["243077367363346"]}]},"emitted_at":1674584126201} +{"stream":"ads","data":{"bid_type":"ABSOLUTE_OCPM","account_id":"212551616838260","campaign_id":"23846765228240398","adset_id":"23846765228280398","status":"ACTIVE","creative":{"id":"23846815595220398"},"id":"23846765228310398","updated_time":"2021-08-27T08:32:19-0700","created_time":"2021-02-09T15:04:15-0800","name":"Airbyte Ad","targeting":{"age_max":65,"age_min":18,"geo_locations":{"countries":["US"],"location_types":["home","recent"]},"brand_safety_content_filter_levels":["FACEBOOK_STANDARD","AN_STANDARD"]},"effective_status":"CAMPAIGN_PAUSED","last_updated_by_app_id":"119211728144504","source_ad_id":"0","tracking_specs":[{"action.type":["offsite_conversion"],"fb_pixel":["2667253716886462"]},{"action.type":["attention_event"],"creative":["23846815595220398"]},{"action.type":["post_engagement"],"page":["112704783733939"],"post":["244953057175777"]},{"action.type":["link_click"],"post":["244953057175777"],"post.wall":["112704783733939"]},{"action.type":["dwell"],"creative":["23846815595220398"]}]},"emitted_at":1674584126202} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-08","date_stop":"2021-02-08","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584138535} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-09","date_stop":"2021-02-09","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584138822} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-10","date_stop":"2021-02-10","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584139237} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-11","date_start":"2021-02-10","date_stop":"2021-02-10","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584139240} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.006571,"cost_per_inline_link_click":0.23,"cost_per_inline_post_engagement":0.23,"cost_per_unique_click":0.23,"cost_per_unique_inline_link_click":0.23,"cpc":0.23,"cpm":0.946502,"cpp":0.964361,"created_time":"2021-02-09","ctr":0.411523,"date_start":"2021-02-11","date_stop":"2021-02-11","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.675052,"estimated_ad_recallers":70,"frequency":1.018868,"impressions":486,"inline_link_click_ctr":0.411523,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":2}],"quality_ranking":"UNKNOWN","reach":477,"social_spend":0,"spend":0.46,"unique_actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.419287,"unique_inline_link_click_ctr":0.419287,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.419287,"unique_outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":2}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.411523}],"wish_bid":0},"emitted_at":1674584139606} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-11","date_start":"2021-02-11","date_stop":"2021-02-11","engagement_rate_ranking":"UNKNOWN","estimated_ad_recallers":0,"frequency":0,"impressions":0,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584139610} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.008667,"cpm":1.293532,"cpp":1.381142,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-12","date_stop":"2021-02-12","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":15.936255,"estimated_ad_recallers":120,"frequency":1.067729,"impressions":804,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":753,"social_spend":0,"spend":1.04,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584139982} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.007545,"cost_per_inline_link_click":0.83,"cost_per_inline_post_engagement":0.83,"cost_per_unique_click":0.83,"cost_per_unique_inline_link_click":0.83,"cpc":0.83,"cpm":1.111111,"cpp":1.173975,"created_time":"2021-02-11","ctr":0.133869,"date_start":"2021-02-12","date_stop":"2021-02-12","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":15.558699,"estimated_ad_recallers":110,"frequency":1.056577,"impressions":747,"inline_link_click_ctr":0.133869,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":707,"social_spend":0,"spend":0.83,"unique_actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.141443,"unique_inline_link_click_ctr":0.141443,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.141443,"unique_outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.133869}],"wish_bid":0},"emitted_at":1674584139986} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010727,"cost_per_inline_link_click":1.18,"cost_per_inline_post_engagement":1.18,"cost_per_unique_click":1.18,"cost_per_unique_inline_link_click":1.18,"cpc":1.18,"cpm":1.528497,"cpp":1.620879,"created_time":"2021-02-09","ctr":0.129534,"date_start":"2021-02-13","date_stop":"2021-02-13","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":15.10989,"estimated_ad_recallers":110,"frequency":1.06044,"impressions":772,"inline_link_click_ctr":0.129534,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":728,"social_spend":0,"spend":1.18,"unique_actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.137363,"unique_inline_link_click_ctr":0.137363,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.137363,"unique_outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.129534}],"wish_bid":0},"emitted_at":1674584140335} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.011286,"cost_per_inline_link_click":0.395,"cost_per_inline_post_engagement":0.395,"cost_per_unique_click":0.395,"cost_per_unique_inline_link_click":0.395,"cpc":0.395,"cpm":1.519231,"cpp":1.592742,"created_time":"2021-02-11","ctr":0.384615,"date_start":"2021-02-13","date_stop":"2021-02-13","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.112903,"estimated_ad_recallers":70,"frequency":1.048387,"impressions":520,"inline_link_click_ctr":0.384615,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":2}],"quality_ranking":"UNKNOWN","reach":496,"social_spend":0,"spend":0.79,"unique_actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.403226,"unique_inline_link_click_ctr":0.403226,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.403226,"unique_outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":2}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.384615}],"wish_bid":0},"emitted_at":1674584140340} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.009538,"cost_per_inline_link_click":1.24,"cost_per_inline_post_engagement":1.24,"cost_per_unique_click":1.24,"cost_per_unique_inline_link_click":1.24,"cpc":1.24,"cpm":1.27572,"cpp":1.341991,"created_time":"2021-02-09","ctr":0.102881,"date_start":"2021-02-14","date_stop":"2021-02-14","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.069264,"estimated_ad_recallers":130,"frequency":1.051948,"impressions":972,"inline_link_click_ctr":0.102881,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":924,"social_spend":0,"spend":1.24,"unique_actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.108225,"unique_inline_link_click_ctr":0.108225,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.108225,"unique_outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.102881}],"wish_bid":0},"emitted_at":1674584140719} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90,"frequency":1.032415,"impressions":637,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":617,"social_spend":0,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584140724} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.007,"cost_per_inline_link_click":0.396667,"cost_per_inline_post_engagement":0.396667,"cost_per_unique_click":0.396667,"cost_per_unique_inline_link_click":0.396667,"cpc":0.396667,"cpm":0.902199,"cpp":0.948207,"created_time":"2021-02-09","ctr":0.227445,"date_start":"2021-02-15","date_stop":"2021-02-15","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.545817,"estimated_ad_recallers":170,"frequency":1.050996,"impressions":1319,"inline_link_click_ctr":0.227445,"inline_link_clicks":3,"inline_post_engagement":3,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":3}],"quality_ranking":"UNKNOWN","reach":1255,"social_spend":0,"spend":1.19,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3}],"unique_clicks":3,"unique_ctr":0.239044,"unique_inline_link_click_ctr":0.239044,"unique_inline_link_clicks":3,"unique_link_clicks_ctr":0.239044,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":3}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.227445}],"wish_bid":0},"emitted_at":1674584141242} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.0085,"cpm":1.177285,"cpp":1.233672,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-15","date_stop":"2021-02-15","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.513788,"estimated_ad_recallers":100,"frequency":1.047896,"impressions":722,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":689,"social_spend":0,"spend":0.85,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584141248} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.007556,"cost_per_inline_link_click":1.36,"cost_per_inline_post_engagement":1.36,"cost_per_unique_click":0.68,"cost_per_unique_inline_link_click":1.36,"cpc":0.68,"cpm":0.995608,"cpp":1.038961,"created_time":"2021-02-09","ctr":0.146413,"date_start":"2021-02-16","date_stop":"2021-02-16","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.750955,"estimated_ad_recallers":180,"frequency":1.043545,"impressions":1366,"inline_link_click_ctr":0.073206,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":1309,"social_spend":0,"spend":1.36,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":2,"unique_ctr":0.152788,"unique_inline_link_click_ctr":0.076394,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.076394,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.073206}],"wish_bid":0},"emitted_at":1674584141626} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.009857,"cpm":1.219081,"cpp":1.268382,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-16","date_stop":"2021-02-16","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.867647,"estimated_ad_recallers":70,"frequency":1.040441,"impressions":566,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":544,"social_spend":0,"spend":0.69,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584141634} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.009273,"cost_per_inline_link_click":1.02,"cost_per_inline_post_engagement":1.02,"cost_per_unique_click":1.02,"cost_per_unique_inline_link_click":1.02,"cpc":1.02,"cpm":1.143498,"cpp":1.188811,"created_time":"2021-02-09","ctr":0.112108,"date_start":"2021-02-17","date_stop":"2021-02-17","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.820513,"estimated_ad_recallers":110,"frequency":1.039627,"impressions":892,"inline_link_click_ctr":0.112108,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":858,"social_spend":0,"spend":1.02,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.11655,"unique_inline_link_click_ctr":0.11655,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.11655,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.112108}],"wish_bid":0},"emitted_at":1674584142107} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.011222,"cost_per_inline_link_click":1.01,"cost_per_inline_post_engagement":1.01,"cost_per_unique_click":0.505,"cost_per_unique_inline_link_click":1.01,"cpc":0.505,"cpm":1.339523,"cpp":1.424542,"created_time":"2021-02-11","ctr":0.265252,"date_start":"2021-02-17","date_stop":"2021-02-17","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.693935,"estimated_ad_recallers":90,"frequency":1.06347,"impressions":754,"inline_link_click_ctr":0.132626,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":709,"social_spend":0,"spend":1.01,"unique_actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":2,"unique_ctr":0.282087,"unique_inline_link_click_ctr":0.141044,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.141044,"unique_outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.132626}],"wish_bid":0},"emitted_at":1674584142115} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010778,"cost_per_inline_link_click":0.97,"cost_per_inline_post_engagement":0.97,"cost_per_unique_click":0.97,"cost_per_unique_inline_link_click":0.97,"cpc":0.97,"cpm":1.284768,"cpp":1.337931,"created_time":"2021-02-09","ctr":0.13245,"date_start":"2021-02-18","date_stop":"2021-02-18","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.413793,"estimated_ad_recallers":90,"frequency":1.041379,"impressions":755,"inline_link_click_ctr":0.13245,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":725,"social_spend":0,"spend":0.97,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.137931,"unique_inline_link_click_ctr":0.137931,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.137931,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.13245}],"wish_bid":0},"emitted_at":1674584142467} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.011444,"cpm":1.237981,"cpp":1.2875,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-18","date_stop":"2021-02-18","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":11.25,"estimated_ad_recallers":90,"frequency":1.04,"impressions":832,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":800,"social_spend":0,"spend":1.03,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584142498} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010556,"cost_per_unique_click":0.316667,"cpc":0.316667,"cpm":1.353276,"cpp":1.41369,"created_time":"2021-02-09","ctr":0.42735,"date_start":"2021-02-19","date_stop":"2021-02-19","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.392857,"estimated_ad_recallers":90,"frequency":1.044643,"impressions":702,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":672,"social_spend":0,"spend":0.95,"unique_clicks":3,"unique_ctr":0.446429,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584142880} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.0107,"cost_per_inline_link_click":1.07,"cost_per_inline_post_engagement":1.07,"cost_per_unique_click":1.07,"cost_per_unique_inline_link_click":1.07,"cpc":1.07,"cpm":1.345912,"cpp":1.406045,"created_time":"2021-02-11","ctr":0.125786,"date_start":"2021-02-19","date_stop":"2021-02-19","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.140604,"estimated_ad_recallers":100,"frequency":1.044678,"impressions":795,"inline_link_click_ctr":0.125786,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":761,"social_spend":0,"spend":1.07,"unique_actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.131406,"unique_inline_link_click_ctr":0.131406,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.131406,"unique_outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.125786}],"wish_bid":0},"emitted_at":1674584142887} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.01,"cpm":1.335113,"cpp":1.398601,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-21","date_stop":"2021-02-21","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.986014,"estimated_ad_recallers":100,"frequency":1.047552,"impressions":749,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":715,"social_spend":0,"spend":1,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584143275} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010556,"cpm":1.310345,"cpp":1.370851,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-21","date_stop":"2021-02-21","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.987013,"estimated_ad_recallers":90,"frequency":1.046176,"impressions":725,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":693,"social_spend":0,"spend":0.95,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584143282} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.0104,"cost_per_inline_link_click":1.04,"cost_per_inline_post_engagement":1.04,"cost_per_unique_click":0.346667,"cost_per_unique_inline_link_click":1.04,"cpc":0.346667,"cpm":1.438451,"cpp":1.522694,"created_time":"2021-02-09","ctr":0.414938,"date_start":"2021-02-20","date_stop":"2021-02-20","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.641288,"estimated_ad_recallers":100,"frequency":1.058565,"impressions":723,"inline_link_click_ctr":0.138313,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"quality_ranking":"UNKNOWN","reach":683,"social_spend":0,"spend":1.04,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":3,"unique_ctr":0.439239,"unique_inline_link_click_ctr":0.146413,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.146413,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.138313}],"wish_bid":0},"emitted_at":1674584144209} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010889,"cpm":1.412104,"cpp":1.484848,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-20","date_stop":"2021-02-20","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.636364,"estimated_ad_recallers":90,"frequency":1.051515,"impressions":694,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":660,"social_spend":0,"spend":0.98,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584144216} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010444,"cost_per_unique_click":0.94,"cpc":0.94,"cpm":1.289438,"cpp":1.327684,"created_time":"2021-02-09","ctr":0.137174,"date_start":"2021-02-22","date_stop":"2021-02-22","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.711864,"estimated_ad_recallers":90,"frequency":1.029661,"impressions":729,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":708,"social_spend":0,"spend":0.94,"unique_clicks":1,"unique_ctr":0.141243,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584144516} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.011125,"cpm":1.332335,"cpp":1.37558,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-22","date_stop":"2021-02-22","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.36476,"estimated_ad_recallers":80,"frequency":1.032457,"impressions":668,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":647,"social_spend":0,"spend":0.89,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584144520} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010455,"cost_per_inline_link_click":0.575,"cost_per_inline_post_engagement":0.575,"cost_per_unique_click":0.575,"cost_per_unique_inline_link_click":0.575,"cpc":0.575,"cpm":1.320321,"cpp":1.382212,"created_time":"2021-02-09","ctr":0.229621,"date_start":"2021-02-23","date_stop":"2021-02-23","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.221154,"estimated_ad_recallers":110,"frequency":1.046875,"impressions":871,"inline_link_click_ctr":0.229621,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":2}],"quality_ranking":"UNKNOWN","reach":832,"social_spend":0,"spend":1.15,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.240385,"unique_inline_link_click_ctr":0.240385,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.240385,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":2}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.229621}],"wish_bid":0},"emitted_at":1674584145012} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"post_reaction","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.011143,"cost_per_inline_post_engagement":0.78,"cpm":1.433824,"cpp":1.508704,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-23","date_stop":"2021-02-23","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.539652,"estimated_ad_recallers":70,"frequency":1.052224,"impressions":544,"inline_link_clicks":0,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":517,"social_spend":0,"spend":0.78,"unique_actions":[{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"post_reaction","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584145021} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.012222,"cost_per_unique_click":1.1,"cpc":1.1,"cpm":1.544944,"cpp":1.617647,"created_time":"2021-02-09","ctr":0.140449,"date_start":"2021-02-24","date_stop":"2021-02-24","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.235294,"estimated_ad_recallers":90,"frequency":1.047059,"impressions":712,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":680,"social_spend":0,"spend":1.1,"unique_clicks":1,"unique_ctr":0.147059,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584145480} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.0146,"cpm":1.533613,"cpp":1.593886,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-24","date_stop":"2021-02-24","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":10.917031,"estimated_ad_recallers":50,"frequency":1.039301,"impressions":476,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":458,"social_spend":0,"spend":0.73,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584145487} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.013778,"cpm":1.715076,"cpp":1.789322,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-25","date_stop":"2021-02-25","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.987013,"estimated_ad_recallers":90,"frequency":1.04329,"impressions":723,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":693,"social_spend":0,"spend":1.24,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584145991} +{"stream":"ads_insights","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.018,"cpm":1.930295,"cpp":2,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-25","date_stop":"2021-02-25","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":11.111111,"estimated_ad_recallers":40,"frequency":1.036111,"impressions":373,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":360,"social_spend":0,"spend":0.72,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584145998} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"cost_per_estimated_ad_recallers":0.006571,"cost_per_inline_link_click":0.23,"cost_per_inline_post_engagement":0.23,"cost_per_unique_click":0.23,"cost_per_unique_inline_link_click":0.23,"cpc":0.23,"cpm":0.946502,"cpp":0.964361,"created_time":"2021-02-09","ctr":0.411523,"date_start":"2021-02-11","date_stop":"2021-02-11","estimated_ad_recall_rate":14.675052,"estimated_ad_recallers":70,"frequency":1.018868,"impressions":486,"inline_link_click_ctr":0.411523,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":2}],"reach":477,"spend":0.46,"unique_actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.419287,"unique_inline_link_click_ctr":0.419287,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.419287,"unique_outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":2}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.411523}],"country":"US"},"emitted_at":1674584182831} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.008667,"cpm":1.293532,"cpp":1.381142,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-12","date_stop":"2021-02-12","estimated_ad_recall_rate":15.936255,"estimated_ad_recallers":120,"frequency":1.067729,"impressions":804,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":753,"spend":1.04,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584183202} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.007545,"cost_per_inline_link_click":0.83,"cost_per_inline_post_engagement":0.83,"cost_per_unique_click":0.83,"cost_per_unique_inline_link_click":0.83,"cpc":0.83,"cpm":1.111111,"cpp":1.173975,"created_time":"2021-02-11","ctr":0.133869,"date_start":"2021-02-12","date_stop":"2021-02-12","estimated_ad_recall_rate":15.558699,"estimated_ad_recallers":110,"frequency":1.056577,"impressions":747,"inline_link_click_ctr":0.133869,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"reach":707,"spend":0.83,"unique_actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.141443,"unique_inline_link_click_ctr":0.141443,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.141443,"unique_outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.133869}],"country":"US"},"emitted_at":1674584183214} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.010727,"cost_per_inline_link_click":1.18,"cost_per_inline_post_engagement":1.18,"cost_per_unique_click":1.18,"cost_per_unique_inline_link_click":1.18,"cpc":1.18,"cpm":1.528497,"cpp":1.620879,"created_time":"2021-02-09","ctr":0.129534,"date_start":"2021-02-13","date_stop":"2021-02-13","estimated_ad_recall_rate":15.10989,"estimated_ad_recallers":110,"frequency":1.06044,"impressions":772,"inline_link_click_ctr":0.129534,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":1}],"reach":728,"spend":1.18,"unique_actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.137363,"unique_inline_link_click_ctr":0.137363,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.137363,"unique_outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.129534}],"country":"US"},"emitted_at":1674584183629} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"cost_per_estimated_ad_recallers":0.011286,"cost_per_inline_link_click":0.395,"cost_per_inline_post_engagement":0.395,"cost_per_unique_click":0.395,"cost_per_unique_inline_link_click":0.395,"cpc":0.395,"cpm":1.519231,"cpp":1.592742,"created_time":"2021-02-11","ctr":0.384615,"date_start":"2021-02-13","date_stop":"2021-02-13","estimated_ad_recall_rate":14.112903,"estimated_ad_recallers":70,"frequency":1.048387,"impressions":520,"inline_link_click_ctr":0.384615,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":2}],"reach":496,"spend":0.79,"unique_actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.403226,"unique_inline_link_click_ctr":0.403226,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.403226,"unique_outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":2}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.384615}],"country":"US"},"emitted_at":1674584183642} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.009538,"cost_per_inline_link_click":1.24,"cost_per_inline_post_engagement":1.24,"cost_per_unique_click":1.24,"cost_per_unique_inline_link_click":1.24,"cpc":1.24,"cpm":1.27572,"cpp":1.341991,"created_time":"2021-02-09","ctr":0.102881,"date_start":"2021-02-14","date_stop":"2021-02-14","estimated_ad_recall_rate":14.069264,"estimated_ad_recallers":130,"frequency":1.051948,"impressions":972,"inline_link_click_ctr":0.102881,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":1}],"reach":924,"spend":1.24,"unique_actions":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.108225,"unique_inline_link_click_ctr":0.108225,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.108225,"unique_outbound_clicks":[{"action_destination":"241903844147365","action_target_id":"241903844147365","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.102881}],"country":"US"},"emitted_at":1674584184033} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90,"frequency":1.032415,"impressions":637,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":617,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584184041} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"cost_per_estimated_ad_recallers":0.007,"cost_per_inline_link_click":0.396667,"cost_per_inline_post_engagement":0.396667,"cost_per_unique_click":0.396667,"cost_per_unique_inline_link_click":0.396667,"cpc":0.396667,"cpm":0.902199,"cpp":0.948207,"created_time":"2021-02-09","ctr":0.227445,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":13.545817,"estimated_ad_recallers":170,"frequency":1.050996,"impressions":1319,"inline_link_click_ctr":0.227445,"inline_link_clicks":3,"inline_post_engagement":3,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":3}],"reach":1255,"spend":1.19,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3}],"unique_clicks":3,"unique_ctr":0.239044,"unique_inline_link_click_ctr":0.239044,"unique_inline_link_clicks":3,"unique_link_clicks_ctr":0.239044,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":3}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.227445}],"country":"US"},"emitted_at":1674584184368} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.0085,"cpm":1.177285,"cpp":1.233672,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-15","date_stop":"2021-02-15","estimated_ad_recall_rate":14.513788,"estimated_ad_recallers":100,"frequency":1.047896,"impressions":722,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":689,"spend":0.85,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584184378} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"cost_per_estimated_ad_recallers":0.007556,"cost_per_inline_link_click":1.36,"cost_per_inline_post_engagement":1.36,"cost_per_unique_click":0.68,"cost_per_unique_inline_link_click":1.36,"cpc":0.68,"cpm":0.995608,"cpp":1.038961,"created_time":"2021-02-09","ctr":0.146413,"date_start":"2021-02-16","date_stop":"2021-02-16","estimated_ad_recall_rate":13.750955,"estimated_ad_recallers":180,"frequency":1.043545,"impressions":1366,"inline_link_click_ctr":0.073206,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"reach":1309,"spend":1.36,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":2,"unique_ctr":0.152788,"unique_inline_link_click_ctr":0.076394,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.076394,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.073206}],"country":"US"},"emitted_at":1674584184782} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.009857,"cpm":1.219081,"cpp":1.268382,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-16","date_stop":"2021-02-16","estimated_ad_recall_rate":12.867647,"estimated_ad_recallers":70,"frequency":1.040441,"impressions":566,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":544,"spend":0.69,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584184798} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.009273,"cost_per_inline_link_click":1.02,"cost_per_inline_post_engagement":1.02,"cost_per_unique_click":1.02,"cost_per_unique_inline_link_click":1.02,"cpc":1.02,"cpm":1.143498,"cpp":1.188811,"created_time":"2021-02-09","ctr":0.112108,"date_start":"2021-02-17","date_stop":"2021-02-17","estimated_ad_recall_rate":12.820513,"estimated_ad_recallers":110,"frequency":1.039627,"impressions":892,"inline_link_click_ctr":0.112108,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"reach":858,"spend":1.02,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.11655,"unique_inline_link_click_ctr":0.11655,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.11655,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.112108}],"country":"US"},"emitted_at":1674584185205} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"cost_per_estimated_ad_recallers":0.011222,"cost_per_inline_link_click":1.01,"cost_per_inline_post_engagement":1.01,"cost_per_unique_click":0.505,"cost_per_unique_inline_link_click":1.01,"cpc":0.505,"cpm":1.339523,"cpp":1.424542,"created_time":"2021-02-11","ctr":0.265252,"date_start":"2021-02-17","date_stop":"2021-02-17","estimated_ad_recall_rate":12.693935,"estimated_ad_recallers":90,"frequency":1.06347,"impressions":754,"inline_link_click_ctr":0.132626,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"reach":709,"spend":1.01,"unique_actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":2,"unique_ctr":0.282087,"unique_inline_link_click_ctr":0.141044,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.141044,"unique_outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.132626}],"country":"US"},"emitted_at":1674584185218} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.010778,"cost_per_inline_link_click":0.97,"cost_per_inline_post_engagement":0.97,"cost_per_unique_click":0.97,"cost_per_unique_inline_link_click":0.97,"cpc":0.97,"cpm":1.284768,"cpp":1.337931,"created_time":"2021-02-09","ctr":0.13245,"date_start":"2021-02-18","date_stop":"2021-02-18","estimated_ad_recall_rate":12.413793,"estimated_ad_recallers":90,"frequency":1.041379,"impressions":755,"inline_link_click_ctr":0.13245,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"reach":725,"spend":0.97,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.137931,"unique_inline_link_click_ctr":0.137931,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.137931,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.13245}],"country":"US"},"emitted_at":1674584185817} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.011444,"cpm":1.237981,"cpp":1.2875,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-18","date_stop":"2021-02-18","estimated_ad_recall_rate":11.25,"estimated_ad_recallers":90,"frequency":1.04,"impressions":832,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":800,"spend":1.03,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584185835} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"cost_per_estimated_ad_recallers":0.010556,"cost_per_unique_click":0.316667,"cpc":0.316667,"cpm":1.353276,"cpp":1.41369,"created_time":"2021-02-09","ctr":0.42735,"date_start":"2021-02-19","date_stop":"2021-02-19","estimated_ad_recall_rate":13.392857,"estimated_ad_recallers":90,"frequency":1.044643,"impressions":702,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":672,"spend":0.95,"unique_clicks":3,"unique_ctr":0.446429,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584186120} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.0107,"cost_per_inline_link_click":1.07,"cost_per_inline_post_engagement":1.07,"cost_per_unique_click":1.07,"cost_per_unique_inline_link_click":1.07,"cpc":1.07,"cpm":1.345912,"cpp":1.406045,"created_time":"2021-02-11","ctr":0.125786,"date_start":"2021-02-19","date_stop":"2021-02-19","estimated_ad_recall_rate":13.140604,"estimated_ad_recallers":100,"frequency":1.044678,"impressions":795,"inline_link_click_ctr":0.125786,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"reach":761,"spend":1.07,"unique_actions":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.131406,"unique_inline_link_click_ctr":0.131406,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.131406,"unique_outbound_clicks":[{"action_destination":"243077367363346","action_target_id":"243077367363346","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.125786}],"country":"US"},"emitted_at":1674584186138} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"cost_per_estimated_ad_recallers":0.0104,"cost_per_inline_link_click":1.04,"cost_per_inline_post_engagement":1.04,"cost_per_unique_click":0.346667,"cost_per_unique_inline_link_click":1.04,"cpc":0.346667,"cpm":1.438451,"cpp":1.522694,"created_time":"2021-02-09","ctr":0.414938,"date_start":"2021-02-20","date_stop":"2021-02-20","estimated_ad_recall_rate":14.641288,"estimated_ad_recallers":100,"frequency":1.058565,"impressions":723,"inline_link_click_ctr":0.138313,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"reach":683,"spend":1.04,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":3,"unique_ctr":0.439239,"unique_inline_link_click_ctr":0.146413,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.146413,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":1}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.138313}],"country":"US"},"emitted_at":1674584186561} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.010889,"cpm":1.412104,"cpp":1.484848,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-20","date_stop":"2021-02-20","estimated_ad_recall_rate":13.636364,"estimated_ad_recallers":90,"frequency":1.051515,"impressions":694,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":660,"spend":0.98,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584186575} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.01,"cpm":1.335113,"cpp":1.398601,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-21","date_stop":"2021-02-21","estimated_ad_recall_rate":13.986014,"estimated_ad_recallers":100,"frequency":1.047552,"impressions":749,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":715,"spend":1,"unique_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584187334} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.010556,"cpm":1.310345,"cpp":1.370851,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-21","date_stop":"2021-02-21","estimated_ad_recall_rate":12.987013,"estimated_ad_recallers":90,"frequency":1.046176,"impressions":725,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":693,"spend":0.95,"unique_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584187345} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.010444,"cost_per_unique_click":0.94,"cpc":0.94,"cpm":1.289438,"cpp":1.327684,"created_time":"2021-02-09","ctr":0.137174,"date_start":"2021-02-22","date_stop":"2021-02-22","estimated_ad_recall_rate":12.711864,"estimated_ad_recallers":90,"frequency":1.029661,"impressions":729,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":708,"spend":0.94,"unique_clicks":1,"unique_ctr":0.141243,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584187759} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.011125,"cpm":1.332335,"cpp":1.37558,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-22","date_stop":"2021-02-22","estimated_ad_recall_rate":12.36476,"estimated_ad_recallers":80,"frequency":1.032457,"impressions":668,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":647,"spend":0.89,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584187771} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"cost_per_estimated_ad_recallers":0.010455,"cost_per_inline_link_click":0.575,"cost_per_inline_post_engagement":0.575,"cost_per_unique_click":0.575,"cost_per_unique_inline_link_click":0.575,"cpc":0.575,"cpm":1.320321,"cpp":1.382212,"created_time":"2021-02-09","ctr":0.229621,"date_start":"2021-02-23","date_stop":"2021-02-23","estimated_ad_recall_rate":13.221154,"estimated_ad_recallers":110,"frequency":1.046875,"impressions":871,"inline_link_click_ctr":0.229621,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":2}],"reach":832,"spend":1.15,"unique_actions":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.240385,"unique_inline_link_click_ctr":0.240385,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.240385,"unique_outbound_clicks":[{"action_destination":"244953057175777","action_target_id":"244953057175777","action_type":"outbound_click","value":2}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.229621}],"country":"US"},"emitted_at":1674584188164} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"post_reaction","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.011143,"cost_per_inline_post_engagement":0.78,"cpm":1.433824,"cpp":1.508704,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-23","date_stop":"2021-02-23","estimated_ad_recall_rate":13.539652,"estimated_ad_recallers":70,"frequency":1.052224,"impressions":544,"inline_link_clicks":0,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":517,"spend":0.78,"unique_actions":[{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"post_reaction","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_destination":"Airbyte","action_target_id":"112704783733939","action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584188176} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"cost_per_estimated_ad_recallers":0.012222,"cost_per_unique_click":1.1,"cpc":1.1,"cpm":1.544944,"cpp":1.617647,"created_time":"2021-02-09","ctr":0.140449,"date_start":"2021-02-24","date_stop":"2021-02-24","estimated_ad_recall_rate":13.235294,"estimated_ad_recallers":90,"frequency":1.047059,"impressions":712,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":680,"spend":1.1,"unique_clicks":1,"unique_ctr":0.147059,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584188400} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.0146,"cpm":1.533613,"cpp":1.593886,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-24","date_stop":"2021-02-24","estimated_ad_recall_rate":10.917031,"estimated_ad_recallers":50,"frequency":1.039301,"impressions":476,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":458,"spend":0.73,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584188411} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.013778,"cpm":1.715076,"cpp":1.789322,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-25","date_stop":"2021-02-25","estimated_ad_recall_rate":12.987013,"estimated_ad_recallers":90,"frequency":1.04329,"impressions":723,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":693,"spend":1.24,"unique_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584188850} +{"stream":"ads_insights_country","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"cost_per_estimated_ad_recallers":0.018,"cpm":1.930295,"cpp":2,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-25","date_stop":"2021-02-25","estimated_ad_recall_rate":11.111111,"estimated_ad_recallers":40,"frequency":1.036111,"impressions":373,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","reach":360,"spend":0.72,"unique_ctr":0,"updated_time":"2021-08-27","country":"US"},"emitted_at":1674584188862} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-08","date_stop":"2021-02-08","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584315775} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-09","date_stop":"2021-02-09","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584316128} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-09","date_start":"2021-02-10","date_stop":"2021-02-10","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584316470} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-11","date_start":"2021-02-10","date_stop":"2021-02-10","engagement_rate_ranking":"UNKNOWN","frequency":0,"impressions":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584316484} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"page_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"post_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23}],"cost_per_estimated_ad_recallers":0.006571,"cost_per_inline_link_click":0.23,"cost_per_inline_post_engagement":0.23,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.23}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"page_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23},{"action_type":"post_engagement","value":0.23,"1d_click":0.23,"7d_click":0.23,"28d_click":0.23}],"cost_per_unique_click":0.23,"cost_per_unique_inline_link_click":0.23,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.23}],"cpc":0.23,"cpm":0.946502,"cpp":0.964361,"created_time":"2021-02-09","ctr":0.411523,"date_start":"2021-02-11","date_stop":"2021-02-11","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.675052,"estimated_ad_recallers":70,"frequency":1.018868,"impressions":486,"inline_link_click_ctr":0.411523,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":2}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.411523}],"quality_ranking":"UNKNOWN","reach":477,"social_spend":0,"spend":0.46,"unique_actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.419287,"unique_inline_link_click_ctr":0.419287,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.419287,"unique_outbound_clicks":[{"action_type":"outbound_click","value":2}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.419287}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.411523}],"wish_bid":0},"emitted_at":1674584317006} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","created_time":"2021-02-11","date_start":"2021-02-11","date_stop":"2021-02-11","engagement_rate_ranking":"UNKNOWN","estimated_ad_recallers":0,"frequency":0,"impressions":0,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":0,"social_spend":0,"spend":0,"unique_clicks":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584317018} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.008667,"cpm":1.293532,"cpp":1.381142,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-12","date_stop":"2021-02-12","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":15.936255,"estimated_ad_recallers":120,"frequency":1.067729,"impressions":804,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":753,"social_spend":0,"spend":1.04,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584317423} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":0.83,"1d_click":0.83,"7d_click":0.83,"28d_click":0.83},{"action_type":"page_engagement","value":0.83,"1d_click":0.83,"7d_click":0.83,"28d_click":0.83},{"action_type":"post_engagement","value":0.83,"1d_click":0.83,"7d_click":0.83,"28d_click":0.83}],"cost_per_estimated_ad_recallers":0.007545,"cost_per_inline_link_click":0.83,"cost_per_inline_post_engagement":0.83,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.83}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.83,"1d_click":0.83,"7d_click":0.83,"28d_click":0.83},{"action_type":"page_engagement","value":0.83,"1d_click":0.83,"7d_click":0.83,"28d_click":0.83},{"action_type":"post_engagement","value":0.83,"1d_click":0.83,"7d_click":0.83,"28d_click":0.83}],"cost_per_unique_click":0.83,"cost_per_unique_inline_link_click":0.83,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.83}],"cpc":0.83,"cpm":1.111111,"cpp":1.173975,"created_time":"2021-02-11","ctr":0.133869,"date_start":"2021-02-12","date_stop":"2021-02-12","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":15.558699,"estimated_ad_recallers":110,"frequency":1.056577,"impressions":747,"inline_link_click_ctr":0.133869,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.133869}],"quality_ranking":"UNKNOWN","reach":707,"social_spend":0,"spend":0.83,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.141443,"unique_inline_link_click_ctr":0.141443,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.141443,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.141443}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.133869}],"wish_bid":0},"emitted_at":1674584317431} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":1.18,"1d_click":1.18,"7d_click":1.18,"28d_click":1.18},{"action_type":"page_engagement","value":1.18,"1d_click":1.18,"7d_click":1.18,"28d_click":1.18},{"action_type":"post_engagement","value":1.18,"1d_click":1.18,"7d_click":1.18,"28d_click":1.18}],"cost_per_estimated_ad_recallers":0.010727,"cost_per_inline_link_click":1.18,"cost_per_inline_post_engagement":1.18,"cost_per_outbound_click":[{"action_type":"outbound_click","value":1.18}],"cost_per_unique_action_type":[{"action_type":"link_click","value":1.18,"1d_click":1.18,"7d_click":1.18,"28d_click":1.18},{"action_type":"page_engagement","value":1.18,"1d_click":1.18,"7d_click":1.18,"28d_click":1.18},{"action_type":"post_engagement","value":1.18,"1d_click":1.18,"7d_click":1.18,"28d_click":1.18}],"cost_per_unique_click":1.18,"cost_per_unique_inline_link_click":1.18,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":1.18}],"cpc":1.18,"cpm":1.528497,"cpp":1.620879,"created_time":"2021-02-09","ctr":0.129534,"date_start":"2021-02-13","date_stop":"2021-02-13","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":15.10989,"estimated_ad_recallers":110,"frequency":1.06044,"impressions":772,"inline_link_click_ctr":0.129534,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.129534}],"quality_ranking":"UNKNOWN","reach":728,"social_spend":0,"spend":1.18,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.137363,"unique_inline_link_click_ctr":0.137363,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.137363,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.137363}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.129534}],"wish_bid":0},"emitted_at":1674584317931} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":0.395,"1d_click":0.395,"7d_click":0.395,"28d_click":0.395},{"action_type":"page_engagement","value":0.395,"1d_click":0.395,"7d_click":0.395,"28d_click":0.395},{"action_type":"post_engagement","value":0.395,"1d_click":0.395,"7d_click":0.395,"28d_click":0.395}],"cost_per_estimated_ad_recallers":0.011286,"cost_per_inline_link_click":0.395,"cost_per_inline_post_engagement":0.395,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.395}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.395,"1d_click":0.395,"7d_click":0.395,"28d_click":0.395},{"action_type":"page_engagement","value":0.395,"1d_click":0.395,"7d_click":0.395,"28d_click":0.395},{"action_type":"post_engagement","value":0.395,"1d_click":0.395,"7d_click":0.395,"28d_click":0.395}],"cost_per_unique_click":0.395,"cost_per_unique_inline_link_click":0.395,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.395}],"cpc":0.395,"cpm":1.519231,"cpp":1.592742,"created_time":"2021-02-11","ctr":0.384615,"date_start":"2021-02-13","date_stop":"2021-02-13","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.112903,"estimated_ad_recallers":70,"frequency":1.048387,"impressions":520,"inline_link_click_ctr":0.384615,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":2}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.384615}],"quality_ranking":"UNKNOWN","reach":496,"social_spend":0,"spend":0.79,"unique_actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.403226,"unique_inline_link_click_ctr":0.403226,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.403226,"unique_outbound_clicks":[{"action_type":"outbound_click","value":2}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.403226}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.384615}],"wish_bid":0},"emitted_at":1674584317939} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":1.24,"1d_click":1.24,"7d_click":1.24,"28d_click":1.24},{"action_type":"page_engagement","value":1.24,"1d_click":1.24,"7d_click":1.24,"28d_click":1.24},{"action_type":"post_engagement","value":1.24,"1d_click":1.24,"7d_click":1.24,"28d_click":1.24}],"cost_per_estimated_ad_recallers":0.009538,"cost_per_inline_link_click":1.24,"cost_per_inline_post_engagement":1.24,"cost_per_outbound_click":[{"action_type":"outbound_click","value":1.24}],"cost_per_unique_action_type":[{"action_type":"link_click","value":1.24,"1d_click":1.24,"7d_click":1.24,"28d_click":1.24},{"action_type":"page_engagement","value":1.24,"1d_click":1.24,"7d_click":1.24,"28d_click":1.24},{"action_type":"post_engagement","value":1.24,"1d_click":1.24,"7d_click":1.24,"28d_click":1.24}],"cost_per_unique_click":1.24,"cost_per_unique_inline_link_click":1.24,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":1.24}],"cpc":1.24,"cpm":1.27572,"cpp":1.341991,"created_time":"2021-02-09","ctr":0.102881,"date_start":"2021-02-14","date_stop":"2021-02-14","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.069264,"estimated_ad_recallers":130,"frequency":1.051948,"impressions":972,"inline_link_click_ctr":0.102881,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.102881}],"quality_ranking":"UNKNOWN","reach":924,"social_spend":0,"spend":1.24,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.108225,"unique_inline_link_click_ctr":0.108225,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.108225,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.108225}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.102881}],"wish_bid":0},"emitted_at":1674584318432} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.008889,"cost_per_unique_click":0.8,"cpc":0.8,"cpm":1.255887,"cpp":1.296596,"created_time":"2021-02-11","ctr":0.156986,"date_start":"2021-02-14","date_stop":"2021-02-14","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.58671,"estimated_ad_recallers":90,"frequency":1.032415,"impressions":637,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":617,"social_spend":0,"spend":0.8,"unique_clicks":1,"unique_ctr":0.162075,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584318443} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_type":"page_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_type":"post_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":0.396667,"1d_click":0.396667,"7d_click":0.396667,"28d_click":0.396667},{"action_type":"page_engagement","value":0.396667,"1d_click":0.396667,"7d_click":0.396667,"28d_click":0.396667},{"action_type":"post_engagement","value":0.396667,"1d_click":0.396667,"7d_click":0.396667,"28d_click":0.396667}],"cost_per_estimated_ad_recallers":0.007,"cost_per_inline_link_click":0.396667,"cost_per_inline_post_engagement":0.396667,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.396667}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.396667,"1d_click":0.396667,"7d_click":0.396667,"28d_click":0.396667},{"action_type":"page_engagement","value":0.396667,"1d_click":0.396667,"7d_click":0.396667,"28d_click":0.396667},{"action_type":"post_engagement","value":0.396667,"1d_click":0.396667,"7d_click":0.396667,"28d_click":0.396667}],"cost_per_unique_click":0.396667,"cost_per_unique_inline_link_click":0.396667,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.396667}],"cpc":0.396667,"cpm":0.902199,"cpp":0.948207,"created_time":"2021-02-09","ctr":0.227445,"date_start":"2021-02-15","date_stop":"2021-02-15","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.545817,"estimated_ad_recallers":170,"frequency":1.050996,"impressions":1319,"inline_link_click_ctr":0.227445,"inline_link_clicks":3,"inline_post_engagement":3,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":3}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.227445}],"quality_ranking":"UNKNOWN","reach":1255,"social_spend":0,"spend":1.19,"unique_actions":[{"action_type":"link_click","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_type":"page_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3},{"action_type":"post_engagement","value":3,"1d_click":3,"7d_click":3,"28d_click":3}],"unique_clicks":3,"unique_ctr":0.239044,"unique_inline_link_click_ctr":0.239044,"unique_inline_link_clicks":3,"unique_link_clicks_ctr":0.239044,"unique_outbound_clicks":[{"action_type":"outbound_click","value":3}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.239044}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.227445}],"wish_bid":0},"emitted_at":1674584318855} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.0085,"cpm":1.177285,"cpp":1.233672,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-15","date_stop":"2021-02-15","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.513788,"estimated_ad_recallers":100,"frequency":1.047896,"impressions":722,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":689,"social_spend":0,"spend":0.85,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584318863} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":1.36,"1d_click":1.36,"7d_click":1.36,"28d_click":1.36},{"action_type":"page_engagement","value":1.36,"1d_click":1.36,"7d_click":1.36,"28d_click":1.36},{"action_type":"post_engagement","value":1.36,"1d_click":1.36,"7d_click":1.36,"28d_click":1.36}],"cost_per_estimated_ad_recallers":0.007556,"cost_per_inline_link_click":1.36,"cost_per_inline_post_engagement":1.36,"cost_per_outbound_click":[{"action_type":"outbound_click","value":1.36}],"cost_per_unique_action_type":[{"action_type":"link_click","value":1.36,"1d_click":1.36,"7d_click":1.36,"28d_click":1.36},{"action_type":"page_engagement","value":1.36,"1d_click":1.36,"7d_click":1.36,"28d_click":1.36},{"action_type":"post_engagement","value":1.36,"1d_click":1.36,"7d_click":1.36,"28d_click":1.36}],"cost_per_unique_click":0.68,"cost_per_unique_inline_link_click":1.36,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":1.36}],"cpc":0.68,"cpm":0.995608,"cpp":1.038961,"created_time":"2021-02-09","ctr":0.146413,"date_start":"2021-02-16","date_stop":"2021-02-16","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.750955,"estimated_ad_recallers":180,"frequency":1.043545,"impressions":1366,"inline_link_click_ctr":0.073206,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.073206}],"quality_ranking":"UNKNOWN","reach":1309,"social_spend":0,"spend":1.36,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":2,"unique_ctr":0.152788,"unique_inline_link_click_ctr":0.076394,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.076394,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.076394}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.073206}],"wish_bid":0},"emitted_at":1674584319245} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.009857,"cpm":1.219081,"cpp":1.268382,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-16","date_stop":"2021-02-16","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.867647,"estimated_ad_recallers":70,"frequency":1.040441,"impressions":566,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":544,"social_spend":0,"spend":0.69,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584319257} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":1.02,"1d_click":1.02,"7d_click":1.02,"28d_click":1.02},{"action_type":"page_engagement","value":1.02,"1d_click":1.02,"7d_click":1.02,"28d_click":1.02},{"action_type":"post_engagement","value":1.02,"1d_click":1.02,"7d_click":1.02,"28d_click":1.02}],"cost_per_estimated_ad_recallers":0.009273,"cost_per_inline_link_click":1.02,"cost_per_inline_post_engagement":1.02,"cost_per_outbound_click":[{"action_type":"outbound_click","value":1.02}],"cost_per_unique_action_type":[{"action_type":"link_click","value":1.02,"1d_click":1.02,"7d_click":1.02,"28d_click":1.02},{"action_type":"page_engagement","value":1.02,"1d_click":1.02,"7d_click":1.02,"28d_click":1.02},{"action_type":"post_engagement","value":1.02,"1d_click":1.02,"7d_click":1.02,"28d_click":1.02}],"cost_per_unique_click":1.02,"cost_per_unique_inline_link_click":1.02,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":1.02}],"cpc":1.02,"cpm":1.143498,"cpp":1.188811,"created_time":"2021-02-09","ctr":0.112108,"date_start":"2021-02-17","date_stop":"2021-02-17","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.820513,"estimated_ad_recallers":110,"frequency":1.039627,"impressions":892,"inline_link_click_ctr":0.112108,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.112108}],"quality_ranking":"UNKNOWN","reach":858,"social_spend":0,"spend":1.02,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.11655,"unique_inline_link_click_ctr":0.11655,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.11655,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.11655}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.112108}],"wish_bid":0},"emitted_at":1674584319657} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":1.01,"1d_click":1.01,"7d_click":1.01,"28d_click":1.01},{"action_type":"page_engagement","value":1.01,"1d_click":1.01,"7d_click":1.01,"28d_click":1.01},{"action_type":"post_engagement","value":1.01,"1d_click":1.01,"7d_click":1.01,"28d_click":1.01}],"cost_per_estimated_ad_recallers":0.011222,"cost_per_inline_link_click":1.01,"cost_per_inline_post_engagement":1.01,"cost_per_outbound_click":[{"action_type":"outbound_click","value":1.01}],"cost_per_unique_action_type":[{"action_type":"link_click","value":1.01,"1d_click":1.01,"7d_click":1.01,"28d_click":1.01},{"action_type":"page_engagement","value":1.01,"1d_click":1.01,"7d_click":1.01,"28d_click":1.01},{"action_type":"post_engagement","value":1.01,"1d_click":1.01,"7d_click":1.01,"28d_click":1.01}],"cost_per_unique_click":0.505,"cost_per_unique_inline_link_click":1.01,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":1.01}],"cpc":0.505,"cpm":1.339523,"cpp":1.424542,"created_time":"2021-02-11","ctr":0.265252,"date_start":"2021-02-17","date_stop":"2021-02-17","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.693935,"estimated_ad_recallers":90,"frequency":1.06347,"impressions":754,"inline_link_click_ctr":0.132626,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.132626}],"quality_ranking":"UNKNOWN","reach":709,"social_spend":0,"spend":1.01,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":2,"unique_ctr":0.282087,"unique_inline_link_click_ctr":0.141044,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.141044,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.141044}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.132626}],"wish_bid":0},"emitted_at":1674584319667} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":0.97,"1d_click":0.97,"7d_click":0.97,"28d_click":0.97},{"action_type":"page_engagement","value":0.97,"1d_click":0.97,"7d_click":0.97,"28d_click":0.97},{"action_type":"post_engagement","value":0.97,"1d_click":0.97,"7d_click":0.97,"28d_click":0.97}],"cost_per_estimated_ad_recallers":0.010778,"cost_per_inline_link_click":0.97,"cost_per_inline_post_engagement":0.97,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.97}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.97,"1d_click":0.97,"7d_click":0.97,"28d_click":0.97},{"action_type":"page_engagement","value":0.97,"1d_click":0.97,"7d_click":0.97,"28d_click":0.97},{"action_type":"post_engagement","value":0.97,"1d_click":0.97,"7d_click":0.97,"28d_click":0.97}],"cost_per_unique_click":0.97,"cost_per_unique_inline_link_click":0.97,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.97}],"cpc":0.97,"cpm":1.284768,"cpp":1.337931,"created_time":"2021-02-09","ctr":0.13245,"date_start":"2021-02-18","date_stop":"2021-02-18","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.413793,"estimated_ad_recallers":90,"frequency":1.041379,"impressions":755,"inline_link_click_ctr":0.13245,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.13245}],"quality_ranking":"UNKNOWN","reach":725,"social_spend":0,"spend":0.97,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.137931,"unique_inline_link_click_ctr":0.137931,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.137931,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.137931}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.13245}],"wish_bid":0},"emitted_at":1674584320112} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.011444,"cpm":1.237981,"cpp":1.2875,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-18","date_stop":"2021-02-18","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":11.25,"estimated_ad_recallers":90,"frequency":1.04,"impressions":832,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":800,"social_spend":0,"spend":1.03,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584320129} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010556,"cost_per_unique_click":0.316667,"cpc":0.316667,"cpm":1.353276,"cpp":1.41369,"created_time":"2021-02-09","ctr":0.42735,"date_start":"2021-02-19","date_stop":"2021-02-19","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.392857,"estimated_ad_recallers":90,"frequency":1.044643,"impressions":702,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":672,"social_spend":0,"spend":0.95,"unique_clicks":3,"unique_ctr":0.446429,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584320498} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":1.07,"1d_click":1.07,"7d_click":1.07,"28d_click":1.07},{"action_type":"page_engagement","value":1.07,"1d_click":1.07,"7d_click":1.07,"28d_click":1.07},{"action_type":"post_engagement","value":1.07,"1d_click":1.07,"7d_click":1.07,"28d_click":1.07}],"cost_per_estimated_ad_recallers":0.0107,"cost_per_inline_link_click":1.07,"cost_per_inline_post_engagement":1.07,"cost_per_outbound_click":[{"action_type":"outbound_click","value":1.07}],"cost_per_unique_action_type":[{"action_type":"link_click","value":1.07,"1d_click":1.07,"7d_click":1.07,"28d_click":1.07},{"action_type":"page_engagement","value":1.07,"1d_click":1.07,"7d_click":1.07,"28d_click":1.07},{"action_type":"post_engagement","value":1.07,"1d_click":1.07,"7d_click":1.07,"28d_click":1.07}],"cost_per_unique_click":1.07,"cost_per_unique_inline_link_click":1.07,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":1.07}],"cpc":1.07,"cpm":1.345912,"cpp":1.406045,"created_time":"2021-02-11","ctr":0.125786,"date_start":"2021-02-19","date_stop":"2021-02-19","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.140604,"estimated_ad_recallers":100,"frequency":1.044678,"impressions":795,"inline_link_click_ctr":0.125786,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.125786}],"quality_ranking":"UNKNOWN","reach":761,"social_spend":0,"spend":1.07,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":1,"unique_ctr":0.131406,"unique_inline_link_click_ctr":0.131406,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.131406,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.131406}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.125786}],"wish_bid":0},"emitted_at":1674584320507} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":3,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":1.04,"1d_click":1.04,"7d_click":1.04,"28d_click":1.04},{"action_type":"page_engagement","value":1.04,"1d_click":1.04,"7d_click":1.04,"28d_click":1.04},{"action_type":"post_engagement","value":1.04,"1d_click":1.04,"7d_click":1.04,"28d_click":1.04}],"cost_per_estimated_ad_recallers":0.0104,"cost_per_inline_link_click":1.04,"cost_per_inline_post_engagement":1.04,"cost_per_outbound_click":[{"action_type":"outbound_click","value":1.04}],"cost_per_unique_action_type":[{"action_type":"link_click","value":1.04,"1d_click":1.04,"7d_click":1.04,"28d_click":1.04},{"action_type":"page_engagement","value":1.04,"1d_click":1.04,"7d_click":1.04,"28d_click":1.04},{"action_type":"post_engagement","value":1.04,"1d_click":1.04,"7d_click":1.04,"28d_click":1.04}],"cost_per_unique_click":0.346667,"cost_per_unique_inline_link_click":1.04,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":1.04}],"cpc":0.346667,"cpm":1.438451,"cpp":1.522694,"created_time":"2021-02-09","ctr":0.414938,"date_start":"2021-02-20","date_stop":"2021-02-20","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":14.641288,"estimated_ad_recallers":100,"frequency":1.058565,"impressions":723,"inline_link_click_ctr":0.138313,"inline_link_clicks":1,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":1}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.138313}],"quality_ranking":"UNKNOWN","reach":683,"social_spend":0,"spend":1.04,"unique_actions":[{"action_type":"link_click","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":3,"unique_ctr":0.439239,"unique_inline_link_click_ctr":0.146413,"unique_inline_link_clicks":1,"unique_link_clicks_ctr":0.146413,"unique_outbound_clicks":[{"action_type":"outbound_click","value":1}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.146413}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.138313}],"wish_bid":0},"emitted_at":1674584320915} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010889,"cpm":1.412104,"cpp":1.484848,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-20","date_stop":"2021-02-20","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.636364,"estimated_ad_recallers":90,"frequency":1.051515,"impressions":694,"inline_link_clicks":0,"inline_post_engagement":0,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":660,"social_spend":0,"spend":0.98,"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584320923} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.01,"cpm":1.335113,"cpp":1.398601,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-21","date_stop":"2021-02-21","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.986014,"estimated_ad_recallers":100,"frequency":1.047552,"impressions":749,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":715,"social_spend":0,"spend":1,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584321319} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010556,"cpm":1.310345,"cpp":1.370851,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-21","date_stop":"2021-02-21","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.987013,"estimated_ad_recallers":90,"frequency":1.046176,"impressions":725,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":693,"social_spend":0,"spend":0.95,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584321334} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.010444,"cost_per_unique_click":0.94,"cpc":0.94,"cpm":1.289438,"cpp":1.327684,"created_time":"2021-02-09","ctr":0.137174,"date_start":"2021-02-22","date_stop":"2021-02-22","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.711864,"estimated_ad_recallers":90,"frequency":1.029661,"impressions":729,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":708,"social_spend":0,"spend":0.94,"unique_clicks":1,"unique_ctr":0.141243,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584322033} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.011125,"cpm":1.332335,"cpp":1.37558,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-22","date_stop":"2021-02-22","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.36476,"estimated_ad_recallers":80,"frequency":1.032457,"impressions":668,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":647,"social_spend":0,"spend":0.89,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584322043} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":2,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"link_click","value":0.575,"1d_click":0.575,"7d_click":0.575,"28d_click":0.575},{"action_type":"page_engagement","value":0.575,"1d_click":0.575,"7d_click":0.575,"28d_click":0.575},{"action_type":"post_engagement","value":0.575,"1d_click":0.575,"7d_click":0.575,"28d_click":0.575}],"cost_per_estimated_ad_recallers":0.010455,"cost_per_inline_link_click":0.575,"cost_per_inline_post_engagement":0.575,"cost_per_outbound_click":[{"action_type":"outbound_click","value":0.575}],"cost_per_unique_action_type":[{"action_type":"link_click","value":0.575,"1d_click":0.575,"7d_click":0.575,"28d_click":0.575},{"action_type":"page_engagement","value":0.575,"1d_click":0.575,"7d_click":0.575,"28d_click":0.575},{"action_type":"post_engagement","value":0.575,"1d_click":0.575,"7d_click":0.575,"28d_click":0.575}],"cost_per_unique_click":0.575,"cost_per_unique_inline_link_click":0.575,"cost_per_unique_outbound_click":[{"action_type":"outbound_click","value":0.575}],"cpc":0.575,"cpm":1.320321,"cpp":1.382212,"created_time":"2021-02-09","ctr":0.229621,"date_start":"2021-02-23","date_stop":"2021-02-23","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.221154,"estimated_ad_recallers":110,"frequency":1.046875,"impressions":871,"inline_link_click_ctr":0.229621,"inline_link_clicks":2,"inline_post_engagement":2,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","outbound_clicks":[{"action_type":"outbound_click","value":2}],"outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.229621}],"quality_ranking":"UNKNOWN","reach":832,"social_spend":0,"spend":1.15,"unique_actions":[{"action_type":"link_click","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"page_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2},{"action_type":"post_engagement","value":2,"1d_click":2,"7d_click":2,"28d_click":2}],"unique_clicks":2,"unique_ctr":0.240385,"unique_inline_link_click_ctr":0.240385,"unique_inline_link_clicks":2,"unique_link_clicks_ctr":0.240385,"unique_outbound_clicks":[{"action_type":"outbound_click","value":2}],"unique_outbound_clicks_ctr":[{"action_type":"outbound_click","value":0.240385}],"updated_time":"2021-08-27","website_ctr":[{"action_type":"link_click","value":0.229621}],"wish_bid":0},"emitted_at":1674584322485} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","actions":[{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_reaction","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_action_type":[{"action_type":"page_engagement","value":0.78,"1d_click":0.78,"7d_click":0.78,"28d_click":0.78},{"action_type":"post_engagement","value":0.78,"1d_click":0.78,"7d_click":0.78,"28d_click":0.78}],"cost_per_estimated_ad_recallers":0.011143,"cost_per_inline_post_engagement":0.78,"cost_per_unique_action_type":[{"action_type":"page_engagement","value":0.78,"1d_click":0.78,"7d_click":0.78,"28d_click":0.78},{"action_type":"post_engagement","value":0.78,"1d_click":0.78,"7d_click":0.78,"28d_click":0.78}],"cpm":1.433824,"cpp":1.508704,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-23","date_stop":"2021-02-23","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.539652,"estimated_ad_recallers":70,"frequency":1.052224,"impressions":544,"inline_link_clicks":0,"inline_post_engagement":1,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":517,"social_spend":0,"spend":0.78,"unique_actions":[{"action_type":"page_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_engagement","value":1,"1d_click":1,"7d_click":1,"28d_click":1},{"action_type":"post_reaction","value":1,"1d_click":1,"7d_click":1,"28d_click":1}],"unique_clicks":0,"unique_ctr":0,"unique_inline_link_clicks":0,"unique_link_clicks_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584322494} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":1,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.012222,"cost_per_unique_click":1.1,"cpc":1.1,"cpm":1.544944,"cpp":1.617647,"created_time":"2021-02-09","ctr":0.140449,"date_start":"2021-02-24","date_stop":"2021-02-24","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":13.235294,"estimated_ad_recallers":90,"frequency":1.047059,"impressions":712,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":680,"social_spend":0,"spend":1.1,"unique_clicks":1,"unique_ctr":0.147059,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584322914} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.0146,"cpm":1.533613,"cpp":1.593886,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-24","date_stop":"2021-02-24","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":10.917031,"estimated_ad_recallers":50,"frequency":1.039301,"impressions":476,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":458,"social_spend":0,"spend":0.73,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584322929} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846765228310398","ad_name":"Airbyte Ad","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.013778,"cpm":1.715076,"cpp":1.789322,"created_time":"2021-02-09","ctr":0,"date_start":"2021-02-25","date_stop":"2021-02-25","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":12.987013,"estimated_ad_recallers":90,"frequency":1.04329,"impressions":723,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":693,"social_spend":0,"spend":1.24,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584323420} +{"stream":"ads_insights_action_type","data":{"account_currency":"USD","account_id":"212551616838260","account_name":"Airbyte","ad_id":"23846784938030398","ad_name":"Stock photo ad 2","adset_id":"23846765228280398","adset_name":"Vanilla awareness ad set","buying_type":"AUCTION","campaign_id":"23846765228240398","campaign_name":"Airbyte Awareness Campaign 1 (sherif)","clicks":0,"conversion_rate_ranking":"UNKNOWN","cost_per_estimated_ad_recallers":0.018,"cpm":1.930295,"cpp":2,"created_time":"2021-02-11","ctr":0,"date_start":"2021-02-25","date_stop":"2021-02-25","engagement_rate_ranking":"UNKNOWN","estimated_ad_recall_rate":11.111111,"estimated_ad_recallers":40,"frequency":1.036111,"impressions":373,"objective":"BRAND_AWARENESS","optimization_goal":"AD_RECALL_LIFT","quality_ranking":"UNKNOWN","reach":360,"social_spend":0,"spend":0.72,"unique_clicks":0,"unique_ctr":0,"updated_time":"2021-08-27","wish_bid":0},"emitted_at":1674584323423} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-02-09T15:04:11-0800","effective_status":"PAUSED","id":"23846765228240398","name":"Airbyte Awareness Campaign 1 (sherif)","objective":"BRAND_AWARENESS","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"2021-02-09T15:04:13-0800","stop_time":"2021-09-30T14:47:46-0700","updated_time":"2021-09-10T08:17:10-0700"},"emitted_at":1674584324205} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-02-08T23:56:04-0800","effective_status":"PAUSED","id":"23846756820270398","name":"integration-test-campaign1","objective":"LINK_CLICKS","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"2021-02-08T23:56:07-0800","stop_time":"2021-03-09T14:45:43-0800","updated_time":"2021-07-26T00:21:26-0700"},"emitted_at":1674584324206} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-01-18T22:16:36-0800","effective_status":"PAUSED","id":"23846542371880398","name":"Fake Campaign 0","objective":"MESSAGES","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"2021-01-18T22:16:36-0800","updated_time":"2021-02-18T00:59:48-0800"},"emitted_at":1674584324208} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-01-18T21:42:45-0800","effective_status":"PAUSED","id":"23846542151990398","name":"Fake Campaign 0","objective":"MESSAGES","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"1969-12-31T15:59:59-0800","updated_time":"2021-02-18T01:00:00-0800"},"emitted_at":1674584324209} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-01-18T21:42:21-0800","effective_status":"PAUSED","id":"23846542150540398","name":"Fake Campaign 0","objective":"MESSAGES","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"1969-12-31T15:59:59-0800","updated_time":"2021-02-18T00:59:52-0800"},"emitted_at":1674584324210} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-01-18T21:36:42-0800","effective_status":"PAUSED","id":"23846542053890398","name":"Fake Campaign 0","objective":"MESSAGES","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"1969-12-31T15:59:59-0800","updated_time":"2021-02-18T01:00:02-0800"},"emitted_at":1674584324211} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-01-18T21:36:16-0800","effective_status":"PAUSED","id":"23846542048150398","name":"Fake Campaign 0","objective":"MESSAGES","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"1969-12-31T15:59:59-0800","updated_time":"2021-02-18T01:00:04-0800"},"emitted_at":1674584324211} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-01-18T21:33:03-0800","effective_status":"PAUSED","id":"23846542041640398","name":"Fake Campaign 0","objective":"MESSAGES","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"1969-12-31T15:59:59-0800","updated_time":"2021-02-18T01:00:03-0800"},"emitted_at":1674584324212} +{"stream":"campaigns","data":{"account_id":"212551616838260","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2021-01-18T21:20:51-0800","effective_status":"PAUSED","id":"23846541931180398","name":"Fake Campaign 0","objective":"MESSAGES","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"1969-12-31T15:59:59-0800","updated_time":"2021-02-18T01:00:04-0800"},"emitted_at":1674584324213} +{"stream":"campaigns","data":{"account_id":"212551616838260","bid_strategy":"LOWEST_COST_WITHOUT_CAP","budget_rebalance_flag":false,"budget_remaining":0,"buying_type":"AUCTION","created_time":"2020-04-13T18:13:49-0700","effective_status":"PAUSED","id":"23844521599700398","lifetime_budget":3000,"name":"Dataline Test Unblock","objective":"CONVERSIONS","smart_promotion_type":"GUIDED_CREATION","source_campaign_id":0,"special_ad_category":"NONE","start_time":"2020-04-13T18:21:59-0700","stop_time":"2020-04-30T00:00:00-0700","updated_time":"2021-07-25T00:50:53-0700"},"emitted_at":1674584324213} diff --git a/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/future_state.json b/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/future_state.json index b722670d563b9..c57f2c3ab904a 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/future_state.json +++ b/airbyte-integrations/connectors/source-facebook-marketing/integration_tests/future_state.json @@ -28,6 +28,16 @@ }, "stream_descriptor": { "name": "images" } } + }, + { + "type": "STREAM", + "stream": { + "stream_state": { + "updated_time": "2121-07-25T13:34:26Z", + "include_deleted": true + }, + "stream_descriptor": { "name": "videos" } + } }, { "type": "STREAM", diff --git a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/base_streams.py b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/base_streams.py index 7a1a8f628e741..34e2aa01c25fc 100644 --- a/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/base_streams.py +++ b/airbyte-integrations/connectors/source-facebook-marketing/source_facebook_marketing/streams/base_streams.py @@ -12,6 +12,7 @@ import pendulum from airbyte_cdk.models import SyncMode from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer from cached_property import cached_property from facebook_business.adobjects.abstractobject import AbstractObject @@ -40,6 +41,10 @@ class FBMarketingStream(Stream, ABC): # entity prefix for `include_deleted` filter, it usually matches singular version of stream name entity_prefix = None + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def __init__(self, api: "API", include_deleted: bool = False, page_size: int = 100, max_batch_size: int = 50, **kwargs): super().__init__(**kwargs) self._api = api diff --git a/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/facebook_pages.yaml b/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/facebook_pages.yaml rename to airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/manifest.yaml diff --git a/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/source.py b/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/source.py index 1bfc7795a350f..7a7f03edb8218 100644 --- a/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/source.py +++ b/airbyte-integrations/connectors/source-facebook-pages/source_facebook_pages/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceFacebookPages(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "facebook_pages.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-freshdesk/Dockerfile b/airbyte-integrations/connectors/source-freshdesk/Dockerfile index 3de5ddb704242..571345eb17a07 100644 --- a/airbyte-integrations/connectors/source-freshdesk/Dockerfile +++ b/airbyte-integrations/connectors/source-freshdesk/Dockerfile @@ -34,5 +34,5 @@ COPY source_freshdesk ./source_freshdesk ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=2.0.0 +LABEL io.airbyte.version=2.0.1 LABEL io.airbyte.name=airbyte/source-freshdesk diff --git a/airbyte-integrations/connectors/source-freshdesk/source_freshdesk/streams.py b/airbyte-integrations/connectors/source-freshdesk/source_freshdesk/streams.py index 83877e24ab654..61367124566ab 100644 --- a/airbyte-integrations/connectors/source-freshdesk/source_freshdesk/streams.py +++ b/airbyte-integrations/connectors/source-freshdesk/source_freshdesk/streams.py @@ -11,6 +11,7 @@ import pendulum import requests from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.core import IncrementalMixin from airbyte_cdk.sources.streams.http import HttpStream, HttpSubStream from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer @@ -46,6 +47,10 @@ def __init__(self, authenticator: AuthBase, config: Mapping[str, Any], *args, ** def url_base(self) -> str: return parse.urljoin(f"https://{self.domain.rstrip('/')}", "/api/v2/") + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def backoff_time(self, response: requests.Response) -> Optional[float]: if response.status_code == requests.codes.too_many_requests: return float(response.headers.get("Retry-After", 0)) diff --git a/airbyte-integrations/connectors/source-freshdesk/tickets.sqlite b/airbyte-integrations/connectors/source-freshdesk/tickets.sqlite new file mode 100644 index 0000000000000..a1a805e2a1a43 Binary files /dev/null and b/airbyte-integrations/connectors/source-freshdesk/tickets.sqlite differ diff --git a/airbyte-integrations/connectors/source-getlago/source_getlago/getlago.yaml b/airbyte-integrations/connectors/source-getlago/source_getlago/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-getlago/source_getlago/getlago.yaml rename to airbyte-integrations/connectors/source-getlago/source_getlago/manifest.yaml diff --git a/airbyte-integrations/connectors/source-getlago/source_getlago/source.py b/airbyte-integrations/connectors/source-getlago/source_getlago/source.py index 88153da5e8331..41faac0a0dcda 100644 --- a/airbyte-integrations/connectors/source-getlago/source_getlago/source.py +++ b/airbyte-integrations/connectors/source-getlago/source_getlago/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceGetlago(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "getlago.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-github/Dockerfile b/airbyte-integrations/connectors/source-github/Dockerfile index f3e74bdc4e468..cf623aad7466e 100644 --- a/airbyte-integrations/connectors/source-github/Dockerfile +++ b/airbyte-integrations/connectors/source-github/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.12 +LABEL io.airbyte.version=0.4.1 LABEL io.airbyte.name=airbyte/source-github diff --git a/airbyte-integrations/connectors/source-github/acceptance-test-config.yml b/airbyte-integrations/connectors/source-github/acceptance-test-config.yml index 80734e9cda026..7d77fcc5bdf70 100644 --- a/airbyte-integrations/connectors/source-github/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-github/acceptance-test-config.yml @@ -47,7 +47,7 @@ acceptance_tests: ["airbytehq/integration-test", "907296275", "created_at"] issue_events: ["airbytehq/integration-test", "created_at"] issue_milestones: ["airbytehq/integration-test", "updated_at"] - issue_reactions: ["airbytehq/integration-test", "11", "created_at"] + issue_reactions: ["airbytehq/integration-test", "created_at"] issues: ["airbytehq/integration-test", "updated_at"] project_cards: ["airbytehq/integration-test", "13167124", "17807006", "updated_at"] diff --git a/airbyte-integrations/connectors/source-github/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-github/integration_tests/abnormal_state.json index 7fdd31d4ab2a4..3bd85e2410175 100644 --- a/airbyte-integrations/connectors/source-github/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-github/integration_tests/abnormal_state.json @@ -89,9 +89,7 @@ "type": "STREAM", "stream": { "stream_state": { - "airbytehq/integration-test": { - "11": { "created_at": "2121-12-31T23:59:59Z" } - } + "airbytehq/integration-test": { "created_at": "2121-12-31T23:59:59Z" } }, "stream_descriptor": { "name": "issue_reactions" } } 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 6761248e5bc22..672611cac91a6 100644 --- a/airbyte-integrations/connectors/source-github/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-github/integration_tests/expected_records.jsonl @@ -46,8 +46,8 @@ {"stream":"issue_labels","data":{"id":3300346197,"node_id":"MDU6TGFiZWwzMzAwMzQ2MTk3","url":"https://api.github.com/repos/airbytehq/integration-test/labels/critical","name":"critical","color":"ededed","default":false,"description":null,"repository":"airbytehq/integration-test"},"emitted_at":1673559178152} {"stream":"issue_milestones","data":{"url":"https://api.github.com/repos/airbytehq/integration-test/milestones/4","html_url":"https://github.com/airbytehq/integration-test/milestone/4","labels_url":"https://api.github.com/repos/airbytehq/integration-test/milestones/4/labels","id":7786502,"node_id":"MI_kwDOF9hP9c4AdtAG","number":4,"title":"m2","description":"","creator":{"login":"airbyteio","id":92915184,"node_id":"U_kgDOBYnF8A","avatar_url":"https://avatars.githubusercontent.com/u/92915184?v=4","gravatar_id":"","url":"https://api.github.com/users/airbyteio","html_url":"https://github.com/airbyteio","followers_url":"https://api.github.com/users/airbyteio/followers","following_url":"https://api.github.com/users/airbyteio/following{/other_user}","gists_url":"https://api.github.com/users/airbyteio/gists{/gist_id}","starred_url":"https://api.github.com/users/airbyteio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/airbyteio/subscriptions","organizations_url":"https://api.github.com/users/airbyteio/orgs","repos_url":"https://api.github.com/users/airbyteio/repos","events_url":"https://api.github.com/users/airbyteio/events{/privacy}","received_events_url":"https://api.github.com/users/airbyteio/received_events","type":"User","site_admin":false},"open_issues":0,"closed_issues":0,"state":"open","created_at":"2022-03-21T08:37:46Z","updated_at":"2022-03-21T08:37:46Z","due_on":null,"closed_at":null,"repository":"airbytehq/integration-test"},"emitted_at":1673559253517} {"stream":"issue_milestones","data":{"url":"https://api.github.com/repos/airbytehq/integration-test/milestones/1","html_url":"https://github.com/airbytehq/integration-test/milestone/1","labels_url":"https://api.github.com/repos/airbytehq/integration-test/milestones/1/labels","id":7097357,"node_id":"MI_kwDOF9hP9c4AbEwN","number":1,"title":"main","description":null,"creator":{"login":"gaart","id":743901,"node_id":"MDQ6VXNlcjc0MzkwMQ==","avatar_url":"https://avatars.githubusercontent.com/u/743901?v=4","gravatar_id":"","url":"https://api.github.com/users/gaart","html_url":"https://github.com/gaart","followers_url":"https://api.github.com/users/gaart/followers","following_url":"https://api.github.com/users/gaart/following{/other_user}","gists_url":"https://api.github.com/users/gaart/gists{/gist_id}","starred_url":"https://api.github.com/users/gaart/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gaart/subscriptions","organizations_url":"https://api.github.com/users/gaart/orgs","repos_url":"https://api.github.com/users/gaart/repos","events_url":"https://api.github.com/users/gaart/events{/privacy}","received_events_url":"https://api.github.com/users/gaart/received_events","type":"User","site_admin":false},"open_issues":3,"closed_issues":1,"state":"open","created_at":"2021-08-27T15:43:44Z","updated_at":"2021-08-27T16:02:49Z","due_on":null,"closed_at":null,"repository":"airbytehq/integration-test"},"emitted_at":1673559253517} -{"stream":"issue_reactions","data":{"id":127048454,"node_id":"MDEzOklzc3VlUmVhY3Rpb24xMjcwNDg0NTQ=","user":{"login":"yevhenii-ldv","id":34103125,"node_id":"MDQ6VXNlcjM0MTAzMTI1","avatar_url":"https://avatars.githubusercontent.com/u/34103125?u=3e49bb73177a9f70896e3d49b34656ab659c70a5&v=4","gravatar_id":"","url":"https://api.github.com/users/yevhenii-ldv","html_url":"https://github.com/yevhenii-ldv","followers_url":"https://api.github.com/users/yevhenii-ldv/followers","following_url":"https://api.github.com/users/yevhenii-ldv/following{/other_user}","gists_url":"https://api.github.com/users/yevhenii-ldv/gists{/gist_id}","starred_url":"https://api.github.com/users/yevhenii-ldv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yevhenii-ldv/subscriptions","organizations_url":"https://api.github.com/users/yevhenii-ldv/orgs","repos_url":"https://api.github.com/users/yevhenii-ldv/repos","events_url":"https://api.github.com/users/yevhenii-ldv/events{/privacy}","received_events_url":"https://api.github.com/users/yevhenii-ldv/received_events","type":"User","site_admin":false},"content":"eyes","created_at":"2021-09-06T11:13:31Z","repository":"airbytehq/integration-test","issue_number":11},"emitted_at":1673559327732} -{"stream":"issue_reactions","data":{"id":127048456,"node_id":"MDEzOklzc3VlUmVhY3Rpb24xMjcwNDg0NTY=","user":{"login":"yevhenii-ldv","id":34103125,"node_id":"MDQ6VXNlcjM0MTAzMTI1","avatar_url":"https://avatars.githubusercontent.com/u/34103125?u=3e49bb73177a9f70896e3d49b34656ab659c70a5&v=4","gravatar_id":"","url":"https://api.github.com/users/yevhenii-ldv","html_url":"https://github.com/yevhenii-ldv","followers_url":"https://api.github.com/users/yevhenii-ldv/followers","following_url":"https://api.github.com/users/yevhenii-ldv/following{/other_user}","gists_url":"https://api.github.com/users/yevhenii-ldv/gists{/gist_id}","starred_url":"https://api.github.com/users/yevhenii-ldv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yevhenii-ldv/subscriptions","organizations_url":"https://api.github.com/users/yevhenii-ldv/orgs","repos_url":"https://api.github.com/users/yevhenii-ldv/repos","events_url":"https://api.github.com/users/yevhenii-ldv/events{/privacy}","received_events_url":"https://api.github.com/users/yevhenii-ldv/received_events","type":"User","site_admin":false},"content":"rocket","created_at":"2021-09-06T11:13:32Z","repository":"airbytehq/integration-test","issue_number":11},"emitted_at":1673559327732} +{"stream":"issue_reactions","data":{"node_id":"MDEzOklzc3VlUmVhY3Rpb24xMjcwNDg0NTQ=","id":127048454,"content":"EYES","created_at":"2021-09-06T11:13:31Z","user":{"node_id":"MDQ6VXNlcjM0MTAzMTI1","id":34103125,"login":"yevhenii-ldv","avatar_url":"https://avatars.githubusercontent.com/u/34103125?u=3e49bb73177a9f70896e3d49b34656ab659c70a5&v=4","html_url":"https://github.com/yevhenii-ldv","site_admin":false,"type":"User"},"repository":"airbytehq/integration-test","issue_number":11},"emitted_at":1674174073303} +{"stream":"issue_reactions","data":{"node_id":"MDEzOklzc3VlUmVhY3Rpb24xMjcwNDg0NTY=","id":127048456,"content":"ROCKET","created_at":"2021-09-06T11:13:32Z","user":{"node_id":"MDQ6VXNlcjM0MTAzMTI1","id":34103125,"login":"yevhenii-ldv","avatar_url":"https://avatars.githubusercontent.com/u/34103125?u=3e49bb73177a9f70896e3d49b34656ab659c70a5&v=4","html_url":"https://github.com/yevhenii-ldv","site_admin":false,"type":"User"},"repository":"airbytehq/integration-test","issue_number":11},"emitted_at":1674174073303} {"stream":"issue_comment_reactions","data":{"id":127042034,"node_id":"MDIwOklzc3VlQ29tbWVudFJlYWN0aW9uMTI3MDQyMDM0","user":{"login":"yevhenii-ldv","id":34103125,"node_id":"MDQ6VXNlcjM0MTAzMTI1","avatar_url":"https://avatars.githubusercontent.com/u/34103125?v=4","gravatar_id":"","url":"https://api.github.com/users/yevhenii-ldv","html_url":"https://github.com/yevhenii-ldv","followers_url":"https://api.github.com/users/yevhenii-ldv/followers","following_url":"https://api.github.com/users/yevhenii-ldv/following{/other_user}","gists_url":"https://api.github.com/users/yevhenii-ldv/gists{/gist_id}","starred_url":"https://api.github.com/users/yevhenii-ldv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yevhenii-ldv/subscriptions","organizations_url":"https://api.github.com/users/yevhenii-ldv/orgs","repos_url":"https://api.github.com/users/yevhenii-ldv/repos","events_url":"https://api.github.com/users/yevhenii-ldv/events{/privacy}","received_events_url":"https://api.github.com/users/yevhenii-ldv/received_events","type":"User","site_admin":false},"content":"hooray","created_at":"2021-09-06T10:18:19Z","repository":"airbytehq/integration-test","comment_id":907296275},"emitted_at":1673559403000} {"stream":"issue_comment_reactions","data":{"id":127042037,"node_id":"MDIwOklzc3VlQ29tbWVudFJlYWN0aW9uMTI3MDQyMDM3","user":{"login":"yevhenii-ldv","id":34103125,"node_id":"MDQ6VXNlcjM0MTAzMTI1","avatar_url":"https://avatars.githubusercontent.com/u/34103125?v=4","gravatar_id":"","url":"https://api.github.com/users/yevhenii-ldv","html_url":"https://github.com/yevhenii-ldv","followers_url":"https://api.github.com/users/yevhenii-ldv/followers","following_url":"https://api.github.com/users/yevhenii-ldv/following{/other_user}","gists_url":"https://api.github.com/users/yevhenii-ldv/gists{/gist_id}","starred_url":"https://api.github.com/users/yevhenii-ldv/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yevhenii-ldv/subscriptions","organizations_url":"https://api.github.com/users/yevhenii-ldv/orgs","repos_url":"https://api.github.com/users/yevhenii-ldv/repos","events_url":"https://api.github.com/users/yevhenii-ldv/events{/privacy}","received_events_url":"https://api.github.com/users/yevhenii-ldv/received_events","type":"User","site_admin":false},"content":"laugh","created_at":"2021-09-06T10:18:20Z","repository":"airbytehq/integration-test","comment_id":907296275},"emitted_at":1673559403000} {"stream":"commit_comment_reactions","data":{"id":154935456,"node_id":"REA_lADOF9hP9c4DT3SJzgk8IKA","user":{"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},"content":"heart","created_at":"2022-03-20T11:30:23Z","repository":"airbytehq/integration-test","comment_id":55538825},"emitted_at":1673560627726} diff --git a/airbyte-integrations/connectors/source-github/source_github/graphql.py b/airbyte-integrations/connectors/source-github/source_github/graphql.py index c86f62766441f..9828c087320e3 100644 --- a/airbyte-integrations/connectors/source-github/source_github/graphql.py +++ b/airbyte-integrations/connectors/source-github/source_github/graphql.py @@ -99,6 +99,37 @@ def get_query_reviews(owner, name, first, after, number=None): return str(op) +def get_query_issue_reactions(owner, name, first, after, number=None): + op = sgqlc.operation.Operation(_schema_root.query_type) + repository = op.repository(owner=owner, name=name) + repository.name() + repository.owner.login() + if number: + issue = repository.issue(number=number) + else: + kwargs = {"first": first} + if after: + kwargs["after"] = after + issues = repository.issues(**kwargs) + issues.page_info.__fields__(has_next_page=True, end_cursor=True) + issue = issues.nodes + + issue.__fields__(number=True) + kwargs = {"first": first} + if number and after: + kwargs["after"] = after + reactions = issue.reactions(**kwargs) + reactions.page_info.__fields__(has_next_page=True, end_cursor=True) + reactions.nodes.__fields__( + id="node_id", + database_id="id", + content=True, + created_at="created_at", + ) + select_user_fields(reactions.nodes.user()) + return str(op) + + class QueryReactions: # AVERAGE_REVIEWS - optimal number of reviews to fetch inside every pull request. diff --git a/airbyte-integrations/connectors/source-github/source_github/schemas/issue_reactions.json b/airbyte-integrations/connectors/source-github/source_github/schemas/issue_reactions.json index 84f170069ab32..a38ad1430f774 100644 --- a/airbyte-integrations/connectors/source-github/source_github/schemas/issue_reactions.json +++ b/airbyte-integrations/connectors/source-github/source_github/schemas/issue_reactions.json @@ -16,7 +16,7 @@ "format": "date-time" }, "user": { - "$ref": "user.json" + "$ref": "user_graphql.json" }, "repository": { "type": "string" diff --git a/airbyte-integrations/connectors/source-github/source_github/streams.py b/airbyte-integrations/connectors/source-github/source_github/streams.py index bee2fc394dc9a..530045b51eaea 100644 --- a/airbyte-integrations/connectors/source-github/source_github/streams.py +++ b/airbyte-integrations/connectors/source-github/source_github/streams.py @@ -10,11 +10,12 @@ 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 airbyte_cdk.sources.streams.http.exceptions import DefaultBackoffException from requests.exceptions import HTTPError -from .graphql import CursorStorage, QueryReactions, get_query_pull_requests, get_query_reviews +from .graphql import CursorStorage, QueryReactions, get_query_issue_reactions, get_query_pull_requests, get_query_reviews from .utils import getter DEFAULT_PAGE_SIZE = 100 @@ -42,6 +43,10 @@ def __init__(self, repositories: List[str], page_size_for_large_streams: int, ** self._session.mount("https://", adapter) self._session.mount("http://", adapter) + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def path(self, stream_slice: Mapping[str, Any] = None, **kwargs) -> str: return f"repos/{stream_slice['repository']}/{self.name}" @@ -1002,14 +1007,83 @@ class IssueCommentReactions(ReactionStream): parent_entity = Comments -class IssueReactions(ReactionStream): +class IssueReactions(SemiIncrementalMixin, GithubStream): """ - API docs: https://docs.github.com/en/rest/reference/reactions#list-reactions-for-an-issue + https://docs.github.com/en/graphql/reference/objects#issue + https://docs.github.com/en/graphql/reference/objects#reaction """ - parent_entity = Issues - parent_key = "number" - copy_parent_key = "issue_number" + http_method = "POST" + cursor_field = "created_at" + + def __init__(self, **kwargs): + super().__init__(**kwargs) + self.issues_cursor = {} + self.reactions_cursors = {} + + def path( + self, *, stream_state: Mapping[str, Any] = None, stream_slice: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None + ) -> str: + return "graphql" + + def raise_error_from_response(self, response_json): + if "errors" in response_json: + raise Exception(str(response_json["errors"])) + + def _get_name(self, repository): + return repository["owner"]["login"] + "/" + repository["name"] + + def _get_reactions_from_issue(self, issue, repository_name): + for reaction in issue["reactions"]["nodes"]: + reaction["repository"] = repository_name + reaction["issue_number"] = issue["number"] + reaction["user"]["type"] = "User" + yield reaction + + def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: + self.raise_error_from_response(response_json=response.json()) + repository = response.json()["data"]["repository"] + if repository: + repository_name = self._get_name(repository) + if "issues" in repository: + for issue in repository["issues"]["nodes"]: + yield from self._get_reactions_from_issue(issue, repository_name) + elif "issue" in repository: + yield from self._get_reactions_from_issue(repository["issue"], repository_name) + + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: + repository = response.json()["data"]["repository"] + if repository: + repository_name = self._get_name(repository) + reactions_cursors = self.reactions_cursors.setdefault(repository_name, {}) + if "issues" in repository: + if repository["issues"]["pageInfo"]["hasNextPage"]: + self.issues_cursor[repository_name] = repository["issues"]["pageInfo"]["endCursor"] + for issue in repository["issues"]["nodes"]: + if issue["reactions"]["pageInfo"]["hasNextPage"]: + issue_number = issue["number"] + reactions_cursors[issue_number] = issue["reactions"]["pageInfo"]["endCursor"] + elif "issue" in repository: + if repository["issue"]["reactions"]["pageInfo"]["hasNextPage"]: + issue_number = repository["issue"]["number"] + reactions_cursors[issue_number] = repository["issue"]["reactions"]["pageInfo"]["endCursor"] + if reactions_cursors: + number, after = reactions_cursors.popitem() + return {"after": after, "number": number} + if repository_name in self.issues_cursor: + return {"after": self.issues_cursor.pop(repository_name)} + + def request_body_json( + self, + stream_state: Mapping[str, Any], + stream_slice: Mapping[str, Any] = None, + next_page_token: Mapping[str, Any] = None, + ) -> Optional[Mapping]: + organization, name = stream_slice["repository"].split("/") + if not next_page_token: + next_page_token = {"after": None} + query = get_query_issue_reactions(owner=organization, name=name, first=self.page_size, **next_page_token) + return {"query": query} class PullRequestCommentReactions(SemiIncrementalMixin, GithubStream): diff --git a/airbyte-integrations/connectors/source-gitlab/Dockerfile b/airbyte-integrations/connectors/source-gitlab/Dockerfile index 5466ec492148d..16e8b76a76f00 100644 --- a/airbyte-integrations/connectors/source-gitlab/Dockerfile +++ b/airbyte-integrations/connectors/source-gitlab/Dockerfile @@ -13,5 +13,5 @@ COPY main.py ./ ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.0.0 +LABEL io.airbyte.version=1.0.2 LABEL io.airbyte.name=airbyte/source-gitlab diff --git a/airbyte-integrations/connectors/source-gitlab/acceptance-test-config.yml b/airbyte-integrations/connectors/source-gitlab/acceptance-test-config.yml index 2fcb99e43b6de..fe27c4586a77f 100644 --- a/airbyte-integrations/connectors/source-gitlab/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-gitlab/acceptance-test-config.yml @@ -4,8 +4,6 @@ acceptance_tests: spec: tests: - spec_path: "source_gitlab/spec.json" - backward_compatibility_tests_config: - disable_for_version: "0.1.12" connection: tests: - config_path: "secrets/config.json" @@ -17,11 +15,7 @@ acceptance_tests: discovery: tests: - config_path: "secrets/config.json" - backward_compatibility_tests_config: - disable_for_version: "0.1.12" - config_path: "secrets/config_oauth.json" - backward_compatibility_tests_config: - disable_for_version: "0.1.12" basic_read: tests: - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-gitlab/source_gitlab/streams.py b/airbyte-integrations/connectors/source-gitlab/source_gitlab/streams.py index 5d550b7caeb29..3235ce95b754e 100644 --- a/airbyte-integrations/connectors/source-gitlab/source_gitlab/streams.py +++ b/airbyte-integrations/connectors/source-gitlab/source_gitlab/streams.py @@ -2,13 +2,15 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # - +import datetime from abc import ABC -from typing import Any, Dict, Iterable, List, Mapping, MutableMapping, Optional +from typing import Any, Dict, Iterable, List, Mapping, MutableMapping, Optional, Tuple import pendulum import requests from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy +from airbyte_cdk.sources.streams.core import StreamData from airbyte_cdk.sources.streams.http import HttpStream @@ -18,12 +20,22 @@ class GitlabStream(HttpStream, ABC): stream_base_params = {} flatten_id_keys = [] flatten_list_keys = [] - page = 1 per_page = 50 def __init__(self, api_url: str, **kwargs): super().__init__(**kwargs) self.api_url = api_url + self.page = 1 + + 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[StreamData]: + self.page = 1 + yield from super().read_records(sync_mode, cursor_field, stream_slice, stream_state) def request_params( self, @@ -41,6 +53,10 @@ def request_params( def url_base(self) -> str: return f"https://{self.api_url}/api/v4/" + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def should_retry(self, response: requests.Response) -> bool: # Gitlab API returns a 403 response in case a feature is disabled in a project (pipelines/jobs for instance). if response.status_code == 403: @@ -107,7 +123,9 @@ def path_template(self) -> str: template.append("repository") return "/".join(template + [self.name]) - def stream_slices(self, **kwargs) -> Iterable[Optional[Mapping[str, any]]]: + def stream_slices( + self, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None + ) -> Iterable[Optional[Mapping[str, any]]]: for slice in self.parent_stream.stream_slices(sync_mode=SyncMode.full_refresh): for record in self.parent_stream.read_records(sync_mode=SyncMode.full_refresh, stream_slice=slice): yield {path_key: record[path_key] for path_key in self.path_list} @@ -125,7 +143,8 @@ def transform(self, record: Dict[str, Any], stream_slice: Mapping[str, Any] = No class IncrementalGitlabChildStream(GitlabChildStream): state_checkpoint_interval = 100 cursor_field = "updated_at" - filter_field = "updated_after" + lower_bound_filter = "updated_after" + upper_bound_filter = "updated_before" def __init__(self, start_date, **kwargs): super().__init__(**kwargs) @@ -146,17 +165,40 @@ def get_updated_state(self, current_stream_state: MutableMapping[str, Any], late current_stream_state[str(project_id)] = {self.cursor_field: str(max_value)} return current_stream_state - def request_params(self, stream_state=None, stream_slice: Mapping[str, Any] = None, **kwargs): + @staticmethod + def _chunk_date_range(start_point: datetime.datetime) -> Iterable[Tuple[str, str]]: + end_point = datetime.datetime.now(datetime.timezone.utc) + if start_point > end_point: + return [] + current_start, current_end = start_point, start_point + while current_end < end_point: + current_end = current_start + datetime.timedelta(days=180) + current_end = min(current_end, end_point) + yield str(current_start), str(current_end) + current_start = current_end + datetime.timedelta(seconds=1) + + def stream_slices( + self, sync_mode: SyncMode, cursor_field: List[str] = None, stream_state: Mapping[str, Any] = None + ) -> Iterable[Optional[Mapping[str, Any]]]: stream_state = stream_state or {} - params = super().request_params(stream_state, stream_slice, **kwargs) + super_slices = super().stream_slices(sync_mode, cursor_field, stream_state) + for super_slice in super_slices: + start_point = self._start_date + state_project_value = stream_state.get(str(super_slice["id"])) + if state_project_value: + state_value = state_project_value.get(self.cursor_field) + if state_value: + start_point = max(start_point, state_value) + for start_dt, end_dt in self._chunk_date_range(pendulum.parse(start_point)): + stream_slice = {key: value for key, value in super_slice.items()} + stream_slice[self.lower_bound_filter] = start_dt + stream_slice[self.upper_bound_filter] = end_dt + yield stream_slice - start_point = self._start_date - state_project_value = stream_state.get(str(stream_slice["id"])) - if state_project_value: - state_value = state_project_value.get(self.cursor_field) - if state_value: - start_point = max(start_point, state_value) - params[self.filter_field] = start_point + def request_params(self, stream_state=None, stream_slice: Mapping[str, Any] = None, **kwargs): + params = super().request_params(stream_state, stream_slice, **kwargs) + params[self.lower_bound_filter] = stream_slice[self.lower_bound_filter] + params[self.upper_bound_filter] = stream_slice[self.upper_bound_filter] return params @@ -265,7 +307,8 @@ class Branches(GitlabChildStream): class Commits(IncrementalGitlabChildStream): cursor_field = "created_at" - filter_field = "since" + lower_bound_filter = "since" + upper_bound_filter = "until" flatten_parent_id = True stream_base_params = {"with_stats": True} diff --git a/airbyte-integrations/connectors/source-gitlab/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-gitlab/unit_tests/test_streams.py index 7f2b795ce9730..6e0c63098c292 100644 --- a/airbyte-integrations/connectors/source-gitlab/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-gitlab/unit_tests/test_streams.py @@ -2,6 +2,8 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # +import datetime + import pytest from airbyte_cdk.sources.streams.http.auth import NoAuth from source_gitlab.streams import Commits, Jobs, MergeRequestCommits, MergeRequests, Pipelines, Projects, Releases, Tags @@ -9,14 +11,15 @@ auth_params = {"authenticator": NoAuth(), "api_url": "gitlab.com"} +start_date = datetime.datetime.now(datetime.timezone.utc) - datetime.timedelta(days=14) projects = Projects(project_ids=["p_1"], **auth_params) -pipelines = Pipelines(parent_stream=projects, start_date="2021-01-01T00:00:00Z", **auth_params) -merge_requests = MergeRequests(parent_stream=projects, start_date="2021-01-01T00:00:00Z", **auth_params) +pipelines = Pipelines(parent_stream=projects, start_date=str(start_date), **auth_params) +merge_requests = MergeRequests(parent_stream=projects, start_date=str(start_date), **auth_params) tags = Tags(parent_stream=projects, repository_part=True, **auth_params) releases = Releases(parent_stream=projects, **auth_params) jobs = Jobs(parent_stream=pipelines, **auth_params) merge_request_commits = MergeRequestCommits(parent_stream=merge_requests, **auth_params) -commits = Commits(parent_stream=projects, repository_part=True, start_date="2021-01-01T00:00:00Z", **auth_params) +commits = Commits(parent_stream=projects, repository_part=True, start_date=str(start_date), **auth_params) def test_should_retry(mocker, requests_mock): diff --git a/airbyte-integrations/connectors/source-gnews/source_gnews/gnews.yaml b/airbyte-integrations/connectors/source-gnews/source_gnews/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-gnews/source_gnews/gnews.yaml rename to airbyte-integrations/connectors/source-gnews/source_gnews/manifest.yaml diff --git a/airbyte-integrations/connectors/source-gnews/source_gnews/source.py b/airbyte-integrations/connectors/source-gnews/source_gnews/source.py index d22e3fb82d023..ae18cb459d37d 100644 --- a/airbyte-integrations/connectors/source-gnews/source_gnews/source.py +++ b/airbyte-integrations/connectors/source-gnews/source_gnews/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceGnews(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "gnews.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-gocardless/source_gocardless/gocardless.yaml b/airbyte-integrations/connectors/source-gocardless/source_gocardless/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-gocardless/source_gocardless/gocardless.yaml rename to airbyte-integrations/connectors/source-gocardless/source_gocardless/manifest.yaml diff --git a/airbyte-integrations/connectors/source-gocardless/source_gocardless/source.py b/airbyte-integrations/connectors/source-gocardless/source_gocardless/source.py index 01118b2bbe3e0..34e1876ac96c5 100644 --- a/airbyte-integrations/connectors/source-gocardless/source_gocardless/source.py +++ b/airbyte-integrations/connectors/source-gocardless/source_gocardless/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceGocardless(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "gocardless.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-gong/source_gong/gong.yaml b/airbyte-integrations/connectors/source-gong/source_gong/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-gong/source_gong/gong.yaml rename to airbyte-integrations/connectors/source-gong/source_gong/manifest.yaml diff --git a/airbyte-integrations/connectors/source-gong/source_gong/source.py b/airbyte-integrations/connectors/source-gong/source_gong/source.py index 7755222887f02..405524446d187 100644 --- a/airbyte-integrations/connectors/source-gong/source_gong/source.py +++ b/airbyte-integrations/connectors/source-gong/source_gong/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceGong(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "gong.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-google-ads/Dockerfile b/airbyte-integrations/connectors/source-google-ads/Dockerfile index b084445822610..d3d623f2d08e4 100644 --- a/airbyte-integrations/connectors/source-google-ads/Dockerfile +++ b/airbyte-integrations/connectors/source-google-ads/Dockerfile @@ -13,5 +13,5 @@ COPY main.py ./ ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.7 +LABEL io.airbyte.version=0.2.9 LABEL io.airbyte.name=airbyte/source-google-ads diff --git a/airbyte-integrations/connectors/source-google-ads/acceptance-test-config.yml b/airbyte-integrations/connectors/source-google-ads/acceptance-test-config.yml index 0aad58fbad44e..6e136fdb23b52 100644 --- a/airbyte-integrations/connectors/source-google-ads/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-google-ads/acceptance-test-config.yml @@ -22,6 +22,8 @@ acceptance_tests: path: "integration_tests/expected_records.txt" timeout_seconds: 600 empty_streams: + - name: "accounts" + bypass_reason: "Floating data" - name: "display_topics_performance_report" bypass_reason: "Stream not filled yet." - name: "click_view" diff --git a/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records.txt b/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records.txt index 6603bc6f40fcb..8071b1e4d341d 100644 --- a/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records.txt +++ b/airbyte-integrations/connectors/source-google-ads/integration_tests/expected_records.txt @@ -59,16 +59,6 @@ {"stream": "ad_groups", "data": {"ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.explorer_auto_optimizer_setting.opt_in": false, "ad_group.final_url_suffix": "", "ad_group.id": 137020701042, "ad_group.labels": [], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-04-12"}, "emitted_at": 1671617356027} {"stream": "ad_groups", "data": {"ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137051662444", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.explorer_auto_optimizer_setting.opt_in": false, "ad_group.final_url_suffix": "", "ad_group.id": 137051662444, "ad_group.labels": [], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a01", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137051662444", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-04-12"}, "emitted_at": 1671617356028} {"stream": "ad_groups", "data": {"ad_group.ad_rotation_mode": "UNSPECIFIED", "ad_group.base_ad_group": "customers/4651612872/adGroups/137020701042", "ad_group.campaign": "customers/4651612872/campaigns/16820250687", "ad_group.cpc_bid_micros": 10000, "ad_group.cpm_bid_micros": 10000, "ad_group.cpv_bid_micros": 0, "ad_group.display_custom_bid_dimension": "UNSPECIFIED", "ad_group.effective_target_cpa_micros": 0, "ad_group.effective_target_cpa_source": "UNSPECIFIED", "ad_group.effective_target_roas": 0.0, "ad_group.effective_target_roas_source": "UNSPECIFIED", "ad_group.excluded_parent_asset_field_types": [], "ad_group.explorer_auto_optimizer_setting.opt_in": false, "ad_group.final_url_suffix": "", "ad_group.id": 137020701042, "ad_group.labels": [], "ad_group.name": "\u0413\u0440\u0443\u043f\u043f\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0439\u00a02", "ad_group.percent_cpc_bid_micros": 0, "ad_group.resource_name": "customers/4651612872/adGroups/137020701042", "ad_group.status": "ENABLED", "ad_group.target_cpa_micros": 0, "ad_group.target_cpm_micros": 10000, "ad_group.target_roas": 0.0, "ad_group.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n", "targeting_dimension: AGE_RANGE\nbid_only: true\n", "targeting_dimension: GENDER\nbid_only: true\n", "targeting_dimension: PARENTAL_STATUS\nbid_only: true\n", "targeting_dimension: INCOME_RANGE\nbid_only: true\n"], "ad_group.tracking_url_template": "", "ad_group.type": "SEARCH_STANDARD", "ad_group.url_custom_parameters": [], "segments.date": "2022-04-13"}, "emitted_at": 1671617356029} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-08"}, "emitted_at": 1673361973477} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-09"}, "emitted_at": 1673361973478} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-10"}, "emitted_at": 1673361973479} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-11"}, "emitted_at": 1673361973479} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-12"}, "emitted_at": 1673361973480} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-13"}, "emitted_at": 1673361973481} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-14"}, "emitted_at": 1673361973481} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-15"}, "emitted_at": 1673361973482} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-16"}, "emitted_at": 1673361973483} -{"stream": "accounts", "data": {"customer.auto_tagging_enabled": true, "customer.call_reporting_setting.call_conversion_action": "customers/4651612872/conversionActions/179", "customer.call_reporting_setting.call_conversion_reporting_enabled": true, "customer.call_reporting_setting.call_reporting_enabled": true, "customer.conversion_tracking_setting.conversion_tracking_id": 657981234, "customer.conversion_tracking_setting.cross_account_conversion_tracking_id": 0, "customer.currency_code": "USD", "customer.descriptive_name": "", "customer.final_url_suffix": "", "customer.has_partners_badge": false, "customer.id": 4651612872, "customer.manager": false, "customer.optimization_score": 0.4809464, "customer.optimization_score_weight": 14.093616, "customer.pay_per_conversion_eligibility_failure_reasons": ["CustomerPayPerConversionEligibilityFailureReason.NOT_ENOUGH_CONVERSIONS"], "customer.remarketing_setting.google_global_site_tag": "\n\n\n", "customer.resource_name": "customers/4651612872", "customer.test_account": false, "customer.time_zone": "America/Los_Angeles", "customer.tracking_url_template": "", "segments.date": "2022-04-17"}, "emitted_at": 1673361973996} {"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "TARGET_SPEND", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.amount_micros": 750000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm": "", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 2.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "segments.date": "2022-04-08", "segments.hour": 21.0}, "emitted_at": 1671617378643} {"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "TARGET_SPEND", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.amount_micros": 750000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm": "", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 1.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "segments.date": "2022-04-09", "segments.hour": 2.0}, "emitted_at": 1671617378653} {"stream": "campaigns", "data": {"campaign.accessible_bidding_strategy": "", "campaign.ad_serving_optimization_status": "OPTIMIZE", "campaign.advertising_channel_sub_type": "UNSPECIFIED", "campaign.advertising_channel_type": "SEARCH", "campaign.app_campaign_setting.app_id": "", "campaign.app_campaign_setting.app_store": "UNSPECIFIED", "campaign.app_campaign_setting.bidding_strategy_goal_type": "UNSPECIFIED", "campaign.base_campaign": "customers/4651612872/campaigns/16820250687", "campaign.bidding_strategy": "", "campaign.bidding_strategy_type": "TARGET_SPEND", "campaign.campaign_budget": "customers/4651612872/campaignBudgets/10695604507", "campaign_budget.amount_micros": 750000, "campaign.commission.commission_rate_micros": 0, "campaign.dynamic_search_ads_setting.domain_name": "", "campaign.dynamic_search_ads_setting.feeds": [], "campaign.dynamic_search_ads_setting.language_code": "", "campaign.dynamic_search_ads_setting.use_supplied_urls_only": false, "campaign.end_date": "2037-12-30", "campaign.excluded_parent_asset_field_types": [], "campaign.experiment_type": "BASE", "campaign.final_url_suffix": "", "campaign.frequency_caps": [], "campaign.geo_target_type_setting.negative_geo_target_type": "PRESENCE", "campaign.geo_target_type_setting.positive_geo_target_type": "PRESENCE_OR_INTEREST", "campaign.hotel_setting.hotel_center_id": 0, "campaign.id": 16820250687, "campaign.labels": [], "campaign.local_campaign_setting.location_source_type": "UNSPECIFIED", "campaign.manual_cpc.enhanced_cpc_enabled": false, "campaign.manual_cpm": "", "campaign.manual_cpv": "", "campaign.maximize_conversion_value.target_roas": 0.0, "campaign.maximize_conversions.target_cpa_micros": 0, "campaign.name": "Website traffic-Search-15", "campaign.network_settings.target_content_network": true, "campaign.network_settings.target_google_search": true, "campaign.network_settings.target_partner_search_network": false, "campaign.network_settings.target_search_network": true, "campaign.optimization_goal_setting.optimization_goal_types": [], "campaign.optimization_score": 0.0, "campaign.payment_mode": "CLICKS", "campaign.percent_cpc.cpc_bid_ceiling_micros": 0, "campaign.percent_cpc.enhanced_cpc_enabled": false, "campaign.real_time_bidding_setting.opt_in": false, "campaign.resource_name": "customers/4651612872/campaigns/16820250687", "campaign.selective_optimization.conversion_actions": [], "campaign.serving_status": "SERVING", "campaign.shopping_setting.campaign_priority": 0, "campaign.shopping_setting.enable_local": false, "campaign.shopping_setting.merchant_id": 0, "campaign.shopping_setting.sales_country": "", "campaign.start_date": "2022-04-08", "campaign.status": "PAUSED", "campaign.target_cpa.cpc_bid_ceiling_micros": 0, "campaign.target_cpa.cpc_bid_floor_micros": 0, "campaign.target_cpa.target_cpa_micros": 0, "campaign.target_cpm": "", "campaign.target_impression_share.cpc_bid_ceiling_micros": 0, "campaign.target_impression_share.location": "UNSPECIFIED", "campaign.target_impression_share.location_fraction_micros": 0, "campaign.target_roas.cpc_bid_ceiling_micros": 0, "campaign.target_roas.cpc_bid_floor_micros": 0, "campaign.target_roas.target_roas": 0.0, "campaign.target_spend.cpc_bid_ceiling_micros": 0, "campaign.target_spend.target_spend_micros": 0, "campaign.targeting_setting.target_restrictions": ["targeting_dimension: AUDIENCE\nbid_only: true\n"], "campaign.tracking_setting.tracking_url": "", "campaign.tracking_url_template": "", "campaign.url_custom_parameters": [], "campaign.vanity_pharma.vanity_pharma_display_url_mode": "UNSPECIFIED", "campaign.vanity_pharma.vanity_pharma_text": "UNSPECIFIED", "campaign.video_brand_safety_suitability": "UNSPECIFIED", "metrics.clicks": 0, "metrics.ctr": 0.0, "metrics.conversions": 0.0, "metrics.conversions_value": 0.0, "metrics.cost_micros": 0, "metrics.impressions": 4.0, "metrics.video_views": 0.0, "metrics.video_quartile_p100_rate": 0.0, "segments.date": "2022-04-09", "segments.hour": 7.0}, "emitted_at": 1671617378663} diff --git a/airbyte-integrations/connectors/source-google-ads/setup.py b/airbyte-integrations/connectors/source-google-ads/setup.py index fa702d2f0963f..4ac9ab965b30e 100644 --- a/airbyte-integrations/connectors/source-google-ads/setup.py +++ b/airbyte-integrations/connectors/source-google-ads/setup.py @@ -7,7 +7,7 @@ # pin protobuf==3.20.0 as other versions may cause problems on different architectures # (see https://github.com/airbytehq/airbyte/issues/13580) -MAIN_REQUIREMENTS = ["airbyte-cdk>=0.2.2", "google-ads==17.0.0", "protobuf==3.20.0", "pendulum"] +MAIN_REQUIREMENTS = ["airbyte-cdk>=0.2.2", "google-ads==19.0.0", "protobuf", "pendulum"] TEST_REQUIREMENTS = ["pytest~=6.1", "pytest-mock", "freezegun", "requests-mock"] diff --git a/airbyte-integrations/connectors/source-google-ads/source_google_ads/streams.py b/airbyte-integrations/connectors/source-google-ads/source_google_ads/streams.py index f51264e742e24..1d61f98bf3f6a 100644 --- a/airbyte-integrations/connectors/source-google-ads/source_google_ads/streams.py +++ b/airbyte-integrations/connectors/source-google-ads/source_google_ads/streams.py @@ -2,6 +2,7 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # +import logging from abc import ABC from typing import Any, Iterable, List, Mapping, MutableMapping, Optional, Tuple @@ -18,6 +19,24 @@ from .models import Customer +class cyclic_sieve: + def __init__(self, logger: logging.Logger, fraction: int = 10): + self._logger = logger + self._cycle_counter = 0 + self._fraction = fraction + + def __getattr__(self, item): + if self._cycle_counter % self._fraction == 0: + return getattr(self._logger, item) + return self.stub + + def stub(self, *args, **kwargs): + pass + + def bump(self): + self._cycle_counter += 1 + + def parse_dates(stream_slice): start_date = pendulum.parse(stream_slice["start_date"]) end_date = pendulum.parse(stream_slice["end_date"]) @@ -91,6 +110,7 @@ class GoogleAdsStream(Stream, ABC): def __init__(self, api: GoogleAds, customers: List[Customer]): self.google_ads_client = api self.customers = customers + self.base_sieve_logger = cyclic_sieve(self.logger, 10) def get_query(self, stream_slice: Mapping[str, Any]) -> str: query = GoogleAds.convert_schema_into_query(schema=self.get_json_schema(), report_name=self.name) @@ -105,7 +125,8 @@ def stream_slices(self, stream_state: Mapping[str, Any] = None, **kwargs) -> Ite yield {"customer_id": customer.id} def read_records(self, sync_mode, stream_slice: Optional[Mapping[str, Any]] = None, **kwargs) -> Iterable[Mapping[str, Any]]: - self.logger.info(f"Read records using g-ads client. Stream slice is {stream_slice}") + self.base_sieve_logger.bump() + self.base_sieve_logger.info(f"Read records using g-ads client. Stream slice is {stream_slice}") if stream_slice is None: return [] @@ -119,7 +140,7 @@ def read_records(self, sync_mode, stream_slice: Optional[Mapping[str, Any]] = No raise for error in exc.failure.errors: if error.error_code.authorization_error == AuthorizationErrorEnum.AuthorizationError.CUSTOMER_NOT_ENABLED: - self.logger.error(error.message) + self.base_sieve_logger.error(error.message) continue # log and ignore only CUSTOMER_NOT_ENABLED error, otherwise - raise further raise @@ -139,6 +160,7 @@ def __init__(self, start_date: str, conversion_window_days: int, end_date: str = self._end_date = end_date self._state = {} super().__init__(**kwargs) + self.incremental_sieve_logger = cyclic_sieve(self.logger, 10) @property def state(self) -> MutableMapping[str, Any]: @@ -154,6 +176,7 @@ def current_state(self, customer_id, default=None): def stream_slices(self, stream_state: Mapping[str, Any] = None, **kwargs) -> Iterable[Optional[MutableMapping[str, any]]]: for customer in self.customers: + logger = cyclic_sieve(self.logger, 10) stream_state = stream_state or {} if stream_state.get(customer.id): start_date = stream_state[customer.id].get(self.cursor_field) or self._start_date @@ -165,7 +188,7 @@ def stream_slices(self, stream_state: Mapping[str, Any] = None, **kwargs) -> Ite start_date = self._start_date end_date = self._end_date - self.logger.info(f"Generating slices for customer {customer.id}. Start date is {start_date}, end date is {end_date}") + logger.info(f"Generating slices for customer {customer.id}. Start date is {start_date}, end date is {end_date}") for chunk in chunk_date_range( start_date=start_date, @@ -178,7 +201,8 @@ def stream_slices(self, stream_state: Mapping[str, Any] = None, **kwargs) -> Ite ): if chunk: chunk["customer_id"] = customer.id - self.logger.info(f"Next slice is {chunk}") + logger.info(f"Next slice is {chunk}") + logger.bump() yield chunk def read_records( @@ -188,8 +212,9 @@ def read_records( This method is overridden to handle GoogleAdsException with EXPIRED_PAGE_TOKEN error code, and update `start_date` key in the `stream_slice` with the latest read record's cursor value, then retry the sync. """ + self.incremental_sieve_logger.bump() while True: - self.logger.info("Starting a while loop iteration") + self.incremental_sieve_logger.info("Starting a while loop iteration") customer_id = stream_slice and stream_slice["customer_id"] try: records = super().read_records(sync_mode, stream_slice=stream_slice) @@ -200,38 +225,40 @@ def read_records( date_in_latest_record = pendulum.parse(record[self.cursor_field]) cursor_value = (max(date_in_current_stream, date_in_latest_record)).to_date_string() self.state = {customer_id: {self.cursor_field: cursor_value}} - self.logger.info(f"Updated state for customer {customer_id}. Full state is {self.state}.") + self.incremental_sieve_logger.info(f"Updated state for customer {customer_id}. Full state is {self.state}.") yield record continue self.state = {customer_id: {self.cursor_field: record[self.cursor_field]}} - self.logger.info(f"Initialized state for customer {customer_id}. Full state is {self.state}.") + self.incremental_sieve_logger.info(f"Initialized state for customer {customer_id}. Full state is {self.state}.") yield record continue except GoogleAdsException as exception: - self.logger.info(f"Caught a GoogleAdsException: {str(exception)}") + self.incremental_sieve_logger.info(f"Caught a GoogleAdsException: {str(exception)}") error = next(iter(exception.failure.errors)) if error.error_code.request_error == RequestErrorEnum.RequestError.EXPIRED_PAGE_TOKEN: start_date, end_date = parse_dates(stream_slice) current_state = self.current_state(customer_id) - self.logger.info(f"Start date is {start_date}. End date is {end_date}. Current state is {current_state}") + self.incremental_sieve_logger.info( + f"Start date is {start_date}. End date is {end_date}. Current state is {current_state}" + ) if (end_date - start_date).days == 1: # If range days is 1, no need in retry, because it's the minimum date range - self.logger.error("Page token has expired.") + self.incremental_sieve_logger.error("Page token has expired.") raise exception elif current_state == stream_slice["start_date"]: # It couldn't read all the records within one day, it will enter an infinite loop, # so raise the error - self.logger.error("Page token has expired.") + self.incremental_sieve_logger.error("Page token has expired.") raise exception # Retry reading records from where it crushed stream_slice["start_date"] = self.current_state(customer_id, default=stream_slice["start_date"]) - self.logger.info(f"Retry reading records from where it crushed with a modified slice: {stream_slice}") + self.incremental_sieve_logger.info(f"Retry reading records from where it crushed with a modified slice: {stream_slice}") else: # raise caught error for other error statuses raise exception else: # return the control if no exception is raised - self.logger.info("Current slice has been read. Exiting read_records()") + self.incremental_sieve_logger.info("Current slice has been read. Exiting read_records()") return def get_query(self, stream_slice: Mapping[str, Any] = None) -> str: diff --git a/airbyte-integrations/connectors/source-google-ads/unit_tests/test_source.py b/airbyte-integrations/connectors/source-google-ads/unit_tests/test_source.py index 072e2a0626a41..23d115b927e8d 100644 --- a/airbyte-integrations/connectors/source-google-ads/unit_tests/test_source.py +++ b/airbyte-integrations/connectors/source-google-ads/unit_tests/test_source.py @@ -526,15 +526,15 @@ def test_invalid_custom_query_handled(mocked_gads_api, config): @pytest.mark.parametrize( - ("cls", "error", "failure_code", "raise_expected", "log_expected"), + ("cls", "error", "failure_code", "raise_expected"), ( - (AdGroupLabels, "authorization_error", AuthorizationErrorEnum.AuthorizationError.CUSTOMER_NOT_ENABLED, False, True), - (AdGroupLabels, "internal_error", 1, True, False), - (ServiceAccounts, "authentication_error", 1, True, False), - (ServiceAccounts, "internal_error", 1, True, False), + (AdGroupLabels, "authorization_error", AuthorizationErrorEnum.AuthorizationError.CUSTOMER_NOT_ENABLED, False), + (AdGroupLabels, "internal_error", 1, True), + (ServiceAccounts, "authentication_error", 1, True), + (ServiceAccounts, "internal_error", 1, True), ), ) -def test_read_record_error_handling(config, customers, caplog, mocked_gads_api, cls, error, failure_code, raise_expected, log_expected): +def test_read_record_error_handling(config, customers, caplog, mocked_gads_api, cls, error, failure_code, raise_expected): error_msg = "Some unexpected error" mocked_gads_api(failure_code=failure_code, failure_msg=error_msg, error_type=error) google_api = GoogleAds(credentials=config["credentials"]) @@ -546,8 +546,6 @@ def test_read_record_error_handling(config, customers, caplog, mocked_gads_api, else: for _ in stream.read_records(sync_mode=Mock(), stream_slice={"customer_id": "1234567890"}): pass - error_in_log = error_msg in caplog.text - assert error_in_log is log_expected def test_stream_slices(config, customers): diff --git a/airbyte-integrations/connectors/source-google-ads/unit_tests/test_streams.py b/airbyte-integrations/connectors/source-google-ads/unit_tests/test_streams.py index 7e600bef4991a..632c272179633 100644 --- a/airbyte-integrations/connectors/source-google-ads/unit_tests/test_streams.py +++ b/airbyte-integrations/connectors/source-google-ads/unit_tests/test_streams.py @@ -2,6 +2,7 @@ # Copyright (c) 2022 Airbyte, Inc., all rights reserved. # +import logging from unittest.mock import Mock import pytest @@ -12,7 +13,7 @@ from google.api_core.exceptions import DataLoss, InternalServerError, ResourceExhausted, TooManyRequests from grpc import RpcError from source_google_ads.google_ads import GoogleAds -from source_google_ads.streams import ClickView +from source_google_ads.streams import ClickView, cyclic_sieve from .common import MockGoogleAdsClient as MockGoogleAdsClient @@ -218,3 +219,14 @@ def test_retry_transient_errors(mocker, config, customers, error_cls): records = list(stream.read_records(sync_mode=SyncMode.incremental, cursor_field=["segments.date"], stream_slice=stream_slice)) assert mocked_search.call_count == 5 assert records == [] + + +def test_cyclic_sieve(caplog): + original_logger = logging.getLogger("test") + sieve = cyclic_sieve(original_logger, fraction=10) + for _ in range(20): + sieve.info("Ground Control to Major Tom") + sieve.info("Your circuit's dead, there's something wrong") + sieve.info("Can you hear me, Major Tom?") + sieve.bump() + assert len(caplog.records) == 6 # 20 * 3 / 10 diff --git a/airbyte-integrations/connectors/source-google-analytics-v4/acceptance-test-config.yml b/airbyte-integrations/connectors/source-google-analytics-v4/acceptance-test-config.yml index e47ec41b5e2ab..785755476d25c 100644 --- a/airbyte-integrations/connectors/source-google-analytics-v4/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-google-analytics-v4/acceptance-test-config.yml @@ -1,30 +1,36 @@ -# 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-google-analytics-v4:dev -tests: - spec: - - spec_path: "source_google_analytics_v4/spec.json" - connection: - - config_path: "secrets/service_config.json" - status: "succeed" - - config_path: "secrets/old_config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" - discovery: - - config_path: "secrets/service_config.json" +acceptance_tests: basic_read: - - config_path: "secrets/service_config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: [] + tests: + - config_path: secrets/service_config.json + empty_streams: + - name: users_per_city + bypass_reason: no records in the stream expect_records: - path: "integration_tests/expected_records.jsonl" + path: integration_tests/expected_records.jsonl + connection: + tests: + - config_path: secrets/service_config.json + status: succeed + - config_path: secrets/old_config.json + status: succeed + - config_path: integration_tests/invalid_config.json + status: failed + discovery: + tests: + - config_path: secrets/service_config.json + full_refresh: + tests: + - config_path: secrets/service_config.json + configured_catalog_path: integration_tests/configured_catalog.json incremental: - - config_path: "secrets/service_config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - future_state_path: "integration_tests/abnormal_state.json" + tests: + - config_path: secrets/service_config.json + configured_catalog_path: integration_tests/configured_catalog.json + future_state: + future_state_path: integration_tests/abnormal_state.json threshold_days: 2 - full_refresh: - - config_path: "secrets/service_config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" + spec: + tests: + - spec_path: source_google_analytics_v4/spec.json +connector_image: airbyte/source-google-analytics-v4:dev +test_strictness_level: high diff --git a/airbyte-integrations/connectors/source-google-analytics-v4/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-google-analytics-v4/integration_tests/expected_records.jsonl index 0a2dd91721f28..97a147616e447 100644 --- a/airbyte-integrations/connectors/source-google-analytics-v4/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-google-analytics-v4/integration_tests/expected_records.jsonl @@ -3,4 +3,1844 @@ {"stream": "daily_active_users", "data": {"ga_date": "2021-12-10", "ga_1dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1639563251092} {"stream": "weekly_active_users", "data": {"ga_date": "2021-12-15", "ga_7dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1639563249172} {"stream": "locations", "data": {"ga_date": "2021-12-10", "ga_continent": "Americas", "ga_subContinent": "Northern America", "ga_country": "United States", "ga_region": "Washington", "ga_metro": "Seattle-Tacoma WA", "ga_city": "Seattle", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1639563230934} -{"stream": "pages", "data": {"ga_date": "2021-12-10", "ga_hostname": "www.surveymonkey.com", "ga_pagePath": "/apps/NKI5TOTqk4tS5BZyJXU9YQ_3D_3D/preview", "ga_pageviews": 1, "ga_uniquePageviews": 1, "ga_avgTimeOnPage": 0.0, "ga_entrances": 1, "ga_entranceRate": 100.0, "ga_bounceRate": 100.0, "ga_exits": 1, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1639563227527} \ No newline at end of file +{"stream": "pages", "data": {"ga_date": "2021-12-10", "ga_hostname": "www.surveymonkey.com", "ga_pagePath": "/apps/NKI5TOTqk4tS5BZyJXU9YQ_3D_3D/preview", "ga_pageviews": 1, "ga_uniquePageviews": 1, "ga_avgTimeOnPage": 0.0, "ga_entrances": 1, "ga_entranceRate": 100.0, "ga_bounceRate": 100.0, "ga_exits": 1, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1639563227527} +{"stream": "website_overview", "data": {"ga_date": "2021-11-10", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 219.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 219.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006448} +{"stream": "website_overview", "data": {"ga_date": "2021-11-12", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006449} +{"stream": "website_overview", "data": {"ga_date": "2021-11-17", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006450} +{"stream": "website_overview", "data": {"ga_date": "2021-11-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 23.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006450} +{"stream": "website_overview", "data": {"ga_date": "2021-12-06", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006450} +{"stream": "website_overview", "data": {"ga_date": "2021-12-10", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006892} +{"stream": "website_overview", "data": {"ga_date": "2021-12-21", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006893} +{"stream": "website_overview", "data": {"ga_date": "2021-12-30", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 4.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 2.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006894} +{"stream": "website_overview", "data": {"ga_date": "2022-01-05", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 6.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006895} +{"stream": "website_overview", "data": {"ga_date": "2022-01-10", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006896} +{"stream": "website_overview", "data": {"ga_date": "2022-01-12", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006898} +{"stream": "website_overview", "data": {"ga_date": "2022-01-13", "ga_users": 2, "ga_newUsers": 0, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006898} +{"stream": "website_overview", "data": {"ga_date": "2022-01-14", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006899} +{"stream": "website_overview", "data": {"ga_date": "2022-01-16", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006899} +{"stream": "website_overview", "data": {"ga_date": "2022-01-17", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 4, "ga_sessionsPerUser": 1.3333333333333333, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006899} +{"stream": "website_overview", "data": {"ga_date": "2022-01-18", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006900} +{"stream": "website_overview", "data": {"ga_date": "2022-01-19", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006900} +{"stream": "website_overview", "data": {"ga_date": "2022-01-21", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006901} +{"stream": "website_overview", "data": {"ga_date": "2022-01-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006901} +{"stream": "website_overview", "data": {"ga_date": "2022-01-24", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 85.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.3333333333333333, "ga_avgTimeOnPage": 255.0, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 75.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006902} +{"stream": "website_overview", "data": {"ga_date": "2022-01-25", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 201.66666666666666, "ga_pageviews": 33, "ga_pageviewsPerSession": 11.0, "ga_avgTimeOnPage": 20.233333333333334, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 9.090909090909092, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006903} +{"stream": "website_overview", "data": {"ga_date": "2022-01-26", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006903} +{"stream": "website_overview", "data": {"ga_date": "2022-01-27", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 32.75, "ga_pageviews": 5, "ga_pageviewsPerSession": 1.25, "ga_avgTimeOnPage": 131.0, "ga_bounceRate": 75.0, "ga_exitRate": 80.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006904} +{"stream": "website_overview", "data": {"ga_date": "2022-01-28", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 4, "ga_sessionsPerUser": 1.3333333333333333, "ga_avgSessionDuration": 0.75, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 75.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006904} +{"stream": "website_overview", "data": {"ga_date": "2022-01-31", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 320.3333333333333, "ga_pageviews": 6, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 320.3333333333333, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006905} +{"stream": "website_overview", "data": {"ga_date": "2022-02-01", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 239.33333333333334, "ga_pageviews": 33, "ga_pageviewsPerSession": 11.0, "ga_avgTimeOnPage": 23.933333333333334, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 9.090909090909092, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006905} +{"stream": "website_overview", "data": {"ga_date": "2022-02-03", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 36.5, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 36.5, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006906} +{"stream": "website_overview", "data": {"ga_date": "2022-02-07", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006906} +{"stream": "website_overview", "data": {"ga_date": "2022-02-08", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 371.5, "ga_pageviews": 31, "ga_pageviewsPerSession": 15.5, "ga_avgTimeOnPage": 25.655172413793103, "ga_bounceRate": 0.0, "ga_exitRate": 6.451612903225806, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006907} +{"stream": "website_overview", "data": {"ga_date": "2022-02-09", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006908} +{"stream": "website_overview", "data": {"ga_date": "2022-02-10", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006908} +{"stream": "website_overview", "data": {"ga_date": "2022-02-13", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006908} +{"stream": "website_overview", "data": {"ga_date": "2022-02-14", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 310.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 4.0, "ga_avgTimeOnPage": 103.33333333333333, "ga_bounceRate": 0.0, "ga_exitRate": 25.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006909} +{"stream": "website_overview", "data": {"ga_date": "2022-02-15", "ga_users": 5, "ga_newUsers": 5, "ga_sessions": 5, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 187.8, "ga_pageviews": 36, "ga_pageviewsPerSession": 7.2, "ga_avgTimeOnPage": 30.258064516129032, "ga_bounceRate": 40.0, "ga_exitRate": 13.88888888888889, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006909} +{"stream": "website_overview", "data": {"ga_date": "2022-02-17", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006909} +{"stream": "website_overview", "data": {"ga_date": "2022-02-19", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 7.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 7.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006910} +{"stream": "website_overview", "data": {"ga_date": "2022-02-21", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006910} +{"stream": "website_overview", "data": {"ga_date": "2022-02-22", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006910} +{"stream": "website_overview", "data": {"ga_date": "2022-02-23", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006911} +{"stream": "website_overview", "data": {"ga_date": "2022-02-24", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006911} +{"stream": "website_overview", "data": {"ga_date": "2022-02-28", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006911} +{"stream": "website_overview", "data": {"ga_date": "2022-03-01", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 195.0, "ga_pageviews": 30, "ga_pageviewsPerSession": 30.0, "ga_avgTimeOnPage": 6.620689655172414, "ga_bounceRate": 0.0, "ga_exitRate": 3.3333333333333335, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006912} +{"stream": "website_overview", "data": {"ga_date": "2022-03-02", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 332.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 332.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006912} +{"stream": "website_overview", "data": {"ga_date": "2022-03-04", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006913} +{"stream": "website_overview", "data": {"ga_date": "2022-03-06", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006913} +{"stream": "website_overview", "data": {"ga_date": "2022-03-08", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 192.0, "ga_pageviews": 29, "ga_pageviewsPerSession": 29.0, "ga_avgTimeOnPage": 6.821428571428571, "ga_bounceRate": 0.0, "ga_exitRate": 3.4482758620689653, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750006913} +{"stream": "website_overview", "data": {"ga_date": "2022-03-09", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007206} +{"stream": "website_overview", "data": {"ga_date": "2022-03-10", "ga_users": 5, "ga_newUsers": 5, "ga_sessions": 5, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 7.0, "ga_pageviews": 6, "ga_pageviewsPerSession": 1.2, "ga_avgTimeOnPage": 35.0, "ga_bounceRate": 80.0, "ga_exitRate": 83.33333333333334, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007206} +{"stream": "website_overview", "data": {"ga_date": "2022-03-11", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007207} +{"stream": "website_overview", "data": {"ga_date": "2022-03-12", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 4, "ga_sessionsPerUser": 4.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007207} +{"stream": "website_overview", "data": {"ga_date": "2022-03-13", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007207} +{"stream": "website_overview", "data": {"ga_date": "2022-03-14", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007208} +{"stream": "website_overview", "data": {"ga_date": "2022-03-15", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 131.0, "ga_pageviews": 30, "ga_pageviewsPerSession": 15.0, "ga_avgTimeOnPage": 9.428571428571429, "ga_bounceRate": 50.0, "ga_exitRate": 6.666666666666667, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007208} +{"stream": "website_overview", "data": {"ga_date": "2022-03-16", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007208} +{"stream": "website_overview", "data": {"ga_date": "2022-03-17", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 185.5, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 185.5, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007208} +{"stream": "website_overview", "data": {"ga_date": "2022-03-18", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 912.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 456.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007209} +{"stream": "website_overview", "data": {"ga_date": "2022-03-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 215.0, "ga_pageviews": 29, "ga_pageviewsPerSession": 29.0, "ga_avgTimeOnPage": 7.785714285714286, "ga_bounceRate": 0.0, "ga_exitRate": 3.4482758620689653, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007209} +{"stream": "website_overview", "data": {"ga_date": "2022-03-23", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.5, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007209} +{"stream": "website_overview", "data": {"ga_date": "2022-03-24", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 115.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 230.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007210} +{"stream": "website_overview", "data": {"ga_date": "2022-03-25", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 34.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.3333333333333333, "ga_avgTimeOnPage": 102.0, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 75.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007210} +{"stream": "website_overview", "data": {"ga_date": "2022-03-26", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007210} +{"stream": "website_overview", "data": {"ga_date": "2022-03-28", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 2.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007210} +{"stream": "website_overview", "data": {"ga_date": "2022-03-29", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 89.66666666666667, "ga_pageviews": 32, "ga_pageviewsPerSession": 10.666666666666666, "ga_avgTimeOnPage": 9.275862068965518, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 9.375, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007211} +{"stream": "website_overview", "data": {"ga_date": "2022-03-30", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007211} +{"stream": "website_overview", "data": {"ga_date": "2022-03-31", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007211} +{"stream": "website_overview", "data": {"ga_date": "2022-04-01", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007211} +{"stream": "website_overview", "data": {"ga_date": "2022-04-04", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 56.0, "ga_pageviews": 30, "ga_pageviewsPerSession": 15.0, "ga_avgTimeOnPage": 4.0, "ga_bounceRate": 50.0, "ga_exitRate": 6.666666666666667, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007212} +{"stream": "website_overview", "data": {"ga_date": "2022-04-05", "ga_users": 4, "ga_newUsers": 2, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007212} +{"stream": "website_overview", "data": {"ga_date": "2022-04-06", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007212} +{"stream": "website_overview", "data": {"ga_date": "2022-04-07", "ga_users": 5, "ga_newUsers": 5, "ga_sessions": 5, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 4.8, "ga_pageviews": 5, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 80.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007213} +{"stream": "website_overview", "data": {"ga_date": "2022-04-08", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007213} +{"stream": "website_overview", "data": {"ga_date": "2022-04-10", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007213} +{"stream": "website_overview", "data": {"ga_date": "2022-04-11", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 26.0, "ga_pageviews": 32, "ga_pageviewsPerSession": 8.0, "ga_avgTimeOnPage": 3.642857142857143, "ga_bounceRate": 75.0, "ga_exitRate": 12.5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007213} +{"stream": "website_overview", "data": {"ga_date": "2022-04-12", "ga_users": 5, "ga_newUsers": 4, "ga_sessions": 5, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 89.4, "ga_pageviews": 5, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 80.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007214} +{"stream": "website_overview", "data": {"ga_date": "2022-04-13", "ga_users": 9, "ga_newUsers": 9, "ga_sessions": 11, "ga_sessionsPerUser": 1.2222222222222223, "ga_avgSessionDuration": 41.63636363636363, "ga_pageviews": 12, "ga_pageviewsPerSession": 1.0909090909090908, "ga_avgTimeOnPage": 458.0, "ga_bounceRate": 72.72727272727273, "ga_exitRate": 91.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007214} +{"stream": "website_overview", "data": {"ga_date": "2022-04-14", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 359.0, "ga_pageviews": 7, "ga_pageviewsPerSession": 2.3333333333333335, "ga_avgTimeOnPage": 269.25, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 42.857142857142854, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007214} +{"stream": "website_overview", "data": {"ga_date": "2022-04-15", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 47.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 47.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007214} +{"stream": "website_overview", "data": {"ga_date": "2022-04-16", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007215} +{"stream": "website_overview", "data": {"ga_date": "2022-04-18", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 83.33333333333333, "ga_pageviews": 33, "ga_pageviewsPerSession": 11.0, "ga_avgTimeOnPage": 8.2, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 9.090909090909092, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007215} +{"stream": "website_overview", "data": {"ga_date": "2022-04-19", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.6666666666666666, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007215} +{"stream": "website_overview", "data": {"ga_date": "2022-04-20", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007216} +{"stream": "website_overview", "data": {"ga_date": "2022-04-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 342.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 342.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007217} +{"stream": "website_overview", "data": {"ga_date": "2022-04-23", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 4.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007217} +{"stream": "website_overview", "data": {"ga_date": "2022-04-24", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 3256.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 1627.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007217} +{"stream": "website_overview", "data": {"ga_date": "2022-04-26", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007217} +{"stream": "website_overview", "data": {"ga_date": "2022-04-27", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 24.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007218} +{"stream": "website_overview", "data": {"ga_date": "2022-04-29", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007218} +{"stream": "website_overview", "data": {"ga_date": "2022-05-02", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007218} +{"stream": "website_overview", "data": {"ga_date": "2022-05-03", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 23.0, "ga_pageviews": 5, "ga_pageviewsPerSession": 1.6666666666666667, "ga_avgTimeOnPage": 34.5, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 60.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007219} +{"stream": "website_overview", "data": {"ga_date": "2022-05-04", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007219} +{"stream": "website_overview", "data": {"ga_date": "2022-05-09", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007219} +{"stream": "website_overview", "data": {"ga_date": "2022-05-10", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 78.0, "ga_pageviews": 29, "ga_pageviewsPerSession": 14.5, "ga_avgTimeOnPage": 5.703703703703703, "ga_bounceRate": 50.0, "ga_exitRate": 6.896551724137931, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007219} +{"stream": "website_overview", "data": {"ga_date": "2022-05-11", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 18.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 18.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007220} +{"stream": "website_overview", "data": {"ga_date": "2022-05-16", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 225.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 225.0, "ga_bounceRate": 50.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007220} +{"stream": "website_overview", "data": {"ga_date": "2022-05-17", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007220} +{"stream": "website_overview", "data": {"ga_date": "2022-05-18", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007221} +{"stream": "website_overview", "data": {"ga_date": "2022-05-19", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007221} +{"stream": "website_overview", "data": {"ga_date": "2022-05-20", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1228.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 1228.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007221} +{"stream": "website_overview", "data": {"ga_date": "2022-05-25", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 93.5, "ga_pageviews": 6, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 46.75, "ga_bounceRate": 50.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007222} +{"stream": "website_overview", "data": {"ga_date": "2022-05-30", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 35.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 35.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007222} +{"stream": "website_overview", "data": {"ga_date": "2022-05-31", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 4, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007222} +{"stream": "website_overview", "data": {"ga_date": "2022-06-01", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 20.5, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 41.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007223} +{"stream": "website_overview", "data": {"ga_date": "2022-06-02", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007223} +{"stream": "website_overview", "data": {"ga_date": "2022-06-03", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007223} +{"stream": "website_overview", "data": {"ga_date": "2022-06-06", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 3.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007224} +{"stream": "website_overview", "data": {"ga_date": "2022-06-07", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 69.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 69.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007224} +{"stream": "website_overview", "data": {"ga_date": "2022-06-08", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007554} +{"stream": "website_overview", "data": {"ga_date": "2022-06-09", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007555} +{"stream": "website_overview", "data": {"ga_date": "2022-06-13", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007555} +{"stream": "website_overview", "data": {"ga_date": "2022-06-14", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 120.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 240.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007556} +{"stream": "website_overview", "data": {"ga_date": "2022-06-15", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 0, "ga_pageviewsPerSession": 0.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 0.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007556} +{"stream": "website_overview", "data": {"ga_date": "2022-06-16", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 80.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 160.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007556} +{"stream": "website_overview", "data": {"ga_date": "2022-06-18", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007557} +{"stream": "website_overview", "data": {"ga_date": "2022-06-21", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 53.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 53.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007557} +{"stream": "website_overview", "data": {"ga_date": "2022-06-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 50.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 25.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007558} +{"stream": "website_overview", "data": {"ga_date": "2022-06-27", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007558} +{"stream": "website_overview", "data": {"ga_date": "2022-06-28", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007559} +{"stream": "website_overview", "data": {"ga_date": "2022-06-29", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 256.0, "ga_pageviews": 9, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 127.83333333333333, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007559} +{"stream": "website_overview", "data": {"ga_date": "2022-07-01", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 15.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 30.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007560} +{"stream": "website_overview", "data": {"ga_date": "2022-07-05", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1246.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007560} +{"stream": "website_overview", "data": {"ga_date": "2022-07-06", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 306.6666666666667, "ga_pageviews": 6, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 306.6666666666667, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007561} +{"stream": "website_overview", "data": {"ga_date": "2022-07-07", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007561} +{"stream": "website_overview", "data": {"ga_date": "2022-07-08", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007561} +{"stream": "website_overview", "data": {"ga_date": "2022-07-09", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 971.0, "ga_pageviews": 8, "ga_pageviewsPerSession": 4.0, "ga_avgTimeOnPage": 323.6666666666667, "ga_bounceRate": 50.0, "ga_exitRate": 25.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007562} +{"stream": "website_overview", "data": {"ga_date": "2022-07-11", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007563} +{"stream": "website_overview", "data": {"ga_date": "2022-07-12", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007564} +{"stream": "website_overview", "data": {"ga_date": "2022-07-13", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007564} +{"stream": "website_overview", "data": {"ga_date": "2022-07-14", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 158.0, "ga_pageviews": 7, "ga_pageviewsPerSession": 3.5, "ga_avgTimeOnPage": 63.4, "ga_bounceRate": 0.0, "ga_exitRate": 28.57142857142857, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007565} +{"stream": "website_overview", "data": {"ga_date": "2022-07-15", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007566} +{"stream": "website_overview", "data": {"ga_date": "2022-07-19", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.25, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 75.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007568} +{"stream": "website_overview", "data": {"ga_date": "2022-07-20", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007568} +{"stream": "website_overview", "data": {"ga_date": "2022-07-21", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007568} +{"stream": "website_overview", "data": {"ga_date": "2022-07-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007569} +{"stream": "website_overview", "data": {"ga_date": "2022-07-26", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 102.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 51.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007569} +{"stream": "website_overview", "data": {"ga_date": "2022-07-27", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 61.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007569} +{"stream": "website_overview", "data": {"ga_date": "2022-07-28", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 4.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007570} +{"stream": "website_overview", "data": {"ga_date": "2022-07-29", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1918.0, "ga_pageviews": 7, "ga_pageviewsPerSession": 7.0, "ga_avgTimeOnPage": 319.5, "ga_bounceRate": 0.0, "ga_exitRate": 14.285714285714285, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007570} +{"stream": "website_overview", "data": {"ga_date": "2022-07-30", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007571} +{"stream": "website_overview", "data": {"ga_date": "2022-07-31", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007571} +{"stream": "website_overview", "data": {"ga_date": "2022-08-01", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 251.5, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 503.0, "ga_bounceRate": 0.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007571} +{"stream": "website_overview", "data": {"ga_date": "2022-08-02", "ga_users": 5, "ga_newUsers": 5, "ga_sessions": 6, "ga_sessionsPerUser": 1.2, "ga_avgSessionDuration": 44.5, "ga_pageviews": 8, "ga_pageviewsPerSession": 1.3333333333333333, "ga_avgTimeOnPage": 133.5, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 75.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007572} +{"stream": "website_overview", "data": {"ga_date": "2022-08-04", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007572} +{"stream": "website_overview", "data": {"ga_date": "2022-08-08", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007572} +{"stream": "website_overview", "data": {"ga_date": "2022-08-10", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 256.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 256.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007573} +{"stream": "website_overview", "data": {"ga_date": "2022-08-12", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007573} +{"stream": "website_overview", "data": {"ga_date": "2022-08-16", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007573} +{"stream": "website_overview", "data": {"ga_date": "2022-08-17", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007574} +{"stream": "website_overview", "data": {"ga_date": "2022-08-18", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 586.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 586.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007574} +{"stream": "website_overview", "data": {"ga_date": "2022-08-20", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 371.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 371.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007574} +{"stream": "website_overview", "data": {"ga_date": "2022-08-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007575} +{"stream": "website_overview", "data": {"ga_date": "2022-08-23", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 5, "ga_sessionsPerUser": 1.25, "ga_avgSessionDuration": 0.0, "ga_pageviews": 5, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007575} +{"stream": "website_overview", "data": {"ga_date": "2022-08-24", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007576} +{"stream": "website_overview", "data": {"ga_date": "2022-08-26", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007576} +{"stream": "website_overview", "data": {"ga_date": "2022-08-27", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 301.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 301.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007576} +{"stream": "website_overview", "data": {"ga_date": "2022-08-28", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007577} +{"stream": "website_overview", "data": {"ga_date": "2022-08-29", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 154.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 77.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007577} +{"stream": "website_overview", "data": {"ga_date": "2022-08-31", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 223.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 223.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007577} +{"stream": "website_overview", "data": {"ga_date": "2022-09-01", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007578} +{"stream": "website_overview", "data": {"ga_date": "2022-09-02", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007578} +{"stream": "website_overview", "data": {"ga_date": "2022-09-05", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007578} +{"stream": "website_overview", "data": {"ga_date": "2022-09-06", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 39.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 39.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750007578} +{"stream": "website_overview", "data": {"ga_date": "2022-09-13", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008024} +{"stream": "website_overview", "data": {"ga_date": "2022-09-15", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008024} +{"stream": "website_overview", "data": {"ga_date": "2022-09-18", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 75.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 75.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008025} +{"stream": "website_overview", "data": {"ga_date": "2022-09-19", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008025} +{"stream": "website_overview", "data": {"ga_date": "2022-09-20", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 5, "ga_sessionsPerUser": 1.25, "ga_avgSessionDuration": 0.0, "ga_pageviews": 5, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008025} +{"stream": "website_overview", "data": {"ga_date": "2022-09-21", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 357.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 714.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008026} +{"stream": "website_overview", "data": {"ga_date": "2022-09-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008026} +{"stream": "website_overview", "data": {"ga_date": "2022-09-23", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008026} +{"stream": "website_overview", "data": {"ga_date": "2022-09-27", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008027} +{"stream": "website_overview", "data": {"ga_date": "2022-09-29", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008027} +{"stream": "website_overview", "data": {"ga_date": "2022-10-02", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008027} +{"stream": "website_overview", "data": {"ga_date": "2022-10-03", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 10.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 10.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008028} +{"stream": "website_overview", "data": {"ga_date": "2022-10-06", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 114.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 114.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008028} +{"stream": "website_overview", "data": {"ga_date": "2022-10-07", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008028} +{"stream": "website_overview", "data": {"ga_date": "2022-10-10", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008029} +{"stream": "website_overview", "data": {"ga_date": "2022-10-12", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 18.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008029} +{"stream": "website_overview", "data": {"ga_date": "2022-10-13", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 107.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008029} +{"stream": "website_overview", "data": {"ga_date": "2022-10-14", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 7.5, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 15.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008029} +{"stream": "website_overview", "data": {"ga_date": "2022-10-22", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008030} +{"stream": "website_overview", "data": {"ga_date": "2022-10-25", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.5, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008030} +{"stream": "website_overview", "data": {"ga_date": "2022-10-28", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008030} +{"stream": "website_overview", "data": {"ga_date": "2022-10-29", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008031} +{"stream": "website_overview", "data": {"ga_date": "2022-10-30", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1347.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 673.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008031} +{"stream": "website_overview", "data": {"ga_date": "2022-11-01", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 405.5, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008031} +{"stream": "website_overview", "data": {"ga_date": "2022-11-02", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008032} +{"stream": "website_overview", "data": {"ga_date": "2022-11-04", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008032} +{"stream": "website_overview", "data": {"ga_date": "2022-11-05", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008032} +{"stream": "website_overview", "data": {"ga_date": "2022-11-07", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 8.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 16.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008032} +{"stream": "website_overview", "data": {"ga_date": "2022-11-09", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 13.0, "ga_pageviews": 5, "ga_pageviewsPerSession": 2.5, "ga_avgTimeOnPage": 8.666666666666666, "ga_bounceRate": 50.0, "ga_exitRate": 40.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008033} +{"stream": "website_overview", "data": {"ga_date": "2022-11-10", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008033} +{"stream": "website_overview", "data": {"ga_date": "2022-11-14", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008033} +{"stream": "website_overview", "data": {"ga_date": "2022-11-15", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008034} +{"stream": "website_overview", "data": {"ga_date": "2022-11-16", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 107.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 214.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008034} +{"stream": "website_overview", "data": {"ga_date": "2022-11-17", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008034} +{"stream": "website_overview", "data": {"ga_date": "2022-11-18", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008035} +{"stream": "website_overview", "data": {"ga_date": "2022-11-19", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008035} +{"stream": "website_overview", "data": {"ga_date": "2022-11-23", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008035} +{"stream": "website_overview", "data": {"ga_date": "2022-11-24", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 66.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 132.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008035} +{"stream": "website_overview", "data": {"ga_date": "2022-11-25", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 33.333333333333336, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.3333333333333333, "ga_avgTimeOnPage": 100.0, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 75.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008036} +{"stream": "website_overview", "data": {"ga_date": "2022-11-28", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 4, "ga_sessionsPerUser": 1.3333333333333333, "ga_avgSessionDuration": 144.25, "ga_pageviews": 6, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 288.5, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008036} +{"stream": "website_overview", "data": {"ga_date": "2022-11-29", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008036} +{"stream": "website_overview", "data": {"ga_date": "2022-11-30", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008037} +{"stream": "website_overview", "data": {"ga_date": "2022-12-02", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 27.0, "ga_pageviews": 6, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 13.5, "ga_bounceRate": 50.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008037} +{"stream": "website_overview", "data": {"ga_date": "2022-12-05", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008037} +{"stream": "website_overview", "data": {"ga_date": "2022-12-06", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008038} +{"stream": "website_overview", "data": {"ga_date": "2022-12-07", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008331} +{"stream": "website_overview", "data": {"ga_date": "2022-12-08", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008331} +{"stream": "website_overview", "data": {"ga_date": "2022-12-09", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008332} +{"stream": "website_overview", "data": {"ga_date": "2022-12-10", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008332} +{"stream": "website_overview", "data": {"ga_date": "2022-12-12", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008332} +{"stream": "website_overview", "data": {"ga_date": "2022-12-14", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008333} +{"stream": "website_overview", "data": {"ga_date": "2022-12-15", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008333} +{"stream": "website_overview", "data": {"ga_date": "2022-12-19", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 352.25, "ga_pageviews": 11, "ga_pageviewsPerSession": 2.75, "ga_avgTimeOnPage": 201.14285714285714, "ga_bounceRate": 25.0, "ga_exitRate": 36.36363636363637, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008333} +{"stream": "website_overview", "data": {"ga_date": "2022-12-20", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 2.5, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 2.5, "ga_bounceRate": 50.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008333} +{"stream": "website_overview", "data": {"ga_date": "2022-12-21", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1120.0, "ga_pageviews": 42, "ga_pageviewsPerSession": 14.0, "ga_avgTimeOnPage": 86.12820512820512, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 7.142857142857142, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008334} +{"stream": "website_overview", "data": {"ga_date": "2022-12-22", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 4, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 29.75, "ga_pageviews": 6, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 59.5, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008334} +{"stream": "website_overview", "data": {"ga_date": "2022-12-26", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008335} +{"stream": "website_overview", "data": {"ga_date": "2022-12-27", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008335} +{"stream": "website_overview", "data": {"ga_date": "2022-12-28", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008335} +{"stream": "website_overview", "data": {"ga_date": "2022-12-29", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008335} +{"stream": "website_overview", "data": {"ga_date": "2022-12-30", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008336} +{"stream": "website_overview", "data": {"ga_date": "2022-12-31", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 0, "ga_sessionsPerUser": 0.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 0, "ga_pageviewsPerSession": 0.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 0.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008336} +{"stream": "website_overview", "data": {"ga_date": "2023-01-02", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008337} +{"stream": "website_overview", "data": {"ga_date": "2023-01-04", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 257.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 257.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008337} +{"stream": "website_overview", "data": {"ga_date": "2023-01-05", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008337} +{"stream": "website_overview", "data": {"ga_date": "2023-01-06", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 146.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 146.0, "ga_bounceRate": 50.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008338} +{"stream": "website_overview", "data": {"ga_date": "2023-01-08", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008340} +{"stream": "website_overview", "data": {"ga_date": "2023-01-09", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008341} +{"stream": "website_overview", "data": {"ga_date": "2023-01-11", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 478.5, "ga_pageviews": 7, "ga_pageviewsPerSession": 3.5, "ga_avgTimeOnPage": 191.4, "ga_bounceRate": 50.0, "ga_exitRate": 28.57142857142857, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008342} +{"stream": "website_overview", "data": {"ga_date": "2023-01-12", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 9.5, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 19.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008343} +{"stream": "website_overview", "data": {"ga_date": "2023-01-14", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008344} +{"stream": "website_overview", "data": {"ga_date": "2023-01-15", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008344} +{"stream": "website_overview", "data": {"ga_date": "2023-01-16", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008344} +{"stream": "website_overview", "data": {"ga_date": "2023-01-17", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008348} +{"stream": "website_overview", "data": {"ga_date": "2023-01-18", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 90.5, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 90.5, "ga_bounceRate": 50.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008348} +{"stream": "website_overview", "data": {"ga_date": "2023-01-19", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008349} +{"stream": "website_overview", "data": {"ga_date": "2023-01-24", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008349} +{"stream": "website_overview", "data": {"ga_date": "2023-01-25", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750008349} +{"stream": "traffic_sources", "data": {"ga_date": "2021-11-10", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 219.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 219.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008681} +{"stream": "traffic_sources", "data": {"ga_date": "2021-11-12", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008682} +{"stream": "traffic_sources", "data": {"ga_date": "2021-11-17", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008682} +{"stream": "traffic_sources", "data": {"ga_date": "2021-11-22", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 23.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008683} +{"stream": "traffic_sources", "data": {"ga_date": "2021-12-06", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008683} +{"stream": "traffic_sources", "data": {"ga_date": "2021-12-10", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008946} +{"stream": "traffic_sources", "data": {"ga_date": "2021-12-21", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008947} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-05", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 6.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008948} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-10", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008948} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-12", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008949} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-13", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008949} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-13", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008949} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-14", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008950} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-16", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008950} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-17", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008950} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-17", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008951} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-18", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008951} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-19", "ga_source": "api.surveymonkey.net", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008951} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-21", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008952} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008952} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-24", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 86.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.3333333333333333, "ga_avgTimeOnPage": 258.0, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 75.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008952} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-25", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 204.33333333333334, "ga_pageviews": 33, "ga_pageviewsPerSession": 11.0, "ga_avgTimeOnPage": 20.5, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 9.090909090909092, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008953} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-26", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008953} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-27", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008954} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-27", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 133.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 133.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008954} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-27", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008955} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-28", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 4, "ga_sessionsPerUser": 1.3333333333333333, "ga_avgSessionDuration": 0.75, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 75.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008955} +{"stream": "traffic_sources", "data": {"ga_date": "2022-01-31", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 324.6666666666667, "ga_pageviews": 6, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 324.6666666666667, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008956} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-01", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 242.66666666666666, "ga_pageviews": 33, "ga_pageviewsPerSession": 11.0, "ga_avgTimeOnPage": 24.266666666666666, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 9.090909090909092, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008956} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-03", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 37.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 37.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008957} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-07", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008957} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-08", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 297.0, "ga_pageviews": 30, "ga_pageviewsPerSession": 30.0, "ga_avgTimeOnPage": 10.275862068965518, "ga_bounceRate": 0.0, "ga_exitRate": 3.3333333333333335, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008958} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-08", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 456.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008958} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-09", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008958} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-10", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008959} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-13", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008959} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-14", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 314.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 4.0, "ga_avgTimeOnPage": 104.66666666666667, "ga_bounceRate": 0.0, "ga_exitRate": 25.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008960} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-15", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 69.66666666666667, "ga_pageviews": 32, "ga_pageviewsPerSession": 10.666666666666666, "ga_avgTimeOnPage": 7.172413793103448, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 9.375, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008960} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-15", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 371.5, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 371.5, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008960} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-17", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008961} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-19", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 7.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 7.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008961} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-21", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008962} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008962} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-23", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008964} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-23", "ga_source": "api.surveymonkey.net", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008964} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-24", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008965} +{"stream": "traffic_sources", "data": {"ga_date": "2022-02-28", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008966} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-01", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 198.0, "ga_pageviews": 30, "ga_pageviewsPerSession": 30.0, "ga_avgTimeOnPage": 6.724137931034483, "ga_bounceRate": 0.0, "ga_exitRate": 3.3333333333333335, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008966} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-02", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 336.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 336.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008966} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-04", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008967} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-06", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008967} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-08", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 195.0, "ga_pageviews": 29, "ga_pageviewsPerSession": 29.0, "ga_avgTimeOnPage": 6.928571428571429, "ga_bounceRate": 0.0, "ga_exitRate": 3.4482758620689653, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750008967} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-09", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009206} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-10", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009207} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-10", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 35.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 35.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009207} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-11", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009208} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-12", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 4, "ga_sessionsPerUser": 4.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009208} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-13", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009208} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-14", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009208} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-15", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 131.0, "ga_pageviews": 30, "ga_pageviewsPerSession": 15.0, "ga_avgTimeOnPage": 9.428571428571429, "ga_bounceRate": 50.0, "ga_exitRate": 6.666666666666667, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009209} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-16", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009209} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-17", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 185.5, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 185.5, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009209} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-18", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 912.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 456.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009210} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 215.0, "ga_pageviews": 29, "ga_pageviewsPerSession": 29.0, "ga_avgTimeOnPage": 7.785714285714286, "ga_bounceRate": 0.0, "ga_exitRate": 3.4482758620689653, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009210} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-23", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009210} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-23", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009211} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-24", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 115.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 230.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009211} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-25", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 51.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 102.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009211} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-25", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009212} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-26", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009212} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-28", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 6.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009213} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-28", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009213} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-28", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009213} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-29", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 101.5, "ga_pageviews": 30, "ga_pageviewsPerSession": 15.0, "ga_avgTimeOnPage": 7.25, "ga_bounceRate": 50.0, "ga_exitRate": 6.666666666666667, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009214} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-29", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 66.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 66.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009214} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-30", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009214} +{"stream": "traffic_sources", "data": {"ga_date": "2022-03-31", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009215} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-01", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009215} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-04", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 56.0, "ga_pageviews": 30, "ga_pageviewsPerSession": 15.0, "ga_avgTimeOnPage": 4.0, "ga_bounceRate": 50.0, "ga_exitRate": 6.666666666666667, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009216} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-05", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009216} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-05", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009217} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-06", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009217} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-07", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 5, "ga_newUsers": 5, "ga_sessions": 5, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 4.8, "ga_pageviews": 5, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 80.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009218} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-08", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009218} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-10", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009218} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-11", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 4, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 26.0, "ga_pageviews": 32, "ga_pageviewsPerSession": 8.0, "ga_avgTimeOnPage": 3.642857142857143, "ga_bounceRate": 75.0, "ga_exitRate": 12.5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009220} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-12", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009236} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-12", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 223.5, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009236} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-13", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 9, "ga_newUsers": 9, "ga_sessions": 10, "ga_sessionsPerUser": 1.1111111111111112, "ga_avgSessionDuration": 45.8, "ga_pageviews": 11, "ga_pageviewsPerSession": 1.1, "ga_avgTimeOnPage": 458.0, "ga_bounceRate": 70.0, "ga_exitRate": 90.9090909090909, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009237} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-13", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009237} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-14", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 496.5, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 496.5, "ga_bounceRate": 50.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009237} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-14", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 84.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 42.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009238} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-15", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 47.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 47.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009238} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-16", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009238} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-18", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 179.0, "ga_pageviews": 29, "ga_pageviewsPerSession": 29.0, "ga_avgTimeOnPage": 6.285714285714286, "ga_bounceRate": 0.0, "ga_exitRate": 3.4482758620689653, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009239} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-18", "ga_source": "admin.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 71.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 35.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009239} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-18", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009239} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-19", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.6666666666666666, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009239} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-20", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009240} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 342.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 342.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009240} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-23", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 4.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009240} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-24", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 3256.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 1627.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009241} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-26", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009241} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-27", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 24.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009241} +{"stream": "traffic_sources", "data": {"ga_date": "2022-04-29", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009242} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-02", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009242} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-03", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 69.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 34.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009242} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-03", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009242} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-04", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009243} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-09", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009243} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-09", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009243} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-10", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 78.0, "ga_pageviews": 29, "ga_pageviewsPerSession": 14.5, "ga_avgTimeOnPage": 5.703703703703703, "ga_bounceRate": 50.0, "ga_exitRate": 6.896551724137931, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009244} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-11", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 18.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 18.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009244} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-16", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009244} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-16", "ga_source": "api.surveymonkey.net", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 450.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 225.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009245} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-17", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009245} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-17", "ga_source": "api.surveymonkey.net", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009245} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-18", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009246} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-19", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009246} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-19", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009247} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-20", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1228.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 1228.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009247} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-25", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 187.0, "ga_pageviews": 5, "ga_pageviewsPerSession": 5.0, "ga_avgTimeOnPage": 46.75, "ga_bounceRate": 0.0, "ga_exitRate": 20.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009247} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-25", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009248} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-30", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 35.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 35.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009248} +{"stream": "traffic_sources", "data": {"ga_date": "2022-05-31", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 4, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009248} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-01", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 20.5, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 41.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009249} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-02", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009249} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-03", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009249} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-06", "ga_source": "bing", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 6.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009250} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-06", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009250} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-07", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 69.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 69.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009250} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-08", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009504} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-09", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009505} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-13", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009505} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-14", "ga_source": "api.surveymonkey.net", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 240.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 240.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009506} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-14", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009507} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-15", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 0, "ga_pageviewsPerSession": 0.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 0.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009507} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-16", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 80.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 160.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009508} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-18", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009508} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-21", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 53.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 53.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009508} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-22", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 50.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 25.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009509} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-27", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009509} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-28", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009509} +{"stream": "traffic_sources", "data": {"ga_date": "2022-06-29", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 256.0, "ga_pageviews": 9, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 127.83333333333333, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009510} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-01", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 15.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 30.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009510} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-05", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1246.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009510} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-06", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 306.6666666666667, "ga_pageviews": 6, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 306.6666666666667, "ga_bounceRate": 33.33333333333333, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009511} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-07", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009511} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-08", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009511} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-09", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009512} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-09", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1942.0, "ga_pageviews": 7, "ga_pageviewsPerSession": 7.0, "ga_avgTimeOnPage": 323.6666666666667, "ga_bounceRate": 0.0, "ga_exitRate": 14.285714285714285, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009512} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-11", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009513} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-11", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009513} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-12", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009514} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-13", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009514} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-14", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 158.0, "ga_pageviews": 7, "ga_pageviewsPerSession": 3.5, "ga_avgTimeOnPage": 63.4, "ga_bounceRate": 0.0, "ga_exitRate": 28.57142857142857, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009514} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-15", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009515} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-19", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009515} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-19", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009516} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-20", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009516} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-21", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009516} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009517} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-26", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 102.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 51.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009517} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-27", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 61.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009517} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-28", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 4.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009518} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-29", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1918.0, "ga_pageviews": 7, "ga_pageviewsPerSession": 7.0, "ga_avgTimeOnPage": 319.5, "ga_bounceRate": 0.0, "ga_exitRate": 14.285714285714285, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009518} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-30", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009518} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-31", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009519} +{"stream": "traffic_sources", "data": {"ga_date": "2022-07-31", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009519} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-01", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 251.5, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 503.0, "ga_bounceRate": 0.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009519} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-02", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 4, "ga_newUsers": 4, "ga_sessions": 5, "ga_sessionsPerUser": 1.25, "ga_avgSessionDuration": 53.4, "ga_pageviews": 7, "ga_pageviewsPerSession": 1.4, "ga_avgTimeOnPage": 133.5, "ga_bounceRate": 60.0, "ga_exitRate": 71.42857142857143, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009519} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-02", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009520} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-04", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009520} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-08", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009520} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-10", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 256.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 256.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009521} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-12", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009521} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-16", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009521} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-17", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009522} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-18", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 586.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 586.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009522} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-20", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 371.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 371.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009522} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009523} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-23", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009523} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-23", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009523} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-23", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009524} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-24", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009524} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-26", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009524} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-27", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 301.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 301.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009525} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-28", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009525} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-28", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009525} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-29", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 154.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 77.0, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009525} +{"stream": "traffic_sources", "data": {"ga_date": "2022-08-31", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 223.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 223.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009526} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-01", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009526} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-02", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009526} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-02", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009527} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-05", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009527} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-06", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 39.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 39.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009528} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-13", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009803} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-15", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009804} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-18", "ga_source": "api.surveymonkey.net", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 75.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 75.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009804} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-19", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009805} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-19", "ga_source": "adwords", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009805} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-20", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009806} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-20", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009806} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-21", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 357.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 714.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009807} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009807} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-23", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009808} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-27", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009808} +{"stream": "traffic_sources", "data": {"ga_date": "2022-09-29", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009809} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-02", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009809} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-03", "ga_source": "adwords", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 10.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 10.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009810} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-06", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 114.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 114.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009810} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-07", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009810} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-10", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009810} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-12", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009811} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-12", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 36.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009811} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-13", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 211.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009811} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-13", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 3.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009812} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-14", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 7.5, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 15.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009812} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009813} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-25", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009813} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-25", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009813} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-28", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009814} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-29", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009814} +{"stream": "traffic_sources", "data": {"ga_date": "2022-10-30", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1347.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 673.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009814} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-01", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 405.5, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 50.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009815} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-02", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009816} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-04", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009816} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-05", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009817} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-07", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 16.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 16.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009817} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-07", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009818} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-09", "ga_source": "airbyte.workable.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 26.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 4.0, "ga_avgTimeOnPage": 8.666666666666666, "ga_bounceRate": 0.0, "ga_exitRate": 25.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009818} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-09", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009818} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-10", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009819} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-14", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009819} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-15", "ga_source": "api.surveymonkey.net", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009819} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-15", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009820} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-15", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009820} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-16", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 107.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 214.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009820} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-17", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009821} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-18", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009821} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-19", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009821} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-23", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009822} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-24", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 66.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 132.0, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009822} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-25", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 100.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 100.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009822} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-25", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009823} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-25", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009823} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-28", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 121.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 1.3333333333333333, "ga_avgTimeOnPage": 363.0, "ga_bounceRate": 66.66666666666666, "ga_exitRate": 75.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009823} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-28", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 214.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 214.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009823} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-29", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009824} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-30", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009824} +{"stream": "traffic_sources", "data": {"ga_date": "2022-11-30", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009824} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-02", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 54.0, "ga_pageviews": 5, "ga_pageviewsPerSession": 5.0, "ga_avgTimeOnPage": 13.5, "ga_bounceRate": 0.0, "ga_exitRate": 20.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009824} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-02", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009824} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-05", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009825} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-05", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009825} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-05", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009825} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-06", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750009825} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-07", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010097} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-08", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010098} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-09", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010099} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-09", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010099} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-09", "ga_source": "bing", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010100} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-10", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010101} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-12", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010101} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-14", "ga_source": "bing", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010101} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-15", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010102} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-19", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 3, "ga_newUsers": 3, "ga_sessions": 3, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 469.6666666666667, "ga_pageviews": 10, "ga_pageviewsPerSession": 3.3333333333333335, "ga_avgTimeOnPage": 201.14285714285714, "ga_bounceRate": 0.0, "ga_exitRate": 30.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010102} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-19", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010103} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-20", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 5.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 2.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010104} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-20", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010105} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-21", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 1680.0, "ga_pageviews": 41, "ga_pageviewsPerSession": 20.5, "ga_avgTimeOnPage": 86.12820512820512, "ga_bounceRate": 0.0, "ga_exitRate": 4.878048780487805, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010106} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-21", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010107} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-22", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 1, "ga_sessions": 4, "ga_sessionsPerUser": 2.0, "ga_avgSessionDuration": 29.75, "ga_pageviews": 6, "ga_pageviewsPerSession": 1.5, "ga_avgTimeOnPage": 59.5, "ga_bounceRate": 50.0, "ga_exitRate": 66.66666666666666, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010107} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-26", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010108} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-27", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 0, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010108} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-28", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010109} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-29", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010109} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-30", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010110} +{"stream": "traffic_sources", "data": {"ga_date": "2022-12-31", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 0, "ga_sessionsPerUser": 0.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 0, "ga_pageviewsPerSession": 0.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 0.0, "ga_exitRate": 0.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010110} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-02", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010111} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-02", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010111} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-04", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 257.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 257.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010112} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-05", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 3, "ga_sessionsPerUser": 1.5, "ga_avgSessionDuration": 0.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010113} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-06", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 146.0, "ga_pageviews": 4, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 146.0, "ga_bounceRate": 50.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010115} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-08", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010115} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-09", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 2, "ga_newUsers": 2, "ga_sessions": 2, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010116} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-11", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 957.0, "ga_pageviews": 6, "ga_pageviewsPerSession": 6.0, "ga_avgTimeOnPage": 191.4, "ga_bounceRate": 0.0, "ga_exitRate": 16.666666666666664, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010116} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-11", "ga_source": "developer.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010116} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-12", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 19.0, "ga_pageviews": 2, "ga_pageviewsPerSession": 2.0, "ga_avgTimeOnPage": 19.0, "ga_bounceRate": 0.0, "ga_exitRate": 50.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010116} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-12", "ga_source": "google", "ga_medium": "organic", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-14", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-15", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-16", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-17", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-18", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-18", "ga_source": "api.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 181.0, "ga_pageviews": 3, "ga_pageviewsPerSession": 3.0, "ga_avgTimeOnPage": 90.5, "ga_bounceRate": 0.0, "ga_exitRate": 33.33333333333333, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-19", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-19", "ga_source": "bing", "ga_medium": "cpc", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010117} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-24", "ga_source": "help.surveymonkey.com", "ga_medium": "referral", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010118} +{"stream": "traffic_sources", "data": {"ga_date": "2023-01-25", "ga_source": "(direct)", "ga_medium": "(none)", "ga_socialNetwork": "(not set)", "ga_users": 1, "ga_newUsers": 1, "ga_sessions": 1, "ga_sessionsPerUser": 1.0, "ga_avgSessionDuration": 0.0, "ga_pageviews": 1, "ga_pageviewsPerSession": 1.0, "ga_avgTimeOnPage": 0.0, "ga_bounceRate": 100.0, "ga_exitRate": 100.0, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750010118} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-10", "ga_30dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010462} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-11", "ga_30dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010462} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-12", "ga_30dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010462} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-13", "ga_30dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010463} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-14", "ga_30dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010463} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-15", "ga_30dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010463} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-16", "ga_30dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010463} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-17", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010463} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-18", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010463} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-19", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010464} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-20", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010464} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-21", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010464} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-22", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010464} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-23", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010464} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-24", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010465} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-25", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010465} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-26", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010465} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-27", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010465} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-28", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010465} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-29", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010465} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-11-30", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010466} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-01", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010466} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-02", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010466} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-03", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010466} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-04", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010466} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-05", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010467} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-06", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010467} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-07", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010467} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-08", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010725} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-09", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010725} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-10", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010726} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-11", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010726} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-12", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010726} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-13", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010726} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-14", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010726} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-15", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010726} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-16", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010727} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-17", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010727} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-18", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010727} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-19", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010727} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-20", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010727} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-21", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010728} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-22", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010728} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-23", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010728} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-24", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010728} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-25", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010729} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-26", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010729} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-27", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010729} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-28", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010729} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-29", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010730} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-30", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010730} +{"stream": "monthly_active_users", "data": {"ga_date": "2021-12-31", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010730} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-01", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010730} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-02", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010731} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-03", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010731} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-04", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010732} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-05", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010732} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-06", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010732} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-07", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010732} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-08", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010733} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-09", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010733} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-10", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010733} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-11", "ga_30dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010733} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-12", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010734} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-13", "ga_30dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010734} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-14", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010734} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-15", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010734} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-16", "ga_30dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010734} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-17", "ga_30dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010734} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-18", "ga_30dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010735} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-19", "ga_30dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010735} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-20", "ga_30dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010735} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-21", "ga_30dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010735} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-22", "ga_30dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010735} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-23", "ga_30dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010736} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-24", "ga_30dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010736} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-25", "ga_30dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010736} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-26", "ga_30dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010736} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-27", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010736} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-28", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010737} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-29", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010737} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-30", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010737} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-01-31", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010737} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-01", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010738} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-02", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010738} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-03", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010738} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-04", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010738} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-05", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010738} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-06", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010738} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-07", "ga_30dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010739} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-08", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010739} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-09", "ga_30dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010739} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-10", "ga_30dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010739} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-11", "ga_30dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010739} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-12", "ga_30dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010740} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-13", "ga_30dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010740} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-14", "ga_30dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010740} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-15", "ga_30dayUsers": 40, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010740} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-16", "ga_30dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010740} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-17", "ga_30dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010740} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-18", "ga_30dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010741} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-19", "ga_30dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010741} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-20", "ga_30dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010741} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-21", "ga_30dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010741} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-22", "ga_30dayUsers": 40, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010741} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-23", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010742} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-24", "ga_30dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010742} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-25", "ga_30dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010742} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-26", "ga_30dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010742} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-27", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010742} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-02-28", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010742} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-01", "ga_30dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010743} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-02", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010743} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-03", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010743} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-04", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010743} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-05", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010743} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-06", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010744} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-07", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010744} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-08", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750010744} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-09", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011055} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-10", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011056} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-11", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011056} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-12", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011057} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-13", "ga_30dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011057} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-14", "ga_30dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011057} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-15", "ga_30dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011058} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-16", "ga_30dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011058} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-17", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011058} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-18", "ga_30dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011058} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-19", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011059} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-20", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011059} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-21", "ga_30dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011059} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-22", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011059} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-23", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011060} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-24", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011060} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-25", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011060} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-26", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011060} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-27", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011060} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-28", "ga_30dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011061} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-29", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011061} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-30", "ga_30dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011061} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-03-31", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011061} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-01", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011062} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-02", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011062} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-03", "ga_30dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011062} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-04", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011063} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-05", "ga_30dayUsers": 40, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011063} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-06", "ga_30dayUsers": 41, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011063} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-07", "ga_30dayUsers": 45, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011064} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-08", "ga_30dayUsers": 44, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011064} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-09", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011065} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-10", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011065} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-11", "ga_30dayUsers": 42, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011065} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-12", "ga_30dayUsers": 45, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011065} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-13", "ga_30dayUsers": 53, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011066} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-14", "ga_30dayUsers": 53, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011066} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-15", "ga_30dayUsers": 52, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011067} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-16", "ga_30dayUsers": 51, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011067} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-17", "ga_30dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011068} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-18", "ga_30dayUsers": 53, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011068} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-19", "ga_30dayUsers": 55, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011068} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-20", "ga_30dayUsers": 56, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011069} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-21", "ga_30dayUsers": 55, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011069} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-22", "ga_30dayUsers": 54, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011069} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-23", "ga_30dayUsers": 53, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011070} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-24", "ga_30dayUsers": 51, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011070} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-25", "ga_30dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011071} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-26", "ga_30dayUsers": 51, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011071} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-27", "ga_30dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011072} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-28", "ga_30dayUsers": 47, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011072} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-29", "ga_30dayUsers": 49, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011073} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-04-30", "ga_30dayUsers": 47, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011073} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-01", "ga_30dayUsers": 46, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011074} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-02", "ga_30dayUsers": 47, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011074} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-03", "ga_30dayUsers": 49, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011075} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-04", "ga_30dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011075} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-05", "ga_30dayUsers": 46, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011076} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-06", "ga_30dayUsers": 45, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011077} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-07", "ga_30dayUsers": 40, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011078} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-08", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011079} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-09", "ga_30dayUsers": 41, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011080} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-10", "ga_30dayUsers": 41, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011081} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-11", "ga_30dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011081} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-12", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011082} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-13", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011082} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-14", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011082} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-15", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011082} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-16", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011082} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-17", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011083} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-18", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011083} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-19", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011083} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-20", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011083} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-21", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011084} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-22", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011084} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-23", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011084} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-24", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011084} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-25", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011084} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-26", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011084} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-27", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011085} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-28", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011085} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-29", "ga_30dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011085} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-30", "ga_30dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011085} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-05-31", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011085} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-01", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011085} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-02", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011086} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-03", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011086} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-04", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011086} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-05", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011086} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-06", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011086} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-07", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011087} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-08", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011357} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-09", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011357} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-10", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011358} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-11", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011358} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-12", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011358} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-13", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011358} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-14", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011359} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-15", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011359} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-16", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011359} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-17", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011360} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-18", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011360} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-19", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011360} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-20", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011360} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-21", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011361} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-22", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011361} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-23", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011361} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-24", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011361} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-25", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011362} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-26", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011362} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-27", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011362} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-28", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011363} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-29", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011363} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-06-30", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011363} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-01", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011364} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-02", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011364} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-03", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011364} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-04", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011365} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-05", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011365} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-06", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011365} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-07", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011366} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-08", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011366} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-09", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011367} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-10", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011367} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-11", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011368} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-12", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011368} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-13", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011368} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-14", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011369} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-15", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011369} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-16", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011369} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-17", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011370} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-18", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011370} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-19", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011371} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-20", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011371} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-21", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011371} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-22", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011372} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-23", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011372} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-24", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011372} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-25", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011372} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-26", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011373} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-27", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011373} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-28", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011373} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-29", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011374} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-30", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011374} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-07-31", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011374} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-01", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011375} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-02", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011375} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-03", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011375} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-04", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011375} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-05", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011376} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-06", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011376} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-07", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011376} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-08", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011376} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-09", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011377} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-10", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011377} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-11", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011377} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-12", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011378} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-13", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011378} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-14", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011380} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-15", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011380} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-16", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011381} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-17", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011381} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-18", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011384} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-19", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011385} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-20", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011385} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-21", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011385} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-22", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011386} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-23", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011386} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-24", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011386} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-25", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011387} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-26", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011387} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-27", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011387} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-28", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011388} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-29", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011388} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-30", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011388} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-08-31", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011388} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-01", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011388} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-02", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011389} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-03", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011389} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-04", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011389} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-05", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011389} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-06", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011390} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-07", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011665} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-08", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011666} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-09", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011667} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-10", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011668} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-11", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011668} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-12", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011668} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-13", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011668} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-14", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011669} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-15", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011669} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-16", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011669} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-17", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011669} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-18", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011669} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-19", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011670} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-20", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011670} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-21", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011670} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-22", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011670} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-23", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011670} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-24", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011671} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-25", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011671} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-26", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011671} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-27", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011671} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-28", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011671} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-29", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011672} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-09-30", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011672} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-01", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011672} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-02", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011672} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-03", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011672} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-04", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011673} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-05", "ga_30dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011673} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-06", "ga_30dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011673} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-07", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011673} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-08", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011673} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-09", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011673} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-10", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011674} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-11", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011674} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-12", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011674} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-13", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011674} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-14", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011674} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-15", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011675} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-16", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011675} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-17", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011675} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-18", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011675} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-19", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011675} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-20", "ga_30dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011675} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-21", "ga_30dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011676} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-22", "ga_30dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011676} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-23", "ga_30dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011676} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-24", "ga_30dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011676} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-25", "ga_30dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011677} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-26", "ga_30dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011677} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-27", "ga_30dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011677} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-28", "ga_30dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011677} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-29", "ga_30dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011677} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-30", "ga_30dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011678} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-10-31", "ga_30dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011678} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-01", "ga_30dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011678} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-02", "ga_30dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011678} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-03", "ga_30dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011678} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-04", "ga_30dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011679} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-05", "ga_30dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011679} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-06", "ga_30dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011680} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-07", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011680} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-08", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011680} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-09", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011680} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-10", "ga_30dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011681} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-11", "ga_30dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011681} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-12", "ga_30dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011681} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-13", "ga_30dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011681} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-14", "ga_30dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011681} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-15", "ga_30dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011681} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-16", "ga_30dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011682} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-17", "ga_30dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011682} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-18", "ga_30dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011682} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-19", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011682} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-20", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011682} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-21", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011683} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-22", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011683} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-23", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011683} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-24", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011683} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-25", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011683} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-26", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011684} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-27", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011684} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-28", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011684} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-29", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011684} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-11-30", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011685} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-01", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011685} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-02", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011685} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-03", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011685} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-04", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011685} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-05", "ga_30dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011685} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-06", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750011686} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-07", "ga_30dayUsers": 32, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011945} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-08", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011946} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-09", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011946} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-10", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011946} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-11", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011946} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-12", "ga_30dayUsers": 35, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011947} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-13", "ga_30dayUsers": 35, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011947} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-14", "ga_30dayUsers": 35, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011947} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-15", "ga_30dayUsers": 32, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011947} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-16", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011947} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-17", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011948} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-18", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011948} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-19", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011948} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-20", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011948} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-21", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011948} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-22", "ga_30dayUsers": 34, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011949} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-23", "ga_30dayUsers": 33, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011949} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-24", "ga_30dayUsers": 32, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011949} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-25", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011950} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-26", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011950} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-27", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011950} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-28", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011950} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-29", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011950} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-30", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011951} +{"stream": "monthly_active_users", "data": {"ga_date": "2022-12-31", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011951} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-01", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011951} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-02", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011951} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-03", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011952} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-04", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011952} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-05", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011952} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-06", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011952} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-07", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011952} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-08", "ga_30dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011952} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-09", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011953} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-10", "ga_30dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011953} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-11", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011953} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-12", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011953} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-13", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011953} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-14", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011953} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-15", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011954} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-16", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011954} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-17", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011954} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-18", "ga_30dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011954} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-19", "ga_30dayUsers": 31, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011954} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-20", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011955} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-21", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011955} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-22", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011955} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-23", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011955} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-24", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011955} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-25", "ga_30dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011955} +{"stream": "monthly_active_users", "data": {"ga_date": "2023-01-26", "ga_30dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750011956} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-08", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012519} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-09", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012519} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-10", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012519} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-11", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012520} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-12", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012520} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-13", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012520} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-14", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012520} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-15", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012521} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-16", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012521} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-17", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012521} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-18", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012521} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-19", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012521} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-20", "ga_28dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012522} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-21", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012522} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-22", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012522} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-23", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012522} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-24", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012523} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-25", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012524} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-26", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012528} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-27", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012531} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-28", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012532} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-29", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012532} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-30", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012532} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2021-12-31", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012532} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-01", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012532} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-02", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012533} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-03", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012533} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-04", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012533} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-05", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012533} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-06", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012533} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-07", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012533} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-08", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012534} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-09", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012534} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-10", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012534} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-11", "ga_28dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012534} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-12", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012534} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-13", "ga_28dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012535} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-14", "ga_28dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012535} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-15", "ga_28dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012535} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-16", "ga_28dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012535} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-17", "ga_28dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012535} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-18", "ga_28dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012535} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-19", "ga_28dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012536} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-20", "ga_28dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012536} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-21", "ga_28dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012536} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-22", "ga_28dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012536} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-23", "ga_28dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012536} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-24", "ga_28dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012537} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-25", "ga_28dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012537} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-26", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012537} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-27", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012537} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-28", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012537} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-29", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012538} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-30", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012538} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-01-31", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012538} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-01", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012538} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-02", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012538} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-03", "ga_28dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012538} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-04", "ga_28dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012539} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-05", "ga_28dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012539} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-06", "ga_28dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012539} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-07", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012539} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-08", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012539} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-09", "ga_28dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012540} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-10", "ga_28dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012540} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-11", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012540} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-12", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012540} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-13", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012540} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-14", "ga_28dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012540} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-15", "ga_28dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012541} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-16", "ga_28dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012541} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-17", "ga_28dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012541} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-18", "ga_28dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012541} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-19", "ga_28dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012541} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-20", "ga_28dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012542} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-21", "ga_28dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012542} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-22", "ga_28dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012542} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-23", "ga_28dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012542} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-24", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012542} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-25", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012542} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-26", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012543} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-27", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012543} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-02-28", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012543} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-01", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012543} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-02", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012543} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-03", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012543} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-04", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012543} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-05", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012544} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-06", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012544} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-07", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012544} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-08", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012544} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-09", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012836} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-10", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012837} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-11", "ga_28dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012837} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-12", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012837} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-13", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012837} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-14", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012837} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-15", "ga_28dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012838} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-16", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012838} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-17", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012838} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-18", "ga_28dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012838} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-19", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012838} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-20", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012838} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-21", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012839} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-22", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012839} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-23", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012839} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-24", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012839} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-25", "ga_28dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012839} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-26", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012840} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-27", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012840} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-28", "ga_28dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012840} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-29", "ga_28dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012840} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-30", "ga_28dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012840} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-03-31", "ga_28dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012840} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-01", "ga_28dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012841} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-02", "ga_28dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012841} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-03", "ga_28dayUsers": 36, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012841} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-04", "ga_28dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012841} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-05", "ga_28dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012841} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-06", "ga_28dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012841} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-07", "ga_28dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012842} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-08", "ga_28dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012842} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-09", "ga_28dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012842} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-10", "ga_28dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012842} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-11", "ga_28dayUsers": 40, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012843} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-12", "ga_28dayUsers": 42, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012843} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-13", "ga_28dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012843} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-14", "ga_28dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012843} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-15", "ga_28dayUsers": 49, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012844} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-16", "ga_28dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012844} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-17", "ga_28dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012844} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-18", "ga_28dayUsers": 53, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012844} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-19", "ga_28dayUsers": 54, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012844} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-20", "ga_28dayUsers": 53, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012844} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-21", "ga_28dayUsers": 51, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012845} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-22", "ga_28dayUsers": 49, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012845} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-23", "ga_28dayUsers": 49, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012845} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-24", "ga_28dayUsers": 50, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012845} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-25", "ga_28dayUsers": 48, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012845} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-26", "ga_28dayUsers": 46, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012846} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-27", "ga_28dayUsers": 46, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012846} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-28", "ga_28dayUsers": 44, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012846} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-29", "ga_28dayUsers": 46, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012846} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-04-30", "ga_28dayUsers": 46, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012846} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-01", "ga_28dayUsers": 46, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012847} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-02", "ga_28dayUsers": 47, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012847} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-03", "ga_28dayUsers": 45, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012847} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-04", "ga_28dayUsers": 45, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012847} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-05", "ga_28dayUsers": 40, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012847} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-06", "ga_28dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012847} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-07", "ga_28dayUsers": 39, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012848} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-08", "ga_28dayUsers": 38, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012848} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-09", "ga_28dayUsers": 37, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012848} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-10", "ga_28dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012848} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-11", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012848} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-12", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012849} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-13", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012849} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-14", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012849} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-15", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012849} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-16", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012849} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-17", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012850} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-18", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012850} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-19", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012850} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-20", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012850} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-21", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012850} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-22", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012850} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-23", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012851} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-24", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012851} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-25", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012851} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-26", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012851} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-27", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012851} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-28", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012852} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-29", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012852} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-30", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012852} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-05-31", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012852} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-01", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012852} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-02", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012852} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-03", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012853} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-04", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012853} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-05", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012853} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-06", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012853} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-07", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750012854} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-08", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013099} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-09", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013103} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-10", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013104} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-11", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013105} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-12", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013105} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-13", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013106} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-14", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013106} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-15", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013109} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-16", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013109} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-17", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013109} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-18", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013109} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-19", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013110} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-20", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013110} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-21", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013110} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-22", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013110} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-23", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013111} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-24", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013111} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-25", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013111} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-26", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013112} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-27", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013112} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-28", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013112} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-29", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013113} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-06-30", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013113} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-01", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013113} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-02", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013114} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-03", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013114} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-04", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013114} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-05", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013115} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-06", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013115} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-07", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013115} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-08", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013115} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-09", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013116} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-10", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013117} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-11", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013118} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-12", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013118} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-13", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013119} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-14", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013119} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-15", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013119} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-16", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013119} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-17", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013119} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-18", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013120} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-19", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013120} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-20", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013120} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-21", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013120} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-22", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013120} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-23", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013121} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-24", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013121} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-25", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013121} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-26", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013121} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-27", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013121} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-28", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013122} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-29", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013122} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-30", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013122} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-07-31", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013122} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-01", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013122} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-02", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013122} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-03", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013123} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-04", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013123} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-05", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013123} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-06", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013123} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-07", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013123} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-08", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013124} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-09", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013124} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-10", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013124} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-11", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013124} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-12", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013124} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-13", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013125} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-14", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013125} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-15", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013125} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-16", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013125} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-17", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013125} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-18", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-19", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-20", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-21", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-22", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-23", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-24", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-25", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-26", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-27", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-28", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-29", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-30", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-08-31", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-01", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-02", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013126} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-03", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013127} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-04", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013127} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-05", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013127} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-06", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013127} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-07", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013369} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-08", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013369} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-09", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013369} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-10", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013370} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-11", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013370} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-12", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013370} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-13", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013370} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-14", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013370} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-15", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013370} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-16", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013371} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-17", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013371} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-18", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013371} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-19", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013371} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-20", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013371} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-21", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013372} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-22", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013372} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-23", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013372} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-24", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013372} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-25", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013372} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-26", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013372} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-27", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013373} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-28", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013373} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-29", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013373} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-09-30", "ga_28dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013373} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-01", "ga_28dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013374} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-02", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013374} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-03", "ga_28dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013374} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-04", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013374} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-05", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013375} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-06", "ga_28dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013375} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-07", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013375} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-08", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013375} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-09", "ga_28dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013375} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-10", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013376} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-11", "ga_28dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013376} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-12", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013376} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-13", "ga_28dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013376} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-14", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013377} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-15", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013377} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-16", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013377} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-17", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013377} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-18", "ga_28dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013378} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-19", "ga_28dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013378} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-20", "ga_28dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013378} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-21", "ga_28dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013378} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-22", "ga_28dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013378} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-23", "ga_28dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013378} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-24", "ga_28dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013379} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-25", "ga_28dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013379} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-26", "ga_28dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013379} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-27", "ga_28dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013380} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-28", "ga_28dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013380} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-29", "ga_28dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013380} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-30", "ga_28dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013380} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-10-31", "ga_28dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013380} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-01", "ga_28dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013381} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-02", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013381} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-03", "ga_28dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013381} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-04", "ga_28dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013381} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-05", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013381} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-06", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013382} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-07", "ga_28dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013382} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-08", "ga_28dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013382} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-09", "ga_28dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013382} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-10", "ga_28dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013383} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-11", "ga_28dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013383} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-12", "ga_28dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013383} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-13", "ga_28dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013383} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-14", "ga_28dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013383} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-15", "ga_28dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013383} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-16", "ga_28dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013384} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-17", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013384} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-18", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013384} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-19", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013384} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-20", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013384} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-21", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013385} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-22", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013385} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-23", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013385} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-24", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013385} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-25", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013385} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-26", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013386} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-27", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013386} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-28", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013386} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-29", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013386} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-11-30", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013386} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-01", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013387} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-02", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013387} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-03", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013387} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-04", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013387} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-05", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013387} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-06", "ga_28dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013388} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-07", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013656} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-08", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013656} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-09", "ga_28dayUsers": 33, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013657} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-10", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013657} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-11", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013657} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-12", "ga_28dayUsers": 34, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013657} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-13", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013658} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-14", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013658} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-15", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013658} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-16", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013658} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-17", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013659} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-18", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013659} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-19", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013659} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-20", "ga_28dayUsers": 31, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013660} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-21", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013660} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-22", "ga_28dayUsers": 32, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013661} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-23", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013661} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-24", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013661} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-25", "ga_28dayUsers": 30, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013662} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-26", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013662} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-27", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013662} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-28", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013663} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-29", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013663} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-30", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013663} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2022-12-31", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013663} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-01", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013664} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-02", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013664} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-03", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013664} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-04", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013665} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-05", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013665} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-06", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013665} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-07", "ga_28dayUsers": 24, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013665} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-08", "ga_28dayUsers": 25, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013666} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-09", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013666} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-10", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013666} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-11", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013667} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-12", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013667} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-13", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013667} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-14", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013667} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-15", "ga_28dayUsers": 29, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013668} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-16", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013668} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-17", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013668} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-18", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013668} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-19", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013668} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-20", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013669} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-21", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013669} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-22", "ga_28dayUsers": 28, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013669} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-23", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013669} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-24", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013669} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-25", "ga_28dayUsers": 27, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013670} +{"stream": "four_weekly_active_users", "data": {"ga_date": "2023-01-26", "ga_28dayUsers": 26, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750013670} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-10", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013980} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-11", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013981} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-12", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013981} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-13", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013982} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-14", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013982} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-15", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013982} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-16", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013983} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-17", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013983} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-18", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013985} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-19", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013986} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-20", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013986} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-21", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013986} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-22", "ga_14dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013987} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-23", "ga_14dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013987} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-24", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013987} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-25", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013987} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-26", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013987} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-27", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013988} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-28", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013988} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-29", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013988} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-11-30", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013988} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-01", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013989} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-02", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013989} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-03", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013989} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-04", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013989} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-05", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013989} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-06", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013990} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-07", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750013990} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-08", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014214} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-09", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014214} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-10", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014215} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-11", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014215} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-12", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014215} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-13", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014216} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-14", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014217} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-15", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014218} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-16", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014218} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-17", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014219} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-18", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014219} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-19", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014219} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-20", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014219} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-21", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014219} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-22", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014220} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-23", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014220} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-24", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014220} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-25", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014220} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-26", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014220} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-27", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014221} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-28", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014221} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-29", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014221} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-30", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014221} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2021-12-31", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014222} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-01", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014222} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-02", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014223} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-03", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014223} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-04", "ga_14dayUsers": 1, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014223} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-05", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014223} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-06", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014224} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-07", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014224} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-08", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014224} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-09", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014224} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-10", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014225} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-11", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014225} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-12", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014225} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-13", "ga_14dayUsers": 2, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014225} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-14", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014225} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-15", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014226} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-16", "ga_14dayUsers": 3, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014226} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-17", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014226} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-18", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014226} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-19", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014227} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-20", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014227} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-21", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014227} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-22", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014227} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-23", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014228} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-24", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014228} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-25", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014228} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-26", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014228} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-27", "ga_14dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014228} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-28", "ga_14dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014229} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-29", "ga_14dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014230} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-30", "ga_14dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014230} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-01-31", "ga_14dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014234} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-01", "ga_14dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014241} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-02", "ga_14dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014242} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-03", "ga_14dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014242} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-04", "ga_14dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014242} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-05", "ga_14dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014242} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-06", "ga_14dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014242} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-07", "ga_14dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014243} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-08", "ga_14dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014243} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-09", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014243} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-10", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014244} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-11", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014244} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-12", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014244} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-13", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014244} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-14", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014244} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-15", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014245} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-16", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014245} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-17", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014245} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-18", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014245} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-19", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014245} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-20", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014246} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-21", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014246} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-22", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014246} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-23", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014246} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-24", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014246} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-25", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014246} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-26", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014246} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-27", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-02-28", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-01", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-02", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-03", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-04", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-05", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-06", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-07", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014247} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-08", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014248} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-09", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014478} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-10", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014478} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-11", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014479} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-12", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014479} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-13", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014479} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-14", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014480} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-15", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014480} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-16", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014480} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-17", "ga_14dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014481} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-18", "ga_14dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014481} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-19", "ga_14dayUsers": 19, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014481} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-20", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014482} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-21", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014482} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-22", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014483} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-23", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014483} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-24", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014483} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-25", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014484} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-26", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014484} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-27", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014485} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-28", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014485} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-29", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014485} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-30", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014486} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-03-31", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014486} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-01", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014486} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-02", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014487} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-03", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014488} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-04", "ga_14dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014488} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-05", "ga_14dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014488} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-06", "ga_14dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014489} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-07", "ga_14dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014489} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-08", "ga_14dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014489} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-09", "ga_14dayUsers": 20, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014489} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-10", "ga_14dayUsers": 21, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014490} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-11", "ga_14dayUsers": 23, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014490} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-12", "ga_14dayUsers": 24, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014491} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-13", "ga_14dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014491} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-14", "ga_14dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014491} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-15", "ga_14dayUsers": 31, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014492} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-16", "ga_14dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014492} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-17", "ga_14dayUsers": 32, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014492} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-18", "ga_14dayUsers": 35, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014493} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-19", "ga_14dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014493} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-20", "ga_14dayUsers": 33, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014493} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-21", "ga_14dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014493} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-22", "ga_14dayUsers": 28, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014494} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-23", "ga_14dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014494} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-24", "ga_14dayUsers": 29, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014494} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-25", "ga_14dayUsers": 26, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014494} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-26", "ga_14dayUsers": 22, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014495} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-27", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014495} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-28", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014495} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-29", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014495} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-04-30", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014496} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-01", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014496} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-02", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014496} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-03", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014497} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-04", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014497} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-05", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014497} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-06", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014497} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-07", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014498} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-08", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014498} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-09", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014501} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-10", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014501} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-11", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014501} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-12", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014502} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-13", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014502} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-14", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014502} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-15", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014502} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-16", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014503} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-17", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014503} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-18", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014503} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-19", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014503} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-20", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014503} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-21", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014504} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-22", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014504} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-23", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014504} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-24", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014504} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-25", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014504} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-26", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014504} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-27", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-28", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-29", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-30", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-05-31", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-01", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-02", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-03", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-04", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-05", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-06", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-07", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014505} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-08", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014731} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-09", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014732} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-10", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014733} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-11", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014733} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-12", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014734} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-13", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014734} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-14", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014734} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-15", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014735} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-16", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014735} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-17", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014735} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-18", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014736} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-19", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014736} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-20", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014736} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-21", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014736} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-22", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014737} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-23", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014737} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-24", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014737} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-25", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014737} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-26", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014738} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-27", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014738} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-28", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014738} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-29", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014739} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-06-30", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014739} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-01", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014739} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-02", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014739} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-03", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014740} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-04", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014740} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-05", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014740} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-06", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014741} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-07", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014741} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-08", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014741} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-09", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014741} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-10", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014742} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-11", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014742} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-12", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014742} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-13", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014743} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-14", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014743} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-15", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014743} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-16", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014744} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-17", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014744} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-18", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014744} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-19", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014744} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-20", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014745} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-21", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014745} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-22", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014745} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-23", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014745} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-24", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014746} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-25", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014746} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-26", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014746} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-27", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014747} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-28", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014747} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-29", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014747} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-30", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014747} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-07-31", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014747} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-01", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014748} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-02", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014748} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-03", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014748} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-04", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014748} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-05", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014749} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-06", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014749} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-07", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014750} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-08", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014750} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-09", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014751} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-10", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014751} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-11", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014751} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-12", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014751} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-13", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014752} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-14", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014752} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-15", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014752} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-16", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-17", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-18", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-19", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-20", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-21", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-22", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-23", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-24", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-25", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014753} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-26", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-27", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-28", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-29", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-30", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-08-31", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-01", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-02", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-03", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-04", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-05", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-06", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014754} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-07", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014990} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-08", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014991} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-09", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014991} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-10", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014991} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-11", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014992} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-12", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014992} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-13", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014992} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-14", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014992} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-15", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014992} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-16", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014993} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-17", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014993} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-18", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014993} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-19", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014994} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-20", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014994} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-21", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014994} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-22", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014994} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-23", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014995} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-24", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014995} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-25", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014995} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-26", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014995} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-27", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014996} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-28", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014996} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-29", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014996} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-09-30", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014997} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-01", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014997} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-02", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014997} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-03", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014997} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-04", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014998} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-05", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014998} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-06", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014998} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-07", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014998} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-08", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014999} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-09", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014999} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-10", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014999} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-11", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014999} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-12", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750014999} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-13", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015000} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-14", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015000} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-15", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015000} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-16", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015000} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-17", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015000} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-18", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015001} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-19", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015001} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-20", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015001} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-21", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015001} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-22", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015002} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-23", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015002} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-24", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015002} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-25", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015002} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-26", "ga_14dayUsers": 7, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015002} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-27", "ga_14dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015003} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-28", "ga_14dayUsers": 4, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015003} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-29", "ga_14dayUsers": 5, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015003} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-30", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015003} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-10-31", "ga_14dayUsers": 6, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015004} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-01", "ga_14dayUsers": 8, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015004} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-02", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015004} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-03", "ga_14dayUsers": 9, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015004} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-04", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015004} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-05", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015005} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-06", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015005} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-07", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015005} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-08", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015005} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-09", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015005} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-10", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015006} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-11", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015006} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-12", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015006} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-13", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015006} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-14", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015007} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-15", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015007} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-16", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015007} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-17", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015007} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-18", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015008} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-19", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015008} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-20", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015008} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-21", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015008} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-22", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015008} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-23", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015009} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-24", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015009} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-25", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015009} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-26", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015009} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-27", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015009} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-28", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015010} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-29", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015010} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-11-30", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015010} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-01", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015010} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-02", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015010} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-03", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015011} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-04", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015011} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-05", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015011} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-06", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": true}, "emitted_at": 1674750015012} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-07", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015250} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-08", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015251} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-09", "ga_14dayUsers": 18, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015251} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-10", "ga_14dayUsers": 19, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015251} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-11", "ga_14dayUsers": 19, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015251} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-12", "ga_14dayUsers": 17, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015251} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-13", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015252} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-14", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015252} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-15", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015252} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-16", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015252} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-17", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015252} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-18", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015253} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-19", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015253} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-20", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015253} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-21", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015253} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-22", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015253} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-23", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015253} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-24", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015254} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-25", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015254} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-26", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015254} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-27", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015254} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-28", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015254} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-29", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015254} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-30", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015255} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2022-12-31", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015255} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-01", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015255} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-02", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015255} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-03", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015255} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-04", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015256} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-05", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015256} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-06", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015256} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-07", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015256} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-08", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015256} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-09", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015256} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-10", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015257} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-11", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015257} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-12", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015257} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-13", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015257} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-14", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015257} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-15", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015257} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-16", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015258} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-17", "ga_14dayUsers": 15, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015258} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-18", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015258} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-19", "ga_14dayUsers": 16, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015258} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-20", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015258} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-21", "ga_14dayUsers": 14, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015259} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-22", "ga_14dayUsers": 13, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015259} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-23", "ga_14dayUsers": 11, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015259} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-24", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015259} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-25", "ga_14dayUsers": 12, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015259} +{"stream": "two_weekly_active_users", "data": {"ga_date": "2023-01-26", "ga_14dayUsers": 10, "view_id": "211669975", "isDataGolden": false}, "emitted_at": 1674750015259} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-google-pagespeed-insights/source_google_pagespeed_insights/google_pagespeed_insights.yaml b/airbyte-integrations/connectors/source-google-pagespeed-insights/source_google_pagespeed_insights/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-google-pagespeed-insights/source_google_pagespeed_insights/google_pagespeed_insights.yaml rename to airbyte-integrations/connectors/source-google-pagespeed-insights/source_google_pagespeed_insights/manifest.yaml diff --git a/airbyte-integrations/connectors/source-google-pagespeed-insights/source_google_pagespeed_insights/source.py b/airbyte-integrations/connectors/source-google-pagespeed-insights/source_google_pagespeed_insights/source.py index 8c5a930baf448..e513f52462e18 100644 --- a/airbyte-integrations/connectors/source-google-pagespeed-insights/source_google_pagespeed_insights/source.py +++ b/airbyte-integrations/connectors/source-google-pagespeed-insights/source_google_pagespeed_insights/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceGooglePagespeedInsights(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "google_pagespeed_insights.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-google-search-console/Dockerfile b/airbyte-integrations/connectors/source-google-search-console/Dockerfile index c48b29620b6f6..ebe4c0af5322d 100755 --- a/airbyte-integrations/connectors/source-google-search-console/Dockerfile +++ b/airbyte-integrations/connectors/source-google-search-console/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-google-search-console diff --git a/airbyte-integrations/connectors/source-google-search-console/README.md b/airbyte-integrations/connectors/source-google-search-console/README.md index 5c280d3bc910b..20372693ce885 100755 --- a/airbyte-integrations/connectors/source-google-search-console/README.md +++ b/airbyte-integrations/connectors/source-google-search-console/README.md @@ -79,7 +79,7 @@ docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integrat 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] +pip install .'[tests]' ``` ### Unit Tests To run unit tests locally, from the connector directory run: diff --git a/airbyte-integrations/connectors/source-google-search-console/acceptance-test-config.yml b/airbyte-integrations/connectors/source-google-search-console/acceptance-test-config.yml index c6228a70c37d0..4aa9eb83bd57f 100755 --- a/airbyte-integrations/connectors/source-google-search-console/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-google-search-console/acceptance-test-config.yml @@ -1,37 +1,48 @@ # 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-google-search-console:dev -tests: +test_strictness_level: "high" +acceptance_tests: spec: - - spec_path: "source_google_search_console/spec.json" + tests: + - spec_path: "source_google_search_console/spec.json" connection: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "secrets/service_account_config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "secrets/service_account_config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: - - config_path: "secrets/config.json" + tests: + - config_path: "secrets/config.json" basic_read: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: [] - timeout_seconds: 1800 + tests: + - config_path: "secrets/config.json" + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: yes + exact_order: yes + extra_records: no + timeout_seconds: 1800 full_refresh: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/catalog.json" - timeout_seconds: 1800 + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/catalog.json" + timeout_seconds: 1800 incremental: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog_incremental.json" - timeout_seconds: 1800 - future_state_path: "integration_tests/abnormal_state.json" - cursor_paths: - search_analytics_by_country: [ "https://airbyte.io", "web", "date" ] - search_analytics_by_country: [ "https://airbyte.io", "web", "image" ] - search_analytics_by_device: [ "https://airbyte.io", "web", "date" ] - search_analytics_by_page: [ "https://airbyte.io", "web", "date" ] - search_analytics_by_query: [ "https://airbyte.io", "web", "date" ] - search_analytics_all_fields: [ "https://airbyte.io", "web", "date" ] - custom_dimensions: [ "https://airbyte.io", "web", "date" ] + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog_incremental.json" + timeout_seconds: 1800 + future_state: + future_state_path: "integration_tests/abnormal_state.json" + cursor_paths: + search_analytics_by_country: [ "https://airbyte.io", "web", "date" ] + search_analytics_by_country: [ "https://airbyte.io", "web", "image" ] + search_analytics_by_device: [ "https://airbyte.io", "web", "date" ] + search_analytics_by_page: [ "https://airbyte.io", "web", "date" ] + search_analytics_by_query: [ "https://airbyte.io", "web", "date" ] + search_analytics_all_fields: [ "https://airbyte.io", "web", "date" ] + custom_dimensions: [ "https://airbyte.io", "web", "date" ] diff --git a/airbyte-integrations/connectors/source-google-search-console/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-google-search-console/integration_tests/configured_catalog.json index ce8bcd1048811..d407ec0746926 100755 --- a/airbyte-integrations/connectors/source-google-search-console/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-google-search-console/integration_tests/configured_catalog.json @@ -1,5 +1,23 @@ { "streams": [ + { + "stream": { + "name": "sites", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, + { + "stream": { + "name": "sitemaps", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" + }, { "stream": { "name": "search_analytics_by_date", diff --git a/airbyte-integrations/connectors/source-google-search-console/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-google-search-console/integration_tests/expected_records.jsonl new file mode 100644 index 0000000000000..56f1dd7f7c57d --- /dev/null +++ b/airbyte-integrations/connectors/source-google-search-console/integration_tests/expected_records.jsonl @@ -0,0 +1,46 @@ +{"stream": "sites", "data": {"permissionLevel": "siteOwner"}, "emitted_at": 1674600072721} +{"stream": "sites", "data": {"permissionLevel": "siteOwner"}, "emitted_at": 1674600073155} +{"stream": "sitemaps", "data": {"lastSubmitted": "2021-09-10T23:02:22.258Z", "isPending": false, "isSitemapsIndex": false, "type": "sitemap", "warnings": "0", "errors": "0", "contents": [{"type": "web", "submitted": "5690", "indexed": "0"}]}, "emitted_at": 1674600073428} +{"stream": "sitemaps", "data": {"lastSubmitted": "2021-09-10T23:02:22.258Z", "isPending": false, "isSitemapsIndex": false, "type": "sitemap", "warnings": "0", "errors": "0", "contents": [{"type": "web", "submitted": "5690", "indexed": "0"}]}, "emitted_at": 1674600073798} +{"stream": "search_analytics_by_date", "data": {"ctr": 0.07940251572327044, "position": 31.88456498951782, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600074364} +{"stream": "search_analytics_by_date", "data": {"ctr": 0.07130707837236687, "position": 32.45505691482403, "search_type": "web", "date": "2021-09-15"}, "emitted_at": 1674600074364} +{"stream": "search_analytics_by_date", "data": {"ctr": 0.06246691371095818, "position": 35.16079936474325, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600074365} +{"stream": "search_analytics_by_date", "data": {"ctr": 0.04798676227247656, "position": 37.52137341423056, "search_type": "web", "date": "2021-09-17"}, "emitted_at": 1674600074816} +{"stream": "search_analytics_by_date", "data": {"ctr": 0.026209048361934478, "position": 43.134477379095166, "search_type": "web", "date": "2021-09-18"}, "emitted_at": 1674600074817} +{"stream": "search_analytics_by_date", "data": {"ctr": 0.029040774420651217, "position": 42.78952772073922, "search_type": "web", "date": "2021-09-19"}, "emitted_at": 1674600074818} +{"stream": "search_analytics_by_country", "data": {"ctr": 0.1301955990220049, "position": 24.62530562347188, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600075212} +{"stream": "search_analytics_by_country", "data": {"ctr": 0.10391061452513967, "position": 29.924022346368716, "search_type": "web", "date": "2021-09-15"}, "emitted_at": 1674600075213} +{"stream": "search_analytics_by_country", "data": {"ctr": 0.09462915601023018, "position": 30.83759590792839, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600075213} +{"stream": "search_analytics_by_country", "data": {"ctr": 0.0832, "position": 27.408, "search_type": "web", "date": "2021-09-15"}, "emitted_at": 1674600075213} +{"stream": "search_analytics_by_country", "data": {"ctr": 0.08223684210526316, "position": 26.820723684210527, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600075214} +{"stream": "search_analytics_by_country", "data": {"ctr": 0.07445008460236886, "position": 27.43993231810491, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600075214} +{"stream": "search_analytics_by_device", "data": {"ctr": 0.07708300015992324, "position": 31.635375019990406, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600075873} +{"stream": "search_analytics_by_device", "data": {"ctr": 0.07342657342657342, "position": 31.832326764144945, "search_type": "web", "date": "2021-09-15"}, "emitted_at": 1674600075873} +{"stream": "search_analytics_by_device", "data": {"ctr": 0.06650602409638554, "position": 34.87839357429719, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600075874} +{"stream": "search_analytics_by_device", "data": {"ctr": 0.09090909090909091, "position": 33.38137472283814, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600075874} +{"stream": "search_analytics_by_device", "data": {"ctr": 0.06221889055472264, "position": 35.52473763118441, "search_type": "web", "date": "2021-09-15"}, "emitted_at": 1674600075874} +{"stream": "search_analytics_by_device", "data": {"ctr": 0.04354469060351413, "position": 36.913674560733384, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600075875} +{"stream": "search_analytics_by_page", "data": {"ctr": 0.16593362654938024, "position": 32.60535785685725, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600077103} +{"stream": "search_analytics_by_page", "data": {"ctr": 0.14685874349739897, "position": 34.94597839135654, "search_type": "web", "date": "2021-09-15"}, "emitted_at": 1674600077104} +{"stream": "search_analytics_by_page", "data": {"ctr": 0.14058234758871702, "position": 37.05686988171065, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600077105} +{"stream": "search_analytics_by_page", "data": {"ctr": 0.09090909090909091, "position": 14.812316715542522, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600077105} +{"stream": "search_analytics_by_page", "data": {"ctr": 0.07418397626112759, "position": 11.57566765578635, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600077106} +{"stream": "search_analytics_by_page", "data": {"ctr": 0.02894736842105263, "position": 2.375, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600077107} +{"stream": "search_analytics_by_query", "data": {"ctr": 0.6571428571428571, "position": 1, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600078165} +{"stream": "search_analytics_by_query", "data": {"ctr": 0.6563786008230452, "position": 1.0041152263374487, "search_type": "web", "date": "2021-09-15"}, "emitted_at": 1674600078165} +{"stream": "search_analytics_by_query", "data": {"ctr": 0.6157517899761337, "position": 1, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600078166} +{"stream": "search_analytics_by_query", "data": {"ctr": 0.6666666666666666, "position": 1.3333333333333333, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600078166} +{"stream": "search_analytics_by_query", "data": {"ctr": 0.6363636363636364, "position": 1, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600078166} +{"stream": "search_analytics_by_query", "data": {"ctr": 0.5384615384615384, "position": 1, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600078166} +{"stream": "search_analytics_all_fields", "data": {"ctr": 0.6490066225165563, "position": 1, "search_type": "web", "date": "2021-09-15"}, "emitted_at": 1674600079765} +{"stream": "search_analytics_all_fields", "data": {"ctr": 0.5272727272727272, "position": 1, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600079765} +{"stream": "search_analytics_all_fields", "data": {"ctr": 0.6229508196721312, "position": 1, "search_type": "web", "date": "2021-09-16"}, "emitted_at": 1674600079766} +{"stream": "search_analytics_all_fields", "data": {"ctr": 0.6097560975609756, "position": 1, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600079766} +{"stream": "search_analytics_all_fields", "data": {"ctr": 0.8, "position": 1, "search_type": "web", "date": "2021-09-14"}, "emitted_at": 1674600079766} +{"stream": "search_analytics_all_fields", "data": {"ctr": 0.6666666666666666, "position": 1, "date": "2021-09-15"}, "emitted_at": 1674600079766} +{"stream": "custom_dimensions", "data": {"ctr": 0.10220440881763528, "position": 29.36005344021376, "date": "2021-09-15"}, "emitted_at": 1674600080130} +{"stream": "custom_dimensions", "data": {"ctr": 0.11009174311926606, "position": 25.412079510703364, "date": "2021-09-14"}, "emitted_at": 1674600080131} +{"stream": "custom_dimensions", "data": {"ctr": 0.1004601226993865, "position": 30.555981595092025, "date": "2021-09-16"}, "emitted_at": 1674600080131} +{"stream": "custom_dimensions", "data": {"ctr": 0.21518987341772153, "position": 22.227848101265824, "date": "2021-09-14"}, "emitted_at": 1674600080131} +{"stream": "custom_dimensions", "data": {"ctr": 0.09109730848861283, "position": 26.467908902691512, "date": "2021-09-14"}, "emitted_at": 1674600080131} +{"stream": "custom_dimensions", "data": {"ctr": 0.08528784648187633, "position": 27.658848614072493, "date": "2021-09-15"}, "emitted_at": 1674600080132} diff --git a/airbyte-integrations/connectors/source-google-search-console/source_google_search_console/streams.py b/airbyte-integrations/connectors/source-google-search-console/source_google_search_console/streams.py index c52d3b0599b26..8f5b54bb5d6a3 100755 --- a/airbyte-integrations/connectors/source-google-search-console/source_google_search_console/streams.py +++ b/airbyte-integrations/connectors/source-google-search-console/source_google_search_console/streams.py @@ -9,6 +9,7 @@ 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 airbyte_cdk.sources.streams.http.auth import HttpAuthenticator @@ -33,6 +34,10 @@ def __init__( self._start_date = start_date self._end_date = end_date + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + @staticmethod def sanitize_urls_list(site_urls: list) -> List[str]: return list(map(quote_plus, site_urls)) diff --git a/airbyte-integrations/connectors/source-google-webfonts/source_google_webfonts/google_webfonts.yaml b/airbyte-integrations/connectors/source-google-webfonts/source_google_webfonts/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-google-webfonts/source_google_webfonts/google_webfonts.yaml rename to airbyte-integrations/connectors/source-google-webfonts/source_google_webfonts/manifest.yaml diff --git a/airbyte-integrations/connectors/source-google-webfonts/source_google_webfonts/source.py b/airbyte-integrations/connectors/source-google-webfonts/source_google_webfonts/source.py index 353c6e585164a..53d5a84310c9b 100644 --- a/airbyte-integrations/connectors/source-google-webfonts/source_google_webfonts/source.py +++ b/airbyte-integrations/connectors/source-google-webfonts/source_google_webfonts/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceGoogleWebfonts(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "google_webfonts.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-greenhouse/acceptance-test-config.yml b/airbyte-integrations/connectors/source-greenhouse/acceptance-test-config.yml index ba66d80fcead0..e7d19346d4dac 100644 --- a/airbyte-integrations/connectors/source-greenhouse/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-greenhouse/acceptance-test-config.yml @@ -1,6 +1,7 @@ # 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-greenhouse:dev +test_strictness_level: "high" acceptance_tests: spec: tests: @@ -13,68 +14,14 @@ acceptance_tests: status: "failed" discovery: tests: - - config_path: "secrets/config.json" - config_path: "secrets/config_users_only.json" + - config_path: "secrets/config.json" basic_read: tests: - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" expect_records: path: "integration_tests/expected_records.jsonl" - - config_path: "secrets/config_users_only.json" - # test we do not fail when encounter 403 error - configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: - - name: "applications" - bypass_reason: "Could return 0 records because of rate limits" - - name: "applications_demographics_answers" - bypass_reason: "Could return 0 records because of rate limits" - - name: "applications_interviews" - bypass_reason: "Could return 0 records because of rate limits" - - name: "candidates" - bypass_reason: "Could return 0 records because of rate limits" - - name: "close_reasons" - bypass_reason: "Could return 0 records because of rate limits" - - name: "custom_fields" - bypass_reason: "Could return 0 records because of rate limits" - - name: "degrees" - bypass_reason: "Could return 0 records because of rate limits" - - name: "demographics_answers" - bypass_reason: "Could return 0 records because of rate limits" - - name: "demographics_answer_options" - bypass_reason: "Could return 0 records because of rate limits" - - name: "questions" - bypass_reason: "Could return 0 records because of rate limits" - - name: "demographics_answers_answer_options" - bypass_reason: "Could return 0 records because of rate limits" - - name: "demographics_question_sets" - bypass_reason: "Could return 0 records because of rate limits" - - name: "demographics_question_sets_questions" - bypass_reason: "Could return 0 records because of rate limits" - - name: "departments" - bypass_reason: "Could return 0 records because of rate limits" - - name: "jobs" - bypass_reason: "Could return 0 records because of rate limits" - - name: "jobs_openings" - bypass_reason: "Could return 0 records because of rate limits" - - name: "interviews" - bypass_reason: "Could return 0 records because of rate limits" - - name: "job_posts" - bypass_reason: "Could return 0 records because of rate limits" - - name: "job_stages" - bypass_reason: "Could return 0 records because of rate limits" - - name: "jobs_stages" - bypass_reason: "Could return 0 records because of rate limits" - - name: "offers" - bypass_reason: "Could return 0 records because of rate limits" - - name: "rejection_reasons" - bypass_reason: "Could return 0 records because of rate limits" - - name: "scorecards" - bypass_reason: "Could return 0 records because of rate limits" - - name: "sources" - bypass_reason: "Could return 0 records because of rate limits" - - name: "demographics_questions" - bypass_reason: "Could return 0 records because of rate limits" + extra_records: yes full_refresh: tests: - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-greenhouse/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-greenhouse/integration_tests/abnormal_state.json index 3498542b9ca31..ca00786c22ee1 100644 --- a/airbyte-integrations/connectors/source-greenhouse/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-greenhouse/integration_tests/abnormal_state.json @@ -1,58 +1,116 @@ -{ - "candidates": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "demographics_answers": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "users": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "scorecards": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "offers": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "job_stages": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "job_posts": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "interviews": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "jobs": { - "updated_at": "2222-01-21T00:00:00.000Z" - }, - "applications": { - "applied_at": "2222-01-21T00:00:00.000Z" - }, - "jobs_stages": { - "4177046003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "4177048003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "4446240003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "4466310003": { "updated_at": "2222-01-01T00:00:00.000Z" } - }, - "applications_demographics_answers": { - "19214950003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "19214993003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "19215172003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "19215333003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "44933447003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "44937562003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "47459993003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "48693310003": { "updated_at": "2222-01-01T00:00:00.000Z" } - }, - "applications_interviews": { - "19214950003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "19214993003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "19215172003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "19215333003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "44933447003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "44937562003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "47459993003": { "updated_at": "2222-01-01T00:00:00.000Z" }, - "48693310003": { "updated_at": "2222-01-01T00:00:00.000Z" } +[ + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "candidates" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "demographics_answers" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "users" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "scorecards" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "offers" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "job_stages" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "job_posts" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "interviews" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "jobs" }, + "stream_state": { "updated_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "applications" }, + "stream_state": { "applied_at": "2222-01-21T00:00:00.000Z"} + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "jobs_stages" }, + "stream_state": { + "4177046003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "4177048003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "4446240003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "4466310003": { "updated_at": "2222-01-01T00:00:00.000Z" } + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "applications_demographics_answers" }, + "stream_state": { + "19214950003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "19214993003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "19215172003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "19215333003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "44933447003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "44937562003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "47459993003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "48693310003": { "updated_at": "2222-01-01T00:00:00.000Z" } + } + } + }, + { + "type": "STREAM", + "stream": { + "stream_descriptor": { "name": "applications_interviews" }, + "stream_state": { + "19214950003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "19214993003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "19215172003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "19215333003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "44933447003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "44937562003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "47459993003": { "updated_at": "2222-01-01T00:00:00.000Z" }, + "48693310003": { "updated_at": "2222-01-01T00:00:00.000Z" } + } + } } -} +] \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-greenhouse/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-greenhouse/integration_tests/expected_records.jsonl index f1f1d44fd293e..1c640f8802cea 100644 --- a/airbyte-integrations/connectors/source-greenhouse/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-greenhouse/integration_tests/expected_records.jsonl @@ -63,3 +63,4 @@ {"stream": "jobs_stages", "data": {"id": 5245803003, "name": "Application Review", "created_at": "2020-11-24T23:27:11.756Z", "updated_at": "2020-11-24T23:27:11.756Z", "active": true, "job_id": 4177046003, "priority": 0, "interviews": [{"id": 5628614003, "name": "Application Review", "schedulable": false, "interview_kit": {"id": 5628609003, "content": null, "questions": []}, "estimated_minutes": 1, "default_interviewer_users": []}]}, "emitted_at": 1671104737182} {"stream": "jobs_stages", "data": {"id": 5245804003, "name": "Preliminary Phone Screen", "created_at": "2020-11-24T23:27:11.756Z", "updated_at": "2020-11-24T23:27:11.756Z", "active": true, "job_id": 4177046003, "priority": 1, "interviews": [{"id": 5628615003, "name": "Preliminary Screening Call", "schedulable": true, "interview_kit": {"id": 5628610003, "content": null, "questions": []}, "estimated_minutes": 20, "default_interviewer_users": []}]}, "emitted_at": 1671104737185} {"stream": "jobs_stages", "data": {"id": 5245805003, "name": "Phone Interview", "created_at": "2020-11-24T23:27:11.756Z", "updated_at": "2020-11-24T23:27:11.756Z", "active": true, "job_id": 4177046003, "priority": 2, "interviews": [{"id": 5628616003, "name": "Behavioral Phone Interview", "schedulable": true, "interview_kit": {"id": 5628611003, "content": null, "questions": []}, "estimated_minutes": 30, "default_interviewer_users": []}]}, "emitted_at": 1671104737187} +{"stream":"demographics_question_sets_questions","data":{"translations":[{"name":"q1","language":"en"}],"required":false,"name":"q1","id":4000714003,"demographic_question_set_id":4000197003,"answer_type":"multi_value_single_select","active":true},"emitted_at":1674591295418} diff --git a/airbyte-integrations/connectors/source-greenhouse/source_greenhouse/greenhouse.yaml b/airbyte-integrations/connectors/source-greenhouse/source_greenhouse/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-greenhouse/source_greenhouse/greenhouse.yaml rename to airbyte-integrations/connectors/source-greenhouse/source_greenhouse/manifest.yaml diff --git a/airbyte-integrations/connectors/source-greenhouse/source_greenhouse/source.py b/airbyte-integrations/connectors/source-greenhouse/source_greenhouse/source.py index 8bd812d2d172c..78b5f90ed1148 100644 --- a/airbyte-integrations/connectors/source-greenhouse/source_greenhouse/source.py +++ b/airbyte-integrations/connectors/source-greenhouse/source_greenhouse/source.py @@ -14,4 +14,4 @@ # Declarative Source class SourceGreenhouse(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "greenhouse.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-gutendex/source_gutendex/gutendex.yaml b/airbyte-integrations/connectors/source-gutendex/source_gutendex/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-gutendex/source_gutendex/gutendex.yaml rename to airbyte-integrations/connectors/source-gutendex/source_gutendex/manifest.yaml diff --git a/airbyte-integrations/connectors/source-gutendex/source_gutendex/source.py b/airbyte-integrations/connectors/source-gutendex/source_gutendex/source.py index f7a5c4092cff0..6eb65751340e8 100644 --- a/airbyte-integrations/connectors/source-gutendex/source_gutendex/source.py +++ b/airbyte-integrations/connectors/source-gutendex/source_gutendex/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceGutendex(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "gutendex.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-harvest/Dockerfile b/airbyte-integrations/connectors/source-harvest/Dockerfile index dc02e76d95456..8e50a0e3feb4e 100644 --- a/airbyte-integrations/connectors/source-harvest/Dockerfile +++ b/airbyte-integrations/connectors/source-harvest/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.14 +LABEL io.airbyte.version=0.1.15 LABEL io.airbyte.name=airbyte/source-harvest diff --git a/airbyte-integrations/connectors/source-harvest/source_harvest/streams.py b/airbyte-integrations/connectors/source-harvest/source_harvest/streams.py index 6179c28a39954..f8872570b7275 100644 --- a/airbyte-integrations/connectors/source-harvest/source_harvest/streams.py +++ b/airbyte-integrations/connectors/source-harvest/source_harvest/streams.py @@ -9,6 +9,7 @@ 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 @@ -25,6 +26,10 @@ def data_field(self) -> str: """ return self.name + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def backoff_time(self, response: requests.Response): if "Retry-After" in response.headers: return int(response.headers["Retry-After"]) diff --git a/airbyte-integrations/connectors/source-hubspot/Dockerfile b/airbyte-integrations/connectors/source-hubspot/Dockerfile index 28c1d2e539c78..634c0a82b7ad4 100644 --- a/airbyte-integrations/connectors/source-hubspot/Dockerfile +++ b/airbyte-integrations/connectors/source-hubspot/Dockerfile @@ -34,5 +34,5 @@ COPY source_hubspot ./source_hubspot ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.3.0 +LABEL io.airbyte.version=0.3.1 LABEL io.airbyte.name=airbyte/source-hubspot diff --git a/airbyte-integrations/connectors/source-hubspot/source_hubspot/streams.py b/airbyte-integrations/connectors/source-hubspot/source_hubspot/streams.py index da0d30f13f2f3..0306dfb932be8 100644 --- a/airbyte-integrations/connectors/source-hubspot/source_hubspot/streams.py +++ b/airbyte-integrations/connectors/source-hubspot/source_hubspot/streams.py @@ -15,6 +15,7 @@ import requests from airbyte_cdk.entrypoint import logger from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.streams.http.requests_native_auth import Oauth2Authenticator, TokenAuthenticator from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer @@ -209,6 +210,10 @@ class Stream(HttpStream, ABC): granted_scopes: Set = None properties_scopes: Set = None + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + @property @abstractmethod def scopes(self) -> Set[str]: diff --git a/airbyte-integrations/connectors/source-instagram/Dockerfile b/airbyte-integrations/connectors/source-instagram/Dockerfile index 8dadf21002333..7e6ab0aa0f94e 100644 --- a/airbyte-integrations/connectors/source-instagram/Dockerfile +++ b/airbyte-integrations/connectors/source-instagram/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=1.0.0 +LABEL io.airbyte.version=1.0.1 LABEL io.airbyte.name=airbyte/source-instagram diff --git a/airbyte-integrations/connectors/source-instagram/acceptance-test-config.yml b/airbyte-integrations/connectors/source-instagram/acceptance-test-config.yml index 0a53d8267a4d8..20ce9fea9491d 100644 --- a/airbyte-integrations/connectors/source-instagram/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-instagram/acceptance-test-config.yml @@ -1,40 +1,69 @@ # 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-instagram:dev -tests: +test_strictness_level: high +acceptance_tests: spec: - - spec_path: "integration_tests/spec.json" + tests: + - spec_path: "integration_tests/spec.json" connection: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: - - config_path: "secrets/config.json" + tests: + - config_path: "secrets/config.json" basic_read: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog_without_stories.json" -# disabled because the only incremental stream is user_insights and its state is nested -# incremental: -# - config_path: "secrets/config.json" -# configured_catalog_path: "integration_tests/configured_catalog.json" -# future_state_path: "integration_tests/abnormal_state.json" + tests: + - config_path: "secrets/config.json" + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: yes + exact_order: yes + extra_records: no + empty_streams: + - name: "media" + bypass_reason: "Floating data" + - name: "media_insights" + bypass_reason: "Floating data" + - name: "user_insights" + bypass_reason: "Floating data" + - name: "stories" + bypass_reason: "Stories only live for 24 hours" + - name: "story_insights" + bypass_reason: "Stories only live for 24 hours, so do the insights" full_refresh: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - ignored_fields: - "user_insights": - - email_contacts - - follower_count - - get_directions_clicks - - impressions - - phone_call_clicks - - profile_views - - reach - - text_message_clicks - - website_clicks - - impressions_week - - reach_week - - impressions_days_28 - - reach_days_28 - - online_followers \ No newline at end of file + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + ignored_fields: + "user_insights": + - email_contacts + - follower_count + - get_directions_clicks + - impressions + - phone_call_clicks + - profile_views + - reach + - text_message_clicks + - website_clicks + - impressions_week + - reach_week + - impressions_days_28 + - reach_days_28 + - online_followers + incremental: + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/incremental_catalog.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" + cursor_paths: + user_insights: ["17841408147298757", "date"] + # because state is complex and stores values for different accounts on one hand + # and there's no way we can set multiple cursor paths for a single stream on the other, + # this test should be skipped as it is false negative. + # (we can not restrict accounts via config as well) + skip_comprehensive_incremental_tests: true \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-instagram/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-instagram/integration_tests/abnormal_state.json new file mode 100644 index 0000000000000..8bf6c05504872 --- /dev/null +++ b/airbyte-integrations/connectors/source-instagram/integration_tests/abnormal_state.json @@ -0,0 +1,12 @@ +[ + { + "type": "STREAM", + "stream": { + "stream_state": { + "17841408147298757": { "date": "2222-01-01T00:00:00Z" }, + "17841403112736866": { "date": "2222-01-01T00:00:00Z" } + }, + "stream_descriptor": { "name": "user_insights" } + } + } +] diff --git a/airbyte-integrations/connectors/source-instagram/integration_tests/configured_catalog_without_stories.json b/airbyte-integrations/connectors/source-instagram/integration_tests/configured_catalog_without_stories.json deleted file mode 100644 index 3df5fddbed01c..0000000000000 --- a/airbyte-integrations/connectors/source-instagram/integration_tests/configured_catalog_without_stories.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "streams": [ - { - "stream": { - "name": "media", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": null, - "default_cursor_field": null, - "source_defined_primary_key": [["id"]], - "namespace": null - }, - "sync_mode": "full_refresh", - "cursor_field": null, - "destination_sync_mode": "append", - "primary_key": null - }, - { - "stream": { - "name": "media_insights", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": null, - "default_cursor_field": null, - "source_defined_primary_key": [["id"]], - "namespace": null - }, - "sync_mode": "full_refresh", - "cursor_field": null, - "destination_sync_mode": "append", - "primary_key": null - }, - { - "stream": { - "name": "users", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": null, - "default_cursor_field": null, - "source_defined_primary_key": [["id"]], - "namespace": null - }, - "sync_mode": "full_refresh", - "cursor_field": null, - "destination_sync_mode": "append", - "primary_key": null - }, - { - "stream": { - "name": "user_lifetime_insights", - "json_schema": {}, - "supported_sync_modes": ["full_refresh"], - "source_defined_cursor": null, - "default_cursor_field": null, - "source_defined_primary_key": null, - "namespace": null - }, - "sync_mode": "full_refresh", - "cursor_field": null, - "destination_sync_mode": "append", - "primary_key": null - }, - { - "stream": { - "name": "user_insights", - "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["date"], - "source_defined_primary_key": null, - "namespace": null - }, - "sync_mode": "full_refresh", - "cursor_field": null, - "destination_sync_mode": "append", - "primary_key": null - } - ] -} diff --git a/airbyte-integrations/connectors/source-instagram/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-instagram/integration_tests/expected_records.jsonl new file mode 100644 index 0000000000000..c603326d327fd --- /dev/null +++ b/airbyte-integrations/connectors/source-instagram/integration_tests/expected_records.jsonl @@ -0,0 +1,66 @@ +{"stream": "users", "data": {"id": "17841408147298757", "ig_id": 8070063576, "username": "airbytehq", "website": "https://www.airbyte.io/", "media_count": 249, "biography": "Airbyte is the new open-source data integration platform that consolidates your data into your warehouses.", "followers_count": 1263, "follows_count": 12, "name": "Airbyte", "page_id": "112704783733939"}, "emitted_at": 1675080682944} +{"stream": "users", "data": {"id": "17841403112736866", "ig_id": 3094935757, "username": "photon_app", "website": "https://itunes.apple.com/us/app/photon-photo-printing-made-easy/id1108281033?ls=1&mt=8%2F", "media_count": 9, "biography": "Photo printing, simplified :)", "followers_count": 8, "follows_count": 0, "name": "Photon", "page_id": "1681754435446735"}, "emitted_at": 1675080683294} +{"stream": "user_lifetime_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "metric": "audience_city", "value": {"London, England": 5, "Sydney, New South Wales": 16, "Algiers, Algiers Province": 3, "Atlanta, Georgia": 5, "S\u00e3o Paulo, S\u00e3o Paulo (state)": 12, "Rio de Janeiro, Rio de Janeiro (state)": 5, "Hong Kong, Hong Kong": 4, "Berlin, Berlin": 4, "Kolkata, West Bengal": 5, "Austin, Texas": 4, "Tulsa, Oklahoma": 4, "Lagos, Lagos State": 13, "San Jose, California": 4, "Pune, Maharashtra": 6, "Skopje, Municipality of Centar (Skopje)": 4, "Moscow, Moscow": 5, "Karachi, Sindh": 3, "Bogot\u00e1, Distrito Especial": 4, "Jakarta, Jakarta": 6, "Dar es Salaam, Dar es Salaam": 6, "Accra, Greater Accra Region": 4, "Buenos Aires, Ciudad Aut\u00f3noma de Buenos Aires": 7, "Melbourne, Victoria": 9, "Los Angeles, California": 9, "Lima, Lima Region": 6, "Denver, Colorado": 3, "Istanbul, Istanbul Province": 7, "Chennai, Tamil Nadu": 4, "Abuja, Federal Capital Territory": 5, "Bangkok, Bangkok": 3, "Bandung, West Java": 3, "Mexico City, Distrito Federal": 5, "Riyadh, Riyadh Region": 3, "Cape Town, Western Cape": 4, "San Francisco, California": 6, "Tehran, Tehran Province": 9, "New York, New York": 13, "Dubai, Dubai": 5, "Santiago, Santiago Metropolitan Region": 10, "Mumbai, Maharashtra": 5, "Bangalore, Karnataka": 16, "Curitiba, Paran\u00e1": 3, "Singapore, Singapore": 6, "Hyderabad, Telangana": 4, "San Diego, California": 3}}, "emitted_at": 1675080684688} +{"stream": "user_lifetime_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "metric": "audience_country", "value": {"DE": 29, "TW": 6, "RU": 12, "PT": 4, "TZ": 8, "UA": 5, "FR": 7, "SA": 9, "BR": 65, "SE": 6, "SG": 6, "MA": 6, "DZ": 7, "ID": 27, "GB": 40, "MK": 4, "CA": 28, "US": 269, "EG": 10, "IL": 4, "AE": 7, "CH": 9, "IN": 119, "ZA": 16, "IQ": 7, "IR": 12, "CL": 12, "GR": 6, "IT": 17, "MX": 26, "MY": 11, "CO": 11, "ES": 13, "VE": 9, "AR": 20, "AT": 5, "TH": 6, "AU": 36, "PE": 6, "PH": 6, "NG": 30, "TN": 6, "PK": 10, "TR": 9, "NL": 12}}, "emitted_at": 1675080684688} +{"stream": "user_lifetime_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "metric": "audience_gender_age", "value": {"F.18-24": 13, "F.25-34": 89, "F.35-44": 66, "F.45-54": 16, "F.55-64": 1, "F.65+": 4, "M.13-17": 4, "M.18-24": 74, "M.25-34": 372, "M.35-44": 213, "M.45-54": 66, "M.55-64": 16, "M.65+": 14, "U.18-24": 24, "U.25-34": 65, "U.35-44": 30, "U.45-54": 19, "U.55-64": 4, "U.65+": 1}}, "emitted_at": 1675080684688} +{"stream": "user_lifetime_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "metric": "audience_locale", "value": {"el_GR": 1, "ru_RU": 13, "it_IT": 13, "pl_PL": 2, "tr_TR": 4, "id_ID": 14, "es_US": 1, "pt_BR": 49, "th_TH": 1, "ja_JP": 1, "fr_FR": 18, "de_DE": 21, "zh_TW": 3, "es_MX": 6, "es_CO": 1, "es_ES": 9, "es_CL": 3, "nl_NL": 7, "es_LA": 64, "fr_CA": 1, "sv_SE": 5, "da_DK": 1, "fa_IR": 2, "sr_RS": 1, "hr_HR": 1, "fi_FI": 2, "ar_AR": 7, "en_GB": 107, "ko_KR": 2, "en_US": 693, "lv_LV": 1, "uk_UA": 2, "en_IN": 30, "zh_CN": 3, "ar_AE": 1}}, "emitted_at": 1675080684688} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 5, "reach_week": 5, "impressions_days_28": 2997, "reach_days_28": 1491}, "emitted_at": 1675080686679} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 1, "get_directions_clicks": 0, "impressions": 2, "phone_call_clicks": 0, "profile_views": 3, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 6, "reach_week": 5, "impressions_days_28": 2997, "reach_days_28": 1493}, "emitted_at": 1675080688294} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 6, "reach_week": 5, "impressions_days_28": 432, "reach_days_28": 298}, "emitted_at": 1675080690244} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 5, "phone_call_clicks": 0, "profile_views": 5, "reach": 2, "text_message_clicks": 0, "website_clicks": 1, "impressions_week": 10, "reach_week": 6, "impressions_days_28": 49, "reach_days_28": 21}, "emitted_at": 1675080692185} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 1, "phone_call_clicks": 0, "profile_views": 1, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 10, "reach_week": 6, "impressions_days_28": 48, "reach_days_28": 21}, "emitted_at": 1675080693794} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 8, "reach_week": 4, "impressions_days_28": 47, "reach_days_28": 20}, "emitted_at": 1675080695234} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 8, "reach_week": 4, "impressions_days_28": 46, "reach_days_28": 19}, "emitted_at": 1675080696561} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 11, "phone_call_clicks": 0, "profile_views": 2, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 19, "reach_week": 5, "impressions_days_28": 57, "reach_days_28": 20}, "emitted_at": 1675080698577} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 17, "reach_week": 4, "impressions_days_28": 57, "reach_days_28": 20}, "emitted_at": 1675080700353} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 1, "phone_call_clicks": 0, "profile_views": 0, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 18, "reach_week": 5, "impressions_days_28": 57, "reach_days_28": 20}, "emitted_at": 1675080701844} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 13, "reach_week": 3, "impressions_days_28": 53, "reach_days_28": 19}, "emitted_at": 1675080703425} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 1, "get_directions_clicks": 0, "impressions": 18, "phone_call_clicks": 0, "profile_views": 1, "reach": 3, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 30, "reach_week": 5, "impressions_days_28": 69, "reach_days_28": 22}, "emitted_at": 1675080705039} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 30, "reach_week": 5, "impressions_days_28": 53, "reach_days_28": 20}, "emitted_at": 1675080706600} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 30, "reach_week": 5, "impressions_days_28": 53, "reach_days_28": 20}, "emitted_at": 1675080708033} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 19, "reach_week": 4, "impressions_days_28": 51, "reach_days_28": 19}, "emitted_at": 1675080709569} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 1, "get_directions_clicks": 0, "impressions": 8, "phone_call_clicks": 0, "profile_views": 2, "reach": 2, "text_message_clicks": 0, "website_clicks": 2, "impressions_week": 27, "reach_week": 6, "impressions_days_28": 56, "reach_days_28": 20}, "emitted_at": 1675080711791} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 3, "phone_call_clicks": 0, "profile_views": 2, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 29, "reach_week": 6, "impressions_days_28": 57, "reach_days_28": 19}, "emitted_at": 1675080714689} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 1, "phone_call_clicks": 0, "profile_views": 1, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 30, "reach_week": 7, "impressions_days_28": 55, "reach_days_28": 18}, "emitted_at": 1675080716327} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 1, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 12, "reach_week": 4, "impressions_days_28": 55, "reach_days_28": 18}, "emitted_at": 1675080717966} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 31, "phone_call_clicks": 0, "profile_views": 1, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 43, "reach_week": 5, "impressions_days_28": 86, "reach_days_28": 19}, "emitted_at": 1675080720218} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 43, "reach_week": 5, "impressions_days_28": 86, "reach_days_28": 19}, "emitted_at": 1675080721540} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 1, "get_directions_clicks": 0, "impressions": 11, "phone_call_clicks": 0, "profile_views": 2, "reach": 2, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 54, "reach_week": 6, "impressions_days_28": 97, "reach_days_28": 20}, "emitted_at": 1675080722882} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 1, "phone_call_clicks": 0, "profile_views": 1, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 47, "reach_week": 6, "impressions_days_28": 97, "reach_days_28": 20}, "emitted_at": 1675080724417} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 44, "reach_week": 5, "impressions_days_28": 97, "reach_days_28": 20}, "emitted_at": 1675080725755} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 34, "phone_call_clicks": 0, "profile_views": 7, "reach": 5, "text_message_clicks": 0, "website_clicks": 1, "impressions_week": 77, "reach_week": 9, "impressions_days_28": 130, "reach_days_28": 24}, "emitted_at": 1675080727080} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 5, "phone_call_clicks": 0, "profile_views": 8, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 82, "reach_week": 10, "impressions_days_28": 134, "reach_days_28": 24}, "emitted_at": 1675080728360} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 4, "phone_call_clicks": 0, "profile_views": 1, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 55, "reach_week": 10, "impressions_days_28": 136, "reach_days_28": 23}, "emitted_at": 1675080729945} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 4, "phone_call_clicks": 0, "profile_views": 1, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 59, "reach_week": 11, "impressions_days_28": 140, "reach_days_28": 24}, "emitted_at": 1675080731281} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 6, "phone_call_clicks": 0, "profile_views": 1, "reach": 1, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 54, "reach_week": 10, "impressions_days_28": 146, "reach_days_28": 25}, "emitted_at": 1675080732676} +{"stream": "user_insights", "data": {"page_id": "112704783733939", "business_account_id": "17841408147298757", "email_contacts": 0, "follower_count": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 53, "reach_week": 9, "impressions_days_28": 144, "reach_days_28": 24}, "emitted_at": 1675080734154} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0,"get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080735516} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080737729} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080739072} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080740642} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080742029} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080743901} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080745549} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080748069} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080749265} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080750733} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080752407} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080753546} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 2, "reach_days_28": 1}, "emitted_at": 1675080754929} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0,"get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080756458} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080757945} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080759496} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080761130} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080762713} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080764193} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080766092} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080767346} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 2, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080768817} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080770701} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080772193} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080773737} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080775046} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080776434} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080778279} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080779815} +{"stream": "user_insights", "data": {"page_id": "1681754435446735", "business_account_id": "17841403112736866", "email_contacts": 0, "get_directions_clicks": 0, "impressions": 0, "phone_call_clicks": 0, "profile_views": 0, "reach": 0, "text_message_clicks": 0, "website_clicks": 0, "impressions_week": 0, "reach_week": 0, "impressions_days_28": 0, "reach_days_28": 0}, "emitted_at": 1675080781228} diff --git a/airbyte-integrations/connectors/source-instagram/integration_tests/incremental_catalog.json b/airbyte-integrations/connectors/source-instagram/integration_tests/incremental_catalog.json new file mode 100644 index 0000000000000..3a48ffe85ae1f --- /dev/null +++ b/airbyte-integrations/connectors/source-instagram/integration_tests/incremental_catalog.json @@ -0,0 +1,19 @@ +{ + "streams": [ + { + "stream": { + "name": "user_insights", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["date"], + "source_defined_primary_key": null, + "namespace": null + }, + "sync_mode": "incremental", + "cursor_field": null, + "destination_sync_mode": "append", + "primary_key": null + } + ] +} diff --git a/airbyte-integrations/connectors/source-instagram/setup.py b/airbyte-integrations/connectors/source-instagram/setup.py index 2564950e99809..31c38de6cab98 100644 --- a/airbyte-integrations/connectors/source-instagram/setup.py +++ b/airbyte-integrations/connectors/source-instagram/setup.py @@ -6,7 +6,7 @@ from setuptools import find_packages, setup MAIN_REQUIREMENTS = [ - "airbyte-cdk~=0.1", + "airbyte-cdk", "cached_property~=1.5", "facebook_business~=11.0", "pendulum>=2,<3", diff --git a/airbyte-integrations/connectors/source-instagram/source_instagram/streams.py b/airbyte-integrations/connectors/source-instagram/source_instagram/streams.py index 828eaf77f46e6..3d788c1eece24 100644 --- a/airbyte-integrations/connectors/source-instagram/source_instagram/streams.py +++ b/airbyte-integrations/connectors/source-instagram/source_instagram/streams.py @@ -218,6 +218,8 @@ def stream_slices( state_value = stream_state.get(account_id, {}).get(self.cursor_field) start_date = pendulum.parse(state_value) if state_value else self._start_date start_date = max(start_date, self._start_date, pendulum.now().subtract(days=self.buffer_days)) + if start_date > pendulum.now(): + continue for since in pendulum.period(start_date, self._end_date).range("days", self.days_increment): until = since.add(days=self.days_increment) self.logger.info(f"Reading insights between {since.date()} and {until.date()}") diff --git a/airbyte-integrations/connectors/source-instatus/source_instatus/instatus.yaml b/airbyte-integrations/connectors/source-instatus/source_instatus/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-instatus/source_instatus/instatus.yaml rename to airbyte-integrations/connectors/source-instatus/source_instatus/manifest.yaml diff --git a/airbyte-integrations/connectors/source-instatus/source_instatus/source.py b/airbyte-integrations/connectors/source-instatus/source_instatus/source.py index 820ccc63adaa3..94ece1ef6f738 100644 --- a/airbyte-integrations/connectors/source-instatus/source_instatus/source.py +++ b/airbyte-integrations/connectors/source-instatus/source_instatus/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceInstatus(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "instatus.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-intercom/Dockerfile b/airbyte-integrations/connectors/source-intercom/Dockerfile index 6377255906f5c..6f258a0de2ebe 100644 --- a/airbyte-integrations/connectors/source-intercom/Dockerfile +++ b/airbyte-integrations/connectors/source-intercom/Dockerfile @@ -35,5 +35,5 @@ COPY source_intercom ./source_intercom ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.29 +LABEL io.airbyte.version=0.1.30 LABEL io.airbyte.name=airbyte/source-intercom diff --git a/airbyte-integrations/connectors/source-intercom/acceptance-test-config.yml b/airbyte-integrations/connectors/source-intercom/acceptance-test-config.yml index 7ef304a9e010d..fb516fe951b89 100644 --- a/airbyte-integrations/connectors/source-intercom/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-intercom/acceptance-test-config.yml @@ -1,33 +1,40 @@ # 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-intercom:dev -tests: +test_strictness_level: high +acceptance_tests: spec: - - spec_path: "source_intercom/spec.json" + tests: + - spec_path: "source_intercom/spec.json" connection: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + tests: + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: - - config_path: "secrets/config.json" + tests: + - config_path: "secrets/config.json" basic_read: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - expect_records: - path: "integration_tests/expected_records.jsonl" + tests: + - config_path: "secrets/config.json" + expect_records: + path: "integration_tests/expected_records.jsonl" incremental: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - future_state_path: "integration_tests/abnormal_state.json" - threshold_days: 365 - cursor_paths: - companies: ["updated_at"] - company_segments: ["updated_at"] - conversations: ["updated_at"] - conversation_parts: ["updated_at"] - contacts: ["updated_at"] - segments: ["updated_at"] + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/incremental_catalog.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" + threshold_days: 365 + cursor_paths: + companies: ["updated_at"] + company_segments: ["updated_at"] + conversations: ["updated_at"] + conversation_parts: ["updated_at"] + contacts: ["updated_at"] + segments: ["updated_at"] full_refresh: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" diff --git a/airbyte-integrations/connectors/source-intercom/integration_tests/catalog.json b/airbyte-integrations/connectors/source-intercom/integration_tests/catalog.json deleted file mode 100644 index 38ca3d8e410f5..0000000000000 --- a/airbyte-integrations/connectors/source-intercom/integration_tests/catalog.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "streams": [ - { - "name": "admins", - "json_schema": { - "properties": { - "admin_ids": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "integer" - } - }, - { - "type": "null" - } - ] - }, - "avatar": { - "properties": { - "image_url": { - "type": ["null", "string"] - } - }, - "type": ["null", "object"], - "additionalProperties": false - }, - "away_mode_enabled": { - "type": ["null", "boolean"] - }, - "away_mode_reassign": { - "type": ["null", "boolean"] - }, - "email": { - "type": ["null", "string"] - }, - "has_inbox_seat": { - "type": ["null", "boolean"] - }, - "id": { - "type": ["null", "string"] - }, - "job_title": { - "type": ["null", "string"] - }, - "name": { - "type": ["null", "string"] - }, - "team_ids": { - "anyOf": [ - { - "type": "array", - "items": { - "type": "integer" - } - }, - { - "type": "null" - } - ] - }, - "type": { - "type": ["null", "string"] - } - }, - "type": "object", - "additionalProperties": false - } - }, - { - "name": "companies", - "json_schema": { - "properties": { - "company_id": { - "type": ["null", "string"] - }, - "created_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "custom_attributes": { - "type": ["null", "object"], - "additionalProperties": true - }, - "id": { - "type": ["null", "string"] - }, - "industry": { - "type": ["null", "string"] - }, - "monthly_spend": { - "multipleOf": 1e-8, - "type": ["null", "number"] - }, - "name": { - "type": ["null", "string"] - }, - "plan": { - "properties": { - "id": { - "type": ["null", "string"] - }, - "name": { - "type": ["null", "string"] - }, - "type": { - "type": ["null", "string"] - } - }, - "type": ["null", "object"], - "additionalProperties": false - }, - "remote_created_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "segments": { - "anyOf": [ - { - "type": "array", - "items": { - "type": ["null", "object"], - "additionalProperties": false, - "properties": { - "id": { - "type": ["null", "string"] - } - } - } - }, - { - "type": "null" - } - ] - }, - "session_count": { - "type": ["null", "integer"] - }, - "size": { - "type": ["null", "integer"] - }, - "tags": { - "anyOf": [ - { - "type": "array", - "items": { - "type": ["null", "object"], - "additionalProperties": false, - "properties": { - "id": { - "type": ["null", "string"] - } - } - } - }, - { - "type": "null" - } - ] - }, - "type": { - "type": ["null", "string"] - }, - "updated_at": { - "format": "date-time", - "type": ["null", "string"] - }, - "user_count": { - "type": ["null", "integer"] - }, - "website": { - "type": ["null", "string"] - } - }, - "type": "object", - "additionalProperties": false - } - } - ] -} diff --git a/airbyte-integrations/connectors/source-intercom/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-intercom/integration_tests/configured_catalog.json index 9ace395b53b07..01f694abf156a 100644 --- a/airbyte-integrations/connectors/source-intercom/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-intercom/integration_tests/configured_catalog.json @@ -4,9 +4,11 @@ "stream": { "name": "admins", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": ["full_refresh"], + "source_defined_primary_key": [["id"]] }, "sync_mode": "full_refresh", + "primary_key": [["id"]], "destination_sync_mode": "append" }, { @@ -15,19 +17,23 @@ "json_schema": {}, "supported_sync_modes": ["full_refresh", "incremental"], "source_defined_cursor": true, - "default_cursor_field": ["updated_at"] + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] }, - "sync_mode": "incremental", + "sync_mode": "full_refresh", "cursor_field": ["updated_at"], + "primary_key": [["id"]], "destination_sync_mode": "append" }, { "stream": { "name": "company_attributes", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": ["full_refresh"], + "source_defined_primary_key": [["name"]] }, "sync_mode": "full_refresh", + "primary_key": [["name"]], "destination_sync_mode": "append" }, { @@ -36,10 +42,12 @@ "json_schema": {}, "supported_sync_modes": ["full_refresh", "incremental"], "source_defined_cursor": true, - "default_cursor_field": ["updated_at"] + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] }, - "sync_mode": "incremental", + "sync_mode": "full_refresh", "cursor_field": ["updated_at"], + "primary_key": [["id"]], "destination_sync_mode": "append" }, { @@ -48,9 +56,11 @@ "json_schema": {}, "supported_sync_modes": ["full_refresh", "incremental"], "source_defined_cursor": true, - "default_cursor_field": ["updated_at"] + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] }, - "sync_mode": "incremental", + "sync_mode": "full_refresh", + "primary_key": [["id"]], "cursor_field": ["updated_at"], "destination_sync_mode": "append" }, @@ -60,19 +70,23 @@ "json_schema": {}, "supported_sync_modes": ["full_refresh", "incremental"], "source_defined_cursor": true, - "default_cursor_field": ["updated_at"] + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] }, - "sync_mode": "incremental", + "sync_mode": "full_refresh", "cursor_field": ["updated_at"], - "destination_sync_mode": "append" + "destination_sync_mode": "append", + "primary_key": [["id"]] }, { "stream": { "name": "contact_attributes", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": ["full_refresh"], + "source_defined_primary_key": [["name"]] }, "sync_mode": "full_refresh", + "primary_key": [["name"]], "destination_sync_mode": "append" }, { @@ -81,11 +95,13 @@ "json_schema": {}, "supported_sync_modes": ["full_refresh", "incremental"], "source_defined_cursor": true, - "default_cursor_field": ["updated_at"] + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] }, - "sync_mode": "incremental", + "sync_mode": "full_refresh", "cursor_field": ["updated_at"], - "destination_sync_mode": "append" + "destination_sync_mode": "append", + "primary_key": [["id"]] }, { "stream": { @@ -93,28 +109,34 @@ "json_schema": {}, "supported_sync_modes": ["full_refresh", "incremental"], "source_defined_cursor": true, - "default_cursor_field": ["updated_at"] + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] }, - "sync_mode": "incremental", + "sync_mode": "full_refresh", "cursor_field": ["updated_at"], - "destination_sync_mode": "append" + "destination_sync_mode": "append", + "primary_key": [["id"]] }, { "stream": { "name": "tags", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": ["full_refresh"], + "source_defined_primary_key": [["name"]] }, "sync_mode": "full_refresh", + "primary_key": [["name"]], "destination_sync_mode": "append" }, { "stream": { "name": "teams", "json_schema": {}, - "supported_sync_modes": ["full_refresh"] + "supported_sync_modes": ["full_refresh"], + "source_defined_primary_key": [["name"]] }, "sync_mode": "full_refresh", + "primary_key": [["name"]], "destination_sync_mode": "append" } ] diff --git a/airbyte-integrations/connectors/source-intercom/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-intercom/integration_tests/expected_records.jsonl index 7085fa1674765..a849b1a3d6137 100644 --- a/airbyte-integrations/connectors/source-intercom/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-intercom/integration_tests/expected_records.jsonl @@ -1,2 +1,59 @@ -{"stream": "conversations", "data": {"type": "conversation", "id": "2", "created_at": 1625749234, "updated_at": 1632835061, "waiting_since": null, "snoozed_until": null, "source": {"type": "conversation", "id": "906873821", "delivered_as": "admin_initiated", "subject": "", "body": "

    Hi Jean,

    ", "author": {"type": "admin", "id": "4423433", "name": "Airbyte Team", "email": "integration-test@airbyte.io"}, "attachments": [], "url": null, "redacted": false}, "contacts": {"type": "contact.list", "contacts": [{"type": "contact", "id": "60e6f6e020ae45ce1ac86f26"}]}, "first_contact_reply": null, "admin_assignee_id": 4423433, "team_assignee_id": null, "open": false, "state": "closed", "read": true, "tags": {"type": "tag.list", "tags": []}, "priority": "not_priority", "sla_applied": null, "statistics": {"type": "conversation_statistics", "time_to_assignment": null, "time_to_admin_reply": null, "time_to_first_close": null, "time_to_last_close": null, "median_time_to_reply": null, "first_contact_reply_at": null, "first_assignment_at": null, "first_admin_reply_at": null, "first_close_at": null, "last_assignment_at": null, "last_assignment_admin_reply_at": null, "last_contact_reply_at": null, "last_admin_reply_at": null, "last_close_at": null, "last_closed_by_id": null, "count_reopens": 0, "count_assignments": 0, "count_conversation_parts": 7}, "conversation_rating": null, "teammates": {"type": "admin.list", "admins": []}, "title": null, "custom_attributes": {}, "topics": {"type": "topic.list", "topics": [], "total_count": 0}}, "emitted_at": 1674118691316} -{"stream": "conversations", "data": {"type": "conversation", "id": "1", "created_at": 1607553243, "updated_at": 1626346673, "waiting_since": null, "snoozed_until": null, "source": {"type": "conversation", "id": "701718739", "delivered_as": "customer_initiated", "subject": "", "body": "

    hey there

    ", "author": {"type": "lead", "id": "5fd150d50697b6d0bbc4a2c2", "name": null, "email": ""}, "attachments": [], "url": "http://localhost:63342/airbyte-python/airbyte-integrations/bases/base-java/build/tmp/expandedArchives/org.jacoco.agent-0.8.5.jar_6a2df60c47de373ea127d14406367999/about.html?_ijt=uosck1k6vmp2dnl4oqib2g3u9d", "redacted": false}, "contacts": {"type": "contact.list", "contacts": [{"type": "contact", "id": "5fd150d50697b6d0bbc4a2c2"}]}, "first_contact_reply": {"created_at": 1607553243, "type": "conversation", "url": "http://localhost:63342/airbyte-python/airbyte-integrations/bases/base-java/build/tmp/expandedArchives/org.jacoco.agent-0.8.5.jar_6a2df60c47de373ea127d14406367999/about.html?_ijt=uosck1k6vmp2dnl4oqib2g3u9d"}, "admin_assignee_id": null, "team_assignee_id": null, "open": true, "state": "open", "read": false, "tags": {"type": "tag.list", "tags": []}, "priority": "not_priority", "sla_applied": null, "statistics": {"type": "conversation_statistics", "time_to_assignment": null, "time_to_admin_reply": 4317957, "time_to_first_close": null, "time_to_last_close": null, "median_time_to_reply": 4317954, "first_contact_reply_at": 1607553243, "first_assignment_at": null, "first_admin_reply_at": 1625654131, "first_close_at": null, "last_assignment_at": null, "last_assignment_admin_reply_at": null, "last_contact_reply_at": 1607553246, "last_admin_reply_at": 1625656000, "last_close_at": null, "last_closed_by_id": null, "count_reopens": 0, "count_assignments": 0, "count_conversation_parts": 7}, "conversation_rating": null, "teammates": {"type": "admin.list", "admins": [{"type": "admin", "id": "4423433"}]}, "title": null, "custom_attributes": {}, "topics": {"type": "topic.list", "topics": [], "total_count": 0}}, "emitted_at": 1674118691316} \ No newline at end of file +{"stream": "admins", "data": {"type": "admin", "email": "integration-test@airbyte.io", "id": "4423433", "name": "Airbyte Team", "away_mode_enabled": false, "away_mode_reassign": false, "has_inbox_seat": false, "team_ids": [], "team_priority_level": {}}, "emitted_at": 1674662478119} +{"stream": "admins", "data": {"type": "admin", "email": "operator+wjw5eps7@intercom.io", "id": "4423434", "name": "Operator", "away_mode_enabled": false, "away_mode_reassign": false, "has_inbox_seat": false, "team_ids": [], "team_priority_level": {}}, "emitted_at": 1674662478120} +{"stream": "admins", "data": {"type": "admin", "email": "jared@daxtarity.com", "id": "4425337", "name": "Jared Rhizor", "away_mode_enabled": false, "away_mode_reassign": false, "has_inbox_seat": false, "team_ids": [], "team_priority_level": {}}, "emitted_at": 1674662478120} +{"stream": "companies", "data": {"type": "company", "company_id": "60e6f753a99f97268e85bf53-qualification-company", "id": "60e6f753a99f97268e85bf52", "app_id": "wjw5eps7", "name": "Google", "created_at": 1625749331, "updated_at": 1625749675, "monthly_spend": 0, "session_count": 0, "user_count": 1, "size": 9, "industry": "IT", "tags": {"type": "tag.list", "tags": []}, "segments": {"type": "segment.list", "segments": []}, "plan": {}, "custom_attributes": {}}, "emitted_at": 1674662479200} +{"stream": "companies", "data": {"type": "company", "company_id": "5fcf6882dd7ad35d1718ef3a-qualification-company", "id": "5fcf6882dd7ad35d1718ef39", "app_id": "wjw5eps7", "name": "Test company", "created_at": 1607428226, "updated_at": 1607428367, "monthly_spend": 0, "session_count": 0, "user_count": 2, "size": 10, "tags": {"type": "tag.list", "tags": []}, "segments": {"type": "segment.list", "segments": []}, "plan": {}, "custom_attributes": {}}, "emitted_at": 1674662479201} +{"stream": "companies", "data": {"type": "company", "company_id": "5fcf68ed2022a598936dc693-qualification-company", "id": "5fcf68ed2022a598936dc692", "app_id": "wjw5eps7", "name": "Another company", "created_at": 1607428333, "updated_at": 1607428336, "monthly_spend": 0, "session_count": 0, "user_count": 1, "size": 700, "tags": {"type": "tag.list", "tags": []}, "segments": {"type": "segment.list", "segments": []}, "plan": {}, "custom_attributes": {}}, "emitted_at": 1674662479201} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "name", "full_name": "name", "label": "Company name", "description": "The name of a company", "data_type": "string", "api_writable": true, "ui_writable": true, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480699} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "company_id", "full_name": "company_id", "label": "Company ID", "description": "A number identifying a company", "data_type": "string", "api_writable": false, "ui_writable": false, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480700} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "last_request_at", "full_name": "last_request_at", "label": "Company last seen", "description": "The last day anyone from a company visited your site or app", "data_type": "date", "api_writable": false, "ui_writable": false, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480700} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "remote_created_at", "full_name": "remote_created_at", "label": "Company created at", "description": "The day a company was added to Intercom", "data_type": "date", "api_writable": true, "ui_writable": false, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480700} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "user_count", "full_name": "user_count", "label": "People", "description": "The number of people in a company", "data_type": "integer", "api_writable": false, "ui_writable": false, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480700} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "session_count", "full_name": "session_count", "label": "Company web sessions", "description": "All visits from anyone in a company to your product's site or app", "data_type": "integer", "api_writable": false, "ui_writable": false, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480700} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "name", "full_name": "plan.name", "label": "Plan", "description": "A specific plan or level within your product that companies have signed up to", "data_type": "string", "api_writable": false, "ui_writable": false, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480700} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "monthly_spend", "full_name": "monthly_spend", "label": "Monthly Spend", "description": "The monthly revenue you receive from a company", "data_type": "float", "api_writable": true, "ui_writable": false, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480701} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "size", "full_name": "size", "label": "Company size", "description": "The number of people employed in this company, expressed as a single number", "data_type": "integer", "api_writable": true, "ui_writable": true, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480701} +{"stream": "company_attributes", "data": {"type": "data_attribute", "name": "industry", "full_name": "industry", "label": "Company industry", "description": "The category or domain this company belongs to e.g. 'ecommerce' or 'SaaS'", "data_type": "string", "api_writable": true, "ui_writable": true, "custom": false, "archived": false, "model": "company"}, "emitted_at": 1674662480701} +{"stream": "company_segments", "data": {"type": "segment", "id": "60e6f9d8f94e2a2f3a8e9e91", "name": "IT", "created_at": 1625749976, "updated_at": 1625749977, "person_type": "user"}, "emitted_at": 1674662482828} +{"stream": "company_segments", "data": {"type": "segment", "id": "60e6fa2511c1a607e5d83fe9", "name": "Small", "created_at": 1625750053, "updated_at": 1625750054, "person_type": "user"}, "emitted_at": 1674662482829} +{"stream": "company_segments", "data": {"type": "segment", "id": "6241a4c30788677d7c8a3c44", "name": "Test_2", "created_at": 1648469187, "updated_at": 1648469610, "person_type": "user"}, "emitted_at": 1674662482829} +{"stream": "company_segments", "data": {"type": "segment", "id": "6241a4c30788677d7c8a3c44", "name": "Test_2", "created_at": 1648469187, "updated_at": 1648469610, "person_type": "user"}, "emitted_at": 1674662483199} +{"stream": "company_segments", "data": {"type": "segment", "id": "6241a4c30788677d7c8a3c44", "name": "Test_2", "created_at": 1648469187, "updated_at": 1648469610, "person_type": "user"}, "emitted_at": 1674662483602} +{"stream": "conversations", "data": {"type": "conversation", "id": "1", "created_at": 1607553243, "updated_at": 1626346673, "waiting_since": null, "snoozed_until": null, "source": {"type": "conversation", "id": "701718739", "delivered_as": "customer_initiated", "subject": "", "body": "

    hey there

    ", "author": {"type": "lead", "id": "5fd150d50697b6d0bbc4a2c2", "name": null, "email": ""}, "attachments": [], "url": "http://localhost:63342/airbyte-python/airbyte-integrations/bases/base-java/build/tmp/expandedArchives/org.jacoco.agent-0.8.5.jar_6a2df60c47de373ea127d14406367999/about.html?_ijt=uosck1k6vmp2dnl4oqib2g3u9d", "redacted": false}, "contacts": {"type": "contact.list", "contacts": [{"type": "contact", "id": "5fd150d50697b6d0bbc4a2c2"}]}, "first_contact_reply": {"created_at": 1607553243, "type": "conversation", "url": "http://localhost:63342/airbyte-python/airbyte-integrations/bases/base-java/build/tmp/expandedArchives/org.jacoco.agent-0.8.5.jar_6a2df60c47de373ea127d14406367999/about.html?_ijt=uosck1k6vmp2dnl4oqib2g3u9d"}, "admin_assignee_id": null, "team_assignee_id": null, "open": true, "state": "open", "read": false, "tags": {"type": "tag.list", "tags": []}, "priority": "not_priority", "sla_applied": null, "statistics": {"type": "conversation_statistics", "time_to_assignment": null, "time_to_admin_reply": 4317957, "time_to_first_close": null, "time_to_last_close": null, "median_time_to_reply": 4317954, "first_contact_reply_at": 1607553243, "first_assignment_at": null, "first_admin_reply_at": 1625654131, "first_close_at": null, "last_assignment_at": null, "last_assignment_admin_reply_at": null, "last_contact_reply_at": 1607553246, "last_admin_reply_at": 1625656000, "last_close_at": null, "last_closed_by_id": null, "count_reopens": 0, "count_assignments": 0, "count_conversation_parts": 7}, "conversation_rating": null, "teammates": {"type": "admin.list", "admins": [{"type": "admin", "id": "4423433"}]}, "title": null, "custom_attributes": {}, "topics": {"type": "topic.list", "topics": [], "total_count": 0}}, "emitted_at": 1674662485998} +{"stream": "conversations", "data": {"type": "conversation", "id": "2", "created_at": 1625749234, "updated_at": 1632835061, "waiting_since": null, "snoozed_until": null, "source": {"type": "conversation", "id": "906873821", "delivered_as": "admin_initiated", "subject": "", "body": "

    Hi Jean,

    ", "author": {"type": "admin", "id": "4423433", "name": "Airbyte Team", "email": "integration-test@airbyte.io"}, "attachments": [], "url": null, "redacted": false}, "contacts": {"type": "contact.list", "contacts": [{"type": "contact", "id": "60e6f6e020ae45ce1ac86f26"}]}, "first_contact_reply": null, "admin_assignee_id": 4423433, "team_assignee_id": null, "open": false, "state": "closed", "read": true, "tags": {"type": "tag.list", "tags": []}, "priority": "not_priority", "sla_applied": null, "statistics": {"type": "conversation_statistics", "time_to_assignment": null, "time_to_admin_reply": null, "time_to_first_close": null, "time_to_last_close": null, "median_time_to_reply": null, "first_contact_reply_at": null, "first_assignment_at": null, "first_admin_reply_at": null, "first_close_at": null, "last_assignment_at": null, "last_assignment_admin_reply_at": null, "last_contact_reply_at": null, "last_admin_reply_at": null, "last_close_at": null, "last_closed_by_id": null, "count_reopens": 0, "count_assignments": 0, "count_conversation_parts": 7}, "conversation_rating": null, "teammates": {"type": "admin.list", "admins": []}, "title": null, "custom_attributes": {}, "topics": {"type": "topic.list", "topics": [], "total_count": 0}}, "emitted_at": 1674662485999} +{"stream": "conversations", "data": {"type": "conversation", "id": "3", "created_at": 1657296525, "updated_at": 1657296525, "waiting_since": null, "snoozed_until": null, "source": {"type": "conversation", "id": "1365286568", "delivered_as": "admin_initiated", "subject": "", "body": "

    Hi Jean, integration test intercom message to verify assignee value

    ", "author": {"type": "admin", "id": "4423433", "name": "Airbyte Team", "email": "integration-test@airbyte.io"}, "attachments": [], "url": null, "redacted": false}, "contacts": {"type": "contact.list", "contacts": [{"type": "contact", "id": "60e6f6e020ae45ce1ac86f26"}]}, "first_contact_reply": null, "admin_assignee_id": null, "team_assignee_id": null, "open": false, "state": "closed", "read": false, "tags": {"type": "tag.list", "tags": []}, "priority": "not_priority", "sla_applied": null, "statistics": {"type": "conversation_statistics", "time_to_assignment": null, "time_to_admin_reply": null, "time_to_first_close": null, "time_to_last_close": null, "median_time_to_reply": null, "first_contact_reply_at": null, "first_assignment_at": null, "first_admin_reply_at": null, "first_close_at": null, "last_assignment_at": null, "last_assignment_admin_reply_at": null, "last_contact_reply_at": null, "last_admin_reply_at": null, "last_close_at": null, "last_closed_by_id": null, "count_reopens": 0, "count_assignments": 0, "count_conversation_parts": 1}, "conversation_rating": null, "teammates": {"type": "admin.list", "admins": [{"type": "admin", "id": "4423433"}]}, "title": null, "custom_attributes": {}, "topics": {"type": "topic.list", "topics": [], "total_count": 0}}, "emitted_at": 1674662485999} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "7288120839", "part_type": "comment", "body": "

    is this showing up

    ", "created_at": 1607553246, "updated_at": 1607553246, "notified_at": 1607553246, "assigned_to": null, "author": {"id": "5fd150d50697b6d0bbc4a2c2", "type": "user", "name": null, "email": ""}, "attachments": [], "external_id": null, "redacted": false, "conversation_id": "1"}, "emitted_at": 1674662489685} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "7288121348", "part_type": "comment", "body": "

    Airbyte [DEV] will reply as soon as they can.

    ", "created_at": 1607553249, "updated_at": 1607553249, "notified_at": 1607553249, "assigned_to": null, "author": {"id": "4423434", "type": "bot", "name": "Operator", "email": "operator+wjw5eps7@intercom.io"}, "attachments": [], "external_id": null, "redacted": false, "conversation_id": "1"}, "emitted_at": 1674662489688} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "7288121392", "part_type": "comment", "body": "

    Give the team a way to reach you:

    ", "created_at": 1607553250, "updated_at": 1607553250, "notified_at": 1607553250, "assigned_to": null, "author": {"id": "4423434", "type": "bot", "name": "Operator", "email": "operator+wjw5eps7@intercom.io"}, "attachments": [], "external_id": null, "redacted": false, "conversation_id": "1"}, "emitted_at": 1674662489689} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "7288121429", "part_type": "comment", "body": null, "created_at": 1607553250, "updated_at": 1607553250, "notified_at": 1607553250, "assigned_to": null, "author": {"id": "4423434", "type": "bot", "name": "Operator", "email": "operator+wjw5eps7@intercom.io"}, "attachments": [], "external_id": null, "redacted": false, "conversation_id": "1"}, "emitted_at": 1674662489690} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "9852986065", "part_type": "comment", "body": "

    This message was deleted

    ", "created_at": 1625654131, "updated_at": 1626346672, "notified_at": 1625654131, "assigned_to": null, "author": {"id": "4423433", "type": "admin", "name": "Airbyte Team", "email": "integration-test@airbyte.io"}, "attachments": [], "external_id": null, "redacted": true, "conversation_id": "1"}, "emitted_at": 1674662489692} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "9853397844", "part_type": "comment", "body": "

    This message was deleted

    ", "created_at": 1625656000, "updated_at": 1626346669, "notified_at": 1625656000, "assigned_to": null, "author": {"id": "4423433", "type": "admin", "name": "Airbyte Team", "email": "integration-test@airbyte.io"}, "attachments": [], "external_id": null, "redacted": true, "conversation_id": "1"}, "emitted_at": 1674662489693} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "9871038696", "part_type": "message_assignment", "body": null, "created_at": 1625749234, "updated_at": 1625749234, "notified_at": 1625749234, "assigned_to": {"type": "admin", "id": "4423433"}, "author": {"id": "4423434", "type": "bot", "name": "Operator", "email": "operator+wjw5eps7@intercom.io"}, "attachments": [], "external_id": null, "redacted": false, "conversation_id": "2"}, "emitted_at": 1674662490268} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "9964427910", "part_type": "comment", "body": "

    This message was deleted

    ", "created_at": 1626345659, "updated_at": 1626346678, "notified_at": 1626345659, "assigned_to": null, "author": {"id": "4423433", "type": "admin", "name": "Airbyte Team", "email": "integration-test@airbyte.io"}, "attachments": [], "external_id": null, "redacted": true, "conversation_id": "2"}, "emitted_at": 1674662490271} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "9967676159", "part_type": "comment", "body": "

    hi

    ", "created_at": 1626358549, "updated_at": 1626358549, "notified_at": 1626358549, "assigned_to": null, "author": {"id": "4423433", "type": "admin", "name": "Airbyte Team", "email": "integration-test@airbyte.io"}, "attachments": [], "external_id": null, "redacted": false, "conversation_id": "2"}, "emitted_at": 1674662490272} +{"stream": "conversation_parts", "data": {"type": "conversation_part", "id": "11002268877", "part_type": "close", "body": null, "created_at": 1632768169, "updated_at": 1632768169, "notified_at": 1632768169, "assigned_to": null, "author": {"id": "4423433", "type": "admin", "name": "Airbyte Team", "email": "integration-test@airbyte.io"}, "attachments": [], "external_id": null, "redacted": false, "conversation_id": "2"}, "emitted_at": 1674662490274} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "role", "full_name": "role", "label": "Contact role", "description": "A person's role in their company, such as the name of their department", "data_type": "string", "api_writable": true, "ui_writable": false, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492146} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "name", "full_name": "name", "label": "Name", "description": "A person's full name", "data_type": "string", "api_writable": true, "ui_writable": true, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492146} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "owner_id", "full_name": "owner_id", "label": "Owner", "description": "The teammate that owns a lead or user in Intercom", "data_type": "integer", "api_writable": true, "ui_writable": false, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492146} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "email", "full_name": "email", "label": "Email", "description": "The email address assigned to a user or lead", "data_type": "string", "api_writable": true, "ui_writable": true, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492146} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "phone", "full_name": "phone", "label": "Phone", "description": "A person's phone number", "data_type": "string", "api_writable": true, "ui_writable": true, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492146} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "external_id", "full_name": "external_id", "label": "User ID", "description": "A number identifying a person (applies to both users and leads)", "data_type": "string", "api_writable": true, "ui_writable": false, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492146} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "created_at", "full_name": "created_at", "label": "First Seen", "description": "The first day a person visited your site or app", "data_type": "date", "api_writable": false, "ui_writable": false, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492146} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "signed_up_at", "full_name": "signed_up_at", "label": "Signed up", "description": "The day a person first signed up for your product", "data_type": "date", "api_writable": true, "ui_writable": false, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492147} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "last_seen_at", "full_name": "last_seen_at", "label": "Last seen", "description": "The last day a person visited your site or app", "data_type": "date", "api_writable": true, "ui_writable": false, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492147} +{"stream": "contact_attributes", "data": {"type": "data_attribute", "name": "last_contacted_at", "full_name": "last_contacted_at", "label": "Last contacted", "description": "The last day you or a teammate contacted a person", "data_type": "date", "api_writable": false, "ui_writable": false, "custom": false, "archived": false, "model": "contact"}, "emitted_at": 1674662492147} +{"stream": "contacts", "data": {"type": "contact", "id": "5fc95a8e04593c4947b9885f", "workspace_id": "wjw5eps7", "external_id": "2", "role": "user", "email": "test@test.com", "phone": null, "name": "Test2", "avatar": null, "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1607031438, "updated_at": 1607031438, "signed_up_at": null, "last_seen_at": null, "last_replied_at": null, "last_contacted_at": null, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": {"type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/5fc95a8e04593c4947b9885f/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/5fc95a8e04593c4947b9885f/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [], "url": "/contacts/5fc95a8e04593c4947b9885f/companies", "total_count": 0, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/5fc95a8e04593c4947b9885f/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493247} +{"stream": "contacts", "data": {"type": "contact", "id": "5fc95aaebc3d984f98d62069", "workspace_id": "wjw5eps7", "external_id": null, "role": "lead", "email": "test.lead@mail.com", "phone": null, "name": "Test Lead", "avatar": null, "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1607031470, "updated_at": 1607428234, "signed_up_at": null, "last_seen_at": null, "last_replied_at": null, "last_contacted_at": null, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": {"type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/5fc95aaebc3d984f98d62069/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/5fc95aaebc3d984f98d62069/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [{"id": "5fcf6882dd7ad35d1718ef39", "type": "company", "url": "/companies/5fcf6882dd7ad35d1718ef39"}], "url": "/contacts/5fc95aaebc3d984f98d62069/companies", "total_count": 1, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/5fc95aaebc3d984f98d62069/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493249} +{"stream": "contacts", "data": {"type": "contact", "id": "5fcf68e4a0f57b4393c7c7d1", "workspace_id": "wjw5eps7", "external_id": "3", "role": "user", "email": "user@mail.com", "phone": null, "name": "User 2", "avatar": null, "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1607428324, "updated_at": 1607428336, "signed_up_at": null, "last_seen_at": null, "last_replied_at": null, "last_contacted_at": null, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": {"type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/5fcf68e4a0f57b4393c7c7d1/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/5fcf68e4a0f57b4393c7c7d1/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [{"id": "5fcf68ed2022a598936dc692", "type": "company", "url": "/companies/5fcf68ed2022a598936dc692"}], "url": "/contacts/5fcf68e4a0f57b4393c7c7d1/companies", "total_count": 1, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/5fcf68e4a0f57b4393c7c7d1/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493250} +{"stream": "contacts", "data": {"type": "contact", "id": "5fc95aca2022a595c8670de8", "workspace_id": "wjw5eps7", "external_id": null, "role": "lead", "email": "test.lead.2@mail.com", "phone": null, "name": "Test Lead 2", "avatar": null, "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1607031498, "updated_at": 1607428367, "signed_up_at": null, "last_seen_at": null, "last_replied_at": null, "last_contacted_at": null, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": {"type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/5fc95aca2022a595c8670de8/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/5fc95aca2022a595c8670de8/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [{"id": "5fcf6882dd7ad35d1718ef39", "type": "company", "url": "/companies/5fcf6882dd7ad35d1718ef39"}], "url": "/contacts/5fc95aca2022a595c8670de8/companies", "total_count": 1, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/5fc95aca2022a595c8670de8/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493252} +{"stream": "contacts", "data": {"type": "contact", "id": "5fd150d50697b6d0bbc4a2c2", "workspace_id": "wjw5eps7", "external_id": "56f1e303-24f7-4f0a-ae18-0bafd587c894", "role": "lead", "email": null, "phone": null, "name": null, "avatar": "https://static.intercomassets.com/app/pseudonym_avatars_2019/yellow-guitar.png", "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1607553237, "updated_at": 1625656002, "signed_up_at": null, "last_seen_at": 1607553243, "last_replied_at": 1607553246, "last_contacted_at": 1625656000, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": "chrome", "browser_version": "87.0.4280.88", "browser_language": "en", "os": "OS X 10.15.6", "location": {"type": "location", "country": "United States", "region": "California", "city": "Daly City", "country_code": "USA", "continent_code": "NA"}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/5fd150d50697b6d0bbc4a2c2/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/5fd150d50697b6d0bbc4a2c2/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [], "url": "/contacts/5fd150d50697b6d0bbc4a2c2/companies", "total_count": 0, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/5fd150d50697b6d0bbc4a2c2/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493254} +{"stream": "contacts", "data": {"type": "contact", "id": "5fc95a808084cd6950bc8d9b", "workspace_id": "wjw5eps7", "external_id": "1", "role": "user", "email": "test@test.com", "phone": null, "name": "Test", "avatar": null, "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1607031424, "updated_at": 1625749675, "signed_up_at": null, "last_seen_at": null, "last_replied_at": null, "last_contacted_at": null, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": {"type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/5fc95a808084cd6950bc8d9b/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/5fc95a808084cd6950bc8d9b/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [{"id": "60e6f753a99f97268e85bf52", "type": "company", "url": "/companies/60e6f753a99f97268e85bf52"}], "url": "/contacts/5fc95a808084cd6950bc8d9b/companies", "total_count": 1, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/5fc95a808084cd6950bc8d9b/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493255} +{"stream": "contacts", "data": {"type": "contact", "id": "6241a38316049ffd7261a0dc", "workspace_id": "wjw5eps7", "external_id": "1234", "role": "user", "email": "test@gmail.com", "phone": null, "name": "Tets", "avatar": null, "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1648468867, "updated_at": 1648468867, "signed_up_at": null, "last_seen_at": null, "last_replied_at": null, "last_contacted_at": null, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": {"type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/6241a38316049ffd7261a0dc/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/6241a38316049ffd7261a0dc/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [], "url": "/contacts/6241a38316049ffd7261a0dc/companies", "total_count": 0, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/6241a38316049ffd7261a0dc/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493256} +{"stream": "contacts", "data": {"type": "contact", "id": "62de64071123272c1ff04f29", "workspace_id": "wjw5eps7", "external_id": "123", "role": "user", "email": "test@example.com", "phone": null, "name": "Fake user1", "avatar": null, "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1658741767, "updated_at": 1658741767, "signed_up_at": null, "last_seen_at": null, "last_replied_at": null, "last_contacted_at": null, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": {"type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/62de64071123272c1ff04f29/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/62de64071123272c1ff04f29/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [], "url": "/contacts/62de64071123272c1ff04f29/companies", "total_count": 0, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/62de64071123272c1ff04f29/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493257} +{"stream": "contacts", "data": {"type": "contact", "id": "60e6f6e020ae45ce1ac86f26", "workspace_id": "wjw5eps7", "external_id": null, "role": "user", "email": "integration-test@airbyte.io", "phone": null, "name": "[Sample]Joan Lambert", "avatar": null, "owner_id": null, "social_profiles": {"type": "list", "data": []}, "has_hard_bounced": false, "marked_email_as_spam": false, "unsubscribed_from_emails": false, "created_at": 1625749216, "updated_at": 1673945508, "signed_up_at": null, "last_seen_at": null, "last_replied_at": null, "last_contacted_at": 1657296523, "last_email_opened_at": null, "last_email_clicked_at": null, "language_override": null, "browser": null, "browser_version": null, "browser_language": null, "os": null, "location": {"type": "location", "country": null, "region": null, "city": null, "country_code": null, "continent_code": null}, "android_app_name": null, "android_app_version": null, "android_device": null, "android_os_version": null, "android_sdk_version": null, "android_last_seen_at": null, "ios_app_name": null, "ios_app_version": null, "ios_device": null, "ios_os_version": null, "ios_sdk_version": null, "ios_last_seen_at": null, "custom_attributes": {}, "tags": {"type": "list", "data": [], "url": "/contacts/60e6f6e020ae45ce1ac86f26/tags", "total_count": 0, "has_more": false}, "notes": {"type": "list", "data": [], "url": "/contacts/60e6f6e020ae45ce1ac86f26/notes", "total_count": 0, "has_more": false}, "companies": {"type": "list", "data": [], "url": "/contacts/60e6f6e020ae45ce1ac86f26/companies", "total_count": 0, "has_more": false}, "opted_out_subscription_types": {"type": "list", "data": [], "url": "/contacts/60e6f6e020ae45ce1ac86f26/subscriptions", "total_count": 0, "has_more": false}, "utm_campaign": null, "utm_content": null, "utm_medium": null, "utm_source": null, "utm_term": null, "referrer": null, "sms_consent": false, "unsubscribed_from_sms": false}, "emitted_at": 1674662493258} +{"stream": "segments", "data": {"type": "segment", "id": "5f8d1c6caee76458e332f238", "name": "Active", "created_at": 1603083372, "updated_at": 1603083372, "person_type": "user"}, "emitted_at": 1674662494290} +{"stream": "segments", "data": {"type": "segment", "id": "5f8d1c6caee76458e332f237", "name": "New", "created_at": 1603083372, "updated_at": 1603083372, "person_type": "user"}, "emitted_at": 1674662494290} +{"stream": "segments", "data": {"type": "segment", "id": "5f8d1c6caee76458e332f239", "name": "Slipping Away", "created_at": 1603083372, "updated_at": 1603083372, "person_type": "user"}, "emitted_at": 1674662494290} +{"stream": "segments", "data": {"type": "segment", "id": "5fcf65de5f0be4c8398c4f8f", "name": "Test segment", "created_at": 1607427550, "updated_at": 1607427550, "person_type": "user"}, "emitted_at": 1674662494290} +{"stream": "tags", "data": {"type": "tag", "id": "4849642", "name": "onboarded to feature A"}, "emitted_at": 1674662495351} +{"stream": "teams", "data": {"type": "team", "id": "5077733", "name": "test", "admin_ids": []}, "emitted_at": 1674662496385} diff --git a/airbyte-integrations/connectors/source-intercom/integration_tests/incremental_catalog.json b/airbyte-integrations/connectors/source-intercom/integration_tests/incremental_catalog.json new file mode 100644 index 0000000000000..2c4a3735e86dc --- /dev/null +++ b/airbyte-integrations/connectors/source-intercom/integration_tests/incremental_catalog.json @@ -0,0 +1,88 @@ +{ + "streams": [ + { + "stream": { + "name": "companies", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "cursor_field": ["updated_at"], + "primary_key": [["id"]], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "company_segments", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "cursor_field": ["updated_at"], + "primary_key": [["id"]], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "conversations", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "primary_key": [["id"]], + "cursor_field": ["updated_at"], + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "conversation_parts", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "cursor_field": ["updated_at"], + "destination_sync_mode": "append", + "primary_key": [["id"]] + }, + { + "stream": { + "name": "contacts", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "cursor_field": ["updated_at"], + "destination_sync_mode": "append", + "primary_key": [["id"]] + }, + { + "stream": { + "name": "segments", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["updated_at"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "incremental", + "cursor_field": ["updated_at"], + "destination_sync_mode": "append", + "primary_key": [["id"]] + } + ] +} diff --git a/airbyte-integrations/connectors/source-intercom/source_intercom/source.py b/airbyte-integrations/connectors/source-intercom/source_intercom/source.py index 161c89ff3bfd3..9ee1c8bd344b1 100755 --- a/airbyte-integrations/connectors/source-intercom/source_intercom/source.py +++ b/airbyte-integrations/connectors/source-intercom/source_intercom/source.py @@ -12,6 +12,7 @@ from airbyte_cdk.logger import AirbyteLogger from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.streams.http.requests_native_auth import TokenAuthenticator from requests.auth import AuthBase @@ -42,6 +43,10 @@ def authenticator(self): return self._session.auth return super().authenticator + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def next_page_token(self, response: requests.Response, **kwargs) -> Optional[Mapping[str, Any]]: """ Abstract method of HttpStream - should be overwritten. diff --git a/airbyte-integrations/connectors/source-intruder/source_intruder/intruder.yaml b/airbyte-integrations/connectors/source-intruder/source_intruder/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-intruder/source_intruder/intruder.yaml rename to airbyte-integrations/connectors/source-intruder/source_intruder/manifest.yaml diff --git a/airbyte-integrations/connectors/source-intruder/source_intruder/source.py b/airbyte-integrations/connectors/source-intruder/source_intruder/source.py index f39be55b586d8..bc32ab8329633 100644 --- a/airbyte-integrations/connectors/source-intruder/source_intruder/source.py +++ b/airbyte-integrations/connectors/source-intruder/source_intruder/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceIntruder(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "intruder.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-ip2whois/source_ip2whois/ip2whois.yaml b/airbyte-integrations/connectors/source-ip2whois/source_ip2whois/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-ip2whois/source_ip2whois/ip2whois.yaml rename to airbyte-integrations/connectors/source-ip2whois/source_ip2whois/manifest.yaml diff --git a/airbyte-integrations/connectors/source-ip2whois/source_ip2whois/source.py b/airbyte-integrations/connectors/source-ip2whois/source_ip2whois/source.py index 5602b74e4df99..dda46d421aa63 100644 --- a/airbyte-integrations/connectors/source-ip2whois/source_ip2whois/source.py +++ b/airbyte-integrations/connectors/source-ip2whois/source_ip2whois/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceIp2whois(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "ip2whois.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-k6-cloud/source_k6_cloud/k6_cloud.yaml b/airbyte-integrations/connectors/source-k6-cloud/source_k6_cloud/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-k6-cloud/source_k6_cloud/k6_cloud.yaml rename to airbyte-integrations/connectors/source-k6-cloud/source_k6_cloud/manifest.yaml diff --git a/airbyte-integrations/connectors/source-k6-cloud/source_k6_cloud/source.py b/airbyte-integrations/connectors/source-k6-cloud/source_k6_cloud/source.py index cac9732cd675f..89ff99fce1a1e 100644 --- a/airbyte-integrations/connectors/source-k6-cloud/source_k6_cloud/source.py +++ b/airbyte-integrations/connectors/source-k6-cloud/source_k6_cloud/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceK6Cloud(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "k6_cloud.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-klaviyo/Dockerfile b/airbyte-integrations/connectors/source-klaviyo/Dockerfile index 4e769f06f7328..2d85dbc952e7f 100644 --- a/airbyte-integrations/connectors/source-klaviyo/Dockerfile +++ b/airbyte-integrations/connectors/source-klaviyo/Dockerfile @@ -34,5 +34,5 @@ COPY source_klaviyo ./source_klaviyo ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.10 +LABEL io.airbyte.version=0.1.11 LABEL io.airbyte.name=airbyte/source-klaviyo diff --git a/airbyte-integrations/connectors/source-klaviyo/source_klaviyo/streams.py b/airbyte-integrations/connectors/source-klaviyo/source_klaviyo/streams.py index abf59dbd31e60..e8ca965d49a3f 100644 --- a/airbyte-integrations/connectors/source-klaviyo/source_klaviyo/streams.py +++ b/airbyte-integrations/connectors/source-klaviyo/source_klaviyo/streams.py @@ -8,6 +8,7 @@ import pendulum import requests +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer @@ -27,6 +28,10 @@ def __init__(self, api_key: str, **kwargs): transform_function = self.get_custom_transform() self.transformer.registerCustomTransform(transform_function) + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def get_custom_transform(self): def custom_transform_date_rfc3339(original_value, field_schema): if original_value and "format" in field_schema and field_schema["format"] == "date-time": diff --git a/airbyte-integrations/connectors/source-launchdarkly/source_launchdarkly/launchdarkly.yaml b/airbyte-integrations/connectors/source-launchdarkly/source_launchdarkly/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-launchdarkly/source_launchdarkly/launchdarkly.yaml rename to airbyte-integrations/connectors/source-launchdarkly/source_launchdarkly/manifest.yaml diff --git a/airbyte-integrations/connectors/source-launchdarkly/source_launchdarkly/source.py b/airbyte-integrations/connectors/source-launchdarkly/source_launchdarkly/source.py index 55b7ceef44f5e..89a6949b12266 100644 --- a/airbyte-integrations/connectors/source-launchdarkly/source_launchdarkly/source.py +++ b/airbyte-integrations/connectors/source-launchdarkly/source_launchdarkly/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceLaunchdarkly(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "launchdarkly.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-linkedin-ads/Dockerfile b/airbyte-integrations/connectors/source-linkedin-ads/Dockerfile index d0bfa957d1b10..65e06ab441614 100644 --- a/airbyte-integrations/connectors/source-linkedin-ads/Dockerfile +++ b/airbyte-integrations/connectors/source-linkedin-ads/Dockerfile @@ -33,5 +33,5 @@ COPY source_linkedin_ads ./source_linkedin_ads ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.12 +LABEL io.airbyte.version=0.1.13 LABEL io.airbyte.name=airbyte/source-linkedin-ads diff --git a/airbyte-integrations/connectors/source-linkedin-ads/source_linkedin_ads/source.py b/airbyte-integrations/connectors/source-linkedin-ads/source_linkedin_ads/source.py index a4a3bcb5a692f..022a81d78cb54 100644 --- a/airbyte-integrations/connectors/source-linkedin-ads/source_linkedin_ads/source.py +++ b/airbyte-integrations/connectors/source-linkedin-ads/source_linkedin_ads/source.py @@ -14,6 +14,7 @@ from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.streams.http.auth import Oauth2Authenticator, TokenAuthenticator from airbyte_cdk.sources.streams.http.exceptions import DefaultBackoffException @@ -42,6 +43,10 @@ def accounts(self): """Property to return the list of the user Account Ids from input""" return ",".join(map(str, self.config.get("account_ids"))) + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def path(self, **kwargs) -> str: """Returns the API endpoint path for stream, from `endpoint` class attribute.""" return self.endpoint diff --git a/airbyte-integrations/connectors/source-lokalise/source_lokalise/lokalise.yaml b/airbyte-integrations/connectors/source-lokalise/source_lokalise/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-lokalise/source_lokalise/lokalise.yaml rename to airbyte-integrations/connectors/source-lokalise/source_lokalise/manifest.yaml diff --git a/airbyte-integrations/connectors/source-lokalise/source_lokalise/source.py b/airbyte-integrations/connectors/source-lokalise/source_lokalise/source.py index 704d63423d9ef..78e8221740fc9 100644 --- a/airbyte-integrations/connectors/source-lokalise/source_lokalise/source.py +++ b/airbyte-integrations/connectors/source-lokalise/source_lokalise/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceLokalise(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "lokalise.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-mailchimp/Dockerfile b/airbyte-integrations/connectors/source-mailchimp/Dockerfile index 6789e0b3806fb..c9ce055012d51 100644 --- a/airbyte-integrations/connectors/source-mailchimp/Dockerfile +++ b/airbyte-integrations/connectors/source-mailchimp/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.3.1 +LABEL io.airbyte.version=0.3.2 LABEL io.airbyte.name=airbyte/source-mailchimp diff --git a/airbyte-integrations/connectors/source-mailchimp/source_mailchimp/streams.py b/airbyte-integrations/connectors/source-mailchimp/source_mailchimp/streams.py index 40b42330d5a7f..517e6c17f4c5b 100644 --- a/airbyte-integrations/connectors/source-mailchimp/source_mailchimp/streams.py +++ b/airbyte-integrations/connectors/source-mailchimp/source_mailchimp/streams.py @@ -9,6 +9,7 @@ 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 @@ -25,6 +26,10 @@ def __init__(self, **kwargs): def url_base(self) -> str: return f"https://{self.data_center}.api.mailchimp.com/3.0/" + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: decoded_response = response.json() api_data = decoded_response[self.data_field] diff --git a/airbyte-integrations/connectors/source-mailerlite/source_mailerlite/mailerlite.yaml b/airbyte-integrations/connectors/source-mailerlite/source_mailerlite/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-mailerlite/source_mailerlite/mailerlite.yaml rename to airbyte-integrations/connectors/source-mailerlite/source_mailerlite/manifest.yaml diff --git a/airbyte-integrations/connectors/source-mailerlite/source_mailerlite/source.py b/airbyte-integrations/connectors/source-mailerlite/source_mailerlite/source.py index fc42b3678c9bf..304c5e64fda73 100644 --- a/airbyte-integrations/connectors/source-mailerlite/source_mailerlite/source.py +++ b/airbyte-integrations/connectors/source-mailerlite/source_mailerlite/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceMailerlite(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "mailerlite.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-mailersend/source_mailersend/mailersend.yaml b/airbyte-integrations/connectors/source-mailersend/source_mailersend/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-mailersend/source_mailersend/mailersend.yaml rename to airbyte-integrations/connectors/source-mailersend/source_mailersend/manifest.yaml diff --git a/airbyte-integrations/connectors/source-mailersend/source_mailersend/source.py b/airbyte-integrations/connectors/source-mailersend/source_mailersend/source.py index b0b111a3883cb..f7c3d630d5f53 100644 --- a/airbyte-integrations/connectors/source-mailersend/source_mailersend/source.py +++ b/airbyte-integrations/connectors/source-mailersend/source_mailersend/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceMailersend(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "mailersend.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-mailjet-mail/source_mailjet_mail/mailjet_mail.yaml b/airbyte-integrations/connectors/source-mailjet-mail/source_mailjet_mail/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-mailjet-mail/source_mailjet_mail/mailjet_mail.yaml rename to airbyte-integrations/connectors/source-mailjet-mail/source_mailjet_mail/manifest.yaml diff --git a/airbyte-integrations/connectors/source-mailjet-mail/source_mailjet_mail/source.py b/airbyte-integrations/connectors/source-mailjet-mail/source_mailjet_mail/source.py index 2f3fa93c6441e..557f59cd6ffb8 100644 --- a/airbyte-integrations/connectors/source-mailjet-mail/source_mailjet_mail/source.py +++ b/airbyte-integrations/connectors/source-mailjet-mail/source_mailjet_mail/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceMailjetMail(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "mailjet_mail.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-mailjet-sms/source_mailjet_sms/mailjet_sms.yaml b/airbyte-integrations/connectors/source-mailjet-sms/source_mailjet_sms/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-mailjet-sms/source_mailjet_sms/mailjet_sms.yaml rename to airbyte-integrations/connectors/source-mailjet-sms/source_mailjet_sms/manifest.yaml diff --git a/airbyte-integrations/connectors/source-mailjet-sms/source_mailjet_sms/source.py b/airbyte-integrations/connectors/source-mailjet-sms/source_mailjet_sms/source.py index c34b4bc06ba30..f53523b370bf1 100644 --- a/airbyte-integrations/connectors/source-mailjet-sms/source_mailjet_sms/source.py +++ b/airbyte-integrations/connectors/source-mailjet-sms/source_mailjet_sms/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceMailjetSms(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "mailjet_sms.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-metabase/source_metabase/metabase.yaml b/airbyte-integrations/connectors/source-metabase/source_metabase/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-metabase/source_metabase/metabase.yaml rename to airbyte-integrations/connectors/source-metabase/source_metabase/manifest.yaml diff --git a/airbyte-integrations/connectors/source-metabase/source_metabase/source.py b/airbyte-integrations/connectors/source-metabase/source_metabase/source.py index 45ec25fbc0e34..b72fdfcd888e1 100644 --- a/airbyte-integrations/connectors/source-metabase/source_metabase/source.py +++ b/airbyte-integrations/connectors/source-metabase/source_metabase/source.py @@ -8,4 +8,4 @@ class SourceMetabase(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "metabase.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-mixpanel/Dockerfile b/airbyte-integrations/connectors/source-mixpanel/Dockerfile index cd44abfc08fe8..4670149deea78 100644 --- a/airbyte-integrations/connectors/source-mixpanel/Dockerfile +++ b/airbyte-integrations/connectors/source-mixpanel/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.1.29 +LABEL io.airbyte.version=0.1.30 LABEL io.airbyte.name=airbyte/source-mixpanel diff --git a/airbyte-integrations/connectors/source-mixpanel/README.md b/airbyte-integrations/connectors/source-mixpanel/README.md index ded179f865c9c..36a2a875572e0 100644 --- a/airbyte-integrations/connectors/source-mixpanel/README.md +++ b/airbyte-integrations/connectors/source-mixpanel/README.md @@ -81,7 +81,7 @@ docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integrat 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] +pip install .'[tests]' ``` ### Unit Tests To run unit tests locally, from the connector directory run: diff --git a/airbyte-integrations/connectors/source-mixpanel/acceptance-test-config.yml b/airbyte-integrations/connectors/source-mixpanel/acceptance-test-config.yml index 563ea4642c52f..43baaefd5f9ba 100644 --- a/airbyte-integrations/connectors/source-mixpanel/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-mixpanel/acceptance-test-config.yml @@ -1,42 +1,49 @@ # 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-mixpanel:dev -tests: +test_strictness_level: "high" +acceptance_tests: spec: - - spec_path: "source_mixpanel/spec.json" - backward_compatibility_tests_config: - disable_for_version: "0.1.23" + tests: + - spec_path: "source_mixpanel/spec.json" connection: - - config_path: "secrets/config_old.json" - status: "succeed" - - config_path: "secrets/config_project_secret.json" - status: "succeed" - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + tests: + - config_path: "secrets/config_old.json" + status: "succeed" + - config_path: "secrets/config_project_secret.json" + status: "succeed" + - config_path: "secrets/config.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" discovery: - - config_path: "secrets/config.json" - backward_compatibility_tests_config: - disable_for_version: "0.1.23" - timeout_seconds: 60 + tests: + - config_path: "secrets/config_old.json" + timeout_seconds: 60 basic_read: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - timeout_seconds: 3600 - empty_streams: ['export', 'annotations'] + tests: + - config_path: "secrets/config.json" + timeout_seconds: 9000 + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: no + exact_order: no + extra_records: yes full_refresh: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - timeout_seconds: 3600 + tests: + - config_path: "secrets/config_old.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + timeout_seconds: 9000 incremental: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - future_state_path: "integration_tests/abnormal_state.json" - cursor_paths: - cohorts: ["created"] - export: ["time"] - funnels: ["8901755", "date"] - revenue: ["date"] - cohort_members": ["last_seen"] - timeout_seconds: 3600 + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog_incremental.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" + cursor_paths: + cohorts: ["created"] + export: ["time"] + funnels: ["36152117", "date"] + revenue: ["date"] + cohort_members": ["last_seen"] + timeout_seconds: 9000 diff --git a/airbyte-integrations/connectors/source-mixpanel/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-mixpanel/integration_tests/abnormal_state.json index ee368b68b2081..0d4d97a4e1aeb 100644 --- a/airbyte-integrations/connectors/source-mixpanel/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-mixpanel/integration_tests/abnormal_state.json @@ -2,7 +2,7 @@ { "type": "STREAM", "stream": { - "stream_state": { "8901755": { "date": "2030-01-01" } }, + "stream_state": { "36152117": { "date": "2030-01-01" } }, "stream_descriptor": { "name": "funnels" } } }, diff --git a/airbyte-integrations/connectors/source-mixpanel/integration_tests/configured_catalog.json b/airbyte-integrations/connectors/source-mixpanel/integration_tests/configured_catalog.json index e8bf78c6703a6..4cd39b09bb349 100644 --- a/airbyte-integrations/connectors/source-mixpanel/integration_tests/configured_catalog.json +++ b/airbyte-integrations/connectors/source-mixpanel/integration_tests/configured_catalog.json @@ -4,26 +4,19 @@ "stream": { "name": "funnels", "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["date"], - "source_defined_primary_key": [["funnel_id"], ["date"]] + "supported_sync_modes": ["full_refresh"] }, - "sync_mode": "incremental", - "destination_sync_mode": "append" + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" }, { "stream": { "name": "engage", "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": false, - "default_cursor_field": ["last_seen"], - "source_defined_primary_key": [["distinct_id"]] + "supported_sync_modes": ["full_refresh"] }, - "sync_mode": "incremental", - "destination_sync_mode": "append", - "cursor_field": ["last_seen"] + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" }, { "stream": { @@ -38,49 +31,37 @@ "stream": { "name": "export", "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["time"] + "supported_sync_modes": ["full_refresh"] }, - "sync_mode": "incremental", - "destination_sync_mode": "append" + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" }, { "stream": { "name": "cohorts", "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["created"], - "source_defined_primary_key": [["id"]] + "supported_sync_modes": ["full_refresh"] }, - "sync_mode": "incremental", - "destination_sync_mode": "append" + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" }, { "stream": { "name": "cohort_members", "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": false, - "default_cursor_field": ["last_seen"], - "source_defined_primary_key": [["distinct_id"]] + "supported_sync_modes": ["full_refresh"] }, - "sync_mode": "incremental", - "destination_sync_mode": "append", - "cursor_field": ["last_seen"] + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" }, { "stream": { "name": "revenue", "json_schema": {}, - "supported_sync_modes": ["full_refresh", "incremental"], - "source_defined_cursor": true, - "default_cursor_field": ["date"], - "source_defined_primary_key": [["date"]] + "supported_sync_modes": ["full_refresh"] }, - "sync_mode": "incremental", - "destination_sync_mode": "append" + "sync_mode": "full_refresh", + "destination_sync_mode": "overwrite" } ] } diff --git a/airbyte-integrations/connectors/source-mixpanel/integration_tests/configured_catalog_incremental.json b/airbyte-integrations/connectors/source-mixpanel/integration_tests/configured_catalog_incremental.json new file mode 100644 index 0000000000000..d3ae77abd5a67 --- /dev/null +++ b/airbyte-integrations/connectors/source-mixpanel/integration_tests/configured_catalog_incremental.json @@ -0,0 +1,52 @@ +{ + "streams": [ + { + "stream": { + "name": "funnels", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["date"], + "source_defined_primary_key": [["funnel_id"], ["date"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "export", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["time"] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append" + }, + { + "stream": { + "name": "cohorts", + "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": "append" + }, + { + "stream": { + "name": "cohort_members", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": false, + "default_cursor_field": ["last_seen"], + "source_defined_primary_key": [["distinct_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["last_seen"] + } + ] +} diff --git a/airbyte-integrations/connectors/source-mixpanel/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-mixpanel/integration_tests/expected_records.jsonl new file mode 100644 index 0000000000000..13c8246b321c0 --- /dev/null +++ b/airbyte-integrations/connectors/source-mixpanel/integration_tests/expected_records.jsonl @@ -0,0 +1,47 @@ +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-05", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162835} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-06", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162836} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-07", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162837} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-08", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162837} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-09", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162837} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-01", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162838} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-02", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162838} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-03", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162838} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-04", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162839} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-10", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162839} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-11", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162839} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-12", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162840} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-13", "steps": [{"count": 1, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0.0, "step_conv_ratio": 0.0}], "analysis": {"completion": 0, "starting_amount": 1, "steps": 2, "worst": 1}}, "emitted_at": 1674078162840} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-14", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162840} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-15", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162841} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-16", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162841} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-17", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162842} +{"stream": "funnels", "data": {"funnel_id": 36152117, "name": "test", "date": "2023-01-18", "steps": [{"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "Purchase", "goal": "Purchase", "step_label": "Purchase", "overall_conv_ratio": 1, "step_conv_ratio": 1}, {"count": 0, "avg_time": null, "avg_time_from_start": null, "event": "$custom_event:1305068", "goal": "$custom_event:1305068", "step_label": "111", "custom_event": true, "custom_event_id": 1305068, "overall_conv_ratio": 0, "step_conv_ratio": 0}], "analysis": {"completion": 0, "starting_amount": 0, "steps": 2, "worst": 1}}, "emitted_at": 1674078162842} +{"stream": "engage", "data": {"distinct_id": "123@gmail.com", "email": "123@gmail.com", "name": "123", "123": "123456", "last_seen": "2023-01-01T00:00:00"}, "emitted_at": 1674078164884} +{"stream": "engage", "data": {"distinct_id": "integration-test@airbyte.io", "name": "Integration Test1", "test": "test", "email": "integration-test@airbyte.io", "last_seen": "2023-01-01T00:00:00"}, "emitted_at": 1674078164885} +{"stream": "engage", "data": {"distinct_id": "integration-test.db4415.mp-service-account", "name": "test", "test": "test", "last_seen": "2023-01-01T00:00:00"}, "emitted_at": 1674078164886} +{"stream": "annotations", "data": {"date": "2023-01-15T12:00:00+01:00", "description": "test", "id": 1138193, "project_id": 2529987, "user": {"id": 3440095, "first_name": "", "last_name": ""}}, "emitted_at": 1674078166077} +{"stream": "annotations", "data": {"date": "2023-01-13T12:00:00+01:00", "description": "test123", "id": 1138196, "project_id": 2529987, "user": {"id": 3440095, "first_name": "", "last_name": ""}}, "emitted_at": 1674078166077} +{"stream": "annotations", "data": {"date": "2023-01-13T12:00:00+01:00", "description": "test121233", "id": 1138197, "project_id": 2529987, "user": {"id": 3440095, "first_name": "", "last_name": ""}}, "emitted_at": 1674078166077} +{"stream": "export", "data": {"event": "Purchase", "import": "True", "insert_id": "935d87b1-00cd-41b7-be34-b9d98dd08b42", "mp_api_endpoint": "api.mixpanel.com", "mp_api_timestamp_ms": "1674001620825", "Amount": "5", "Item": "Coffee", "distinct_id": "91304156-cafc-4673-a237-623d1129c801", "mp_processing_time_ms": "1674001621149", "time": "2023-01-13T12:05:17Z"}, "emitted_at": 1674078168557} +{"stream": "export", "data": {"event": "Signup", "import": "True", "insert_id": "29fc2962-6d9c-455d-95ad-95b84f09b9e4", "mp_api_endpoint": "api.mixpanel.com", "mp_api_timestamp_ms": "1674001620825", "Referred by": "Friend", "URL": "mixpanel.com/signup", "distinct_id": "91304156-cafc-4673-a237-623d1129c801", "mp_processing_time_ms": "1674001621450", "time": "2023-01-13T12:05:17Z"}, "emitted_at": 1674078168559} +{"stream": "cohorts", "data": {"id": 1478097, "project_id": 2529987, "name": "Cohort1", "description": "", "data_group_id": null, "count": 2, "is_visible": 1, "created": "2021-09-14 15:57:43"}, "emitted_at": 1674078170456} +{"stream": "cohort_members", "data": {"distinct_id": "integration-test@airbyte.io", "name": "Integration Test1", "test": "test", "email": "integration-test@airbyte.io", "last_seen": "2023-01-01T00:00:00", "cohort_id": 1478097}, "emitted_at": 1674078233870} +{"stream": "cohort_members", "data": {"distinct_id": "integration-test.db4415.mp-service-account", "name": "test", "test": "test", "last_seen": "2023-01-01T00:00:00", "cohort_id": 1478097}, "emitted_at": 1674078233871} +{"stream": "revenue", "data": {"date": "2023-01-01", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235380} +{"stream": "revenue", "data": {"date": "2023-01-02", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235381} +{"stream": "revenue", "data": {"date": "2023-01-03", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235381} +{"stream": "revenue", "data": {"date": "2023-01-04", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235381} +{"stream": "revenue", "data": {"date": "2023-01-05", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235381} +{"stream": "revenue", "data": {"date": "2023-01-06", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235382} +{"stream": "revenue", "data": {"date": "2023-01-07", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235382} +{"stream": "revenue", "data": {"date": "2023-01-08", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235382} +{"stream": "revenue", "data": {"date": "2023-01-09", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235382} +{"stream": "revenue", "data": {"date": "2023-01-10", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235382} +{"stream": "revenue", "data": {"date": "2023-01-11", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235383} +{"stream": "revenue", "data": {"date": "2023-01-12", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235383} +{"stream": "revenue", "data": {"date": "2023-01-13", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235383} +{"stream": "revenue", "data": {"date": "2023-01-14", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235383} +{"stream": "revenue", "data": {"date": "2023-01-15", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235383} +{"stream": "revenue", "data": {"date": "2023-01-16", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235384} +{"stream": "revenue", "data": {"date": "2023-01-17", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235384} +{"stream": "revenue", "data": {"date": "2023-01-18", "amount": 0.0, "count": 3, "paid_count": 0}, "emitted_at": 1674078235384} diff --git a/airbyte-integrations/connectors/source-mixpanel/source_mixpanel/streams/base.py b/airbyte-integrations/connectors/source-mixpanel/source_mixpanel/streams/base.py index 2ddd6af68a1dc..7f0e33ca3acf9 100644 --- a/airbyte-integrations/connectors/source-mixpanel/source_mixpanel/streams/base.py +++ b/airbyte-integrations/connectors/source-mixpanel/source_mixpanel/streams/base.py @@ -9,6 +9,7 @@ import pendulum import requests +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.streams.http.auth import HttpAuthenticator from pendulum import Date @@ -55,6 +56,10 @@ def __init__( super().__init__(authenticator=authenticator) + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: """Define abstract method""" return None diff --git a/airbyte-integrations/connectors/source-monday/source_monday/monday.yaml b/airbyte-integrations/connectors/source-monday/source_monday/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-monday/source_monday/monday.yaml rename to airbyte-integrations/connectors/source-monday/source_monday/manifest.yaml diff --git a/airbyte-integrations/connectors/source-monday/source_monday/source.py b/airbyte-integrations/connectors/source-monday/source_monday/source.py index 932f5206a4b6e..0139bc49a5f21 100644 --- a/airbyte-integrations/connectors/source-monday/source_monday/source.py +++ b/airbyte-integrations/connectors/source-monday/source_monday/source.py @@ -14,4 +14,4 @@ # Declarative Source class SourceMonday(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "monday.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-mssql-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-mssql-strict-encrypt/Dockerfile index 3ec6c69f7c274..97644ffc9f9da 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=0.4.27 +LABEL io.airbyte.version=0.4.28 LABEL io.airbyte.name=airbyte/source-mssql-strict-encrypt diff --git a/airbyte-integrations/connectors/source-mssql-strict-encrypt/src/test/resources/expected_spec.json b/airbyte-integrations/connectors/source-mssql-strict-encrypt/src/test/resources/expected_spec.json index bbdae356015ac..55ef10232e9c9 100644 --- a/airbyte-integrations/connectors/source-mssql-strict-encrypt/src/test/resources/expected_spec.json +++ b/airbyte-integrations/connectors/source-mssql-strict-encrypt/src/test/resources/expected_spec.json @@ -139,6 +139,15 @@ "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 } } } diff --git a/airbyte-integrations/connectors/source-mssql/Dockerfile b/airbyte-integrations/connectors/source-mssql/Dockerfile index b0624aaf167ea..44663ce0fe9c2 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=0.4.27 +LABEL io.airbyte.version=0.4.28 LABEL io.airbyte.name=airbyte/source-mssql diff --git a/airbyte-integrations/connectors/source-mssql/src/main/resources/spec.json b/airbyte-integrations/connectors/source-mssql/src/main/resources/spec.json index 35b192d2c4de7..9be47072c1500 100644 --- a/airbyte-integrations/connectors/source-mssql/src/main/resources/spec.json +++ b/airbyte-integrations/connectors/source-mssql/src/main/resources/spec.json @@ -150,6 +150,15 @@ "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 } } } diff --git a/airbyte-integrations/connectors/source-mssql/src/test-integration/resources/expected_spec.json b/airbyte-integrations/connectors/source-mssql/src/test-integration/resources/expected_spec.json index 4745ff1f922ec..0b94887ffc1a3 100644 --- a/airbyte-integrations/connectors/source-mssql/src/test-integration/resources/expected_spec.json +++ b/airbyte-integrations/connectors/source-mssql/src/test-integration/resources/expected_spec.json @@ -150,6 +150,15 @@ "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 } } } diff --git a/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-mysql-strict-encrypt/Dockerfile index bb8acc44839f0..8a0b2f900a3a1 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=1.0.19 +LABEL io.airbyte.version=1.0.21 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 149618a5dfe6b..2eb6c25f55f1c 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=1.0.19 +LABEL io.airbyte.version=1.0.21 LABEL io.airbyte.name=airbyte/source-mysql diff --git a/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractSshMySqlSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractSshMySqlSourceAcceptanceTest.java index 1d9d99cd420f2..d6d73ad51c054 100644 --- a/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractSshMySqlSourceAcceptanceTest.java +++ b/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/AbstractSshMySqlSourceAcceptanceTest.java @@ -28,7 +28,7 @@ public abstract class AbstractSshMySqlSourceAcceptanceTest extends SourceAccepta private static final String STREAM_NAME = "id_and_name"; private static final String STREAM_NAME2 = "starships"; - private JsonNode config; + protected static JsonNode config; public abstract Path getConfigFilePath(); diff --git a/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/SshPasswordMySqlSourceAcceptanceTest.java b/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/SshPasswordMySqlSourceAcceptanceTest.java index e2386f69645e0..22b57890da22c 100644 --- a/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/SshPasswordMySqlSourceAcceptanceTest.java +++ b/airbyte-integrations/connectors/source-mysql/src/test-integration/java/io/airbyte/integrations/io/airbyte/integration_tests/sources/SshPasswordMySqlSourceAcceptanceTest.java @@ -4,10 +4,22 @@ package io.airbyte.integrations.io.airbyte.integration_tests.sources; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import io.airbyte.commons.exceptions.ConfigErrorException; import io.airbyte.commons.features.EnvVariableFeatureFlags; +import io.airbyte.integrations.base.Source; +import io.airbyte.integrations.base.ssh.SshBastionContainer; +import io.airbyte.integrations.base.ssh.SshTunnel; +import io.airbyte.integrations.source.mysql.MySqlSource; import io.airbyte.integrations.standardtest.source.TestDestinationEnv; import java.nio.file.Path; +import java.util.List; +import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.testcontainers.containers.MySQLContainer; +import org.testcontainers.containers.Network; import uk.org.webcompere.systemstubs.environment.EnvironmentVariables; import uk.org.webcompere.systemstubs.jupiter.SystemStub; import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension; @@ -29,4 +41,32 @@ public Path getConfigFilePath() { return Path.of("secrets/ssh-pwd-repl-config.json"); } + @Test + public void sshTimeoutExceptionMarkAsConfigErrorTest() throws Exception { + SshBastionContainer bastion = new SshBastionContainer(); + final Network network = Network.newNetwork(); + // set up env + MySQLContainer db = startTestContainers(bastion, network); + config = bastion.getTunnelConfig(SshTunnel.TunnelMethod.SSH_PASSWORD_AUTH, bastion.getBasicDbConfigBuider(db, List.of("public"))); + bastion.stopAndClose(); + Source sshWrappedSource = MySqlSource.sshWrappedSource(); + Exception exception = assertThrows(ConfigErrorException.class, () -> sshWrappedSource.discover(config)); + + String expectedMessage = "Timed out while opening a SSH Tunnel. Please double check the given SSH configurations and try again."; + String actualMessage = exception.getMessage(); + + assertTrue(actualMessage.contains(expectedMessage)); + } + + private MySQLContainer startTestContainers(SshBastionContainer bastion, Network network) { + bastion.initAndStartBastion(network); + return initAndStartJdbcContainer(network); + } + + private MySQLContainer initAndStartJdbcContainer(Network network) { + MySQLContainer db = new MySQLContainer<>("mysql:8.0").withNetwork(network); + db.start(); + return db; + } + } diff --git a/airbyte-integrations/connectors/source-n8n/source_n8n/n8n.yaml b/airbyte-integrations/connectors/source-n8n/source_n8n/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-n8n/source_n8n/n8n.yaml rename to airbyte-integrations/connectors/source-n8n/source_n8n/manifest.yaml diff --git a/airbyte-integrations/connectors/source-n8n/source_n8n/source.py b/airbyte-integrations/connectors/source-n8n/source_n8n/source.py index b4e3253134564..526b147f31d75 100644 --- a/airbyte-integrations/connectors/source-n8n/source_n8n/source.py +++ b/airbyte-integrations/connectors/source-n8n/source_n8n/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceN8n(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "n8n.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-netsuite/Dockerfile b/airbyte-integrations/connectors/source-netsuite/Dockerfile index 6633bd9c7308e..4e301fccfbd33 100644 --- a/airbyte-integrations/connectors/source-netsuite/Dockerfile +++ b/airbyte-integrations/connectors/source-netsuite/Dockerfile @@ -35,5 +35,5 @@ COPY source_netsuite ./source_netsuite ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.2 +LABEL io.airbyte.version=0.1.3 LABEL io.airbyte.name=airbyte/source-netsuite diff --git a/airbyte-integrations/connectors/source-netsuite/source_netsuite/source.py b/airbyte-integrations/connectors/source-netsuite/source_netsuite/source.py index cb4cff8ee66f0..a129e6fc57711 100644 --- a/airbyte-integrations/connectors/source-netsuite/source_netsuite/source.py +++ b/airbyte-integrations/connectors/source-netsuite/source_netsuite/source.py @@ -21,18 +21,20 @@ class SourceNetsuite(AbstractSource): logger: logging.Logger = logging.getLogger("airbyte") def auth(self, config: Mapping[str, Any]) -> OAuth1: + # the `realm` param should be in format of: 12345_SB1 + realm = config["realm"].replace("-", "_").upper() return OAuth1( client_key=config["consumer_key"], client_secret=config["consumer_secret"], resource_owner_key=config["token_key"], resource_owner_secret=config["token_secret"], - realm=config["realm"], + realm=realm, signature_method="HMAC-SHA256", ) def base_url(self, config: Mapping[str, Any]) -> str: - realm = config["realm"] - subdomain = realm.lower().replace("_", "-") + # the subdomain should be in format of: 12345-sb1 + subdomain = config["realm"].replace("_", "-").lower() return f"https://{subdomain}.suitetalk.api.netsuite.com" def get_session(self, auth: OAuth1) -> requests.Session: diff --git a/airbyte-integrations/connectors/source-news-api/source_news_api/news_api.yaml b/airbyte-integrations/connectors/source-news-api/source_news_api/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-news-api/source_news_api/news_api.yaml rename to airbyte-integrations/connectors/source-news-api/source_news_api/manifest.yaml diff --git a/airbyte-integrations/connectors/source-news-api/source_news_api/source.py b/airbyte-integrations/connectors/source-news-api/source_news_api/source.py index 064c0a21fbe67..2d1b8a21a6e6e 100644 --- a/airbyte-integrations/connectors/source-news-api/source_news_api/source.py +++ b/airbyte-integrations/connectors/source-news-api/source_news_api/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceNewsApi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "news_api.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-newsdata/source_newsdata/newsdata.yaml b/airbyte-integrations/connectors/source-newsdata/source_newsdata/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-newsdata/source_newsdata/newsdata.yaml rename to airbyte-integrations/connectors/source-newsdata/source_newsdata/manifest.yaml diff --git a/airbyte-integrations/connectors/source-newsdata/source_newsdata/source.py b/airbyte-integrations/connectors/source-newsdata/source_newsdata/source.py index bba2fc1793660..b33e2d7f1e643 100644 --- a/airbyte-integrations/connectors/source-newsdata/source_newsdata/source.py +++ b/airbyte-integrations/connectors/source-newsdata/source_newsdata/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceNewsdata(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "newsdata.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-notion/Dockerfile b/airbyte-integrations/connectors/source-notion/Dockerfile index d910782187e81..c6dad22d2b0b5 100644 --- a/airbyte-integrations/connectors/source-notion/Dockerfile +++ b/airbyte-integrations/connectors/source-notion/Dockerfile @@ -34,5 +34,5 @@ COPY source_notion ./source_notion ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.0.0 +LABEL io.airbyte.version=1.0.1 LABEL io.airbyte.name=airbyte/source-notion diff --git a/airbyte-integrations/connectors/source-notion/source_notion/streams.py b/airbyte-integrations/connectors/source-notion/source_notion/streams.py index db2671ca2005e..d2dc022612dd3 100644 --- a/airbyte-integrations/connectors/source-notion/source_notion/streams.py +++ b/airbyte-integrations/connectors/source-notion/source_notion/streams.py @@ -8,6 +8,7 @@ import pydantic 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, HttpSubStream from .utils import transform_properties @@ -28,6 +29,10 @@ def __init__(self, config: Mapping[str, Any], **kwargs): super().__init__(**kwargs) self.start_date = config["start_date"] + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def backoff_time(self, response: requests.Response) -> Optional[float]: retry_after = response.headers.get("retry-after") if retry_after: diff --git a/airbyte-integrations/connectors/source-nytimes/source_nytimes/nytimes.yaml b/airbyte-integrations/connectors/source-nytimes/source_nytimes/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-nytimes/source_nytimes/nytimes.yaml rename to airbyte-integrations/connectors/source-nytimes/source_nytimes/manifest.yaml diff --git a/airbyte-integrations/connectors/source-nytimes/source_nytimes/source.py b/airbyte-integrations/connectors/source-nytimes/source_nytimes/source.py index e67605caf16d6..e1c42d511d4ab 100644 --- a/airbyte-integrations/connectors/source-nytimes/source_nytimes/source.py +++ b/airbyte-integrations/connectors/source-nytimes/source_nytimes/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceNytimes(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "nytimes.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-omnisend/source_omnisend/omnisend.yaml b/airbyte-integrations/connectors/source-omnisend/source_omnisend/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-omnisend/source_omnisend/omnisend.yaml rename to airbyte-integrations/connectors/source-omnisend/source_omnisend/manifest.yaml diff --git a/airbyte-integrations/connectors/source-omnisend/source_omnisend/source.py b/airbyte-integrations/connectors/source-omnisend/source_omnisend/source.py index 0866b13192159..b240dbd014822 100644 --- a/airbyte-integrations/connectors/source-omnisend/source_omnisend/source.py +++ b/airbyte-integrations/connectors/source-omnisend/source_omnisend/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceOmnisend(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "omnisend.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-oura/source_oura/oura.yaml b/airbyte-integrations/connectors/source-oura/source_oura/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-oura/source_oura/oura.yaml rename to airbyte-integrations/connectors/source-oura/source_oura/manifest.yaml diff --git a/airbyte-integrations/connectors/source-oura/source_oura/source.py b/airbyte-integrations/connectors/source-oura/source_oura/source.py index 644f972f110a9..d230140178a99 100644 --- a/airbyte-integrations/connectors/source-oura/source_oura/source.py +++ b/airbyte-integrations/connectors/source-oura/source_oura/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceOura(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "oura.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-partnerstack/source_partnerstack/partnerstack.yaml b/airbyte-integrations/connectors/source-partnerstack/source_partnerstack/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-partnerstack/source_partnerstack/partnerstack.yaml rename to airbyte-integrations/connectors/source-partnerstack/source_partnerstack/manifest.yaml diff --git a/airbyte-integrations/connectors/source-partnerstack/source_partnerstack/source.py b/airbyte-integrations/connectors/source-partnerstack/source_partnerstack/source.py index 6584be3472c77..94041c9548795 100644 --- a/airbyte-integrations/connectors/source-partnerstack/source_partnerstack/source.py +++ b/airbyte-integrations/connectors/source-partnerstack/source_partnerstack/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourcePartnerstack(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "partnerstack.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-paypal-transaction/Dockerfile b/airbyte-integrations/connectors/source-paypal-transaction/Dockerfile index 9e26b7a545bcf..fea16324637fe 100644 --- a/airbyte-integrations/connectors/source-paypal-transaction/Dockerfile +++ b/airbyte-integrations/connectors/source-paypal-transaction/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.10 +LABEL io.airbyte.version=0.1.11 LABEL io.airbyte.name=airbyte/source-paypal-transaction diff --git a/airbyte-integrations/connectors/source-paypal-transaction/acceptance-test-config.yml b/airbyte-integrations/connectors/source-paypal-transaction/acceptance-test-config.yml index 807ccbee333ca..4a82d385b3e16 100644 --- a/airbyte-integrations/connectors/source-paypal-transaction/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-paypal-transaction/acceptance-test-config.yml @@ -1,36 +1,41 @@ -# 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-paypal-transaction:dev -tests: - spec: - - spec_path: "source_paypal_transaction/spec.json" +acceptance_tests: + basic_read: + tests: + - config_path: secrets/config.json + empty_streams: + - name: balances + bypass_reason: "value of 'last_refresh_time' field changes during every read" + timeout_seconds: 1200 + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: no + exact_order: no + extra_records: yes connection: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" - - config_path: "secrets/config_oauth.json" - status: "succeed" - - config_path: "integration_tests/invalid_config_oauth.json" - status: "failed" + tests: + - config_path: secrets/config.json + status: succeed + - config_path: integration_tests/invalid_config.json + status: failed + - config_path: secrets/config_oauth.json + status: succeed + - config_path: integration_tests/invalid_config_oauth.json + status: failed discovery: - - config_path: "secrets/config.json" - basic_read: - # Sometimes test could fail (on weekends) because transactions could temporary disappear from Paypal Sandbox account - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - empty_streams: ["transactions"] - # Two-sequence read is failing because of "last_refresh_time" property inside of response, - # It is enough to have basic_read test for all the records to check. - # full_refresh: - # - config_path: "secrets/config.json" - # configured_catalog_path: "integration_tests/configured_catalog.json" - # incremental: - # Only "Transactions" stream is tested here because "Balances" stream always return - # at least one message (and causes test failure) - # - config_path: "secrets/config.json" - # configured_catalog_path: "integration_tests/configured_catalog_transactions.json" - # future_state_path: "integration_tests/abnormal_state.json" - # cursor_paths: - # transactions: ["date"] - + tests: + - config_path: secrets/config.json + full_refresh: + tests: + - config_path: secrets/config.json + configured_catalog_path: integration_tests/configured_catalog.json + 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 + spec: + tests: + - spec_path: source_paypal_transaction/spec.json +connector_image: airbyte/source-paypal-transaction:dev +test_strictness_level: high diff --git a/airbyte-integrations/connectors/source-paypal-transaction/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-paypal-transaction/integration_tests/abnormal_state.json index f60c258e0e01a..565f41f6fca12 100644 --- a/airbyte-integrations/connectors/source-paypal-transaction/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-paypal-transaction/integration_tests/abnormal_state.json @@ -1,8 +1,24 @@ -{ - "transactions": { - "date": "2021-07-11T23:00:00+00:00" +[ + { + "type": "STREAM", + "stream": { + "stream_state": { + "date": "2023-06-09T00:00:00+00:00" + }, + "stream_descriptor": { + "name": "balances" + } + } }, - "balances": { - "date": "2021-07-11T23:00:00+00:00" + { + "type": "STREAM", + "stream": { + "stream_state": { + "date": "2023-06-09T00:00:00+00:00" + }, + "stream_descriptor": { + "name": "transactions" + } + } } -} +] diff --git a/airbyte-integrations/connectors/source-paypal-transaction/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-paypal-transaction/integration_tests/expected_records.jsonl new file mode 100644 index 0000000000000..5be7b634a7554 --- /dev/null +++ b/airbyte-integrations/connectors/source-paypal-transaction/integration_tests/expected_records.jsonl @@ -0,0 +1,41 @@ +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "23N61105X92314351", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-04T17:13:23+0000", "transaction_updated_date": "2021-07-04T17:13:23+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "202.58"}, "available_balance": {"currency_code": "USD", "value": "202.58"}, "invoice_id": "48787580055", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "48787580055"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "48787580055"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-04T17:13:23+0000", "transaction_id": "23N61105X92314351"}, "emitted_at": 1673959656444} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "1FN09943JY662130R", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T22:56:54+0000", "transaction_updated_date": "2021-07-05T22:56:54+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "231.52"}, "available_balance": {"currency_code": "USD", "value": "231.52"}, "invoice_id": "65095789448", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "65095789448"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "65095789448"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T22:56:54+0000", "transaction_id": "1FN09943JY662130R"}, "emitted_at": 1673959656446} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "0M443597T0019954R", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:01:13+0000", "transaction_updated_date": "2021-07-05T23:01:13+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "260.46"}, "available_balance": {"currency_code": "USD", "value": "260.46"}, "invoice_id": "41468340464", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "41468340464"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "41468340464"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:01:13+0000", "transaction_id": "0M443597T0019954R"}, "emitted_at": 1673959656448} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "19C257131E850262B", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:02:46+0000", "transaction_updated_date": "2021-07-05T23:02:46+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "289.40"}, "available_balance": {"currency_code": "USD", "value": "289.40"}, "invoice_id": "23749371955", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "23749371955"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "23749371955"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:02:46+0000", "transaction_id": "19C257131E850262B"}, "emitted_at": 1673959656450} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "6S892278N6406494Y", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:06:12+0000", "transaction_updated_date": "2021-07-05T23:06:12+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "318.34"}, "available_balance": {"currency_code": "USD", "value": "318.34"}, "invoice_id": "62173333941", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "62173333941"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "62173333941"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:06:12+0000", "transaction_id": "6S892278N6406494Y"}, "emitted_at": 1673959656453} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "0T320567TS5587836", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:09:04+0000", "transaction_updated_date": "2021-07-05T23:09:04+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "347.28"}, "available_balance": {"currency_code": "USD", "value": "347.28"}, "invoice_id": "56028534885", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "56028534885"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "56028534885"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:09:04+0000", "transaction_id": "0T320567TS5587836"}, "emitted_at": 1673959656455} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "3DF69605L9958744R", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:12:40+0000", "transaction_updated_date": "2021-07-05T23:12:40+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "376.22"}, "available_balance": {"currency_code": "USD", "value": "376.22"}, "invoice_id": "31766547902", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "31766547902"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "31766547902"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:12:40+0000", "transaction_id": "3DF69605L9958744R"}, "emitted_at": 1673959656457} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "2F535603PS249601F", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:12:57+0000", "transaction_updated_date": "2021-07-05T23:12:57+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "405.16"}, "available_balance": {"currency_code": "USD", "value": "405.16"}, "invoice_id": "32577611997", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "32577611997"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "32577611997"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:12:57+0000", "transaction_id": "2F535603PS249601F"}, "emitted_at": 1673959656459} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "243514451L952570P", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:14:02+0000", "transaction_updated_date": "2021-07-05T23:14:02+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "434.10"}, "available_balance": {"currency_code": "USD", "value": "434.10"}, "invoice_id": "23612058730", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "23612058730"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "23612058730"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:14:02+0000", "transaction_id": "243514451L952570P"}, "emitted_at": 1673959656460} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "27881589Y9461861H", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:14:19+0000", "transaction_updated_date": "2021-07-05T23:14:19+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "463.04"}, "available_balance": {"currency_code": "USD", "value": "463.04"}, "invoice_id": "53296156982", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "53296156982"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "53296156982"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:14:19+0000", "transaction_id": "27881589Y9461861H"}, "emitted_at": 1673959656462} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "3MG39755337297727", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:14:36+0000", "transaction_updated_date": "2021-07-05T23:14:36+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "491.98"}, "available_balance": {"currency_code": "USD", "value": "491.98"}, "invoice_id": "53235397043", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "53235397043"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "53235397043"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:14:36+0000", "transaction_id": "3MG39755337297727"}, "emitted_at": 1673959656463} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "32J59182JY5989507", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:14:52+0000", "transaction_updated_date": "2021-07-05T23:14:52+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "520.92"}, "available_balance": {"currency_code": "USD", "value": "520.92"}, "invoice_id": "18208641465", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "18208641465"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "18208641465"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:14:52+0000", "transaction_id": "32J59182JY5989507"}, "emitted_at": 1673959656464} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "52795774C7828234R", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:15:09+0000", "transaction_updated_date": "2021-07-05T23:15:09+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "549.86"}, "available_balance": {"currency_code": "USD", "value": "549.86"}, "invoice_id": "32274344746", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "32274344746"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "32274344746"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:15:09+0000", "transaction_id": "52795774C7828234R"}, "emitted_at": 1673959656465} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "19B82038T92822940", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:15:26+0000", "transaction_updated_date": "2021-07-05T23:15:26+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "578.80"}, "available_balance": {"currency_code": "USD", "value": "578.80"}, "invoice_id": "36419288277", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "36419288277"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "36419288277"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:15:26+0000", "transaction_id": "19B82038T92822940"}, "emitted_at": 1673959656467} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "61G749036D552760G", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:15:42+0000", "transaction_updated_date": "2021-07-05T23:15:42+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "607.74"}, "available_balance": {"currency_code": "USD", "value": "607.74"}, "invoice_id": "88092228645", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "88092228645"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "88092228645"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:15:42+0000", "transaction_id": "61G749036D552760G"}, "emitted_at": 1673959656468} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "5EL311302L108363J", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:15:58+0000", "transaction_updated_date": "2021-07-05T23:15:58+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "636.68"}, "available_balance": {"currency_code": "USD", "value": "636.68"}, "invoice_id": "25494061224", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "25494061224"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "25494061224"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:15:58+0000", "transaction_id": "5EL311302L108363J"}, "emitted_at": 1673959656470} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "3VP82838NP358133N", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:16:15+0000", "transaction_updated_date": "2021-07-05T23:16:15+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "665.62"}, "available_balance": {"currency_code": "USD", "value": "665.62"}, "invoice_id": "82173600275", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "82173600275"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "82173600275"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:16:15+0000", "transaction_id": "3VP82838NP358133N"}, "emitted_at": 1673959656471} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "2N796839EY2539153", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:16:32+0000", "transaction_updated_date": "2021-07-05T23:16:32+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "694.56"}, "available_balance": {"currency_code": "USD", "value": "694.56"}, "invoice_id": "10442581967", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "10442581967"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "10442581967"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:16:32+0000", "transaction_id": "2N796839EY2539153"}, "emitted_at": 1673959656472} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "5WX252723D093564T", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:23:29+0000", "transaction_updated_date": "2021-07-05T23:23:29+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "723.50"}, "available_balance": {"currency_code": "USD", "value": "723.50"}, "invoice_id": "71987080514", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "71987080514"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "71987080514"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:23:29+0000", "transaction_id": "5WX252723D093564T"}, "emitted_at": 1673959656473} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "4PW76195NN227720S", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:23:40+0000", "transaction_updated_date": "2021-07-05T23:23:40+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "752.44"}, "available_balance": {"currency_code": "USD", "value": "752.44"}, "invoice_id": "93025400757", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "93025400757"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "93025400757"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:23:40+0000", "transaction_id": "4PW76195NN227720S"}, "emitted_at": 1673959656474} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "0VE851712U5895412", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:23:51+0000", "transaction_updated_date": "2021-07-05T23:23:51+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "781.38"}, "available_balance": {"currency_code": "USD", "value": "781.38"}, "invoice_id": "46225965444", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "46225965444"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "46225965444"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:23:51+0000", "transaction_id": "0VE851712U5895412"}, "emitted_at": 1673959656475} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "63U003588S1135607", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:29:26+0000", "transaction_updated_date": "2021-07-05T23:29:26+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "810.32"}, "available_balance": {"currency_code": "USD", "value": "810.32"}, "invoice_id": "34635559567", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "34635559567"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "34635559567"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:29:26+0000", "transaction_id": "63U003588S1135607"}, "emitted_at": 1673959656476} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "2AJ081444T051123A", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:29:37+0000", "transaction_updated_date": "2021-07-05T23:29:37+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "839.26"}, "available_balance": {"currency_code": "USD", "value": "839.26"}, "invoice_id": "92544485996", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "92544485996"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "92544485996"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:29:37+0000", "transaction_id": "2AJ081444T051123A"}, "emitted_at": 1673959656477} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "2KU13114TJ604181E", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:29:48+0000", "transaction_updated_date": "2021-07-05T23:29:48+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "868.20"}, "available_balance": {"currency_code": "USD", "value": "868.20"}, "invoice_id": "10184574713", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "10184574713"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "10184574713"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:29:48+0000", "transaction_id": "2KU13114TJ604181E"}, "emitted_at": 1673959656478} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "1ST090036H2235215", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:31:35+0000", "transaction_updated_date": "2021-07-05T23:31:35+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "897.14"}, "available_balance": {"currency_code": "USD", "value": "897.14"}, "invoice_id": "50350860865", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "50350860865"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "50350860865"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:31:35+0000", "transaction_id": "1ST090036H2235215"}, "emitted_at": 1673959656479} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "5BJ418934Y425901G", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:31:46+0000", "transaction_updated_date": "2021-07-05T23:31:46+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "926.08"}, "available_balance": {"currency_code": "USD", "value": "926.08"}, "invoice_id": "12278283055", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "12278283055"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "12278283055"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:31:46+0000", "transaction_id": "5BJ418934Y425901G"}, "emitted_at": 1673959656480} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "0SD21997LN026020M", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:31:56+0000", "transaction_updated_date": "2021-07-05T23:31:56+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "955.02"}, "available_balance": {"currency_code": "USD", "value": "955.02"}, "invoice_id": "52396214250", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "52396214250"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "52396214250"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:31:56+0000", "transaction_id": "0SD21997LN026020M"}, "emitted_at": 1673959656481} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "3BH630398E562901G", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:42:41+0000", "transaction_updated_date": "2021-07-05T23:42:41+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "983.96"}, "available_balance": {"currency_code": "USD", "value": "983.96"}, "invoice_id": "18793521512", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "18793521512"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "18793521512"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:42:41+0000", "transaction_id": "3BH630398E562901G"}, "emitted_at": 1673959656482} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "03D88325GF8461705", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:42:52+0000", "transaction_updated_date": "2021-07-05T23:42:52+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1012.90"}, "available_balance": {"currency_code": "USD", "value": "1012.90"}, "invoice_id": "71793513892", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "71793513892"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "71793513892"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:42:52+0000", "transaction_id": "03D88325GF8461705"}, "emitted_at": 1673959656484} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "51852852PL0100404", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:43:03+0000", "transaction_updated_date": "2021-07-05T23:43:03+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1041.84"}, "available_balance": {"currency_code": "USD", "value": "1041.84"}, "invoice_id": "98653187889", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "98653187889"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "98653187889"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:43:03+0000", "transaction_id": "51852852PL0100404"}, "emitted_at": 1673959656485} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "8MF4324694292993B", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:44:21+0000", "transaction_updated_date": "2021-07-05T23:44:21+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1070.78"}, "available_balance": {"currency_code": "USD", "value": "1070.78"}, "invoice_id": "12489150471", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "12489150471"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "12489150471"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:44:21+0000", "transaction_id": "8MF4324694292993B"}, "emitted_at": 1673959656486} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "87S73342AS6001233", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:44:32+0000", "transaction_updated_date": "2021-07-05T23:44:32+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1099.72"}, "available_balance": {"currency_code": "USD", "value": "1099.72"}, "invoice_id": "99595079917", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "99595079917"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "99595079917"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:44:32+0000", "transaction_id": "87S73342AS6001233"}, "emitted_at": 1673959656487} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "112146346A741221U", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:44:44+0000", "transaction_updated_date": "2021-07-05T23:44:44+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1128.66"}, "available_balance": {"currency_code": "USD", "value": "1128.66"}, "invoice_id": "93286331651", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "93286331651"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "93286331651"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:44:44+0000", "transaction_id": "112146346A741221U"}, "emitted_at": 1673959656488} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "0N2242037Y9449344", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:44:54+0000", "transaction_updated_date": "2021-07-05T23:44:54+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1157.60"}, "available_balance": {"currency_code": "USD", "value": "1157.60"}, "invoice_id": "71349988314", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "71349988314"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "71349988314"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:44:54+0000", "transaction_id": "0N2242037Y9449344"}, "emitted_at": 1673959656489} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "9NH78349H0388780F", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:45:05+0000", "transaction_updated_date": "2021-07-05T23:45:05+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1186.54"}, "available_balance": {"currency_code": "USD", "value": "1186.54"}, "invoice_id": "83951023481", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "83951023481"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "83951023481"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:45:05+0000", "transaction_id": "9NH78349H0388780F"}, "emitted_at": 1673959656490} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "10S137566E4828249", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:45:16+0000", "transaction_updated_date": "2021-07-05T23:45:16+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1215.48"}, "available_balance": {"currency_code": "USD", "value": "1215.48"}, "invoice_id": "88168198250", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "88168198250"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "88168198250"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:45:16+0000", "transaction_id": "10S137566E4828249"}, "emitted_at": 1673959656491} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "7N749695W59419057", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:45:27+0000", "transaction_updated_date": "2021-07-05T23:45:27+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1244.42"}, "available_balance": {"currency_code": "USD", "value": "1244.42"}, "invoice_id": "38296993497", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "38296993497"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "38296993497"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:45:27+0000", "transaction_id": "7N749695W59419057"}, "emitted_at": 1673959656492} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "43X058357A257931N", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:45:39+0000", "transaction_updated_date": "2021-07-05T23:45:39+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1273.36"}, "available_balance": {"currency_code": "USD", "value": "1273.36"}, "invoice_id": "33391419042", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "33391419042"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "33391419042"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:45:39+0000", "transaction_id": "43X058357A257931N"}, "emitted_at": 1673959656493} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "5WL82051VY277550S", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:45:50+0000", "transaction_updated_date": "2021-07-05T23:45:50+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1302.30"}, "available_balance": {"currency_code": "USD", "value": "1302.30"}, "invoice_id": "69341308548", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "69341308548"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "69341308548"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:45:50+0000", "transaction_id": "5WL82051VY277550S"}, "emitted_at": 1673959656494} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "9CG36572NK0728016", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:46:01+0000", "transaction_updated_date": "2021-07-05T23:46:01+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1331.24"}, "available_balance": {"currency_code": "USD", "value": "1331.24"}, "invoice_id": "70491310163", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "70491310163"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "70491310163"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:46:01+0000", "transaction_id": "9CG36572NK0728016"}, "emitted_at": 1673959656495} +{"stream": "transactions", "data": {"transaction_info": {"paypal_account_id": "ZE5533HZPGMC6", "transaction_id": "9K759703FU663194K", "transaction_event_code": "T0006", "transaction_initiation_date": "2021-07-05T23:46:43+0000", "transaction_updated_date": "2021-07-05T23:46:43+0000", "transaction_amount": {"currency_code": "USD", "value": "30.11"}, "fee_amount": {"currency_code": "USD", "value": "-1.17"}, "insurance_amount": {"currency_code": "USD", "value": "0.01"}, "shipping_amount": {"currency_code": "USD", "value": "1.03"}, "shipping_discount_amount": {"currency_code": "USD", "value": "1.00"}, "transaction_status": "S", "transaction_subject": "This is the payment transaction description.", "ending_balance": {"currency_code": "USD", "value": "1360.18"}, "available_balance": {"currency_code": "USD", "value": "1360.18"}, "invoice_id": "44794712899", "custom_field": "EBAY_EMS_90048630020055", "protection_eligibility": "01"}, "payer_info": {"account_id": "ZE5533HZPGMC6", "email_address": "integration-test-buyer@airbyte.io", "address_status": "Y", "payer_status": "Y", "payer_name": {"given_name": "test", "surname": "buyer", "alternate_full_name": "test buyer"}, "country_code": "US"}, "shipping_info": {"name": "Hello World", "address": {"line1": "4thFloor", "line2": "unit#34", "city": "SAn Jose", "state": "CA", "country_code": "US", "postal_code": "95131"}}, "cart_info": {"item_details": [{"item_code": "1", "item_name": "hat", "item_description": "Brown color hat", "item_quantity": "5", "item_unit_price": {"currency_code": "USD", "value": "3.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.05"}}], "total_item_amount": {"currency_code": "USD", "value": "15.05"}, "invoice_number": "44794712899"}, {"item_code": "product34", "item_name": "handbag", "item_description": "Black color hand bag", "item_quantity": "1", "item_unit_price": {"currency_code": "USD", "value": "15.00"}, "item_amount": {"currency_code": "USD", "value": "15.00"}, "tax_amounts": [{"tax_amount": {"currency_code": "USD", "value": "0.02"}}], "total_item_amount": {"currency_code": "USD", "value": "15.02"}, "invoice_number": "44794712899"}]}, "store_info": {}, "auction_info": {}, "incentive_info": {}, "transaction_initiation_date": "2021-07-05T23:46:43+0000", "transaction_id": "9K759703FU663194K"}, "emitted_at": 1673959656495} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-paypal-transaction/source_paypal_transaction/source.py b/airbyte-integrations/connectors/source-paypal-transaction/source_paypal_transaction/source.py index 9606eb2de99df..39f65974a3b7a 100644 --- a/airbyte-integrations/connectors/source-paypal-transaction/source_paypal_transaction/source.py +++ b/airbyte-integrations/connectors/source-paypal-transaction/source_paypal_transaction/source.py @@ -14,6 +14,7 @@ from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.streams.http.auth import HttpAuthenticator, Oauth2Authenticator from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer @@ -137,6 +138,10 @@ def validate_input_dates(self): def url_base(self) -> str: return f"{get_endpoint(self.is_sandbox)}/v1/reporting/" + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def request_headers(self, **kwargs) -> Mapping[str, Any]: return {"Content-Type": "application/json"} @@ -265,8 +270,7 @@ def stream_slices( slice_start_date = self.start_date if stream_state: - # if stream_state_date is in the future (for example during tests) then reset it to maximum_allowed_start_date: - stream_state_date = min(isoparse(stream_state.get("date")), self.maximum_allowed_start_date) + stream_state_date = isoparse(stream_state.get("date")) # slice_start_date should be the most recent date: slice_start_date = max(slice_start_date, stream_state_date) diff --git a/airbyte-integrations/connectors/source-pexels-api/source_pexels_api/pexels_api.yaml b/airbyte-integrations/connectors/source-pexels-api/source_pexels_api/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-pexels-api/source_pexels_api/pexels_api.yaml rename to airbyte-integrations/connectors/source-pexels-api/source_pexels_api/manifest.yaml diff --git a/airbyte-integrations/connectors/source-pexels-api/source_pexels_api/source.py b/airbyte-integrations/connectors/source-pexels-api/source_pexels_api/source.py index f7a5cf4eee2d8..122b3263e2f0e 100644 --- a/airbyte-integrations/connectors/source-pexels-api/source_pexels_api/source.py +++ b/airbyte-integrations/connectors/source-pexels-api/source_pexels_api/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourcePexelsApi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "pexels_api.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-pinterest/Dockerfile b/airbyte-integrations/connectors/source-pinterest/Dockerfile index 1f4efba5560f9..75343735ce333 100644 --- a/airbyte-integrations/connectors/source-pinterest/Dockerfile +++ b/airbyte-integrations/connectors/source-pinterest/Dockerfile @@ -34,5 +34,5 @@ COPY source_pinterest ./source_pinterest ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.1 +LABEL io.airbyte.version=0.2.2 LABEL io.airbyte.name=airbyte/source-pinterest diff --git a/airbyte-integrations/connectors/source-pinterest/source_pinterest/source.py b/airbyte-integrations/connectors/source-pinterest/source_pinterest/source.py index 80688424bb52d..244f022fce55f 100644 --- a/airbyte-integrations/connectors/source-pinterest/source_pinterest/source.py +++ b/airbyte-integrations/connectors/source-pinterest/source_pinterest/source.py @@ -13,6 +13,7 @@ from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream, HttpSubStream from airbyte_cdk.sources.streams.http.auth import Oauth2Authenticator from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer @@ -44,6 +45,10 @@ def start_date(self): def window_in_days(self): return 30 # Set window_in_days to 30 days date range + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: next_page = response.json().get("bookmark", {}) if self.data_fields else {} diff --git a/airbyte-integrations/connectors/source-plausible/source_plausible/plausible.yaml b/airbyte-integrations/connectors/source-plausible/source_plausible/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-plausible/source_plausible/plausible.yaml rename to airbyte-integrations/connectors/source-plausible/source_plausible/manifest.yaml diff --git a/airbyte-integrations/connectors/source-plausible/source_plausible/source.py b/airbyte-integrations/connectors/source-plausible/source_plausible/source.py index b3109208e8e34..46cd6480abb8a 100644 --- a/airbyte-integrations/connectors/source-plausible/source_plausible/source.py +++ b/airbyte-integrations/connectors/source-plausible/source_plausible/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourcePlausible(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "plausible.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-pocket/source_pocket/pocket.yaml b/airbyte-integrations/connectors/source-pocket/source_pocket/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-pocket/source_pocket/pocket.yaml rename to airbyte-integrations/connectors/source-pocket/source_pocket/manifest.yaml diff --git a/airbyte-integrations/connectors/source-pocket/source_pocket/source.py b/airbyte-integrations/connectors/source-pocket/source_pocket/source.py index 0fc77fa979127..8b2f94ee818d9 100644 --- a/airbyte-integrations/connectors/source-pocket/source_pocket/source.py +++ b/airbyte-integrations/connectors/source-pocket/source_pocket/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourcePocket(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "pocket.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/polygon_stock_api.yaml b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/polygon_stock_api.yaml rename to airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/manifest.yaml diff --git a/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/source.py b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/source.py index e57f2f436ebb9..b767c28be330e 100644 --- a/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/source.py +++ b/airbyte-integrations/connectors/source-polygon-stock-api/source_polygon_stock_api/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourcePolygonStockApi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "polygon_stock_api.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile b/airbyte-integrations/connectors/source-postgres-strict-encrypt/Dockerfile index 6e8c951d7a933..972cbb614037e 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=1.0.38 +LABEL io.airbyte.version=1.0.42 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 04a84a8f6750a..f05fd2e03c1f8 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=1.0.38 +LABEL io.airbyte.version=1.0.42 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 23140901e3a79..855a5d34ad2f9 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 @@ -26,7 +26,7 @@ public class PostgresQueryUtils { public static final String TABLE_ESTIMATE_QUERY = """ - SELECT (SELECT COUNT(*) FROM %s) AS %s, + SELECT (select reltuples::int8 as count from pg_class c JOIN pg_catalog.pg_namespace n ON n.oid=c.relnamespace where nspname='%s' AND relname='%s') AS %s, pg_relation_size('%s') AS %s; """; 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 d2a3aab3609d5..06df1a710c478 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 @@ -557,13 +557,20 @@ protected void estimateFullRefreshSyncSize(final JdbcDatabase database, final String fullTableName = getFullyQualifiedTableNameWithQuoting(schemaName, tableName, getQuoteString()); - final List tableEstimateResult = getFullTableEstimate(database, fullTableName); + final List tableEstimateResult = getFullTableEstimate(database, fullTableName, schemaName, tableName); if (!tableEstimateResult.isEmpty() && tableEstimateResult.get(0).has(ROW_COUNT_RESULT_COL) && tableEstimateResult.get(0).has(TOTAL_BYTES_RESULT_COL)) { final long syncRowCount = tableEstimateResult.get(0).get(ROW_COUNT_RESULT_COL).asLong(); final long syncByteCount = tableEstimateResult.get(0).get(TOTAL_BYTES_RESULT_COL).asLong(); + // The fast count query can return negative or otherwise invalid results for small tables. In this + // case, we can skip emitting an + // estimate trace altogether since the sync will likely complete quickly. + if (syncRowCount <= 0) { + return; + } + // Here, we double the bytes estimate to account for serialization. Perhaps a better way to do this // is to // read a row and Stringify it to better understand the accurate volume of data sent over the wire. @@ -588,20 +595,23 @@ protected void estimateIncrementalSyncSize(final JdbcDatabase database, final String fullTableName = getFullyQualifiedTableNameWithQuoting(schemaName, tableName, getQuoteString()); - final List tableEstimateResult = getFullTableEstimate(database, fullTableName); + final List tableEstimateResult = getFullTableEstimate(database, fullTableName, schemaName, tableName); final long tableRowCount = tableEstimateResult.get(0).get(ROW_COUNT_RESULT_COL).asLong(); final long tableByteCount = tableEstimateResult.get(0).get(TOTAL_BYTES_RESULT_COL).asLong(); + // The fast count query can return negative or otherwise invalid results for small tables. In this + // case, we can skip emitting an + // estimate trace altogether since the sync will likely complete quickly. + if (tableRowCount <= 0) { + return; + } + final long syncRowCount; final long syncByteCount; syncRowCount = getIncrementalTableRowCount(database, fullTableName, cursorInfo, cursorFieldType); - if (tableRowCount == 0) { - syncByteCount = 0; - } else { - syncByteCount = (tableByteCount / tableRowCount) * syncRowCount; - } + syncByteCount = (tableByteCount / tableRowCount) * syncRowCount; // Here, we double the bytes estimate to account for serialization. Perhaps a better way to do this // is to @@ -615,10 +625,14 @@ protected void estimateIncrementalSyncSize(final JdbcDatabase database, } } - private List getFullTableEstimate(final JdbcDatabase database, final String fullTableName) throws SQLException { + private List getFullTableEstimate(final JdbcDatabase database, + final String fullTableName, + final String schemaName, + final String tableName) + throws SQLException { // Construct the table estimate query. final String tableEstimateQuery = - String.format(TABLE_ESTIMATE_QUERY, fullTableName, ROW_COUNT_RESULT_COL, fullTableName, TOTAL_BYTES_RESULT_COL); + String.format(TABLE_ESTIMATE_QUERY, schemaName, tableName, ROW_COUNT_RESULT_COL, fullTableName, TOTAL_BYTES_RESULT_COL); LOGGER.debug("table estimate query: {}", tableEstimateQuery); final List jsonNodes = database.bufferedResultSetQuery(conn -> conn.createStatement().executeQuery(tableEstimateQuery), resultSet -> JdbcUtils.getDefaultSourceOperations().rowToJson(resultSet)); diff --git a/airbyte-integrations/connectors/source-postgres/src/test/java/io/airbyte/integrations/source/postgres/PostgresSourceTest.java b/airbyte-integrations/connectors/source-postgres/src/test/java/io/airbyte/integrations/source/postgres/PostgresSourceTest.java index 77359c4396fc9..7b8b928347f2d 100644 --- a/airbyte-integrations/connectors/source-postgres/src/test/java/io/airbyte/integrations/source/postgres/PostgresSourceTest.java +++ b/airbyte-integrations/connectors/source-postgres/src/test/java/io/airbyte/integrations/source/postgres/PostgresSourceTest.java @@ -54,7 +54,6 @@ import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.testcontainers.containers.PostgreSQLContainer; import org.testcontainers.utility.MountableFile; @@ -554,7 +553,7 @@ private ConfiguredAirbyteStream createTableWithInvalidCursorType(final Database .withSyncMode(SyncMode.INCREMENTAL) .withStream(CatalogHelpers.createAirbyteStream( "test_table", - "public", + SCHEMA_NAME, Field.of("id", JsonSchemaType.STRING)) .withSupportedSyncModes(Lists.newArrayList(SyncMode.FULL_REFRESH, SyncMode.INCREMENTAL)) .withSourceDefinedPrimaryKey(List.of(List.of("id")))); @@ -579,7 +578,6 @@ private JsonNode buildConfigEscapingNeeded() { } @Test - @Disabled("See https://github.com/airbytehq/airbyte/issues/17150#issuecomment-1342898439, enable once communication is out") public void tableWithNullValueCursorShouldThrowException() throws SQLException { try (final PostgreSQLContainer db = new PostgreSQLContainer<>("postgres:13-alpine")) { db.start(); @@ -613,7 +611,7 @@ private ConfiguredAirbyteStream createTableWithNullValueCursor(final Database da .withSyncMode(SyncMode.INCREMENTAL) .withStream(CatalogHelpers.createAirbyteStream( "test_table_null_cursor", - "12345public", + SCHEMA_NAME, Field.of("id", JsonSchemaType.STRING)) .withSupportedSyncModes(Lists.newArrayList(SyncMode.FULL_REFRESH, SyncMode.INCREMENTAL)) .withSourceDefinedPrimaryKey(List.of(List.of("id")))); @@ -621,7 +619,6 @@ private ConfiguredAirbyteStream createTableWithNullValueCursor(final Database da } @Test - @Disabled("See https://github.com/airbytehq/airbyte/issues/17150#issuecomment-1342898439, enable once communication is out") public void viewWithNullValueCursorShouldThrowException() throws SQLException { try (final PostgreSQLContainer db = new PostgreSQLContainer<>("postgres:13-alpine")) { db.start(); @@ -660,7 +657,7 @@ CREATE VIEW test_view_null_cursor(id) as .withSyncMode(SyncMode.INCREMENTAL) .withStream(CatalogHelpers.createAirbyteStream( "test_view_null_cursor", - "public", + SCHEMA_NAME, Field.of("id", JsonSchemaType.STRING)) .withSupportedSyncModes(Lists.newArrayList(SyncMode.FULL_REFRESH, SyncMode.INCREMENTAL)) .withSourceDefinedPrimaryKey(List.of(List.of("id")))); diff --git a/airbyte-integrations/connectors/source-posthog/source_posthog/posthog.yaml b/airbyte-integrations/connectors/source-posthog/source_posthog/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-posthog/source_posthog/posthog.yaml rename to airbyte-integrations/connectors/source-posthog/source_posthog/manifest.yaml diff --git a/airbyte-integrations/connectors/source-posthog/source_posthog/source.py b/airbyte-integrations/connectors/source-posthog/source_posthog/source.py index afb33b77b92b2..2e98e253b11bc 100644 --- a/airbyte-integrations/connectors/source-posthog/source_posthog/source.py +++ b/airbyte-integrations/connectors/source-posthog/source_posthog/source.py @@ -14,4 +14,4 @@ # Declarative Source class SourcePosthog(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "posthog.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-postmarkapp/source_postmarkapp/postmarkapp.yaml b/airbyte-integrations/connectors/source-postmarkapp/source_postmarkapp/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-postmarkapp/source_postmarkapp/postmarkapp.yaml rename to airbyte-integrations/connectors/source-postmarkapp/source_postmarkapp/manifest.yaml diff --git a/airbyte-integrations/connectors/source-postmarkapp/source_postmarkapp/source.py b/airbyte-integrations/connectors/source-postmarkapp/source_postmarkapp/source.py index 1b110964ac1db..f214443a3a420 100644 --- a/airbyte-integrations/connectors/source-postmarkapp/source_postmarkapp/source.py +++ b/airbyte-integrations/connectors/source-postmarkapp/source_postmarkapp/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourcePostmarkapp(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "postmarkapp.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-prestashop/source_prestashop/prestashop.yaml b/airbyte-integrations/connectors/source-prestashop/source_prestashop/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-prestashop/source_prestashop/prestashop.yaml rename to airbyte-integrations/connectors/source-prestashop/source_prestashop/manifest.yaml diff --git a/airbyte-integrations/connectors/source-prestashop/source_prestashop/source.py b/airbyte-integrations/connectors/source-prestashop/source_prestashop/source.py index 1054b393c01a7..b9cf1b9daf82a 100644 --- a/airbyte-integrations/connectors/source-prestashop/source_prestashop/source.py +++ b/airbyte-integrations/connectors/source-prestashop/source_prestashop/source.py @@ -31,7 +31,7 @@ class ConfigException(Exception): # Declarative Source class SourcePrestashop(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "prestashop.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) def _validate_and_transform(self, config: Mapping[str, Any]): if not config.get("_allow_http"): diff --git a/airbyte-integrations/connectors/source-punk-api/source_punk_api/punk_api.yaml b/airbyte-integrations/connectors/source-punk-api/source_punk_api/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-punk-api/source_punk_api/punk_api.yaml rename to airbyte-integrations/connectors/source-punk-api/source_punk_api/manifest.yaml diff --git a/airbyte-integrations/connectors/source-punk-api/source_punk_api/source.py b/airbyte-integrations/connectors/source-punk-api/source_punk_api/source.py index fc86b16fae5d2..95579f004941b 100644 --- a/airbyte-integrations/connectors/source-punk-api/source_punk_api/source.py +++ b/airbyte-integrations/connectors/source-punk-api/source_punk_api/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourcePunkApi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "punk_api.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-pypi/source_pypi/pypi.yaml b/airbyte-integrations/connectors/source-pypi/source_pypi/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-pypi/source_pypi/pypi.yaml rename to airbyte-integrations/connectors/source-pypi/source_pypi/manifest.yaml diff --git a/airbyte-integrations/connectors/source-pypi/source_pypi/source.py b/airbyte-integrations/connectors/source-pypi/source_pypi/source.py index 754a3600be541..7a91036ac2dbb 100644 --- a/airbyte-integrations/connectors/source-pypi/source_pypi/source.py +++ b/airbyte-integrations/connectors/source-pypi/source_pypi/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourcePypi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "pypi.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-recharge/Dockerfile b/airbyte-integrations/connectors/source-recharge/Dockerfile index 69848f6bd9390..bc55a801d19bf 100644 --- a/airbyte-integrations/connectors/source-recharge/Dockerfile +++ b/airbyte-integrations/connectors/source-recharge/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.2.4 +LABEL io.airbyte.version=0.2.5 LABEL io.airbyte.name=airbyte/source-recharge diff --git a/airbyte-integrations/connectors/source-recharge/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-recharge/integration_tests/expected_records.jsonl index 2397d6abaa40f..9af49757a3b77 100644 --- a/airbyte-integrations/connectors/source-recharge/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-recharge/integration_tests/expected_records.jsonl @@ -1,12 +1,12 @@ {"stream": "addresses", "data": {"address1": "6 Liberty Square", "address2": "12", "cart_attributes": null, "cart_note": null, "city": "Boston", "company": null, "country": "United States", "created_at": "2021-05-13T07:32:59", "customer_id": 64965464, "discount_id": null, "first_name": "Kevin", "id": 69286278, "last_name": "Bacon", "note_attributes": null, "original_shipping_lines": null, "phone": "+16175550124", "presentment_currency": "USD", "province": "Massachusetts", "shipping_lines_override": null, "updated_at": "2022-02-23T12:56:33", "zip": "02109"}, "emitted_at": 1673893320161} {"stream": "addresses", "data": {"address1": "1921 W Wilson St", "address2": "", "cart_attributes": null, "cart_note": null, "city": "Batavia", "company": null, "country": "United States", "created_at": "2021-05-13T05:46:46", "customer_id": 64962974, "discount_id": null, "first_name": "Kelly", "id": 69282975, "last_name": "Kozakevich", "note_attributes": null, "original_shipping_lines": null, "phone": "+16145550188", "presentment_currency": "USD", "province": "Illinois", "shipping_lines_override": null, "updated_at": "2022-05-13T00:07:39", "zip": "60510"}, "emitted_at": 1673893320163} {"stream": "addresses", "data": {"address1": "1 9th Ave", "address2": "1", "cart_attributes": null, "cart_note": null, "city": "San Francisco", "company": null, "country": "United States", "created_at": "2021-05-12T08:04:06", "customer_id": 64817252, "discount_id": null, "first_name": "Jane", "id": 69105381, "last_name": "Doe", "note_attributes": null, "original_shipping_lines": null, "phone": "1234567890", "presentment_currency": "USD", "province": "California", "shipping_lines_override": null, "updated_at": "2023-01-16T04:59:09", "zip": "94118"}, "emitted_at": 1673893320163} -{"stream": "charges", "data": {"address_id": 69105381, "billing_address": {"address1": "1 9th Ave", "address2": "1", "city": "San Francisco", "company": "", "country": "United States", "first_name": "Karina", "last_name": "Kuznetsova", "phone": null, "province": "California", "zip": "94118"}, "client_details": {"browser_ip": "188.163.104.29", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}, "created_at": "2021-05-12T08:04:10", "currency": "USD", "customer_hash": "23dee52d73734a81", "customer_id": 64817252, "discount_codes": null, "email": "nikolaevaka@yahoo.com", "first_name": "Karina", "has_uncommited_changes": false, "id": 386976096, "last_name": "Kuznetsova", "line_items": [{"images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.3", "properties": [], "quantity": 1, "shopify_product_id": 6642695864491, "shopify_variant_id": 39684722131115, "sku": null, "subscription_id": 153224593, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "S / Black"}], "note": null, "note_attributes": null, "processed_at": "2021-05-12T12:03:59", "processor_name": "shopify_payments", "scheduled_at": "2021-05-12T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1 9th Ave", "address2": "1", "city": "San Francisco", "company": "", "country": "United States", "first_name": "Karina", "last_name": "Kuznetsova", "phone": null, "province": "California", "zip": "94118"}, "shipping_lines": [{"code": "Economy", "description": "", "price": 4.9, "source": "", "tax_lines": [], "title": "Economy"}], "shopify_order_id": "3785952133291", "status": "SUCCESS", "sub_total": null, "subtotal_price": "24.3", "tags": null, "tax_lines": "0", "total_discounts": "0", "total_duties": null, "total_line_items_price": "24.3", "total_price": "29.20", "total_refunds": null, "total_tax": "0", "total_weight": 0, "transaction_id": "Shopify Checkout", "type": "CHECKOUT", "updated_at": "2022-03-18T19:55:18"}, "emitted_at": 1673893320501} -{"stream": "charges", "data": {"address_id": 69286278, "billing_address": {"address1": "6 Liberty Square", "address2": "12", "city": "Boston", "company": "", "country": "United States", "first_name": "Kevin", "last_name": "Bacon", "phone": "+16175550124", "province": "Massachusetts", "zip": "02109"}, "client_details": {"browser_ip": "188.163.104.29", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"}, "created_at": "2021-05-13T07:33:04", "currency": "USD", "customer_hash": "bdfac1e99b8dc2b0", "customer_id": 64965464, "discount_codes": null, "email": "bacon_kev@example.com", "first_name": "Kevin", "has_uncommited_changes": false, "id": 387414101, "last_name": "Bacon", "line_items": [{"images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/c_black1_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/c_black1_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/c_black1.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/c_black1_small.jpg"}, "price": "28.5", "properties": [], "quantity": 1, "shopify_product_id": 6644278001835, "shopify_variant_id": 39696660332715, "sku": null, "subscription_id": 153612006, "tax_lines": [], "title": "I Make Beats Wool Blend Snapback", "type": "SUBSCRIPTION", "variant_title": "One Size / Black"}], "note": null, "note_attributes": null, "processed_at": "2021-05-13T11:32:53", "processor_name": "shopify_payments", "scheduled_at": "2021-05-13T00:00:00", "shipments_count": null, "shipping_address": {"address1": "6 Liberty Square", "address2": "12", "city": "Boston", "company": "", "country": "United States", "first_name": "Kevin", "last_name": "Bacon", "phone": "+16175550124", "province": "Massachusetts", "zip": "02109"}, "shipping_lines": [{"code": "Economy", "description": "", "price": 4.9, "source": "", "tax_lines": [], "title": "Economy"}], "shopify_order_id": "3787421647019", "status": "SUCCESS", "sub_total": null, "subtotal_price": "28.5", "tags": null, "tax_lines": "0", "total_discounts": "0", "total_duties": null, "total_line_items_price": "28.5", "total_price": "33.40", "total_refunds": null, "total_tax": "0", "total_weight": 0, "transaction_id": "Shopify Checkout", "type": "CHECKOUT", "updated_at": "2022-03-18T19:54:35"}, "emitted_at": 1673893320504} -{"stream": "charges", "data": {"address_id": 69282975, "billing_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": "", "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "client_details": {"browser_ip": "188.163.104.29", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"}, "created_at": "2021-05-13T05:46:49", "currency": "USD", "customer_hash": "f99bd4a6877257af", "customer_id": 64962974, "discount_codes": null, "email": "kozakevich_k@example.com", "first_name": "Kelly", "has_uncommited_changes": false, "id": 387392771, "last_name": "Kozakevich", "line_items": [{"images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.3", "properties": [], "quantity": 1, "shopify_product_id": 6642695864491, "shopify_variant_id": 39684723835051, "sku": null, "subscription_id": 153601366, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "L / City Green"}], "note": null, "note_attributes": null, "processed_at": "2021-05-13T09:46:39", "processor_name": "shopify_payments", "scheduled_at": "2021-05-13T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": "", "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "shipping_lines": [{"code": "Economy", "description": "", "price": 4.9, "source": "", "tax_lines": [], "title": "Economy"}], "shopify_order_id": "3787335991467", "status": "SUCCESS", "sub_total": null, "subtotal_price": "24.3", "tags": null, "tax_lines": "0", "total_discounts": "0", "total_duties": null, "total_line_items_price": "24.3", "total_price": "29.20", "total_refunds": null, "total_tax": "0", "total_weight": 0, "transaction_id": "Shopify Checkout", "type": "CHECKOUT", "updated_at": "2022-03-18T19:54:36"}, "emitted_at": 1673893320506} -{"stream": "charges", "data": {"address_id": 69105381, "analytics_data": {"utm_params": []}, "billing_address": {"address1": "1 9th Ave", "address2": "1", "city": "San Francisco", "company": null, "country": "United States", "first_name": "Karina", "last_name": "Kuznetsova", "phone": null, "province": "California", "zip": "94118"}, "client_details": {"browser_ip": null, "user_agent": null}, "created_at": "2021-05-12T08:04:07", "currency": "USD", "customer_hash": "23dee52d73734a81", "customer_id": 64817252, "discount_codes": [], "email": "nikolaevaka@yahoo.com", "error": "None\r\n [May 12, 12:06AM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [May 13, 4:10PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [May 19, 4:10PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [May 25, 4:10PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [May 31, 4:09PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [Jun 06, 4:10PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']", "error_type": "CLOSED_MAX_RETRIES_REACHED", "first_name": "Karina", "has_uncommited_changes": false, "id": 386976088, "last_charge_attempt_date": "2022-06-06T16:10:19", "last_name": "Kuznetsova", "line_items": [{"grams": 0, "images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.30", "properties": [], "quantity": 1, "shopify_product_id": "6642695864491", "shopify_variant_id": "39684722131115", "sku": "T1", "subscription_id": 153224593, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "S / Black", "vendor": "Airbyte"}], "note": "", "note_attributes": null, "number_times_tried": 6, "processor_name": "shopify_payments", "retry_date": "2022-06-12T00:00:00", "scheduled_at": "2022-05-12T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1 9th Ave", "address2": "1", "city": "San Francisco", "company": null, "country": "United States", "first_name": "Jane", "last_name": "Doe", "phone": "1234567890", "province": "California", "zip": "94118"}, "shipping_lines": [{"code": "Economy", "description": "", "price": 4.9, "source": "shopify", "tax_lines": [], "title": "Economy"}], "shopify_order_id": null, "shopify_variant_id_not_found": null, "status": "ERROR", "sub_total": null, "subtotal_price": "24.3", "tags": "Subscription, Subscription Recurring Order", "tax_lines": "0.0", "total_discounts": "0.00", "total_duties": 0.0, "total_line_items_price": "24.30", "total_price": "29.20", "total_refunds": null, "total_tax": "0.0", "total_weight": 0, "transaction_id": null, "type": "RECURRING", "updated_at": "2023-01-16T13:08:54"}, "emitted_at": 1673893320507} -{"stream": "charges", "data": {"address_id": 69282975, "analytics_data": {"utm_params": []}, "billing_address": {"address1": "1921 W Wilson St", "address2": null, "city": "Batavia", "company": null, "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "client_details": {"browser_ip": null, "user_agent": null}, "created_at": "2021-05-13T05:46:47", "currency": "USD", "customer_hash": "f99bd4a6877257af", "customer_id": 64962974, "discount_codes": null, "email": "kozakevich_k@example.com", "first_name": "Kelly", "has_uncommited_changes": false, "id": 387392762, "last_name": "Kozakevich", "line_items": [{"images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.3", "properties": [], "quantity": 1, "shopify_product_id": 6642695864491, "shopify_variant_id": 39684723835051, "sku": "T3", "subscription_id": 153601366, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "L / City Green"}], "note": null, "note_attributes": [], "processed_at": "2022-05-13T00:07:39", "processor_name": "shopify_payments", "scheduled_at": "2022-05-13T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": null, "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "shipping_lines": [{"code": "Economy", "description": "", "price": "4.90", "source": "Subscription", "tax_lines": [], "title": "Economy"}], "shopify_order_id": "4387657613483", "status": "SUCCESS", "sub_total": null, "subtotal_price": "24.3", "tags": "", "tax_lines": "0", "total_discounts": "0.0", "total_duties": null, "total_line_items_price": "24.3", "total_price": "29.20", "total_refunds": null, "total_tax": "0", "total_weight": 0, "transaction_id": "4857856171", "type": "RECURRING", "updated_at": "2022-05-13T00:07:39"}, "emitted_at": 1673893320509} -{"stream": "charges", "data": {"address_id": 69282975, "analytics_data": {"utm_params": []}, "billing_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": null, "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "client_details": {"browser_ip": null, "user_agent": null}, "created_at": "2022-05-13T00:07:39", "currency": "USD", "customer_hash": "f99bd4a6877257af", "customer_id": 64962974, "discount_codes": [], "email": "kozakevich_k@example.com", "first_name": "Kelly", "has_uncommited_changes": false, "id": 580825303, "last_name": "Kozakevich", "line_items": [{"grams": 0, "images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.30", "properties": [], "quantity": 1, "shopify_product_id": "6642695864491", "shopify_variant_id": "39684723835051", "sku": "T3", "subscription_id": 153601366, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "L / City Green", "vendor": "Airbyte"}], "note": "", "note_attributes": null, "processor_name": "shopify_payments", "scheduled_at": "2023-05-13T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": null, "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "shipping_lines": [{"code": "Economy", "description": null, "price": "4.90", "source": "shopify", "tax_lines": [], "title": "Economy"}], "shopify_order_id": null, "status": "QUEUED", "sub_total": null, "subtotal_price": "24.3", "tags": "Subscription, Subscription Recurring Order", "tax_lines": "0.0", "total_discounts": "0.00", "total_duties": null, "total_line_items_price": "24.30", "total_price": "29.20", "total_refunds": null, "total_tax": "0.0", "total_weight": 0, "transaction_id": null, "type": "RECURRING", "updated_at": "2022-06-22T09:57:36"}, "emitted_at": 1673893320511} +{"stream": "charges", "data": {"address_id": 69105381, "billing_address": {"address1": "1 9th Ave", "address2": "1", "city": "San Francisco", "company": "", "country": "United States", "first_name": "Karina", "last_name": "Kuznetsova", "phone": null, "province": "California", "zip": "94118"}, "client_details": {"browser_ip": "188.163.104.29", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36"}, "created_at": "2021-05-12T08:04:10", "currency": "USD", "customer_hash": "23dee52d73734a81", "customer_id": 64817252, "discount_codes": null, "email": "nikolaevaka@yahoo.com", "first_name": "Karina", "has_uncommited_changes": false, "id": 386976096, "last_name": "Kuznetsova", "line_items": [{"images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.3", "properties": [], "quantity": 1, "shopify_product_id": 6642695864491, "shopify_variant_id": 39684722131115, "sku": null, "subscription_id": 153224593, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "S / Black"}], "note": null, "note_attributes": null, "processed_at": "2021-05-12T12:03:59", "processor_name": "shopify_payments", "requires_shipping": true, "scheduled_at": "2021-05-12T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1 9th Ave", "address2": "1", "city": "San Francisco", "company": "", "country": "United States", "first_name": "Karina", "last_name": "Kuznetsova", "phone": null, "province": "California", "zip": "94118"}, "shipping_lines": [{"code": "Economy", "description": "", "price": 4.9, "source": "", "tax_lines": [], "title": "Economy"}], "shopify_order_id": "3785952133291", "status": "SUCCESS", "sub_total": null, "subtotal_price": "24.3", "tags": null, "tax_lines": "0", "total_discounts": "0", "total_duties": null, "total_line_items_price": "24.3", "total_price": "29.20", "total_refunds": null, "total_tax": "0", "total_weight": 0, "transaction_id": "Shopify Checkout", "type": "CHECKOUT", "updated_at": "2022-03-18T19:55:18"}, "emitted_at": 1674494648028} +{"stream": "charges", "data": {"address_id": 69286278, "billing_address": {"address1": "6 Liberty Square", "address2": "12", "city": "Boston", "company": "", "country": "United States", "first_name": "Kevin", "last_name": "Bacon", "phone": "+16175550124", "province": "Massachusetts", "zip": "02109"}, "client_details": {"browser_ip": "188.163.104.29", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"}, "created_at": "2021-05-13T07:33:04", "currency": "USD", "customer_hash": "bdfac1e99b8dc2b0", "customer_id": 64965464, "discount_codes": null, "email": "bacon_kev@example.com", "first_name": "Kevin", "has_uncommited_changes": false, "id": 387414101, "last_name": "Bacon", "line_items": [{"images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/c_black1_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/c_black1_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/c_black1.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/c_black1_small.jpg"}, "price": "28.5", "properties": [], "quantity": 1, "shopify_product_id": 6644278001835, "shopify_variant_id": 39696660332715, "sku": null, "subscription_id": 153612006, "tax_lines": [], "title": "I Make Beats Wool Blend Snapback", "type": "SUBSCRIPTION", "variant_title": "One Size / Black"}], "note": null, "note_attributes": null, "processed_at": "2021-05-13T11:32:53", "processor_name": "shopify_payments", "requires_shipping": true, "scheduled_at": "2021-05-13T00:00:00", "shipments_count": null, "shipping_address": {"address1": "6 Liberty Square", "address2": "12", "city": "Boston", "company": "", "country": "United States", "first_name": "Kevin", "last_name": "Bacon", "phone": "+16175550124", "province": "Massachusetts", "zip": "02109"}, "shipping_lines": [{"code": "Economy", "description": "", "price": 4.9, "source": "", "tax_lines": [], "title": "Economy"}], "shopify_order_id": "3787421647019", "status": "SUCCESS", "sub_total": null, "subtotal_price": "28.5", "tags": null, "tax_lines": "0", "total_discounts": "0", "total_duties": null, "total_line_items_price": "28.5", "total_price": "33.40", "total_refunds": null, "total_tax": "0", "total_weight": 0, "transaction_id": "Shopify Checkout", "type": "CHECKOUT", "updated_at": "2022-03-18T19:54:35"}, "emitted_at": 1674494648029} +{"stream": "charges", "data": {"address_id": 69282975, "billing_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": "", "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "client_details": {"browser_ip": "188.163.104.29", "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36"}, "created_at": "2021-05-13T05:46:49", "currency": "USD", "customer_hash": "f99bd4a6877257af", "customer_id": 64962974, "discount_codes": null, "email": "kozakevich_k@example.com", "first_name": "Kelly", "has_uncommited_changes": false, "id": 387392771, "last_name": "Kozakevich", "line_items": [{"images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.3", "properties": [], "quantity": 1, "shopify_product_id": 6642695864491, "shopify_variant_id": 39684723835051, "sku": null, "subscription_id": 153601366, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "L / City Green"}], "note": null, "note_attributes": null, "processed_at": "2021-05-13T09:46:39", "processor_name": "shopify_payments", "requires_shipping": true, "scheduled_at": "2021-05-13T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": "", "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "shipping_lines": [{"code": "Economy", "description": "", "price": 4.9, "source": "", "tax_lines": [], "title": "Economy"}], "shopify_order_id": "3787335991467", "status": "SUCCESS", "sub_total": null, "subtotal_price": "24.3", "tags": null, "tax_lines": "0", "total_discounts": "0", "total_duties": null, "total_line_items_price": "24.3", "total_price": "29.20", "total_refunds": null, "total_tax": "0", "total_weight": 0, "transaction_id": "Shopify Checkout", "type": "CHECKOUT", "updated_at": "2022-03-18T19:54:36"}, "emitted_at": 1674494648029} +{"stream": "charges", "data": {"address_id": 69105381, "analytics_data": {"utm_params": []}, "billing_address": {"address1": "1 9th Ave", "address2": "1", "city": "San Francisco", "company": null, "country": "United States", "first_name": "Karina", "last_name": "Kuznetsova", "phone": null, "province": "California", "zip": "94118"}, "client_details": {"browser_ip": null, "user_agent": null}, "created_at": "2021-05-12T08:04:07", "currency": "USD", "customer_hash": "23dee52d73734a81", "customer_id": 64817252, "discount_codes": [], "email": "nikolaevaka@yahoo.com", "error": "None\r\n [May 12, 12:06AM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [May 13, 4:10PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [May 19, 4:10PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [May 25, 4:10PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [May 31, 4:09PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']\r\n [Jun 06, 4:10PM] ['Inventory unavailable S / Black T1 6642695864491 requested qty. 1, inventory was: -1']", "error_type": "CLOSED_MAX_RETRIES_REACHED", "first_name": "Karina", "has_uncommited_changes": false, "id": 386976088, "last_charge_attempt_date": "2022-06-06T16:10:19", "last_name": "Kuznetsova", "line_items": [{"grams": 0, "images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.30", "properties": [], "quantity": 1, "shopify_product_id": "6642695864491", "shopify_variant_id": "39684722131115", "sku": "T1", "subscription_id": 153224593, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "S / Black", "vendor": "Airbyte"}], "note": "", "note_attributes": null, "number_times_tried": 6, "processor_name": "shopify_payments", "requires_shipping": true, "retry_date": "2022-06-12T00:00:00", "scheduled_at": "2022-05-12T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1 9th Ave", "address2": "1", "city": "San Francisco", "company": null, "country": "United States", "first_name": "Jane", "last_name": "Doe", "phone": "1234567890", "province": "California", "zip": "94118"}, "shipping_lines": [{"code": "Economy", "description": "", "price": 4.9, "source": "shopify", "tax_lines": [], "title": "Economy"}], "shopify_order_id": null, "shopify_variant_id_not_found": null, "status": "ERROR", "sub_total": null, "subtotal_price": "24.3", "tags": "Subscription, Subscription Recurring Order", "tax_lines": "0.0", "total_discounts": "0.00", "total_duties": 0.0, "total_line_items_price": "24.30", "total_price": "29.20", "total_refunds": null, "total_tax": "0.0", "total_weight": 0, "transaction_id": null, "type": "RECURRING", "updated_at": "2023-01-16T13:08:54"}, "emitted_at": 1674494648030} +{"stream": "charges", "data": {"address_id": 69282975, "analytics_data": {"utm_params": []}, "billing_address": {"address1": "1921 W Wilson St", "address2": null, "city": "Batavia", "company": null, "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "client_details": {"browser_ip": null, "user_agent": null}, "created_at": "2021-05-13T05:46:47", "currency": "USD", "customer_hash": "f99bd4a6877257af", "customer_id": 64962974, "discount_codes": null, "email": "kozakevich_k@example.com", "first_name": "Kelly", "has_uncommited_changes": false, "id": 387392762, "last_name": "Kozakevich", "line_items": [{"images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.3", "properties": [], "quantity": 1, "shopify_product_id": 6642695864491, "shopify_variant_id": 39684723835051, "sku": "T3", "subscription_id": 153601366, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "L / City Green"}], "note": null, "note_attributes": [], "processed_at": "2022-05-13T00:07:39", "processor_name": "shopify_payments", "requires_shipping": true, "scheduled_at": "2022-05-13T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": null, "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "shipping_lines": [{"code": "Economy", "description": "", "price": "4.90", "source": "Subscription", "tax_lines": [], "title": "Economy"}], "shopify_order_id": "4387657613483", "status": "SUCCESS", "sub_total": null, "subtotal_price": "24.3", "tags": "", "tax_lines": "0", "total_discounts": "0.0", "total_duties": null, "total_line_items_price": "24.3", "total_price": "29.20", "total_refunds": null, "total_tax": "0", "total_weight": 0, "transaction_id": "4857856171", "type": "RECURRING", "updated_at": "2022-05-13T00:07:39"}, "emitted_at": 1674494648031} +{"stream": "charges", "data": {"address_id": 69282975, "analytics_data": {"utm_params": []}, "billing_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": null, "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "client_details": {"browser_ip": null, "user_agent": null}, "created_at": "2022-05-13T00:07:39", "currency": "USD", "customer_hash": "f99bd4a6877257af", "customer_id": 64962974, "discount_codes": [], "email": "kozakevich_k@example.com", "first_name": "Kelly", "has_uncommited_changes": false, "id": 580825303, "last_name": "Kozakevich", "line_items": [{"grams": 0, "images": {"large": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_large.jpg", "medium": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_medium.jpg", "original": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581.jpg", "small": "https://cdn.shopify.com/s/files/1/0565/0628/6251/products/t_neon_green_47f548d4-fda5-4e21-8066-1d4caadbe581_small.jpg"}, "price": "24.30", "properties": [], "quantity": 1, "shopify_product_id": "6642695864491", "shopify_variant_id": "39684723835051", "sku": "T3", "subscription_id": 153601366, "tax_lines": [], "title": "Airbit Box Corner Short sleeve t-shirt", "type": "SUBSCRIPTION", "variant_title": "L / City Green", "vendor": "Airbyte"}], "note": "", "note_attributes": null, "processor_name": "shopify_payments", "requires_shipping": true, "scheduled_at": "2023-05-13T00:00:00", "shipments_count": null, "shipping_address": {"address1": "1921 W Wilson St", "address2": "", "city": "Batavia", "company": null, "country": "United States", "first_name": "Kelly", "last_name": "Kozakevich", "phone": "+16145550188", "province": "Illinois", "zip": "60510"}, "shipping_lines": [{"code": "Economy", "description": null, "price": "4.90", "source": "shopify", "tax_lines": [], "title": "Economy"}], "shopify_order_id": null, "status": "QUEUED", "sub_total": null, "subtotal_price": "24.3", "tags": "Subscription, Subscription Recurring Order", "tax_lines": "0.0", "total_discounts": "0.00", "total_duties": null, "total_line_items_price": "24.30", "total_price": "29.20", "total_refunds": null, "total_tax": "0.0", "total_weight": 0, "transaction_id": null, "type": "RECURRING", "updated_at": "2022-06-22T09:57:36"}, "emitted_at": 1674494648032} {"stream": "customers", "data": {"accepts_marketing": null, "analytics_data": {"utm_params": []}, "billing_address1": "6 Liberty Square", "billing_address2": "12", "billing_city": "Boston", "billing_company": null, "billing_country": "United States", "billing_phone": "+16175550124", "billing_province": "Massachusetts", "billing_zip": "02109", "created_at": "2021-05-13T07:32:59", "email": "bacon_kev@example.com", "first_charge_processed_at": "2021-05-13T11:32:53", "first_name": "Kevin", "has_card_error_in_dunning": false, "has_valid_payment_method": true, "hash": "bdfac1e99b8dc2b0", "id": 64965464, "last_name": "Bacon", "number_active_subscriptions": 0, "number_subscriptions": 1, "phone": "+16175550124", "processor_type": "shopify_payments", "reason_payment_method_not_valid": null, "shopify_customer_id": "5213438017707", "status": "ACTIVE", "tax_exempt": false, "updated_at": "2022-07-25T02:23:18"}, "emitted_at": 1673893321011} {"stream": "customers", "data": {"accepts_marketing": 1, "analytics_data": {"utm_params": []}, "billing_address1": "1921 W Wilson St", "billing_address2": "", "billing_city": "Batavia", "billing_company": null, "billing_country": "United States", "billing_phone": "+16145550188", "billing_province": "Illinois", "billing_zip": "60510", "created_at": "2021-05-13T05:46:44", "email": "kozakevich_k@example.com", "first_charge_processed_at": "2021-05-13T09:46:39", "first_name": "Kelly", "has_card_error_in_dunning": false, "has_valid_payment_method": true, "hash": "f99bd4a6877257af", "id": 64962974, "last_name": "Kozakevich", "number_active_subscriptions": 1, "number_subscriptions": 1, "phone": "+16145550188", "processor_type": "shopify_payments", "reason_payment_method_not_valid": null, "shopify_customer_id": "5213433266347", "status": "ACTIVE", "tax_exempt": false, "updated_at": "2022-07-25T02:23:18"}, "emitted_at": 1673893321012} {"stream": "customers", "data": {"accepts_marketing": 1, "analytics_data": {"utm_params": []}, "billing_address1": "1 9th Ave", "billing_address2": "1", "billing_city": "San Francisco", "billing_company": null, "billing_country": "United States", "billing_phone": null, "billing_province": "California", "billing_zip": "94118", "created_at": "2021-05-12T08:04:06", "email": "nikolaevaka@yahoo.com", "first_charge_processed_at": "2021-05-12T12:03:59", "first_name": "Karina", "has_card_error_in_dunning": false, "has_valid_payment_method": true, "hash": "23dee52d73734a81", "id": 64817252, "last_name": "Kuznetsova", "number_active_subscriptions": 0, "number_subscriptions": 1, "phone": null, "processor_type": "shopify_payments", "reason_payment_method_not_valid": null, "shopify_customer_id": "5212085977259", "status": "ACTIVE", "tax_exempt": false, "updated_at": "2023-01-16T13:08:45"}, "emitted_at": 1673893321013} diff --git a/airbyte-integrations/connectors/source-recharge/source_recharge/api.py b/airbyte-integrations/connectors/source-recharge/source_recharge/api.py index 73627d359a7f7..bff8cf65247f4 100644 --- a/airbyte-integrations/connectors/source-recharge/source_recharge/api.py +++ b/airbyte-integrations/connectors/source-recharge/source_recharge/api.py @@ -8,6 +8,7 @@ import pendulum import requests +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer @@ -28,6 +29,10 @@ class RechargeStream(HttpStream, ABC): def data_path(self): return self.name + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def path( self, stream_state: Mapping[str, Any] = None, stream_slice: Mapping[str, Any] = None, next_page_token: Mapping[str, Any] = None ) -> str: diff --git a/airbyte-integrations/connectors/source-recreation/source_recreation/recreation.yaml b/airbyte-integrations/connectors/source-recreation/source_recreation/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-recreation/source_recreation/recreation.yaml rename to airbyte-integrations/connectors/source-recreation/source_recreation/manifest.yaml diff --git a/airbyte-integrations/connectors/source-recreation/source_recreation/source.py b/airbyte-integrations/connectors/source-recreation/source_recreation/source.py index 2b4ac4c5331ba..8addd6dee2f54 100644 --- a/airbyte-integrations/connectors/source-recreation/source_recreation/source.py +++ b/airbyte-integrations/connectors/source-recreation/source_recreation/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceRecreation(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "recreation.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-recruitee/source_recruitee/recruitee.yaml b/airbyte-integrations/connectors/source-recruitee/source_recruitee/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-recruitee/source_recruitee/recruitee.yaml rename to airbyte-integrations/connectors/source-recruitee/source_recruitee/manifest.yaml diff --git a/airbyte-integrations/connectors/source-recruitee/source_recruitee/source.py b/airbyte-integrations/connectors/source-recruitee/source_recruitee/source.py index b5bde6d0ffe55..54d37b9a0cd12 100644 --- a/airbyte-integrations/connectors/source-recruitee/source_recruitee/source.py +++ b/airbyte-integrations/connectors/source-recruitee/source_recruitee/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceRecruitee(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "recruitee.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) 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 8e2fbfa55f251..dd724538d47fc 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 @@ -186,7 +186,6 @@ private void validateCursorFieldForIncrementalTables( final Database database) throws SQLException { final List tablesWithInvalidCursor = new ArrayList<>(); - final List tablesWithInvalidCursorToWarnAbout = new ArrayList<>(); for (final ConfiguredAirbyteStream airbyteStream : catalog.getStreams()) { final AirbyteStream stream = airbyteStream.getStream(); final String fullyQualifiedTableName = getFullyQualifiedTableName(stream.getNamespace(), @@ -219,16 +218,12 @@ private void validateCursorFieldForIncrementalTables( } if (!verifyCursorColumnValues(database, stream.getNamespace(), stream.getName(), cursorField.get())) { - tablesWithInvalidCursorToWarnAbout.add( + tablesWithInvalidCursor.add( new InvalidCursorInfo(fullyQualifiedTableName, cursorField.get(), cursorType.toString(), "Cursor column contains NULL value")); } } - if (!tablesWithInvalidCursorToWarnAbout.isEmpty()) { - LOGGER.warn("source-postgres detected null cursor value " + InvalidCursorInfoUtil.getInvalidCursorConfigMessage(tablesWithInvalidCursor)); - } - if (!tablesWithInvalidCursor.isEmpty()) { throw new ConfigErrorException( InvalidCursorInfoUtil.getInvalidCursorConfigMessage(tablesWithInvalidCursor)); diff --git a/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/StateDecoratingIterator.java b/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/StateDecoratingIterator.java index 8dc663709a432..9c092dbae5178 100644 --- a/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/StateDecoratingIterator.java +++ b/airbyte-integrations/connectors/source-relational-db/src/main/java/io/airbyte/integrations/source/relationaldb/StateDecoratingIterator.java @@ -88,7 +88,14 @@ public StateDecoratingIterator(final Iterator messageIterator, private String getCursorCandidate(final AirbyteMessage message) { final String cursorCandidate = message.getRecord().getData().get(cursorField).asText(); - return (cursorCandidate != null ? cursorCandidate.replaceAll("\u0000", "") : null); + return (cursorCandidate != null ? replaceNull(cursorCandidate) : null); + } + + private String replaceNull(final String cursorCandidate) { + if (cursorCandidate.contains("\u0000")) { + return cursorCandidate.replaceAll("\u0000", ""); + } + return cursorCandidate; } /** diff --git a/airbyte-integrations/connectors/source-reply-io/source_reply_io/reply_io.yaml b/airbyte-integrations/connectors/source-reply-io/source_reply_io/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-reply-io/source_reply_io/reply_io.yaml rename to airbyte-integrations/connectors/source-reply-io/source_reply_io/manifest.yaml diff --git a/airbyte-integrations/connectors/source-reply-io/source_reply_io/source.py b/airbyte-integrations/connectors/source-reply-io/source_reply_io/source.py index 98b37e1deb955..9102e92dcc6f3 100644 --- a/airbyte-integrations/connectors/source-reply-io/source_reply_io/source.py +++ b/airbyte-integrations/connectors/source-reply-io/source_reply_io/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceReplyIo(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "reply_io.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-rocket-chat/source_rocket_chat/rocket_chat.yaml b/airbyte-integrations/connectors/source-rocket-chat/source_rocket_chat/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-rocket-chat/source_rocket_chat/rocket_chat.yaml rename to airbyte-integrations/connectors/source-rocket-chat/source_rocket_chat/manifest.yaml diff --git a/airbyte-integrations/connectors/source-rocket-chat/source_rocket_chat/source.py b/airbyte-integrations/connectors/source-rocket-chat/source_rocket_chat/source.py index 9339ecbdb6ccc..03d19a031717a 100644 --- a/airbyte-integrations/connectors/source-rocket-chat/source_rocket_chat/source.py +++ b/airbyte-integrations/connectors/source-rocket-chat/source_rocket_chat/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceRocketChat(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "rocket_chat.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-s3/Dockerfile b/airbyte-integrations/connectors/source-s3/Dockerfile index 5483d35fd9f47..0e03ad049bbca 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=0.1.28 +LABEL io.airbyte.version=0.1.30 LABEL io.airbyte.name=airbyte/source-s3 diff --git a/airbyte-integrations/connectors/source-s3/acceptance-test-config.yml b/airbyte-integrations/connectors/source-s3/acceptance-test-config.yml index 28bd1af6a7ae7..95de536ab6f5e 100644 --- a/airbyte-integrations/connectors/source-s3/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-s3/acceptance-test-config.yml @@ -1,148 +1,132 @@ -# 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-s3:dev -tests: +test_strictness_level: high +acceptance_tests: spec: - - spec_path: "integration_tests/spec.json" - backward_compatibility_tests_config: - disable_for_version: "0.1.26" + tests: + - backward_compatibility_tests_config: + # skip because allOf gets converted into enum + disable_for_version: 0.1.29 + spec_path: integration_tests/spec.json + connection: - # for CSV format - - config_path: "secrets/config.json" - status: "succeed" - # for Parquet format - - config_path: "secrets/parquet_config.json" - status: "succeed" - # # for Avro format - - config_path: "secrets/avro_config.json" - status: - "succeed" - # for JSON format - - config_path: "secrets/jsonl_config.json" - status: "succeed" - - config_path: "secrets/jsonl_newlines_config.json" - status: "succeed" - # for custom server - - config_path: "integration_tests/config_minio.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" + tests: + - config_path: secrets/config.json + status: succeed + - config_path: secrets/parquet_config.json + status: succeed + - config_path: secrets/avro_config.json + status: succeed + - config_path: secrets/jsonl_config.json + status: succeed + - config_path: secrets/jsonl_newlines_config.json + status: succeed + - config_path: integration_tests/config_minio.json + status: succeed + - config_path: integration_tests/invalid_config.json + status: failed + discovery: - # for CSV format - - config_path: "secrets/config.json" - # for Parquet format - - config_path: "secrets/parquet_config.json" - # for Avro format - - config_path: "secrets/avro_config.json" - # for JSON format - - config_path: "secrets/jsonl_config.json" - - config_path: "secrets/jsonl_newlines_config.json" - # for custom server - - config_path: "integration_tests/config_minio.json" + tests: + - config_path: secrets/config.json + - config_path: secrets/parquet_config.json + - config_path: secrets/avro_config.json + - config_path: secrets/jsonl_config.json + - config_path: secrets/jsonl_newlines_config.json + - config_path: integration_tests/config_minio.json + basic_read: - # for CSV format - - config_path: "secrets/config.json" - timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/csv.json" + tests: + - config_path: secrets/config.json expect_records: - path: "integration_tests/expected_records/csv.jsonl" - # for Parquet format - - config_path: "secrets/parquet_config.json" + path: integration_tests/expected_records/csv.jsonl timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/parquet.json" + - config_path: secrets/parquet_config.json expect_records: - path: "integration_tests/expected_records/parquet.jsonl" - # for Avro format - - config_path: "secrets/avro_config.json" + path: integration_tests/expected_records/parquet.jsonl timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/avro.json" + - config_path: secrets/avro_config.json expect_records: - path: "integration_tests/expected_records/avro.jsonl" - # for JSONL format - - config_path: "secrets/jsonl_config.json" + path: integration_tests/expected_records/avro.jsonl timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/jsonl.json" + - config_path: secrets/jsonl_config.json expect_records: - path: "integration_tests/expected_records/jsonl.jsonl" - - config_path: "secrets/jsonl_newlines_config.json" + path: integration_tests/expected_records/jsonl.jsonl timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/jsonl.json" + - config_path: secrets/jsonl_newlines_config.json expect_records: - path: "integration_tests/expected_records/jsonl_newlines.jsonl" - # for custom server - - config_path: "integration_tests/config_minio.json" - timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/csv.json" - # expected records contains _ab_source_file_last_modified property which - # is modified all the time s3 file changed and for custom server it is - # file creating date and it always new. Uncomment this line when SAT - # would have ability to ignore specific fields from expected records. - # expect_records: - # path: "integration_tests/expected_records/custom_server.jsonl" - incremental: - # for CSV format - - config_path: "secrets/config.json" + path: integration_tests/expected_records/jsonl_newlines.jsonl timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/csv.json" - cursor_paths: - test: ["_ab_source_file_last_modified"] - future_state_path: "integration_tests/abnormal_state.json" - # for Parquet format - - config_path: "secrets/parquet_config.json" +# - config_path: integration_tests/config_minio.json +# timeout_seconds: 1800 + + full_refresh: + tests: + - config_path: secrets/config.json + configured_catalog_path: integration_tests/configured_catalogs/csv.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/parquet.json" - cursor_paths: - test: ["_ab_source_file_last_modified"] - future_state_path: "integration_tests/abnormal_state.json" - # for Avro format - - config_path: "secrets/avro_config.json" + - config_path: secrets/parquet_config.json + configured_catalog_path: integration_tests/configured_catalogs/parquet.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/avro.json" - cursor_paths: - test: ["_ab_source_file_last_modified"] - future_state_path: "integration_tests/abnormal_state.json" - # for JSON format - - config_path: "secrets/jsonl_config.json" + - config_path: secrets/avro_config.json + configured_catalog_path: integration_tests/configured_catalogs/avro.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/jsonl.json" - cursor_paths: - test: ["_ab_source_file_last_modified"] - future_state_path: "integration_tests/abnormal_state.json" - - config_path: "secrets/jsonl_newlines_config.json" + - config_path: secrets/jsonl_config.json + configured_catalog_path: integration_tests/configured_catalogs/jsonl.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/jsonl.json" - cursor_paths: - test: ["_ab_source_file_last_modified"] - future_state_path: "integration_tests/abnormal_state.json" - # for custom server - - config_path: "integration_tests/config_minio.json" + - config_path: secrets/jsonl_newlines_config.json + configured_catalog_path: integration_tests/configured_catalogs/jsonl.json + timeout_seconds: 1800 + - config_path: integration_tests/config_minio.json + configured_catalog_path: integration_tests/configured_catalogs/csv.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/csv.json" - cursor_paths: - test: ["_ab_source_file_last_modified"] - future_state_path: "integration_tests/abnormal_state.json" - full_refresh: - # for CSV format - - config_path: "secrets/config.json" + incremental: + tests: + - config_path: secrets/config.json + configured_catalog_path: integration_tests/configured_catalogs/csv.json + cursor_paths: + test: + - _ab_source_file_last_modified + future_state: + future_state_path: integration_tests/abnormal_state.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/csv.json" - # for Parquet format - - config_path: "secrets/parquet_config.json" + - config_path: secrets/parquet_config.json + configured_catalog_path: integration_tests/configured_catalogs/parquet.json + cursor_paths: + test: + - _ab_source_file_last_modified + future_state: + future_state_path: integration_tests/abnormal_state.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/parquet.json" - # for Avro format - - config_path: "secrets/avro_config.json" + - config_path: secrets/avro_config.json + configured_catalog_path: integration_tests/configured_catalogs/avro.json + cursor_paths: + test: + - _ab_source_file_last_modified + future_state: + future_state_path: integration_tests/abnormal_state.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/avro.json" - # for JSON format - - config_path: "secrets/jsonl_config.json" + - config_path: secrets/jsonl_config.json + configured_catalog_path: integration_tests/configured_catalogs/jsonl.json + cursor_paths: + test: + - _ab_source_file_last_modified + future_state: + future_state_path: integration_tests/abnormal_state.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/jsonl.json" - - config_path: "secrets/jsonl_newlines_config.json" + - config_path: secrets/jsonl_newlines_config.json + configured_catalog_path: integration_tests/configured_catalogs/jsonl.json + cursor_paths: + test: + - _ab_source_file_last_modified + future_state: + future_state_path: integration_tests/abnormal_state.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/jsonl.json" - # for custom server - - config_path: "integration_tests/config_minio.json" + - config_path: integration_tests/config_minio.json + configured_catalog_path: integration_tests/configured_catalogs/csv.json + cursor_paths: + test: + - _ab_source_file_last_modified + future_state: + future_state_path: integration_tests/abnormal_state.json timeout_seconds: 1800 - configured_catalog_path: "integration_tests/configured_catalogs/csv.json" diff --git a/airbyte-integrations/connectors/source-s3/acceptance-test-docker.sh b/airbyte-integrations/connectors/source-s3/acceptance-test-docker.sh old mode 100644 new mode 100755 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 c51152a102b0a..e085938750845 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.231.175:9000" + "endpoint": "http://10.0.40.43: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 8aa6266bd205d..c82b2d38c04af 100644 --- a/airbyte-integrations/connectors/source-s3/integration_tests/spec.json +++ b/airbyte-integrations/connectors/source-s3/integration_tests/spec.json @@ -186,14 +186,7 @@ "default": "infer", "examples": ["ignore", "infer", "error"], "order": 1, - "allOf": [ - { - "title": "UnexpectedFieldBehaviorEnum", - "description": "An enumeration.", - "enum": ["ignore", "infer", "error"], - "type": "string" - } - ] + "enum": ["ignore", "infer", "error"] }, "block_size": { "title": "Block Size", diff --git a/airbyte-integrations/connectors/source-s3/source_s3/s3file.py b/airbyte-integrations/connectors/source-s3/source_s3/s3file.py index b49bac2fef8f8..99b30fecc56f4 100644 --- a/airbyte-integrations/connectors/source-s3/source_s3/s3file.py +++ b/airbyte-integrations/connectors/source-s3/source_s3/s3file.py @@ -59,8 +59,17 @@ def open(self, binary: bool) -> Iterator[Union[TextIO, BinaryIO]]: config = ClientConfig(signature_version=UNSIGNED) params = {"client": make_s3_client(self._provider, config=config)} self.logger.debug(f"try to open {self.file_info}") - result = smart_open.open(f"s3://{bucket}/{self.url}", transport_params=params, mode=mode) - + # There are rare cases when some keys become unreachable during sync + # and we don't know about it, because catalog has been initially formed only once at the beginning + # This is happen for example if a file was deleted/moved (or anything else) while we proceed with another file + try: + result = smart_open.open(f"s3://{bucket}/{self.url}", transport_params=params, mode=mode) + except OSError as e: + self.logger.warn( + f"We don't have access to {self.url}. " + f"Check whether key {self.url} exists in `{bucket}` bucket and/or has proper ACL permissions" + ) + raise e # see https://docs.python.org/3/library/contextlib.html#contextlib.contextmanager for why we do this try: yield result diff --git a/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/spec.py b/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/spec.py index c1ffab7077cd3..680fcbb6fec7a 100644 --- a/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/spec.py +++ b/airbyte-integrations/connectors/source-s3/source_s3/source_files_abstract/spec.py @@ -87,6 +87,21 @@ def change_format_to_oneOf(schema: dict) -> dict: schema["properties"][prop]["oneOf"] = schema["properties"][prop].pop("anyOf") return schema + @staticmethod + def remove_enum_allOf(schema: dict) -> dict: + """ + allOfs are not supported by the UI, but pydantic is automatically writing them for enums. + Unpack them into the root + """ + objects_to_check = schema["properties"]["format"]["oneOf"] + for object in objects_to_check: + for key in object["properties"]: + property = object["properties"][key] + if "allOf" in property and "enum" in property["allOf"][0]: + property["enum"] = property["allOf"][0]["enum"] + property.pop("allOf") + return schema + @staticmethod def check_provider_added(schema: dict) -> None: if "provider" not in schema["properties"]: @@ -110,4 +125,5 @@ def schema(cls, *args: Any, **kwargs: Any) -> Dict[str, Any]: cls.check_provider_added(schema) schema = cls.change_format_to_oneOf(schema) schema = cls.resolve_refs(schema) + schema = cls.remove_enum_allOf(schema) return schema 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 bf20111ab53a5..939c1b6dd7dd1 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 @@ -230,9 +230,12 @@ def _get_master_schema(self, min_datetime: datetime = None) -> Dict[str, Any]: continue storagefile = self.storagefile_class(file_info, self._provider) - with storagefile.open(file_reader.is_binary) as f: - this_schema = file_reader.get_inferred_schema(f, file_info) - processed_files.append(file_info) + try: + with storagefile.open(file_reader.is_binary) as f: + this_schema = file_reader.get_inferred_schema(f, file_info) + processed_files.append(file_info) + except OSError: + continue if this_schema == master_schema: continue # exact schema match so go to next file @@ -348,18 +351,21 @@ def _read_from_slice( """ for file_item in stream_slice["files"]: storage_file: StorageFile = file_item["storage_file"] - with storage_file.open(file_reader.is_binary) as f: - # TODO: make this more efficient than mutating every record one-by-one as they stream - for record in file_reader.stream_records(f, storage_file.file_info): - schema_matched_record = self._match_target_schema(record, list(self._get_schema_map().keys())) - complete_record = self._add_extra_fields_from_map( - schema_matched_record, - { - self.ab_last_mod_col: datetime.strftime(storage_file.last_modified, self.datetime_format_string), - self.ab_file_name_col: storage_file.url, - }, - ) - yield complete_record + try: + with storage_file.open(file_reader.is_binary) as f: + # TODO: make this more efficient than mutating every record one-by-one as they stream + for record in file_reader.stream_records(f, storage_file.file_info): + schema_matched_record = self._match_target_schema(record, list(self._get_schema_map().keys())) + complete_record = self._add_extra_fields_from_map( + schema_matched_record, + { + self.ab_last_mod_col: datetime.strftime(storage_file.last_modified, self.datetime_format_string), + self.ab_file_name_col: storage_file.url, + }, + ) + yield complete_record + except OSError: + continue LOGGER.info("finished reading a stream slice") def read_records( diff --git a/airbyte-integrations/connectors/source-salesforce/Dockerfile b/airbyte-integrations/connectors/source-salesforce/Dockerfile index 6a43255b7a187..1080058850936 100644 --- a/airbyte-integrations/connectors/source-salesforce/Dockerfile +++ b/airbyte-integrations/connectors/source-salesforce/Dockerfile @@ -13,5 +13,5 @@ RUN pip install . ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.0.29 +LABEL io.airbyte.version=1.0.30 LABEL io.airbyte.name=airbyte/source-salesforce diff --git a/airbyte-integrations/connectors/source-salesforce/source_salesforce/streams.py b/airbyte-integrations/connectors/source-salesforce/source_salesforce/streams.py index fb5df8ee196e4..59b78b9a814aa 100644 --- a/airbyte-integrations/connectors/source-salesforce/source_salesforce/streams.py +++ b/airbyte-integrations/connectors/source-salesforce/source_salesforce/streams.py @@ -16,6 +16,7 @@ import requests # type: ignore[import] from airbyte_cdk.models import ConfiguredAirbyteCatalog, SyncMode from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer from numpy import nan @@ -60,6 +61,10 @@ def primary_key(self) -> Optional[Union[str, List[str], List[List[str]]]]: def url_base(self) -> str: return self.sf_api.instance_url + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def path(self, next_page_token: Mapping[str, Any] = None, **kwargs: Any) -> str: if next_page_token: """ diff --git a/airbyte-integrations/connectors/source-sap-fieldglass/source_sap_fieldglass/sap_fieldglass.yaml b/airbyte-integrations/connectors/source-sap-fieldglass/source_sap_fieldglass/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-sap-fieldglass/source_sap_fieldglass/sap_fieldglass.yaml rename to airbyte-integrations/connectors/source-sap-fieldglass/source_sap_fieldglass/manifest.yaml diff --git a/airbyte-integrations/connectors/source-sap-fieldglass/source_sap_fieldglass/source.py b/airbyte-integrations/connectors/source-sap-fieldglass/source_sap_fieldglass/source.py index 2c0741158432f..613eb3cea280f 100644 --- a/airbyte-integrations/connectors/source-sap-fieldglass/source_sap_fieldglass/source.py +++ b/airbyte-integrations/connectors/source-sap-fieldglass/source_sap_fieldglass/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSapFieldglass(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "sap_fieldglass.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-secoda/source_secoda/secoda.yaml b/airbyte-integrations/connectors/source-secoda/source_secoda/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-secoda/source_secoda/secoda.yaml rename to airbyte-integrations/connectors/source-secoda/source_secoda/manifest.yaml diff --git a/airbyte-integrations/connectors/source-secoda/source_secoda/source.py b/airbyte-integrations/connectors/source-secoda/source_secoda/source.py index b4cf6d6ce8617..159313cfbdcc8 100644 --- a/airbyte-integrations/connectors/source-secoda/source_secoda/source.py +++ b/airbyte-integrations/connectors/source-secoda/source_secoda/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSecoda(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "secoda.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-sendgrid/Dockerfile b/airbyte-integrations/connectors/source-sendgrid/Dockerfile index 9fb8c810bb2f4..e109ca825f665 100644 --- a/airbyte-integrations/connectors/source-sendgrid/Dockerfile +++ b/airbyte-integrations/connectors/source-sendgrid/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.2.16 +LABEL io.airbyte.version=0.3.0 LABEL io.airbyte.name=airbyte/source-sendgrid diff --git a/airbyte-integrations/connectors/source-sendgrid/acceptance-test-config.yml b/airbyte-integrations/connectors/source-sendgrid/acceptance-test-config.yml index f2fe28771e208..6b81ae9eb11c1 100644 --- a/airbyte-integrations/connectors/source-sendgrid/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-sendgrid/acceptance-test-config.yml @@ -2,6 +2,8 @@ connector_image: airbyte/source-sendgrid:dev tests: spec: - spec_path: "source_sendgrid/spec.json" + backward_compatibility_tests_config: + disable_for_version: "0.2.16" connection: - config_path: "secrets/config.json" status: "succeed" diff --git a/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/sendgrid.yaml b/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-sendgrid/source_sendgrid/sendgrid.yaml rename to airbyte-integrations/connectors/source-sendgrid/source_sendgrid/manifest.yaml diff --git a/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/spec.json b/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/spec.json index 214e5045dc404..cf97393ced641 100644 --- a/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/spec.json +++ b/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/spec.json @@ -16,7 +16,7 @@ }, "start_time": { "title": "Start time", - "type": ["integer", "string"], + "type": "string", "description": "Start time in ISO8601 format. Any data before this time point will not be replicated.", "examples": [ "2021-12-12", diff --git a/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/streams.py b/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/streams.py index fef1060c8ca52..74dfc9ab8f2ac 100644 --- a/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/streams.py +++ b/airbyte-integrations/connectors/source-sendgrid/source_sendgrid/streams.py @@ -5,7 +5,7 @@ import datetime import urllib from abc import ABC, abstractmethod -from typing import Any, Iterable, Mapping, MutableMapping, Optional, Union +from typing import Any, Iterable, Mapping, MutableMapping, Optional import pendulum import requests @@ -91,7 +91,7 @@ def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, class SendgridStreamIncrementalMixin(HttpStream, ABC): cursor_field = "created" - def __init__(self, start_time: Optional[Union[int, str]], **kwargs): + def __init__(self, start_time: Optional[str], **kwargs): super().__init__(**kwargs) self._start_time = start_time or 0 if isinstance(self._start_time, str): diff --git a/airbyte-integrations/connectors/source-sendgrid/unit_tests/unit_test.py b/airbyte-integrations/connectors/source-sendgrid/unit_tests/unit_test.py index cf8af51bfeb81..d322289b7a811 100644 --- a/airbyte-integrations/connectors/source-sendgrid/unit_tests/unit_test.py +++ b/airbyte-integrations/connectors/source-sendgrid/unit_tests/unit_test.py @@ -28,6 +28,7 @@ ) FAKE_NOW = pendulum.DateTime(2022, 1, 1, tzinfo=pendulum.timezone("utc")) +FAKE_NOW_ISO_STRING = FAKE_NOW.to_iso8601_string() @pytest.fixture(name="sendgrid_stream") @@ -59,7 +60,7 @@ def test_source_wrong_credentials(): def test_messages_stream_request_params(mock_pendulum_now): - start_time = 1558359830 + start_time = "2019-05-20T13:43:50.000Z" stream = Messages(start_time) state = {"last_event_time": 1558359000} request_params = stream.request_params(state) @@ -70,7 +71,7 @@ def test_messages_stream_request_params(mock_pendulum_now): def test_streams(): - streams = SourceSendgrid().streams(config={"apikey": "wrong.api.key123", "start_time": FAKE_NOW}) + streams = SourceSendgrid().streams(config={"apikey": "wrong.api.key123", "start_time": FAKE_NOW_ISO_STRING}) assert len(streams) == 15 @@ -89,10 +90,10 @@ def test_pagination(mocker): @patch.multiple(SendgridStreamIncrementalMixin, __abstractmethods__=set()) def test_stream_state(): - stream = SendgridStreamIncrementalMixin(start_time=FAKE_NOW) + stream = SendgridStreamIncrementalMixin(start_time=FAKE_NOW_ISO_STRING) state = {} request_params = stream.request_params(stream_state=state) - assert request_params == {"end_time": pendulum.now().int_timestamp, "start_time": FAKE_NOW} + assert request_params == {"end_time": pendulum.now().int_timestamp, "start_time": int(FAKE_NOW.timestamp())} @pytest.mark.parametrize( diff --git a/airbyte-integrations/connectors/source-sendinblue/source_sendinblue/sendinblue.yaml b/airbyte-integrations/connectors/source-sendinblue/source_sendinblue/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-sendinblue/source_sendinblue/sendinblue.yaml rename to airbyte-integrations/connectors/source-sendinblue/source_sendinblue/manifest.yaml diff --git a/airbyte-integrations/connectors/source-sendinblue/source_sendinblue/source.py b/airbyte-integrations/connectors/source-sendinblue/source_sendinblue/source.py index 924ae8ab35b46..8194ea23c3b06 100644 --- a/airbyte-integrations/connectors/source-sendinblue/source_sendinblue/source.py +++ b/airbyte-integrations/connectors/source-sendinblue/source_sendinblue/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSendinblue(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "sendinblue.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-senseforce/source_senseforce/senseforce.yaml b/airbyte-integrations/connectors/source-senseforce/source_senseforce/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-senseforce/source_senseforce/senseforce.yaml rename to airbyte-integrations/connectors/source-senseforce/source_senseforce/manifest.yaml diff --git a/airbyte-integrations/connectors/source-senseforce/source_senseforce/source.py b/airbyte-integrations/connectors/source-senseforce/source_senseforce/source.py index 26d5c1ee8bd1c..6d25203941c22 100644 --- a/airbyte-integrations/connectors/source-senseforce/source_senseforce/source.py +++ b/airbyte-integrations/connectors/source-senseforce/source_senseforce/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSenseforce(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "senseforce.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-sentry/Dockerfile b/airbyte-integrations/connectors/source-sentry/Dockerfile index c5f4badb669bb..d1e3bca98ce15 100644 --- a/airbyte-integrations/connectors/source-sentry/Dockerfile +++ b/airbyte-integrations/connectors/source-sentry/Dockerfile @@ -34,5 +34,5 @@ COPY source_sentry ./source_sentry ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.8 +LABEL io.airbyte.version=0.1.10 LABEL io.airbyte.name=airbyte/source-sentry 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 a616e5ece9766..0019855e9581d 100644 --- a/airbyte-integrations/connectors/source-sentry/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-sentry/integration_tests/expected_records.jsonl @@ -1,5 +1,5 @@ -{"stream": "events", "data": {"id": "b82cb40291414a90a5b3fb9fe0b646a9", "groupID": "3879509212", "eventID": "b82cb40291414a90a5b3fb9fe0b646a9", "projectID": "5942472", "size": 8070, "entries": [{"data": {"formatted": "This is an example Python exception"}, "type": "message"}, {"data": {"frames": [{"filename": "raven/base.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/base.py", "module": "raven.base", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "build_msg", "rawFunction": null, "symbol": null, "context": [[298, " frames = stack"], [299, ""], [300, " data.update({"], [301, " 'sentry.interfaces.Stacktrace': {"], [302, " 'frames': get_stack_info(frames,"], [303, " transformer=self.transform)"], [304, " },"], [305, " })"], [306, ""], [307, " if 'sentry.interfaces.Stacktrace' in data:"], [308, " if self.include_paths:"]], "lineNo": 303, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'culprit'": null, "'data'": {"'message'": "u'This is a test message generated using ``raven test``'", "'sentry.interfaces.Message'": {"'message'": "u'This is a test message generated using ``raven test``'", "'params'": []}}, "'date'": "datetime.datetime(2013, 8, 13, 3, 8, 24, 880386)", "'event_id'": "'54a322436e1b47b88e239b78998ae742'", "'event_type'": "'raven.events.Message'", "'extra'": {"'go_deeper'": [["{\"'bar'\":[\"'baz'\"],\"'foo'\":\"'bar'\"}"]], "'loadavg'": [0.37255859375, 0.5341796875, 0.62939453125], "'user'": "'dcramer'"}, "'frames'": "", "'handler'": "", "'k'": "'sentry.interfaces.Message'", "'kwargs'": {"'level'": 20, "'message'": "'This is a test message generated using ``raven test``'"}, "'public_key'": null, "'result'": {"'message'": "u'This is a test message generated using ``raven test``'", "'sentry.interfaces.Message'": {"'message'": "u'This is a test message generated using ``raven test``'", "'params'": []}}, "'self'": "", "'stack'": true, "'tags'": null, "'time_spent'": null, "'v'": {"'message'": "u'This is a test message generated using ``raven test``'", "'params'": []}}}, {"filename": "raven/base.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/base.py", "module": "raven.base", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "capture", "rawFunction": null, "symbol": null, "context": [[454, " if not self.is_enabled():"], [455, " return"], [456, ""], [457, " data = self.build_msg("], [458, " event_type, data, date, time_spent, extra, stack, tags=tags,"], [459, " **kwargs)"], [460, ""], [461, " self.send(**data)"], [462, ""], [463, " return (data.get('event_id'),)"], [464, ""]], "lineNo": 459, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'data'": null, "'date'": null, "'event_type'": "'raven.events.Message'", "'extra'": {"'go_deeper'": [["{\"'bar'\":[\"'baz'\"],\"'foo'\":\"'bar'\"}"]], "'loadavg'": [0.37255859375, 0.5341796875, 0.62939453125], "'user'": "'dcramer'"}, "'kwargs'": {"'level'": 20, "'message'": "'This is a test message generated using ``raven test``'"}, "'self'": "", "'stack'": true, "'tags'": null, "'time_spent'": null}}, {"filename": "raven/base.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/base.py", "module": "raven.base", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "captureMessage", "rawFunction": null, "symbol": null, "context": [[572, " \"\"\""], [573, " Creates an event from ``message``."], [574, ""], [575, " >>> client.captureMessage('My event just happened!')"], [576, " \"\"\""], [577, " return self.capture('raven.events.Message', message=message, **kwargs)"], [578, ""], [579, " def captureException(self, exc_info=None, **kwargs):"], [580, " \"\"\""], [581, " Creates an event from an exception."], [582, ""]], "lineNo": 577, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'kwargs'": {"'data'": null, "'extra'": {"'go_deeper'": ["[{\"'bar'\":[\"'baz'\"],\"'foo'\":\"'bar'\"}]"], "'loadavg'": [0.37255859375, 0.5341796875, 0.62939453125], "'user'": "'dcramer'"}, "'level'": 20, "'stack'": true, "'tags'": null}, "'message'": "'This is a test message generated using ``raven test``'", "'self'": ""}}, {"filename": "raven/scripts/runner.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/scripts/runner.py", "module": "raven.scripts.runner", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "send_test_message", "rawFunction": null, "symbol": null, "context": [[72, " level=logging.INFO,"], [73, " stack=True,"], [74, " tags=options.get('tags', {}),"], [75, " extra={"], [76, " 'user': get_uid(),"], [77, " 'loadavg': get_loadavg(),"], [78, " },"], [79, " ))"], [80, ""], [81, " if client.state.did_fail():"], [82, " print('error!')"]], "lineNo": 77, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'client'": "", "'data'": null, "'k'": "'secret_key'", "'options'": {"'data'": null, "'tags'": null}}}, {"filename": "raven/scripts/runner.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/scripts/runner.py", "module": "raven.scripts.runner", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "main", "rawFunction": null, "symbol": null, "context": [[107, " print(\"Using DSN configuration:\")"], [108, " print(\" \", dsn)"], [109, " print()"], [110, ""], [111, " client = Client(dsn, include_paths=['raven'])"], [112, " send_test_message(client, opts.__dict__)"]], "lineNo": 112, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'args'": ["'test'", "'https://ebc35f33e151401f9deac549978bda11:f3403f81e12e4c24942d505f086b2cad@sentry.io/1'"], "'client'": "", "'dsn'": "'https://ebc35f33e151401f9deac549978bda11:f3403f81e12e4c24942d505f086b2cad@sentry.io/1'", "'opts'": "", "'parser'": "", "'root'": ""}}], "framesOmitted": null, "registers": null, "hasSystemFrames": false}, "type": "stacktrace"}, {"data": {"method": "GET", "url": "http://example.com/foo", "query": [["foo", "bar"]], "fragment": null, "data": {"hello": "world"}, "headers": [["Content-Type", "application/json"], ["Referer", "http://example.com"], ["User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36"]], "cookies": [["foo", "bar"], ["biz", "baz"]], "env": {"ENV": "prod"}, "inferredContentType": "application/json"}, "type": "request"}], "dist": null, "message": "This is an example Python exception", "title": "This is an example Python exception", "location": null, "user": {"id": "1", "email": "sentry@example.com", "username": "sentry", "ip_address": "127.0.0.1", "name": "Sentry", "data": null}, "contexts": {"browser": {"name": "Chrome", "version": "28.0.1500", "type": "browser"}, "client_os": {"name": "Windows", "version": "8", "type": "os"}}, "sdk": null, "context": {"emptyList": [], "emptyMap": {}, "length": 10837790, "results": [1, 2, 3, 4, 5], "session": {"foo": "bar"}, "unauthorized": false, "url": "http://example.org/foo/bar/"}, "packages": {"my.package": "1.0.0"}, "type": "default", "metadata": {"title": "This is an example Python exception"}, "tags": [{"key": "browser", "value": "Chrome 28.0.1500"}, {"key": "browser.name", "value": "Chrome"}, {"key": "client_os", "value": "Windows 8"}, {"key": "client_os.name", "value": "Windows"}, {"key": "environment", "value": "prod"}, {"key": "level", "value": "error"}, {"key": "sample_event", "value": "yes"}, {"key": "server_name", "value": "web01.example.org"}, {"key": "url", "value": "http://example.com/foo"}, {"key": "user", "value": "id:1", "query": "user.id:\"1\""}], "platform": "python", "dateReceived": "2023-01-17T08:56:35.677376Z", "errors": [], "occurrence": null, "_meta": {"entries": {}, "message": null, "user": null, "contexts": null, "sdk": null, "context": null, "packages": null, "tags": {}}, "crashFile": null, "culprit": "raven.scripts.runner in main", "dateCreated": "2023-01-17T08:55:35Z", "fingerprints": ["3a2b45089d0211943e5a6645fb4cea3f"], "groupingConfig": {"id": "newstyle:2019-10-29", "enhancements": "eJybzDRxY3J-bm5-npWRgaGlroGxrpHxBABcYgcZ"}}, "emitted_at": 1673945830994} -{"stream": "issues", "data": {"id": "3879509212", "shareId": null, "shortId": "AIRBYTE-09-3", "title": "This is an example Python exception", "culprit": "raven.scripts.runner in main", "permalink": "https://sentry.io/organizations/airbyte-09/issues/3879509212/", "logger": null, "level": "error", "status": "unresolved", "statusDetails": {}, "isPublic": false, "platform": "python", "project": {"id": "5942472", "name": "airbyte-09", "slug": "airbyte-09", "platform": "python"}, "type": "default", "metadata": {"title": "This is an example Python exception"}, "numComments": 0, "assignedTo": null, "isBookmarked": false, "isSubscribed": false, "subscriptionDetails": null, "hasSeen": true, "annotations": [], "issueType": "error", "issueCategory": "error", "isUnhandled": false, "count": "1", "userCount": 1, "firstSeen": "2023-01-17T08:55:35.676000Z", "lastSeen": "2023-01-17T08:55:35.676000Z"}, "emitted_at": 1673945832193} -{"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, "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": [], "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, "filters:blacklisted_ips": "", "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": ["india-promotion", "metrics-extraction", "auto-start-free-trial", "dynamic-sampling", "integrations-stacktrace-link", "source-maps-cta", "new-weekly-report", "release-health-return-metrics", "alert-crash-free-metrics", "performance-onboarding-checklist", "promotion-mobperf-discount20", "dashboards-template", "discover-query-builder-as-landing-page", "custom-event-title", "shared-issues", "performance-mep-bannerless-ui", "discover-events-rate-limit", "derive-code-mappings", "promotion-mobperf-gift50kerr", "invite-members-rate-limits", "discover-quick-context", "minute-resolution-sessions", "issue-actions-v2", "event-attachments", "performance-transaction-name-only-search-indexed", "am2-billing", "profiling", "release-health-drop-sessions", "transaction-metrics-extraction", "issue-alert-incompatible-rules", "performance-span-histogram-view", "enable-zendesk-support", "track-button-click-events", "performance-new-widget-designs", "ondemand-budgets", "advanced-search", "integrations-deployment", "mep-rollout-flag", "scim-orgmember-roles", "skip-trial-ending-email", "org-subdomains", "metric-alert-chartcuterie", "issue-alert-test-notifications", "slack-overage-notifications", "monitors", "onboarding", "promotion-be-adoption-enabled", "symbol-sources", "issue-alert-preview", "performance-issues-all-events-tab", "performance-view", "open-membership", "issue-alert-fallback-targeting"], "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.1.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.1.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.1.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.1.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 Sentry as a deploy hook to automatically track new releases.

    \n
    heroku addons:create deployhooks:http --url=https://sentry.io/api/hooks/release/heroku/5942472/cd92fd5564e9d4a2b82dd03ad2d539a1a2b83ea13e2e205507d2f8d3c513d864/
    \n ", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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.1.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": [], "processingIssues": 0, "defaultEnvironment": null, "relayPiiConfig": null, "builtinSymbolSources": ["ios", "microsoft", "android"], "dynamicSampling": null, "dynamicSamplingBiases": [{"id": "boostEnvironments", "active": true}, {"id": "boostLatestRelease", "active": true}, {"id": "ignoreHealthChecks", "active": true}, {"id": "boostKeyTransactions", "active": true}], "performanceIssueCreationRate": 1.0, "eventProcessing": {"symbolicationDegraded": false}, "symbolSources": "[]"}, "emitted_at": 1673945833626} -{"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, "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": ["auto-start-free-trial", "dynamic-sampling", "india-promotion", "performance-onboarding-checklist", "enable-zendesk-support", "custom-event-title", "derive-code-mappings", "performance-mep-bannerless-ui", "shared-issues", "discover-events-rate-limit", "event-attachments", "advanced-search", "org-subdomains", "release-health-drop-sessions", "metrics-extraction", "discover-query-builder-as-landing-page", "promotion-mobperf-gift50kerr", "source-maps-cta", "issue-alert-incompatible-rules", "issue-alert-fallback-targeting", "new-weekly-report", "scim-orgmember-roles", "skip-trial-ending-email", "minute-resolution-sessions", "release-health-return-metrics", "open-membership", "ondemand-budgets", "track-button-click-events", "slack-overage-notifications", "metric-alert-chartcuterie", "profiling", "performance-span-histogram-view", "onboarding", "performance-transaction-name-only-search-indexed", "alert-crash-free-metrics", "transaction-metrics-extraction", "issue-actions-v2", "issue-alert-preview", "promotion-mobperf-discount20", "am2-billing", "invite-members-rate-limits", "dashboards-template", "symbol-sources", "integrations-deployment", "integrations-stacktrace-link", "discover-quick-context", "issue-alert-test-notifications", "mep-rollout-flag", "performance-new-widget-designs", "monitors", "promotion-be-adoption-enabled", "performance-issues-all-events-tab", "performance-view"], "links": {"organizationUrl": "https://airbyte-09.sentry.io", "regionUrl": "https://us.sentry.io"}, "hasAuthProvider": false}}, "emitted_at": 1673945834670} -{"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, "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": ["auto-start-free-trial", "dynamic-sampling", "india-promotion", "performance-onboarding-checklist", "enable-zendesk-support", "custom-event-title", "derive-code-mappings", "performance-mep-bannerless-ui", "shared-issues", "discover-events-rate-limit", "event-attachments", "advanced-search", "org-subdomains", "release-health-drop-sessions", "metrics-extraction", "discover-query-builder-as-landing-page", "promotion-mobperf-gift50kerr", "source-maps-cta", "issue-alert-incompatible-rules", "issue-alert-fallback-targeting", "new-weekly-report", "scim-orgmember-roles", "skip-trial-ending-email", "minute-resolution-sessions", "release-health-return-metrics", "open-membership", "ondemand-budgets", "track-button-click-events", "slack-overage-notifications", "metric-alert-chartcuterie", "profiling", "performance-span-histogram-view", "onboarding", "performance-transaction-name-only-search-indexed", "alert-crash-free-metrics", "transaction-metrics-extraction", "issue-actions-v2", "issue-alert-preview", "promotion-mobperf-discount20", "am2-billing", "invite-members-rate-limits", "dashboards-template", "symbol-sources", "integrations-deployment", "integrations-stacktrace-link", "discover-quick-context", "issue-alert-test-notifications", "mep-rollout-flag", "performance-new-widget-designs", "monitors", "promotion-be-adoption-enabled", "performance-issues-all-events-tab", "performance-view"], "links": {"organizationUrl": "https://airbyte-09.sentry.io", "regionUrl": "https://us.sentry.io"}, "hasAuthProvider": false}}, "emitted_at": 1673945834672} \ No newline at end of file +{"stream": "events", "data": {"id": "b82cb40291414a90a5b3fb9fe0b646a9", "groupID": "3879509212", "eventID": "b82cb40291414a90a5b3fb9fe0b646a9", "projectID": "5942472", "size": 8070, "entries": [{"data": {"formatted": "This is an example Python exception"}, "type": "message"}, {"data": {"frames": [{"filename": "raven/base.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/base.py", "module": "raven.base", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "build_msg", "rawFunction": null, "symbol": null, "context": [[298, " frames = stack"], [299, ""], [300, " data.update({"], [301, " 'sentry.interfaces.Stacktrace': {"], [302, " 'frames': get_stack_info(frames,"], [303, " transformer=self.transform)"], [304, " },"], [305, " })"], [306, ""], [307, " if 'sentry.interfaces.Stacktrace' in data:"], [308, " if self.include_paths:"]], "lineNo": 303, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'culprit'": null, "'data'": {"'message'": "u'This is a test message generated using ``raven test``'", "'sentry.interfaces.Message'": {"'message'": "u'This is a test message generated using ``raven test``'", "'params'": []}}, "'date'": "datetime.datetime(2013, 8, 13, 3, 8, 24, 880386)", "'event_id'": "'54a322436e1b47b88e239b78998ae742'", "'event_type'": "'raven.events.Message'", "'extra'": {"'go_deeper'": [["{\"'bar'\":[\"'baz'\"],\"'foo'\":\"'bar'\"}"]], "'loadavg'": [0.37255859375, 0.5341796875, 0.62939453125], "'user'": "'dcramer'"}, "'frames'": "", "'handler'": "", "'k'": "'sentry.interfaces.Message'", "'kwargs'": {"'level'": 20, "'message'": "'This is a test message generated using ``raven test``'"}, "'public_key'": null, "'result'": {"'message'": "u'This is a test message generated using ``raven test``'", "'sentry.interfaces.Message'": {"'message'": "u'This is a test message generated using ``raven test``'", "'params'": []}}, "'self'": "", "'stack'": true, "'tags'": null, "'time_spent'": null, "'v'": {"'message'": "u'This is a test message generated using ``raven test``'", "'params'": []}}}, {"filename": "raven/base.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/base.py", "module": "raven.base", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "capture", "rawFunction": null, "symbol": null, "context": [[454, " if not self.is_enabled():"], [455, " return"], [456, ""], [457, " data = self.build_msg("], [458, " event_type, data, date, time_spent, extra, stack, tags=tags,"], [459, " **kwargs)"], [460, ""], [461, " self.send(**data)"], [462, ""], [463, " return (data.get('event_id'),)"], [464, ""]], "lineNo": 459, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'data'": null, "'date'": null, "'event_type'": "'raven.events.Message'", "'extra'": {"'go_deeper'": [["{\"'bar'\":[\"'baz'\"],\"'foo'\":\"'bar'\"}"]], "'loadavg'": [0.37255859375, 0.5341796875, 0.62939453125], "'user'": "'dcramer'"}, "'kwargs'": {"'level'": 20, "'message'": "'This is a test message generated using ``raven test``'"}, "'self'": "", "'stack'": true, "'tags'": null, "'time_spent'": null}}, {"filename": "raven/base.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/base.py", "module": "raven.base", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "captureMessage", "rawFunction": null, "symbol": null, "context": [[572, " \"\"\""], [573, " Creates an event from ``message``."], [574, ""], [575, " >>> client.captureMessage('My event just happened!')"], [576, " \"\"\""], [577, " return self.capture('raven.events.Message', message=message, **kwargs)"], [578, ""], [579, " def captureException(self, exc_info=None, **kwargs):"], [580, " \"\"\""], [581, " Creates an event from an exception."], [582, ""]], "lineNo": 577, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'kwargs'": {"'data'": null, "'extra'": {"'go_deeper'": ["[{\"'bar'\":[\"'baz'\"],\"'foo'\":\"'bar'\"}]"], "'loadavg'": [0.37255859375, 0.5341796875, 0.62939453125], "'user'": "'dcramer'"}, "'level'": 20, "'stack'": true, "'tags'": null}, "'message'": "'This is a test message generated using ``raven test``'", "'self'": ""}}, {"filename": "raven/scripts/runner.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/scripts/runner.py", "module": "raven.scripts.runner", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "send_test_message", "rawFunction": null, "symbol": null, "context": [[72, " level=logging.INFO,"], [73, " stack=True,"], [74, " tags=options.get('tags', {}),"], [75, " extra={"], [76, " 'user': get_uid(),"], [77, " 'loadavg': get_loadavg(),"], [78, " },"], [79, " ))"], [80, ""], [81, " if client.state.did_fail():"], [82, " print('error!')"]], "lineNo": 77, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'client'": "", "'data'": null, "'k'": "'secret_key'", "'options'": {"'data'": null, "'tags'": null}}}, {"filename": "raven/scripts/runner.py", "absPath": "/home/ubuntu/.virtualenvs/getsentry/src/raven/raven/scripts/runner.py", "module": "raven.scripts.runner", "package": null, "platform": null, "instructionAddr": null, "symbolAddr": null, "function": "main", "rawFunction": null, "symbol": null, "context": [[107, " print(\"Using DSN configuration:\")"], [108, " print(\" \", dsn)"], [109, " print()"], [110, ""], [111, " client = Client(dsn, include_paths=['raven'])"], [112, " send_test_message(client, opts.__dict__)"]], "lineNo": 112, "colNo": null, "inApp": false, "trust": null, "errors": null, "vars": {"'args'": ["'test'", "'https://ebc35f33e151401f9deac549978bda11:f3403f81e12e4c24942d505f086b2cad@sentry.io/1'"], "'client'": "", "'dsn'": "'https://ebc35f33e151401f9deac549978bda11:f3403f81e12e4c24942d505f086b2cad@sentry.io/1'", "'opts'": "", "'parser'": "", "'root'": ""}}], "framesOmitted": null, "registers": null, "hasSystemFrames": false}, "type": "stacktrace"}, {"data": {"method": "GET", "url": "http://example.com/foo", "query": [["foo", "bar"]], "fragment": null, "data": {"hello": "world"}, "headers": [["Content-Type", "application/json"], ["Referer", "http://example.com"], ["User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36"]], "cookies": [["foo", "bar"], ["biz", "baz"]], "env": {"ENV": "prod"}, "inferredContentType": "application/json"}, "type": "request"}], "dist": null, "message": "This is an example Python exception", "title": "This is an example Python exception", "location": null, "user": {"id": "1", "email": "sentry@example.com", "username": "sentry", "ip_address": "127.0.0.1", "name": "Sentry", "data": null}, "contexts": {"browser": {"name": "Chrome", "version": "28.0.1500", "type": "browser"}, "client_os": {"name": "Windows", "version": "8", "type": "os"}}, "sdk": null, "context": {"emptyList": [], "emptyMap": {}, "length": 10837790, "results": [1, 2, 3, 4, 5], "session": {"foo": "bar"}, "unauthorized": false, "url": "http://example.org/foo/bar/"}, "packages": {"my.package": "1.0.0"}, "type": "default", "metadata": {"title": "This is an example Python exception"}, "tags": [{"key": "browser", "value": "Chrome 28.0.1500"}, {"key": "browser.name", "value": "Chrome"}, {"key": "client_os", "value": "Windows 8"}, {"key": "client_os.name", "value": "Windows"}, {"key": "environment", "value": "prod"}, {"key": "level", "value": "error"}, {"key": "sample_event", "value": "yes"}, {"key": "server_name", "value": "web01.example.org"}, {"key": "url", "value": "http://example.com/foo"}, {"key": "user", "value": "id:1", "query": "user.id:\"1\""}], "platform": "python", "dateReceived": "2023-01-17T08:56:35.677376Z", "errors": [], "occurrence": null, "_meta": {"entries": {}, "message": null, "user": null, "contexts": null, "sdk": null, "context": null, "packages": null, "tags": {}}, "crashFile": null, "culprit": "raven.scripts.runner in main", "dateCreated": "2023-01-17T08:55:35Z", "fingerprints": ["3a2b45089d0211943e5a6645fb4cea3f"], "groupingConfig": {"id": "newstyle:2019-10-29", "enhancements": "eJybzDRxY3J-bm5-npWRgaGlroGxrpHxBABcYgcZ"}}, "emitted_at": 1674668829987} +{"stream": "issues", "data": {"id": "3879509212", "shareId": null, "shortId": "AIRBYTE-09-3", "title": "This is an example Python exception", "culprit": "raven.scripts.runner in main", "permalink": "https://airbyte-09.sentry.io/issues/3879509212/", "logger": null, "level": "error", "status": "unresolved", "statusDetails": {}, "isPublic": false, "platform": "python", "project": {"id": "5942472", "name": "airbyte-09", "slug": "airbyte-09", "platform": "python"}, "type": "default", "metadata": {"title": "This is an example Python exception"}, "numComments": 0, "assignedTo": null, "isBookmarked": false, "isSubscribed": false, "subscriptionDetails": null, "hasSeen": true, "annotations": [], "issueType": "error", "issueCategory": "error", "isUnhandled": false, "count": "1", "userCount": 1, "firstSeen": "2023-01-17T08:55:35.676000Z", "lastSeen": "2023-01-17T08:55:35.676000Z"}, "emitted_at": 1674668831237} +{"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, "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, "filters:blacklisted_ips": "", "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": ["dynamic-sampling", "advanced-search", "session-replay", "ondemand-budgets", "performance-mep-bannerless-ui", "discover-events-rate-limit", "issue-actions-v2", "performance-onboarding-checklist", "dashboards-template", "release-health-return-metrics", "invite-members-rate-limits", "enable-zendesk-support", "shared-issues", "issue-alert-test-notifications", "promotion-be-adoption-enabled", "performance-issues-all-events-tab", "derive-code-mappings", "am2-billing", "customer-domains", "promotion-mobperf-discount20", "release-health-drop-sessions", "symbol-sources", "transaction-metrics-extraction", "issue-alert-incompatible-rules", "scim-orgmember-roles", "metrics-extraction", "performance-new-widget-designs", "slack-overage-notifications", "monitors", "track-button-click-events", "profiling", "source-maps-cta", "auto-start-free-trial", "minute-resolution-sessions", "performance-view", "performance-transaction-name-only-search-indexed", "promotion-mobperf-gift50kerr", "session-replay-ui", "india-promotion", "integrations-stacktrace-link", "discover-quick-context", "discover-query-builder-as-landing-page", "onboarding", "custom-event-title", "org-subdomains", "open-membership", "event-attachments", "issue-alert-preview", "mep-rollout-flag", "new-weekly-report", "alert-crash-free-metrics", "performance-span-histogram-view", "integrations-deployment", "issue-alert-fallback-targeting", "metric-alert-chartcuterie"], "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.2.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.2.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": ["issue-basic", "commits"], "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.2.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": ["issue-basic", "commits"], "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.2.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": ["issue-basic", "commits"], "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 Sentry as a deploy hook to automatically track new releases.

    \n
    heroku addons:create deployhooks:http --url=https://sentry.io/api/hooks/release/heroku/5942472/cd92fd5564e9d4a2b82dd03ad2d539a1a2b83ea13e2e205507d2f8d3c513d864/
    \n ", "firstPartyAlternative": null, "deprecationDate": null, "altIsSentryApp": null, "enabled": false, "version": "23.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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.2.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"], "dynamicSampling": null, "dynamicSamplingBiases": [{"id": "boostEnvironments", "active": true}, {"id": "boostLatestRelease", "active": true}, {"id": "ignoreHealthChecks", "active": true}, {"id": "boostKeyTransactions", "active": true}], "performanceIssueCreationRate": 1.0, "eventProcessing": {"symbolicationDegraded": false}, "symbolSources": "[]"}, "emitted_at": 1674668832448} +{"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, "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": ["discover-quick-context", "transaction-metrics-extraction", "metrics-extraction", "release-health-return-metrics", "minute-resolution-sessions", "event-attachments", "new-weekly-report", "performance-transaction-name-only-search-indexed", "auto-start-free-trial", "metric-alert-chartcuterie", "advanced-search", "promotion-be-adoption-enabled", "discover-query-builder-as-landing-page", "issue-actions-v2", "source-maps-cta", "promotion-mobperf-discount20", "release-health-drop-sessions", "performance-span-histogram-view", "monitors", "performance-mep-bannerless-ui", "issue-alert-test-notifications", "ondemand-budgets", "am2-billing", "invite-members-rate-limits", "org-subdomains", "performance-view", "customer-domains", "dashboards-template", "mep-rollout-flag", "performance-onboarding-checklist", "open-membership", "issue-alert-fallback-targeting", "derive-code-mappings", "integrations-stacktrace-link", "issue-alert-preview", "discover-events-rate-limit", "symbol-sources", "shared-issues", "india-promotion", "custom-event-title", "track-button-click-events", "issue-alert-incompatible-rules", "session-replay", "scim-orgmember-roles", "onboarding", "performance-issues-all-events-tab", "dynamic-sampling", "integrations-deployment", "enable-zendesk-support", "profiling", "alert-crash-free-metrics", "session-replay-ui", "promotion-mobperf-gift50kerr", "performance-new-widget-designs", "slack-overage-notifications"], "links": {"organizationUrl": "https://airbyte-09.sentry.io", "regionUrl": "https://us.sentry.io"}, "hasAuthProvider": false}}, "emitted_at": 1674668833465} +{"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, "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": ["discover-quick-context", "transaction-metrics-extraction", "metrics-extraction", "release-health-return-metrics", "minute-resolution-sessions", "event-attachments", "new-weekly-report", "performance-transaction-name-only-search-indexed", "auto-start-free-trial", "metric-alert-chartcuterie", "advanced-search", "promotion-be-adoption-enabled", "discover-query-builder-as-landing-page", "issue-actions-v2", "source-maps-cta", "promotion-mobperf-discount20", "release-health-drop-sessions", "performance-span-histogram-view", "monitors", "performance-mep-bannerless-ui", "issue-alert-test-notifications", "ondemand-budgets", "am2-billing", "invite-members-rate-limits", "org-subdomains", "performance-view", "customer-domains", "dashboards-template", "mep-rollout-flag", "performance-onboarding-checklist", "open-membership", "issue-alert-fallback-targeting", "derive-code-mappings", "integrations-stacktrace-link", "issue-alert-preview", "discover-events-rate-limit", "symbol-sources", "shared-issues", "india-promotion", "custom-event-title", "track-button-click-events", "issue-alert-incompatible-rules", "session-replay", "scim-orgmember-roles", "onboarding", "performance-issues-all-events-tab", "dynamic-sampling", "integrations-deployment", "enable-zendesk-support", "profiling", "alert-crash-free-metrics", "session-replay-ui", "promotion-mobperf-gift50kerr", "performance-new-widget-designs", "slack-overage-notifications"], "links": {"organizationUrl": "https://airbyte-09.sentry.io", "regionUrl": "https://us.sentry.io"}, "hasAuthProvider": false}}, "emitted_at": 1674668833467} \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-sentry/source_sentry/sentry.yaml b/airbyte-integrations/connectors/source-sentry/source_sentry/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-sentry/source_sentry/sentry.yaml rename to airbyte-integrations/connectors/source-sentry/source_sentry/manifest.yaml diff --git a/airbyte-integrations/connectors/source-sentry/source_sentry/streams.py b/airbyte-integrations/connectors/source-sentry/source_sentry/streams.py index 7aea30c3144a1..9c94813a81320 100644 --- a/airbyte-integrations/connectors/source-sentry/source_sentry/streams.py +++ b/airbyte-integrations/connectors/source-sentry/source_sentry/streams.py @@ -9,6 +9,7 @@ import pendulum import requests from airbyte_cdk.sources.streams import IncrementalMixin +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream @@ -25,6 +26,10 @@ def __init__(self, hostname: str, **kwargs): def url_base(self) -> str: return self._url_base + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: return None @@ -65,6 +70,10 @@ def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapp class SentryIncremental(SentryStreamPagination, IncrementalMixin): + def __init__(self, *args, **kwargs): + super(SentryIncremental, self).__init__(*args, **kwargs) + self._cursor_value = None + def filter_by_state(self, stream_state: Mapping[str, Any] = None, record: Mapping[str, Any] = None) -> Iterable: """ Endpoint does not provide query filtering params, but they provide us @@ -72,7 +81,12 @@ def filter_by_state(self, stream_state: Mapping[str, Any] = None, record: Mappin during the parsing. """ start_date = "1900-01-01T00:00:00.0Z" - if pendulum.parse(record[self.cursor_field]) >= pendulum.parse((stream_state or {}).get(self.cursor_field, start_date)): + if pendulum.parse(record[self.cursor_field]) > pendulum.parse((stream_state or {}).get(self.cursor_field, start_date)): + # Persist state. + # There is a bug in state setter: because of self._cursor_value is not defined it raises Attribute error + # which is ignored in airbyte_cdk/sources/abstract_source.py:320 and we have an empty state in return + # See: https://github.com/airbytehq/oncall/issues/1317 + self.state = record yield record def parse_response(self, response: requests.Response, stream_state: Mapping[str, Any], **kwargs) -> Iterable[MutableMapping]: @@ -87,7 +101,13 @@ def state(self) -> Mapping[str, Any]: @state.setter def state(self, value: Mapping[str, Any]): - self._cursor_value = value[self.cursor_field] + """ + Define state as a max between given value and current state + """ + if not self._cursor_value: + self._cursor_value = value[self.cursor_field] + else: + self._cursor_value = max(value[self.cursor_field], self.state[self.cursor_field]) class Events(SentryIncremental): diff --git a/airbyte-integrations/connectors/source-slack/Dockerfile b/airbyte-integrations/connectors/source-slack/Dockerfile index ac5ad0c8a5086..9cdc57d0838a4 100644 --- a/airbyte-integrations/connectors/source-slack/Dockerfile +++ b/airbyte-integrations/connectors/source-slack/Dockerfile @@ -17,5 +17,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.1.21 +LABEL io.airbyte.version=0.1.22 LABEL io.airbyte.name=airbyte/source-slack diff --git a/airbyte-integrations/connectors/source-slack/source_slack/source.py b/airbyte-integrations/connectors/source-slack/source_slack/source.py index 214db26f27172..7ed227d22a4d6 100644 --- a/airbyte-integrations/connectors/source-slack/source_slack/source.py +++ b/airbyte-integrations/connectors/source-slack/source_slack/source.py @@ -12,6 +12,7 @@ from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream, HttpSubStream from airbyte_cdk.sources.streams.http.requests_native_auth import TokenAuthenticator from pendulum import DateTime, Period @@ -27,6 +28,10 @@ def max_retries(self) -> int: # Slack's rate limiting can be unpredictable so we increase the max number of retries by a lot before failing return 20 + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: """Slack uses a cursor-based pagination strategy. Extract the cursor from the response if it exists and return it in a format diff --git a/airbyte-integrations/connectors/source-smaily/source_smaily/smaily.yaml b/airbyte-integrations/connectors/source-smaily/source_smaily/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-smaily/source_smaily/smaily.yaml rename to airbyte-integrations/connectors/source-smaily/source_smaily/manifest.yaml diff --git a/airbyte-integrations/connectors/source-smaily/source_smaily/source.py b/airbyte-integrations/connectors/source-smaily/source_smaily/source.py index 9104fe3575eed..74b3791f4dd1c 100644 --- a/airbyte-integrations/connectors/source-smaily/source_smaily/source.py +++ b/airbyte-integrations/connectors/source-smaily/source_smaily/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSmaily(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "smaily.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-smartengage/source_smartengage/smartengage.yaml b/airbyte-integrations/connectors/source-smartengage/source_smartengage/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-smartengage/source_smartengage/smartengage.yaml rename to airbyte-integrations/connectors/source-smartengage/source_smartengage/manifest.yaml diff --git a/airbyte-integrations/connectors/source-smartengage/source_smartengage/source.py b/airbyte-integrations/connectors/source-smartengage/source_smartengage/source.py index 7ba8a096b2a45..aee8241032aac 100644 --- a/airbyte-integrations/connectors/source-smartengage/source_smartengage/source.py +++ b/airbyte-integrations/connectors/source-smartengage/source_smartengage/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSmartengage(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "smartengage.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-snapchat-marketing/Dockerfile b/airbyte-integrations/connectors/source-snapchat-marketing/Dockerfile index 110cc948831cd..abcaa3bf6ddfc 100644 --- a/airbyte-integrations/connectors/source-snapchat-marketing/Dockerfile +++ b/airbyte-integrations/connectors/source-snapchat-marketing/Dockerfile @@ -25,5 +25,5 @@ COPY source_snapchat_marketing ./source_snapchat_marketing ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.1.12 +LABEL io.airbyte.version=0.1.13 LABEL io.airbyte.name=airbyte/source-snapchat-marketing diff --git a/airbyte-integrations/connectors/source-snapchat-marketing/source_snapchat_marketing/source.py b/airbyte-integrations/connectors/source-snapchat-marketing/source_snapchat_marketing/source.py index 4d68e90c5ad20..790b7e2a2cc87 100644 --- a/airbyte-integrations/connectors/source-snapchat-marketing/source_snapchat_marketing/source.py +++ b/airbyte-integrations/connectors/source-snapchat-marketing/source_snapchat_marketing/source.py @@ -14,6 +14,7 @@ from airbyte_cdk.models import SyncMode from airbyte_cdk.sources import AbstractSource from airbyte_cdk.sources.streams import Stream +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.core import IncrementalMixin, package_name_from_class from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.streams.http.auth import Oauth2Authenticator @@ -183,6 +184,10 @@ def response_root_name(self): """Using the class name in lower to set the root node for response parsing""" return self.name + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + @property def response_item_name(self): """Remove last 's' from response_root_name, see example in parse_response function""" diff --git a/airbyte-integrations/connectors/source-sonar-cloud/source_sonar_cloud/sonar_cloud.yaml b/airbyte-integrations/connectors/source-sonar-cloud/source_sonar_cloud/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-sonar-cloud/source_sonar_cloud/sonar_cloud.yaml rename to airbyte-integrations/connectors/source-sonar-cloud/source_sonar_cloud/manifest.yaml diff --git a/airbyte-integrations/connectors/source-sonar-cloud/source_sonar_cloud/source.py b/airbyte-integrations/connectors/source-sonar-cloud/source_sonar_cloud/source.py index 9d7d52c06e94b..0eba3b0ccc5f0 100644 --- a/airbyte-integrations/connectors/source-sonar-cloud/source_sonar_cloud/source.py +++ b/airbyte-integrations/connectors/source-sonar-cloud/source_sonar_cloud/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSonarCloud(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "sonar_cloud.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-spacex-api/source_spacex_api/spacex_api.yaml b/airbyte-integrations/connectors/source-spacex-api/source_spacex_api/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-spacex-api/source_spacex_api/spacex_api.yaml rename to airbyte-integrations/connectors/source-spacex-api/source_spacex_api/manifest.yaml diff --git a/airbyte-integrations/connectors/source-spacex-api/source_spacex_api/source.py b/airbyte-integrations/connectors/source-spacex-api/source_spacex_api/source.py index a847fc0af51c0..d67182a9254ab 100644 --- a/airbyte-integrations/connectors/source-spacex-api/source_spacex_api/source.py +++ b/airbyte-integrations/connectors/source-spacex-api/source_spacex_api/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSpacexApi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "spacex_api.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-square/source_square/square.yaml b/airbyte-integrations/connectors/source-square/source_square/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-square/source_square/square.yaml rename to airbyte-integrations/connectors/source-square/source_square/manifest.yaml diff --git a/airbyte-integrations/connectors/source-square/source_square/source.py b/airbyte-integrations/connectors/source-square/source_square/source.py index cc56fede7b7db..986b333c631de 100644 --- a/airbyte-integrations/connectors/source-square/source_square/source.py +++ b/airbyte-integrations/connectors/source-square/source_square/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSquare(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "square.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-statuspage/source_statuspage/statuspage.yaml b/airbyte-integrations/connectors/source-statuspage/source_statuspage/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-statuspage/source_statuspage/statuspage.yaml rename to airbyte-integrations/connectors/source-statuspage/source_statuspage/manifest.yaml diff --git a/airbyte-integrations/connectors/source-statuspage/source_statuspage/source.py b/airbyte-integrations/connectors/source-statuspage/source_statuspage/source.py index 1d8d85b315ba5..fbe389d2a6645 100644 --- a/airbyte-integrations/connectors/source-statuspage/source_statuspage/source.py +++ b/airbyte-integrations/connectors/source-statuspage/source_statuspage/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceStatuspage(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "statuspage.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-stripe/Dockerfile b/airbyte-integrations/connectors/source-stripe/Dockerfile index 9578c23dcd7b0..88142f575412a 100644 --- a/airbyte-integrations/connectors/source-stripe/Dockerfile +++ b/airbyte-integrations/connectors/source-stripe/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.1.40 +LABEL io.airbyte.version=1.0.1 LABEL io.airbyte.name=airbyte/source-stripe diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/invoices.json b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/invoices.json index d268fcd3445a3..3024b188a9146 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/invoices.json +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/invoices.json @@ -208,6 +208,35 @@ }, "status": { "type": ["null", "string"] + }, + "status_transitions": { + "type": "object", + "properties": { + "finalized_at": { + "type": [ + "null", + "integer" + ] + }, + "marked_uncollectible_at": { + "type": [ + "null", + "integer" + ] + }, + "paid_at": { + "type": [ + "null", + "integer" + ] + }, + "voided_at": { + "type": [ + "null", + "integer" + ] + } + } } } } diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/subscriptions.json b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/subscriptions.json index d97e5f7895f1e..6ce92c8b9ecc9 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/subscriptions.json +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/schemas/subscriptions.json @@ -11,7 +11,7 @@ "livemode": { "type": ["null", "boolean"] }, - "start": { + "start_date": { "type": ["null", "integer"] }, "items": { @@ -115,7 +115,7 @@ "customer": { "type": ["null", "string"] }, - "start_date": { + "start": { "type": ["null", "integer"] }, "object": { diff --git a/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py b/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py index d1947ef1310d5..c811dff429fd2 100644 --- a/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py +++ b/airbyte-integrations/connectors/source-stripe/source_stripe/streams.py @@ -10,6 +10,7 @@ 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 STRIPE_ERROR_CODES: List = [ @@ -31,6 +32,10 @@ def __init__(self, start_date: int, account_id: str, slice_range: int = DEFAULT_ self.start_date = start_date self.slice_range = slice_range or self.DEFAULT_SLICE_RANGE + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: decoded_response = response.json() if bool(decoded_response.get("has_more", "False")) and decoded_response.get("data", []): diff --git a/airbyte-integrations/connectors/source-survey-sparrow/source_survey_sparrow/survey_sparrow.yaml b/airbyte-integrations/connectors/source-survey-sparrow/source_survey_sparrow/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-survey-sparrow/source_survey_sparrow/survey_sparrow.yaml rename to airbyte-integrations/connectors/source-survey-sparrow/source_survey_sparrow/manifest.yaml diff --git a/airbyte-integrations/connectors/source-survey-sparrow/source_survey_sparrow/source.py b/airbyte-integrations/connectors/source-survey-sparrow/source_survey_sparrow/source.py index c61cdd97176f7..dbd0b36cff8a3 100644 --- a/airbyte-integrations/connectors/source-survey-sparrow/source_survey_sparrow/source.py +++ b/airbyte-integrations/connectors/source-survey-sparrow/source_survey_sparrow/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceSurveySparrow(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "survey_sparrow.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-surveymonkey/Dockerfile b/airbyte-integrations/connectors/source-surveymonkey/Dockerfile index 33fefc2aa6219..18402e2169a4f 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.13 +LABEL io.airbyte.version=0.1.14 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 91335962bc087..b3cdc21cc4455 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-surveymonkey/acceptance-test-config.yml @@ -1,4 +1,5 @@ connector_image: airbyte/source-surveymonkey:dev +test_strictness_level: high acceptance_tests: spec: tests: @@ -15,7 +16,8 @@ acceptance_tests: basic_read: tests: - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" + expect_records: + path: "integration_tests/expected_records.txt" incremental: tests: - config_path: "secrets/config.json" diff --git a/airbyte-integrations/connectors/source-surveymonkey/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-surveymonkey/integration_tests/abnormal_state.json index 6f48fdeb56b94..30c1a1bd3ea9c 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-surveymonkey/integration_tests/abnormal_state.json @@ -2,7 +2,7 @@ { "type": "STREAM", "stream": { - "stream_state": { "date_modified": "2022-06-10T11:02:01" }, + "stream_state": { "date_modified": "2023-01-19T10:02:01" }, "stream_descriptor": { "name": "surveys" } } }, @@ -10,19 +10,19 @@ "type": "STREAM", "stream": { "stream_state": { - "306079584": { "date_modified": "2022-06-08T18:17:18+00:00" }, - "307785429": { "date_modified": "2022-06-10T10:59:43+00:00" }, - "307785444": { "date_modified": "2022-06-10T11:00:19+00:00" }, - "307785394": { "date_modified": "2022-06-10T11:00:59+00:00" }, - "307785402": { "date_modified": "2022-06-10T11:01:31+00:00" }, - "307785408": { "date_modified": "2022-06-10T11:02:08+00:00" }, - "307785448": { "date_modified": "2022-06-10T11:02:49+00:00" }, - "307784834": { "date_modified": "2022-06-10T11:03:45+00:00" }, - "307784863": { "date_modified": "2022-06-10T11:04:29+00:00" }, - "307784846": { "date_modified": "2022-06-10T11:05:05+00:00" }, - "307784856": { "date_modified": "2022-06-10T11:05:44+00:00" }, - "307785388": { "date_modified": "2022-06-10T11:06:20+00:00" }, - "307785415": { "date_modified": "2022-06-10T11:06:43+00:00" } + "306079584": { "date_modified": "2023-01-19T10:17:18+00:00" }, + "307785429": { "date_modified": "2023-01-19T10:59:43+00:00" }, + "307785444": { "date_modified": "2023-01-19T10:00:19+00:00" }, + "307785394": { "date_modified": "2023-01-19T10:00:59+00:00" }, + "307785402": { "date_modified": "2023-01-19T10:01:31+00:00" }, + "307785408": { "date_modified": "2023-01-19T10:02:08+00:00" }, + "307785448": { "date_modified": "2023-01-19T10:02:49+00:00" }, + "307784834": { "date_modified": "2023-01-19T10:03:45+00:00" }, + "307784863": { "date_modified": "2023-01-19T10:04:29+00:00" }, + "307784846": { "date_modified": "2023-01-19T10:05:05+00:00" }, + "307784856": { "date_modified": "2023-01-19T10:05:44+00:00" }, + "307785388": { "date_modified": "2023-01-19T10:06:20+00:00" }, + "307785415": { "date_modified": "2023-01-19T10:06:43+00:00" } }, "stream_descriptor": { "name": "survey_responses" } } diff --git a/airbyte-integrations/connectors/source-surveymonkey/integration_tests/expected_records.txt b/airbyte-integrations/connectors/source-surveymonkey/integration_tests/expected_records.txt new file mode 100644 index 0000000000000..b62dd05555155 --- /dev/null +++ b/airbyte-integrations/connectors/source-surveymonkey/integration_tests/expected_records.txt @@ -0,0 +1,427 @@ +{"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":"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":1674149647495} +{"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":1674149648694} +{"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":1674149650050} +{"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":1674149651284} +{"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":1674149652147} +{"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":1674149653219} +{"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":1674149653897} +{"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":1674149655178} +{"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":1674149655888} +{"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":1674149657223} +{"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":1674149658247} +{"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","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":1674149660097} +{"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","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":1674149660099} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660100} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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 🍐🍐🍐🍐🍐"}]},{"id":"652286720","answers":[{"tag_data":[],"text":"good"}]}]}]},"emitted_at":1674149660102} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660104} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660106} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"id":"652286726","answers":[{"tag_data":[],"text":"🤔"}]},{"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":"🦴"}]},{"id":"652286720","answers":[{"tag_data":[],"text":"💪"}]}]}]},"emitted_at":1674149660108} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660110} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660111} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660112} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660113} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660114} +{"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","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"}]},{"id":"652286725","answers":[{"row_id":"4285525102"}]},{"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":1674149660116} +{"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","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":1674149661798} +{"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","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":1674149661798} +{"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","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":1674149661799} +{"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","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":1674149661799} +{"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","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":1674149661799} +{"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","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":1674149661800} +{"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","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":1674149661800} +{"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","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":1674149661800} +{"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","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":1674149661801} +{"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","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":1674149661801} +{"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","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":1674149661801} +{"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","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":1674149661801} +{"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","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":1674149661802} +{"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","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":1674149661802} +{"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","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":1674149661802} +{"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","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":1674149661803} +{"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","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":1674149661803} +{"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","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":1674149661803} +{"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","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":1674149663364} +{"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","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":1674149663365} +{"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","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":1674149663366} +{"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","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":1674149663367} +{"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","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":1674149663368} +{"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","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":1674149663368} +{"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","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":1674149663369} +{"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","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":1674149663370} +{"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","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":1674149663370} +{"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","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":1674149663371} +{"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","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":1674149663371} +{"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","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":1674149663372} +{"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","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":1674149663373} +{"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","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":1674149663373} +{"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","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":1674149663374} +{"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","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":1674149663374} +{"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","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":1674149663375} +{"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","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":1674149663375} +{"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","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":1674149664904} +{"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","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":1674149664906} +{"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","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":1674149664908} +{"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","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":1674149664909} +{"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","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":1674149664911} +{"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","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":1674149664913} +{"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","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":1674149664914} +{"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","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":1674149664916} +{"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","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":1674149664917} +{"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","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":1674149664919} +{"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","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":1674149664921} +{"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","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":1674149664922} +{"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","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":1674149664924} +{"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","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":1674149664925} +{"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","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":1674149664927} +{"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","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":1674149664929} +{"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","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":1674149664930} +{"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","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":1674149664931} +{"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","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":1674149666541} +{"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","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":1674149666543} +{"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","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":1674149666544} +{"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","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":1674149666545} +{"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","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":1674149666546} +{"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","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":1674149666546} +{"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","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":1674149666547} +{"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","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":1674149666548} +{"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","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":1674149666549} +{"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","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":1674149666550} +{"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","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":1674149666550} +{"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","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":1674149666551} +{"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","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":1674149666552} +{"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","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":1674149666553} +{"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","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":1674149666555} +{"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","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":1674149666556} +{"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","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":1674149666557} +{"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","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":1674149666558} +{"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","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":1674149668076} +{"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","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":1674149668077} +{"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","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":1674149668077} +{"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","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":1674149668078} +{"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","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":1674149668078} +{"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","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":1674149668078} +{"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","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":1674149668079} +{"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","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":1674149668079} +{"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","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":1674149668079} +{"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","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":1674149668080} +{"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","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":1674149668080} +{"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","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":1674149668080} +{"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","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":1674149668081} +{"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","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":1674149668081} +{"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","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":1674149668081} +{"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","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":1674149668082} +{"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","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":1674149668082} +{"stream":"survey_responses","data":{"id":"12731350053","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843688","survey_id":"307785408","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=uQGI1ouCt3TwYg_2F0OjcapOOokxhfAvoP3vsYcJntZXz4yNaoZRXNQePI1o27JEfS","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxvvr7YEM4YZ5j7dMDUtBHEw_3D?respondent_id=12731350053","total_time":32,"date_modified":"2021-06-10T11:02:07+00:00","date_created":"2021-06-10T11:01:34+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785408/responses/12731350053","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":"4385174483"}]},{"id":"667461652","answers":[{"choice_id":"4385174496"}]}]},{"id":"168831388","questions":[{"id":"667461666","answers":[{"choice_id":"4385174599"}]},{"id":"667461670","answers":[{"choice_id":"4385174621"}]},{"id":"667461674","answers":[{"choice_id":"4385174634"}]},{"id":"667461676","answers":[{"choice_id":"4385174646"}]},{"id":"667461686","answers":[{"choice_id":"4385174678"}]}]}]},"emitted_at":1674149668082} +{"stream":"survey_responses","data":{"id":"12730895819","recipient_id":"","collection_mode":"default","response_status":"partial","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":["168830049","168830050","168830060"],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=2awnrk_2BH5OxFP_2BQgeiHHjR9yR3bHHngtP06WJ08L7vUw_2Bi4HP_2BoIM_2Fzdi4XZBg4c","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12730895819","total_time":3851,"date_modified":"2021-06-10T08:30:24+00:00","date_created":"2021-06-10T07:26:12+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12730895819","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455130","answers":[{"choice_id":"4385137345"}]},{"id":"667455161","answers":[{"choice_id":"4385137473"}]},{"id":"667455172","answers":[{"choice_id":"4385137488"}]},{"id":"667455179","answers":[{"choice_id":"4385137493"}]}]},{"id":"168830060","questions":[]}]},"emitted_at":1674149669531} +{"stream":"survey_responses","data":{"id":"12731026318","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=9zPtrl88F3NYIsYeyGVBOAH8xcbXCyfUnb5wJmafeNnqKu0OuTBMd3AMA70CA0Dd","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731026318","total_time":42,"date_modified":"2021-06-10T08:38:55+00:00","date_created":"2021-06-10T08:38:13+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731026318","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137324"}]},{"id":"667455130","answers":[{"choice_id":"4385137342"}]},{"id":"667455161","answers":[{"choice_id":"4385137468"}]},{"id":"667455172","answers":[{"choice_id":"4385137486"}]},{"id":"667455179","answers":[{"choice_id":"4385137494"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137702"}]},{"id":"667455205","answers":[{"choice_id":"4385137743"}]},{"id":"667455210","answers":[{"choice_id":"4385137776"}]},{"id":"667455212","answers":[{"choice_id":"4385137797"}]},{"id":"667455215","answers":[{"choice_id":"4385137810"}]}]}]},"emitted_at":1674149669532} +{"stream":"survey_responses","data":{"id":"12731034119","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=_2F1iWQXdsu69adcyLuCe0CWLGDC2dm6Mi6UQBAgHHW5tqLGpm6S8VgnyogtlqQcF4","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731034119","total_time":38,"date_modified":"2021-06-10T08:43:18+00:00","date_created":"2021-06-10T08:42:40+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731034119","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137328"}]},{"id":"667455130","answers":[{"choice_id":"4385137342"}]},{"id":"667455161","answers":[{"choice_id":"4385137470"}]},{"id":"667455172","answers":[{"choice_id":"4385137488"}]},{"id":"667455179","answers":[{"choice_id":"4385137494"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137700"}]},{"id":"667455205","answers":[{"choice_id":"4385137742"}]},{"id":"667455210","answers":[{"choice_id":"4385137782"}]},{"id":"667455212","answers":[{"choice_id":"4385137793"}]},{"id":"667455215","answers":[{"choice_id":"4385137813"}]}]}]},"emitted_at":1674149669532} +{"stream":"survey_responses","data":{"id":"12731048348","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=teZL209m07VmwPLhipUVAeikuCFifwYD7Xbn856h7nliTsJok_2BJ8cUsANlBG1x09","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731048348","total_time":37,"date_modified":"2021-06-10T08:51:05+00:00","date_created":"2021-06-10T08:50:27+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731048348","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137324"}]},{"id":"667455130","answers":[{"choice_id":"4385137345"}]},{"id":"667455161","answers":[{"choice_id":"4385137472"}]},{"id":"667455172","answers":[{"choice_id":"4385137488"}]},{"id":"667455179","answers":[{"choice_id":"4385137494"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137700"}]},{"id":"667455205","answers":[{"choice_id":"4385137741"}]},{"id":"667455210","answers":[{"choice_id":"4385137780"}]},{"id":"667455212","answers":[{"choice_id":"4385137793"}]},{"id":"667455215","answers":[{"choice_id":"4385137812"}]}]}]},"emitted_at":1674149669532} +{"stream":"survey_responses","data":{"id":"12731062826","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=iBwqqk7dTblJHtZ5UWdoNXNfZvamq_2FWqVX9lPmgcaEk_2FJSEZbpEjvTDEp1kntA4I","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731062826","total_time":37,"date_modified":"2021-06-10T08:58:47+00:00","date_created":"2021-06-10T08:58:09+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731062826","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137325"}]},{"id":"667455130","answers":[{"choice_id":"4385137341"}]},{"id":"667455161","answers":[{"choice_id":"4385137473"}]},{"id":"667455172","answers":[{"choice_id":"4385137485"}]},{"id":"667455179","answers":[{"choice_id":"4385137494"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137701"}]},{"id":"667455205","answers":[{"choice_id":"4385137741"}]},{"id":"667455210","answers":[{"choice_id":"4385137782"}]},{"id":"667455212","answers":[{"choice_id":"4385137794"}]},{"id":"667455215","answers":[{"choice_id":"4385137813"}]}]}]},"emitted_at":1674149669533} +{"stream":"survey_responses","data":{"id":"12731078267","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=EWvr594gc6fTNOWCnzJcr1awvjtYrfcHOS1dCZlEmJOVdekL3kH9fN015tpi7AVW","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731078267","total_time":37,"date_modified":"2021-06-10T09:06:31+00:00","date_created":"2021-06-10T09:05:53+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731078267","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137329"}]},{"id":"667455130","answers":[{"choice_id":"4385137342"}]},{"id":"667455161","answers":[{"choice_id":"4385137468"}]},{"id":"667455172","answers":[{"choice_id":"4385137487"}]},{"id":"667455179","answers":[{"choice_id":"4385137495"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137701"}]},{"id":"667455205","answers":[{"choice_id":"4385137741"}]},{"id":"667455210","answers":[{"choice_id":"4385137775"}]},{"id":"667455212","answers":[{"choice_id":"4385137796"}]},{"id":"667455215","answers":[{"choice_id":"4385137811"}]}]}]},"emitted_at":1674149669533} +{"stream":"survey_responses","data":{"id":"12731094627","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=UEDBFTIm3XGLxP7HF9d4l806UiymFhRau6MyuUYkfb1y7zOR96xOkRxERkrOJ9ca","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731094627","total_time":38,"date_modified":"2021-06-10T09:14:16+00:00","date_created":"2021-06-10T09:13:38+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731094627","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137329"}]},{"id":"667455130","answers":[{"choice_id":"4385137345"}]},{"id":"667455161","answers":[{"choice_id":"4385137470"}]},{"id":"667455172","answers":[{"choice_id":"4385137486"}]},{"id":"667455179","answers":[{"choice_id":"4385137495"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137700"}]},{"id":"667455205","answers":[{"choice_id":"4385137743"}]},{"id":"667455210","answers":[{"choice_id":"4385137780"}]},{"id":"667455212","answers":[{"choice_id":"4385137792"}]},{"id":"667455215","answers":[{"choice_id":"4385137810"}]}]}]},"emitted_at":1674149669533} +{"stream":"survey_responses","data":{"id":"12731111090","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=X3JQr1B6y2spk9th1IPF0YF8VQxsZUEffTzik0RdvFtFl2SnrnJQRca_2BDoV2r4mq","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731111090","total_time":38,"date_modified":"2021-06-10T09:21:54+00:00","date_created":"2021-06-10T09:21:16+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731111090","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137326"}]},{"id":"667455130","answers":[{"choice_id":"4385137341"}]},{"id":"667455161","answers":[{"choice_id":"4385137474"}]},{"id":"667455172","answers":[{"choice_id":"4385137487"}]},{"id":"667455179","answers":[{"choice_id":"4385137493"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137701"}]},{"id":"667455205","answers":[{"choice_id":"4385137741"}]},{"id":"667455210","answers":[{"choice_id":"4385137775"}]},{"id":"667455212","answers":[{"choice_id":"4385137793"}]},{"id":"667455215","answers":[{"choice_id":"4385137811"}]}]}]},"emitted_at":1674149669534} +{"stream":"survey_responses","data":{"id":"12731127763","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=ETzE9VL934Fk2aBcNUUcKaSh2V3EZHIzNm7GmAoHdznlQgZLuN90AHX13K3n6CVD","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731127763","total_time":37,"date_modified":"2021-06-10T09:29:36+00:00","date_created":"2021-06-10T09:28:58+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731127763","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137325"}]},{"id":"667455130","answers":[{"choice_id":"4385137341"}]},{"id":"667455161","answers":[{"choice_id":"4385137472"}]},{"id":"667455172","answers":[{"choice_id":"4385137488"}]},{"id":"667455179","answers":[{"choice_id":"4385137496"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137702"}]},{"id":"667455205","answers":[{"choice_id":"4385137740"}]},{"id":"667455210","answers":[{"choice_id":"4385137775"}]},{"id":"667455212","answers":[{"choice_id":"4385137797"}]},{"id":"667455215","answers":[{"choice_id":"4385137813"}]}]}]},"emitted_at":1674149669534} +{"stream":"survey_responses","data":{"id":"12731145509","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=VdEi6nthWHwzn1S6g9Ejj36ATaNJTgGRTvPg9OSgXQX3v7zuJ7b8kUW4JpPgoH8N","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731145509","total_time":37,"date_modified":"2021-06-10T09:37:18+00:00","date_created":"2021-06-10T09:36:40+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731145509","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137324"}]},{"id":"667455130","answers":[{"choice_id":"4385137344"}]},{"id":"667455161","answers":[{"choice_id":"4385137473"}]},{"id":"667455172","answers":[{"choice_id":"4385137486"}]},{"id":"667455179","answers":[{"choice_id":"4385137492"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137700"}]},{"id":"667455205","answers":[{"choice_id":"4385137743"}]},{"id":"667455210","answers":[{"choice_id":"4385137782"}]},{"id":"667455212","answers":[{"choice_id":"4385137795"}]},{"id":"667455215","answers":[{"choice_id":"4385137810"}]}]}]},"emitted_at":1674149669534} +{"stream":"survey_responses","data":{"id":"12731162853","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=SpVNwOtvMvqHvq3zHMXNhDHSmc7HA4m3XTWJpvcSJxvt1b1rvgGaOej3oC_2BolYPy","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731162853","total_time":38,"date_modified":"2021-06-10T09:45:01+00:00","date_created":"2021-06-10T09:44:23+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731162853","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137328"}]},{"id":"667455130","answers":[{"choice_id":"4385137340"}]},{"id":"667455161","answers":[{"choice_id":"4385137469"}]},{"id":"667455172","answers":[{"choice_id":"4385137487"}]},{"id":"667455179","answers":[{"choice_id":"4385137492"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137701"}]},{"id":"667455205","answers":[{"choice_id":"4385137743"}]},{"id":"667455210","answers":[{"choice_id":"4385137777"}]},{"id":"667455212","answers":[{"choice_id":"4385137795"}]},{"id":"667455215","answers":[{"choice_id":"4385137811"}]}]}]},"emitted_at":1674149669535} +{"stream":"survey_responses","data":{"id":"12731180052","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=JiwKhmlzAA4BE2G7wLdiXM8p7qGKqy7FVolioM_2BFHLNo4MIvbtO7U2T2MtIhjHQT","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731180052","total_time":40,"date_modified":"2021-06-10T09:52:49+00:00","date_created":"2021-06-10T09:52:09+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731180052","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137324"}]},{"id":"667455130","answers":[{"choice_id":"4385137342"}]},{"id":"667455161","answers":[{"choice_id":"4385137468"}]},{"id":"667455172","answers":[{"choice_id":"4385137487"}]},{"id":"667455179","answers":[{"choice_id":"4385137494"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137702"}]},{"id":"667455205","answers":[{"choice_id":"4385137740"}]},{"id":"667455210","answers":[{"choice_id":"4385137775"}]},{"id":"667455212","answers":[{"choice_id":"4385137794"}]},{"id":"667455215","answers":[{"choice_id":"4385137812"}]}]}]},"emitted_at":1674149669535} +{"stream":"survey_responses","data":{"id":"12731198914","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=4lczf0MNm2lOpWvmpCXz8qaQFfYxrkqDyo3Na6JqZ3SoyW9vfVtRkWihGPcm3TJ9","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731198914","total_time":37,"date_modified":"2021-06-10T10:01:22+00:00","date_created":"2021-06-10T10:00:44+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731198914","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137329"}]},{"id":"667455130","answers":[{"choice_id":"4385137345"}]},{"id":"667455161","answers":[{"choice_id":"4385137472"}]},{"id":"667455172","answers":[{"choice_id":"4385137485"}]},{"id":"667455179","answers":[{"choice_id":"4385137494"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137700"}]},{"id":"667455205","answers":[{"choice_id":"4385137741"}]},{"id":"667455210","answers":[{"choice_id":"4385137776"}]},{"id":"667455212","answers":[{"choice_id":"4385137795"}]},{"id":"667455215","answers":[{"choice_id":"4385137811"}]}]}]},"emitted_at":1674149669535} +{"stream":"survey_responses","data":{"id":"12731219287","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=BuKPZoR_2B7yhJkjbyRrpCv9Xsryak851Sl2u8K17_2FsYnSAZUFHdu4fJB0umnx5Y9_2B","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731219287","total_time":37,"date_modified":"2021-06-10T10:09:13+00:00","date_created":"2021-06-10T10:08:35+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731219287","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137327"}]},{"id":"667455130","answers":[{"choice_id":"4385137341"}]},{"id":"667455161","answers":[{"choice_id":"4385137470"}]},{"id":"667455172","answers":[{"choice_id":"4385137488"}]},{"id":"667455179","answers":[{"choice_id":"4385137494"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137701"}]},{"id":"667455205","answers":[{"choice_id":"4385137740"}]},{"id":"667455210","answers":[{"choice_id":"4385137776"}]},{"id":"667455212","answers":[{"choice_id":"4385137792"}]},{"id":"667455215","answers":[{"choice_id":"4385137811"}]}]}]},"emitted_at":1674149669536} +{"stream":"survey_responses","data":{"id":"12731238577","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=gYK41YcmDya_2Bvsx_2BqjLe992H7r6ORc6kyUL3YhAqx78syU1tTY9dv_2Fn92J5xM033","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731238577","total_time":37,"date_modified":"2021-06-10T10:16:59+00:00","date_created":"2021-06-10T10:16:21+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731238577","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137327"}]},{"id":"667455130","answers":[{"choice_id":"4385137340"}]},{"id":"667455161","answers":[{"choice_id":"4385137472"}]},{"id":"667455172","answers":[{"choice_id":"4385137485"}]},{"id":"667455179","answers":[{"choice_id":"4385137496"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137702"}]},{"id":"667455205","answers":[{"choice_id":"4385137741"}]},{"id":"667455210","answers":[{"choice_id":"4385137778"}]},{"id":"667455212","answers":[{"choice_id":"4385137793"}]},{"id":"667455215","answers":[{"choice_id":"4385137810"}]}]}]},"emitted_at":1674149669536} +{"stream":"survey_responses","data":{"id":"12731257342","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=gXcd4_2B0crZ3JHyflBVCFpzaABCmJO9PKQzLnjMuvOHPsOS0sIISJZjVscMHtusHw","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731257342","total_time":37,"date_modified":"2021-06-10T10:24:47+00:00","date_created":"2021-06-10T10:24:10+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731257342","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137324"}]},{"id":"667455130","answers":[{"choice_id":"4385137340"}]},{"id":"667455161","answers":[{"choice_id":"4385137471"}]},{"id":"667455172","answers":[{"choice_id":"4385137486"}]},{"id":"667455179","answers":[{"choice_id":"4385137495"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137701"}]},{"id":"667455205","answers":[{"choice_id":"4385137740"}]},{"id":"667455210","answers":[{"choice_id":"4385137782"}]},{"id":"667455212","answers":[{"choice_id":"4385137793"}]},{"id":"667455215","answers":[{"choice_id":"4385137813"}]}]}]},"emitted_at":1674149669536} +{"stream":"survey_responses","data":{"id":"12731276322","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=fdG3OylITjbhJlFfCAIGHmTQ6YpdyOcILnp8DliR5bm9qPSRMG6AkkWm3Gu2gJoP","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731276322","total_time":41,"date_modified":"2021-06-10T10:32:36+00:00","date_created":"2021-06-10T10:31:54+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731276322","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137328"}]},{"id":"667455130","answers":[{"choice_id":"4385137340"}]},{"id":"667455161","answers":[{"choice_id":"4385137468"}]},{"id":"667455172","answers":[{"choice_id":"4385137487"}]},{"id":"667455179","answers":[{"choice_id":"4385137495"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137702"}]},{"id":"667455205","answers":[{"choice_id":"4385137742"}]},{"id":"667455210","answers":[{"choice_id":"4385137776"}]},{"id":"667455212","answers":[{"choice_id":"4385137793"}]},{"id":"667455215","answers":[{"choice_id":"4385137812"}]}]}]},"emitted_at":1674149669537} +{"stream":"survey_responses","data":{"id":"12731296299","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=PijLaybIFW4zp3WXn6Qn_2Bes5snwJCUJdhdklhMDUCFNxV8kYJTspV5CKmi9JxcxR","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731296299","total_time":28,"date_modified":"2021-06-10T10:40:25+00:00","date_created":"2021-06-10T10:39:56+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731296299","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137700"}]},{"id":"667455205","answers":[{"choice_id":"4385137742"}]},{"id":"667455210","answers":[{"choice_id":"4385137778"}]},{"id":"667455212","answers":[{"choice_id":"4385137795"}]},{"id":"667455215","answers":[{"choice_id":"4385137812"}]}]}]},"emitted_at":1674149669537} +{"stream":"survey_responses","data":{"id":"12731316167","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=DdWwrUlBvSWJMjuKWSDCTJGmzJlZPpJ9HEf_2F_2BW1pzPCQ9WlJ7Su0kQcly_2B_2F6O8il","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731316167","total_time":37,"date_modified":"2021-06-10T10:48:31+00:00","date_created":"2021-06-10T10:47:54+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731316167","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137327"}]},{"id":"667455130","answers":[{"choice_id":"4385137342"}]},{"id":"667455161","answers":[{"choice_id":"4385137469"}]},{"id":"667455172","answers":[{"choice_id":"4385137487"}]},{"id":"667455179","answers":[{"choice_id":"4385137492"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137700"}]},{"id":"667455205","answers":[{"choice_id":"4385137740"}]},{"id":"667455210","answers":[{"choice_id":"4385137776"}]},{"id":"667455212","answers":[{"choice_id":"4385137797"}]},{"id":"667455215","answers":[{"choice_id":"4385137811"}]}]}]},"emitted_at":1674149669537} +{"stream":"survey_responses","data":{"id":"12731335082","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=JT5nsI3dl0SB9aaAvObos67DXY6qy_2FDXI1TTpgeEv1m3sqvcxy3MhVQQlApbsDQN","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731335082","total_time":37,"date_modified":"2021-06-10T10:56:07+00:00","date_created":"2021-06-10T10:55:30+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731335082","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137325"}]},{"id":"667455130","answers":[{"choice_id":"4385137340"}]},{"id":"667455161","answers":[{"choice_id":"4385137473"}]},{"id":"667455172","answers":[{"choice_id":"4385137487"}]},{"id":"667455179","answers":[{"choice_id":"4385137493"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137701"}]},{"id":"667455205","answers":[{"choice_id":"4385137742"}]},{"id":"667455210","answers":[{"choice_id":"4385137782"}]},{"id":"667455212","answers":[{"choice_id":"4385137794"}]},{"id":"667455215","answers":[{"choice_id":"4385137810"}]}]}]},"emitted_at":1674149669538} +{"stream":"survey_responses","data":{"id":"12731354013","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829319","survey_id":"307784834","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=VD2H3n1aqESl1LrF5U_2B7SlCYCH1VXiN11NQ44aSykUk8VdT8zluzTaiFP1WRilVh","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwf91XTSWLx4XNlQvyUVl4Y_3D?respondent_id=12731354013","total_time":37,"date_modified":"2021-06-10T11:03:44+00:00","date_created":"2021-06-10T11:03:07+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784834/responses/12731354013","pages":[{"id":"168830049","questions":[]},{"id":"168830050","questions":[{"id":"667455128","answers":[{"choice_id":"4385137325"}]},{"id":"667455130","answers":[{"choice_id":"4385137344"}]},{"id":"667455161","answers":[{"choice_id":"4385137473"}]},{"id":"667455172","answers":[{"choice_id":"4385137488"}]},{"id":"667455179","answers":[{"choice_id":"4385137493"}]}]},{"id":"168830060","questions":[{"id":"667455202","answers":[{"choice_id":"4385137701"}]},{"id":"667455205","answers":[{"choice_id":"4385137740"}]},{"id":"667455210","answers":[{"choice_id":"4385137781"}]},{"id":"667455212","answers":[{"choice_id":"4385137792"}]},{"id":"667455215","answers":[{"choice_id":"4385137811"}]}]}]},"emitted_at":1674149669538} +{"stream":"survey_responses","data":{"id":"12731046667","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=3m5bJqYOPzi9hTHWeQaMVChOOH_2FutIpC1GCzcEhDLsPuEi5IsDvCVew50TpjMJ7_2B","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731046667","total_time":36,"date_modified":"2021-06-10T08:50:07+00:00","date_created":"2021-06-10T08:49:30+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731046667","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177067"}]},{"id":"667462114","answers":[{"choice_id":"4385177098"}]},{"id":"667462122","answers":[{"choice_id":"4385177138"}]},{"id":"667462126","answers":[{"choice_id":"4385177155"}]},{"id":"667462130","answers":[{"choice_id":"4385177172"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177202"}]},{"id":"667462136","answers":[{"choice_id":"4385177213"}]},{"id":"667462138","answers":[{"choice_id":"4385177216"}]},{"id":"667462170","answers":[{"choice_id":"4385177381"}]},{"id":"667462172","answers":[{"choice_id":"4385177393"}]}]}]},"emitted_at":1674149671253} +{"stream":"survey_responses","data":{"id":"12731061053","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=RliJfymKsHA5ERiuKeRola_2B_2F2kldmGpI58KjGRQTMy_2F7NOeFnJ8VaeyjrQYqefuv","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731061053","total_time":36,"date_modified":"2021-06-10T08:57:50+00:00","date_created":"2021-06-10T08:57:13+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731061053","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177068"}]},{"id":"667462114","answers":[{"choice_id":"4385177098"}]},{"id":"667462122","answers":[{"choice_id":"4385177139"}]},{"id":"667462126","answers":[{"choice_id":"4385177158"}]},{"id":"667462130","answers":[{"choice_id":"4385177171"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177202"}]},{"id":"667462136","answers":[{"choice_id":"4385177211"}]},{"id":"667462138","answers":[{"choice_id":"4385177217"}]},{"id":"667462170","answers":[{"choice_id":"4385177381"}]},{"id":"667462172","answers":[{"choice_id":"4385177395"}]}]}]},"emitted_at":1674149671254} +{"stream":"survey_responses","data":{"id":"12731076167","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Fbm6tEId2O2bNT8H0BJ8ZuinueLnpLoMwgotsY_2BRD_2FzbvCnhEaxZHye5e5bkXF_2B0","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731076167","total_time":36,"date_modified":"2021-06-10T09:05:33+00:00","date_created":"2021-06-10T09:04:57+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731076167","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177067"}]},{"id":"667462114","answers":[{"choice_id":"4385177097"}]},{"id":"667462122","answers":[{"choice_id":"4385177142"}]},{"id":"667462126","answers":[{"choice_id":"4385177153"}]},{"id":"667462130","answers":[{"choice_id":"4385177172"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177204"}]},{"id":"667462136","answers":[{"choice_id":"4385177210"}]},{"id":"667462138","answers":[{"choice_id":"4385177220"}]},{"id":"667462170","answers":[{"choice_id":"4385177382"}]},{"id":"667462172","answers":[{"choice_id":"4385177392"}]}]}]},"emitted_at":1674149671256} +{"stream":"survey_responses","data":{"id":"12731092606","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=FSRkUyOqh9XslZbpVGw5556THT2fSckee67DmK8vg8QM5E_2BIPpatzKJNVF6E4pI2","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731092606","total_time":36,"date_modified":"2021-06-10T09:13:19+00:00","date_created":"2021-06-10T09:12:43+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731092606","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177066"}]},{"id":"667462114","answers":[{"choice_id":"4385177098"}]},{"id":"667462122","answers":[{"choice_id":"4385177138"}]},{"id":"667462126","answers":[{"choice_id":"4385177153"}]},{"id":"667462130","answers":[{"choice_id":"4385177173"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177202"}]},{"id":"667462136","answers":[{"choice_id":"4385177213"}]},{"id":"667462138","answers":[{"choice_id":"4385177215"}]},{"id":"667462170","answers":[{"choice_id":"4385177381"}]},{"id":"667462172","answers":[{"choice_id":"4385177399"}]}]}]},"emitted_at":1674149671258} +{"stream":"survey_responses","data":{"id":"12731109051","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=hFBXkisB3CTNYQ4UTLe_2FgTWjKwcR0l_2Fk9xXG2L2eiiv2m1A4IK6anbX8e98lxI_2BJ","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731109051","total_time":36,"date_modified":"2021-06-10T09:20:57+00:00","date_created":"2021-06-10T09:20:21+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731109051","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177068"}]},{"id":"667462114","answers":[{"choice_id":"4385177098"}]},{"id":"667462122","answers":[{"choice_id":"4385177139"}]},{"id":"667462126","answers":[{"choice_id":"4385177156"}]},{"id":"667462130","answers":[{"choice_id":"4385177171"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177204"}]},{"id":"667462136","answers":[{"choice_id":"4385177211"}]},{"id":"667462138","answers":[{"choice_id":"4385177220"}]},{"id":"667462170","answers":[{"choice_id":"4385177383"}]},{"id":"667462172","answers":[{"choice_id":"4385177398"}]}]}]},"emitted_at":1674149671259} +{"stream":"survey_responses","data":{"id":"12731125773","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=IitR8qwcQJhjvJZGpnRnQ51uSFMITWI_2Fj71B7P5SgZeC4E3yXEi1_2B_2FMm5wo_2BDV8h","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731125773","total_time":37,"date_modified":"2021-06-10T09:28:41+00:00","date_created":"2021-06-10T09:28:04+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731125773","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177066"}]},{"id":"667462114","answers":[{"choice_id":"4385177099"}]},{"id":"667462122","answers":[{"choice_id":"4385177142"}]},{"id":"667462126","answers":[{"choice_id":"4385177158"}]},{"id":"667462130","answers":[{"choice_id":"4385177171"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177203"}]},{"id":"667462136","answers":[{"choice_id":"4385177211"}]},{"id":"667462138","answers":[{"choice_id":"4385177220"}]},{"id":"667462170","answers":[{"choice_id":"4385177382"}]},{"id":"667462172","answers":[{"choice_id":"4385177392"}]}]}]},"emitted_at":1674149671261} +{"stream":"survey_responses","data":{"id":"12731143496","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=afwrrGApCHDKe6n5FTBrtOaHsGGtP_2BhesVrwRj_2FP25EjYCQxzsAC6aAkUchVScSv","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731143496","total_time":36,"date_modified":"2021-06-10T09:36:22+00:00","date_created":"2021-06-10T09:35:46+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731143496","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177066"}]},{"id":"667462114","answers":[{"choice_id":"4385177097"}]},{"id":"667462122","answers":[{"choice_id":"4385177138"}]},{"id":"667462126","answers":[{"choice_id":"4385177154"}]},{"id":"667462130","answers":[{"choice_id":"4385177174"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177201"}]},{"id":"667462136","answers":[{"choice_id":"4385177213"}]},{"id":"667462138","answers":[{"choice_id":"4385177216"}]},{"id":"667462170","answers":[{"choice_id":"4385177382"}]},{"id":"667462172","answers":[{"choice_id":"4385177392"}]}]}]},"emitted_at":1674149671263} +{"stream":"survey_responses","data":{"id":"12731160592","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=gi5j6iOFt63bX7t4yH9tggXGZlHkMPjNnRuEfb_2BfIFrcSwpamxUO_2B9Y0WXX9oSHD","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731160592","total_time":35,"date_modified":"2021-06-10T09:44:01+00:00","date_created":"2021-06-10T09:43:25+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731160592","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177065"}]},{"id":"667462114","answers":[{"choice_id":"4385177098"}]},{"id":"667462122","answers":[{"choice_id":"4385177142"}]},{"id":"667462126","answers":[{"choice_id":"4385177156"}]},{"id":"667462130","answers":[{"choice_id":"4385177174"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177203"}]},{"id":"667462136","answers":[{"choice_id":"4385177210"}]},{"id":"667462138","answers":[{"choice_id":"4385177219"}]},{"id":"667462170","answers":[{"choice_id":"4385177382"}]},{"id":"667462172","answers":[{"choice_id":"4385177398"}]}]}]},"emitted_at":1674149671264} +{"stream":"survey_responses","data":{"id":"12731177842","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Mdft9tg4e78_2Fa7lJAhODrqVOjXTcfF0kM1rlL9FH_2B4OFTc8svhyUTN194QTJecZV","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731177842","total_time":38,"date_modified":"2021-06-10T09:51:48+00:00","date_created":"2021-06-10T09:51:09+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731177842","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177068"}]},{"id":"667462114","answers":[{"choice_id":"4385177097"}]},{"id":"667462122","answers":[{"choice_id":"4385177141"}]},{"id":"667462126","answers":[{"choice_id":"4385177155"}]},{"id":"667462130","answers":[{"choice_id":"4385177174"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177204"}]},{"id":"667462136","answers":[{"choice_id":"4385177211"}]},{"id":"667462138","answers":[{"choice_id":"4385177220"}]},{"id":"667462170","answers":[{"choice_id":"4385177381"}]},{"id":"667462172","answers":[{"choice_id":"4385177398"}]}]}]},"emitted_at":1674149671266} +{"stream":"survey_responses","data":{"id":"12731196644","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=j0mjP6Z7LrcWGOboY6jmQkq3eLodG5VEJ1xjmK_2FVYi4g_2BLXzw2TXVIZDXlMQfSce","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731196644","total_time":38,"date_modified":"2021-06-10T10:00:23+00:00","date_created":"2021-06-10T09:59:44+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731196644","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177067"}]},{"id":"667462114","answers":[{"choice_id":"4385177096"}]},{"id":"667462122","answers":[{"choice_id":"4385177141"}]},{"id":"667462126","answers":[{"choice_id":"4385177153"}]},{"id":"667462130","answers":[{"choice_id":"4385177174"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177202"}]},{"id":"667462136","answers":[{"choice_id":"4385177211"}]},{"id":"667462138","answers":[{"choice_id":"4385177218"}]},{"id":"667462170","answers":[{"choice_id":"4385177381"}]},{"id":"667462172","answers":[{"choice_id":"4385177393"}]}]}]},"emitted_at":1674149671267} +{"stream":"survey_responses","data":{"id":"12731216845","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=42BF5q8j9sIJ7FZW3oHucGLBgLbhnDLuy54e3nC1dr_2BV65av2cB1XpRMxXE8qLrk","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731216845","total_time":35,"date_modified":"2021-06-10T10:08:14+00:00","date_created":"2021-06-10T10:07:38+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731216845","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177066"}]},{"id":"667462114","answers":[{"choice_id":"4385177099"}]},{"id":"667462122","answers":[{"choice_id":"4385177139"}]},{"id":"667462126","answers":[{"choice_id":"4385177158"}]},{"id":"667462130","answers":[{"choice_id":"4385177172"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177202"}]},{"id":"667462136","answers":[{"choice_id":"4385177211"}]},{"id":"667462138","answers":[{"choice_id":"4385177215"}]},{"id":"667462170","answers":[{"choice_id":"4385177383"}]},{"id":"667462172","answers":[{"choice_id":"4385177392"}]}]}]},"emitted_at":1674149671269} +{"stream":"survey_responses","data":{"id":"12731236327","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=NqwagvKjeHPRtNo1Xjgzhlf20oC0V9pmZhKn9M_2FI7d0WQpLl5SvMJmpPx_2FMR8WOA","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731236327","total_time":36,"date_modified":"2021-06-10T10:16:03+00:00","date_created":"2021-06-10T10:15:27+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731236327","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177066"}]},{"id":"667462114","answers":[{"choice_id":"4385177099"}]},{"id":"667462122","answers":[{"choice_id":"4385177138"}]},{"id":"667462126","answers":[{"choice_id":"4385177153"}]},{"id":"667462130","answers":[{"choice_id":"4385177171"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177204"}]},{"id":"667462136","answers":[{"choice_id":"4385177212"}]},{"id":"667462138","answers":[{"choice_id":"4385177214"}]},{"id":"667462170","answers":[{"choice_id":"4385177382"}]},{"id":"667462172","answers":[{"choice_id":"4385177394"}]}]}]},"emitted_at":1674149671270} +{"stream":"survey_responses","data":{"id":"12731255115","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=68xsdhMhxZnM6kEBzq6YOW2Pcy65CdGFnjt47M9pu1JOngmURrmW_2BioZOUdc5iwt","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731255115","total_time":35,"date_modified":"2021-06-10T10:23:53+00:00","date_created":"2021-06-10T10:23:17+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731255115","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177067"}]},{"id":"667462114","answers":[{"choice_id":"4385177095"}]},{"id":"667462122","answers":[{"choice_id":"4385177141"}]},{"id":"667462126","answers":[{"choice_id":"4385177158"}]},{"id":"667462130","answers":[{"choice_id":"4385177172"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177202"}]},{"id":"667462136","answers":[{"choice_id":"4385177211"}]},{"id":"667462138","answers":[{"choice_id":"4385177218"}]},{"id":"667462170","answers":[{"choice_id":"4385177382"}]},{"id":"667462172","answers":[{"choice_id":"4385177395"}]}]}]},"emitted_at":1674149671272} +{"stream":"survey_responses","data":{"id":"12731273731","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=5V96fOaPSetDK7aFZp_2BQMlsfP5WVMuaklhLOVJzxjkLao_2BG1CUfWUAOvXCoIqzu7","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731273731","total_time":35,"date_modified":"2021-06-10T10:31:32+00:00","date_created":"2021-06-10T10:30:56+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731273731","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177065"}]},{"id":"667462114","answers":[{"choice_id":"4385177096"}]},{"id":"667462122","answers":[{"choice_id":"4385177140"}]},{"id":"667462126","answers":[{"choice_id":"4385177155"}]},{"id":"667462130","answers":[{"choice_id":"4385177171"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177203"}]},{"id":"667462136","answers":[{"choice_id":"4385177210"}]},{"id":"667462138","answers":[{"choice_id":"4385177215"}]},{"id":"667462170","answers":[{"choice_id":"4385177381"}]},{"id":"667462172","answers":[{"choice_id":"4385177398"}]}]}]},"emitted_at":1674149671273} +{"stream":"survey_responses","data":{"id":"12731294056","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=yqW6gwVkcj7CYuN1hQxBNE2_2BGnnSO_2FMoG_2FJOr_2Bl9LOFwGfvlISTxAL6DegDXn5gw","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731294056","total_time":36,"date_modified":"2021-06-10T10:39:38+00:00","date_created":"2021-06-10T10:39:02+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731294056","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177067"}]},{"id":"667462114","answers":[{"choice_id":"4385177096"}]},{"id":"667462122","answers":[{"choice_id":"4385177142"}]},{"id":"667462126","answers":[{"choice_id":"4385177154"}]},{"id":"667462130","answers":[{"choice_id":"4385177172"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177204"}]},{"id":"667462136","answers":[{"choice_id":"4385177213"}]},{"id":"667462138","answers":[{"choice_id":"4385177214"}]},{"id":"667462170","answers":[{"choice_id":"4385177383"}]},{"id":"667462172","answers":[{"choice_id":"4385177393"}]}]}]},"emitted_at":1674149671275} +{"stream":"survey_responses","data":{"id":"12731313837","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=D85HuJHtbiPW1vl_2FIvU2ocvUVCdJggW_2F0WR5WpMSLCGZaGIg8UdLj54drv_2FcmRMz","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731313837","total_time":37,"date_modified":"2021-06-10T10:47:34+00:00","date_created":"2021-06-10T10:46:57+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731313837","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177067"}]},{"id":"667462114","answers":[{"choice_id":"4385177097"}]},{"id":"667462122","answers":[{"choice_id":"4385177139"}]},{"id":"667462126","answers":[{"choice_id":"4385177156"}]},{"id":"667462130","answers":[{"choice_id":"4385177172"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177200"}]},{"id":"667462136","answers":[{"choice_id":"4385177212"}]},{"id":"667462138","answers":[{"choice_id":"4385177220"}]},{"id":"667462170","answers":[{"choice_id":"4385177382"}]},{"id":"667462172","answers":[{"choice_id":"4385177395"}]}]}]},"emitted_at":1674149671276} +{"stream":"survey_responses","data":{"id":"12731332767","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=hztkSX5ztC9RUhcoXXjOEZsT0_2BjH5f6tNA9Fh0afPXTD4285Qb8YReTOBLbelKig","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731332767","total_time":35,"date_modified":"2021-06-10T10:55:09+00:00","date_created":"2021-06-10T10:54:33+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731332767","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177068"}]},{"id":"667462114","answers":[{"choice_id":"4385177096"}]},{"id":"667462122","answers":[{"choice_id":"4385177139"}]},{"id":"667462126","answers":[{"choice_id":"4385177158"}]},{"id":"667462130","answers":[{"choice_id":"4385177172"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177204"}]},{"id":"667462136","answers":[{"choice_id":"4385177210"}]},{"id":"667462138","answers":[{"choice_id":"4385177217"}]},{"id":"667462170","answers":[{"choice_id":"4385177382"}]},{"id":"667462172","answers":[{"choice_id":"4385177398"}]}]}]},"emitted_at":1674149671277} +{"stream":"survey_responses","data":{"id":"12731351604","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829931","survey_id":"307785448","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=4s6X1KZyt2TAwDeH6zLlLbhI1hJkumblOrBysCkO3gPTDp7tdY9BOD_2FvWkRVgEAz","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxi9bVow7JzoPHlGgDld6S4o_3D?respondent_id=12731351604","total_time":36,"date_modified":"2021-06-10T11:02:48+00:00","date_created":"2021-06-10T11:02:12+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785448/responses/12731351604","pages":[{"id":"168831470","questions":[]},{"id":"168831471","questions":[{"id":"667462113","answers":[{"choice_id":"4385177068"}]},{"id":"667462114","answers":[{"choice_id":"4385177098"}]},{"id":"667462122","answers":[{"choice_id":"4385177138"}]},{"id":"667462126","answers":[{"choice_id":"4385177154"}]},{"id":"667462130","answers":[{"choice_id":"4385177172"}]}]},{"id":"168831478","questions":[{"id":"667462135","answers":[{"choice_id":"4385177200"}]},{"id":"667462136","answers":[{"choice_id":"4385177213"}]},{"id":"667462138","answers":[{"choice_id":"4385177218"}]},{"id":"667462170","answers":[{"choice_id":"4385177381"}]},{"id":"667462172","answers":[{"choice_id":"4385177397"}]}]}]},"emitted_at":1674149671278} +{"stream":"survey_responses","data":{"id":"12731027651","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=fTFc6V6Lifr7HoJ_2Bl_2Bc74bpg_2B9JRwagJN_2FN3k2RwdJ8CrOldvM08uLZMXEGk5uR_2B","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731027651","total_time":29,"date_modified":"2021-06-10T08:39:30+00:00","date_created":"2021-06-10T08:39:01+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731027651","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138588"}]},{"id":"667455351","answers":[{"choice_id":"4385138599"}]},{"id":"667455358","answers":[{"choice_id":"4385138621"}]},{"id":"667455370","answers":[{"choice_id":"4385138707"}]},{"id":"667455395","answers":[{"choice_id":"4385138780"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139016"}]},{"id":"667455439","answers":[{"choice_id":"4385139062"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139232"}]},{"id":"667455466","answers":[{"choice_id":"4385139246"}]}]}]},"emitted_at":1674149672891} +{"stream":"survey_responses","data":{"id":"12731035521","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=P3yPukgvQbdQ0TVJQrLvSnRv3NllOsosNLSuGp34tGmMRN3SsXsVqXxRkHoUAZzR","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731035521","total_time":27,"date_modified":"2021-06-10T08:43:50+00:00","date_created":"2021-06-10T08:43:23+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731035521","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138593"}]},{"id":"667455351","answers":[{"choice_id":"4385138600"}]},{"id":"667455358","answers":[{"choice_id":"4385138623"}]},{"id":"667455370","answers":[{"choice_id":"4385138700"}]},{"id":"667455395","answers":[{"choice_id":"4385138780"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139018"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139231"}]},{"id":"667455466","answers":[{"choice_id":"4385139244"}]}]}]},"emitted_at":1674149672893} +{"stream":"survey_responses","data":{"id":"12731049611","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=1ZxbynfKwvppvatsw2rpbv64I6YRz_2BRUyTcv8dLIbh63fwCm_2Fl9TFtbLXUoePm1q","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731049611","total_time":27,"date_modified":"2021-06-10T08:51:37+00:00","date_created":"2021-06-10T08:51:09+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731049611","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138588"}]},{"id":"667455351","answers":[{"choice_id":"4385138598"}]},{"id":"667455358","answers":[{"choice_id":"4385138623"}]},{"id":"667455370","answers":[{"choice_id":"4385138701"}]},{"id":"667455395","answers":[{"choice_id":"4385138782"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139017"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139232"}]},{"id":"667455466","answers":[{"choice_id":"4385139245"}]}]}]},"emitted_at":1674149672895} +{"stream":"survey_responses","data":{"id":"12731064110","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Vxei42yDMEVFSnyt9M3fpCOreC5nzmSKyEY9iwPt1QtQFzPyFiaGMuw2XQKlF4Tu","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731064110","total_time":27,"date_modified":"2021-06-10T08:59:20+00:00","date_created":"2021-06-10T08:58:52+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731064110","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138591"}]},{"id":"667455351","answers":[{"choice_id":"4385138600"}]},{"id":"667455358","answers":[{"choice_id":"4385138620"}]},{"id":"667455370","answers":[{"choice_id":"4385138706"}]},{"id":"667455395","answers":[{"choice_id":"4385138782"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139013"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139112"}]},{"id":"667455463","answers":[{"choice_id":"4385139231"}]},{"id":"667455466","answers":[{"choice_id":"4385139246"}]}]}]},"emitted_at":1674149672897} +{"stream":"survey_responses","data":{"id":"12731079723","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=pucu83BOi19Z2n_2Bq7Cmuq6GrV4auydnhRuXlDsCZ5DwqqAhRkuX0GL8i_2FXCRgVnb","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731079723","total_time":27,"date_modified":"2021-06-10T09:07:03+00:00","date_created":"2021-06-10T09:06:36+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731079723","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138589"}]},{"id":"667455351","answers":[{"choice_id":"4385138599"}]},{"id":"667455358","answers":[{"choice_id":"4385138622"}]},{"id":"667455370","answers":[{"choice_id":"4385138707"}]},{"id":"667455395","answers":[{"choice_id":"4385138780"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139016"}]},{"id":"667455439","answers":[{"choice_id":"4385139063"}]},{"id":"667455443","answers":[{"choice_id":"4385139111"}]},{"id":"667455463","answers":[{"choice_id":"4385139235"}]},{"id":"667455466","answers":[{"choice_id":"4385139244"}]}]}]},"emitted_at":1674149672898} +{"stream":"survey_responses","data":{"id":"12731096120","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=cmwD6t6spTjvPh8zt8wpzOowMPktBxJBhl8ROXhWK7NsNRfaf9VJ51wtPZfMsbPJ","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731096120","total_time":27,"date_modified":"2021-06-10T09:14:48+00:00","date_created":"2021-06-10T09:14:21+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731096120","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138593"}]},{"id":"667455351","answers":[{"choice_id":"4385138597"}]},{"id":"667455358","answers":[{"choice_id":"4385138623"}]},{"id":"667455370","answers":[{"choice_id":"4385138706"}]},{"id":"667455395","answers":[{"choice_id":"4385138780"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139016"}]},{"id":"667455439","answers":[{"choice_id":"4385139063"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139235"}]},{"id":"667455466","answers":[{"choice_id":"4385139245"}]}]}]},"emitted_at":1674149672900} +{"stream":"survey_responses","data":{"id":"12731112612","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=tYfRsLpnvLXiDU1aSXTH5nIXnauCRjmyXNWWEYT8RsVkytyEn7W9JT8TX_2FQ_2FZXmm","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731112612","total_time":27,"date_modified":"2021-06-10T09:22:26+00:00","date_created":"2021-06-10T09:21:59+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731112612","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138593"}]},{"id":"667455351","answers":[{"choice_id":"4385138595"}]},{"id":"667455358","answers":[{"choice_id":"4385138625"}]},{"id":"667455370","answers":[{"choice_id":"4385138700"}]},{"id":"667455395","answers":[{"choice_id":"4385138779"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139014"}]},{"id":"667455439","answers":[{"choice_id":"4385139063"}]},{"id":"667455443","answers":[{"choice_id":"4385139110"}]},{"id":"667455463","answers":[{"choice_id":"4385139230"}]},{"id":"667455466","answers":[{"choice_id":"4385139245"}]}]}]},"emitted_at":1674149672901} +{"stream":"survey_responses","data":{"id":"12731129209","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Smvc_2Fhq34btK33i0b1sGxYeWInTkfyhJ_2BYMIBz_2B0I9Z2ZIyvlPNu3h_2B65f84DuA0","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731129209","total_time":27,"date_modified":"2021-06-10T09:30:08+00:00","date_created":"2021-06-10T09:29:41+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731129209","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138588"}]},{"id":"667455351","answers":[{"choice_id":"4385138597"}]},{"id":"667455358","answers":[{"choice_id":"4385138622"}]},{"id":"667455370","answers":[{"choice_id":"4385138704"}]},{"id":"667455395","answers":[{"choice_id":"4385138779"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139015"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139111"}]},{"id":"667455463","answers":[{"choice_id":"4385139234"}]},{"id":"667455466","answers":[{"choice_id":"4385139244"}]}]}]},"emitted_at":1674149672903} +{"stream":"survey_responses","data":{"id":"12731147035","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=U9JFMHqI683O1sqxW8mLF_2FgU_2F7fYGjSSm6LScE6pu2LDPRKAAVQXvZThLKDp2GXJ","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731147035","total_time":27,"date_modified":"2021-06-10T09:37:50+00:00","date_created":"2021-06-10T09:37:23+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731147035","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138589"}]},{"id":"667455351","answers":[{"choice_id":"4385138595"}]},{"id":"667455358","answers":[{"choice_id":"4385138625"}]},{"id":"667455370","answers":[{"choice_id":"4385138703"}]},{"id":"667455395","answers":[{"choice_id":"4385138781"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139017"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139110"}]},{"id":"667455463","answers":[{"choice_id":"4385139236"}]},{"id":"667455466","answers":[{"choice_id":"4385139245"}]}]}]},"emitted_at":1674149672904} +{"stream":"survey_responses","data":{"id":"12731164403","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=0jJiVT47Abo_2BkHRNm2_2FqakaCDR5LNaVs9r5z_2BNCgUb1UPEiUm95gFyEF3xtdkYv3","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731164403","total_time":27,"date_modified":"2021-06-10T09:45:34+00:00","date_created":"2021-06-10T09:45:06+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731164403","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138593"}]},{"id":"667455351","answers":[{"choice_id":"4385138600"}]},{"id":"667455358","answers":[{"choice_id":"4385138626"}]},{"id":"667455370","answers":[{"choice_id":"4385138701"}]},{"id":"667455395","answers":[{"choice_id":"4385138779"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139018"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139235"}]},{"id":"667455466","answers":[{"choice_id":"4385139245"}]}]}]},"emitted_at":1674149672906} +{"stream":"survey_responses","data":{"id":"12731181688","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=UQZSADafI1w57hYP_2FS2NflQKw4HeCD0bqS8NFrI480xqhT_2BmBKvsbhwZESEP6bWH","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731181688","total_time":33,"date_modified":"2021-06-10T09:53:29+00:00","date_created":"2021-06-10T09:52:55+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731181688","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138592"}]},{"id":"667455351","answers":[{"choice_id":"4385138598"}]},{"id":"667455358","answers":[{"choice_id":"4385138622"}]},{"id":"667455370","answers":[{"choice_id":"4385138707"}]},{"id":"667455395","answers":[{"choice_id":"4385138779"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139013"}]},{"id":"667455439","answers":[{"choice_id":"4385139062"}]},{"id":"667455443","answers":[{"choice_id":"4385139112"}]},{"id":"667455463","answers":[{"choice_id":"4385139230"}]},{"id":"667455466","answers":[{"choice_id":"4385139246"}]}]}]},"emitted_at":1674149672907} +{"stream":"survey_responses","data":{"id":"12731200697","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Z_2FtAEFehOtxFbKh3vENz8bUgBufRs3dp1FPH_2BaixcDbpWdxRX3s0ydAEfVu_2F_2FV9k","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731200697","total_time":27,"date_modified":"2021-06-10T10:01:55+00:00","date_created":"2021-06-10T10:01:27+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731200697","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138589"}]},{"id":"667455351","answers":[{"choice_id":"4385138598"}]},{"id":"667455358","answers":[{"choice_id":"4385138622"}]},{"id":"667455370","answers":[{"choice_id":"4385138706"}]},{"id":"667455395","answers":[{"choice_id":"4385138779"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139013"}]},{"id":"667455439","answers":[{"choice_id":"4385139063"}]},{"id":"667455443","answers":[{"choice_id":"4385139112"}]},{"id":"667455463","answers":[{"choice_id":"4385139233"}]},{"id":"667455466","answers":[{"choice_id":"4385139246"}]}]}]},"emitted_at":1674149672909} +{"stream":"survey_responses","data":{"id":"12731221002","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=YYEQ9YPblwXypUXP9UsD2QOQI_2B52u8EQSph1_2FmToJDM9mtFZbqeiOLVv8CbSN_2BdL","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731221002","total_time":27,"date_modified":"2021-06-10T10:09:45+00:00","date_created":"2021-06-10T10:09:18+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731221002","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138592"}]},{"id":"667455351","answers":[{"choice_id":"4385138600"}]},{"id":"667455358","answers":[{"choice_id":"4385138620"}]},{"id":"667455370","answers":[{"choice_id":"4385138702"}]},{"id":"667455395","answers":[{"choice_id":"4385138779"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139017"}]},{"id":"667455439","answers":[{"choice_id":"4385139062"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139233"}]},{"id":"667455466","answers":[{"choice_id":"4385139246"}]}]}]},"emitted_at":1674149672910} +{"stream":"survey_responses","data":{"id":"12731240798","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=4ZdZmIl45awCiUkNXcRb9vC0pYIZMfHtCv3apho2x9McRs1lDMv5yNnqz4z3VnSP","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731240798","total_time":27,"date_modified":"2021-06-10T10:17:43+00:00","date_created":"2021-06-10T10:17:16+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731240798","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138590"}]},{"id":"667455351","answers":[{"choice_id":"4385138600"}]},{"id":"667455358","answers":[{"choice_id":"4385138620"}]},{"id":"667455370","answers":[{"choice_id":"4385138703"}]},{"id":"667455395","answers":[{"choice_id":"4385138780"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139018"}]},{"id":"667455439","answers":[{"choice_id":"4385139062"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139230"}]},{"id":"667455466","answers":[{"choice_id":"4385139244"}]}]}]},"emitted_at":1674149672912} +{"stream":"survey_responses","data":{"id":"12731258961","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=emSG54_2BrHmGYvPyc21uSnPZeh8nU2iPahv_2B21isNydKP_2Bl4t3C_2B821nvNucSSxD_2F","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731258961","total_time":27,"date_modified":"2021-06-10T10:25:19+00:00","date_created":"2021-06-10T10:24:52+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731258961","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138588"}]},{"id":"667455351","answers":[{"choice_id":"4385138596"}]},{"id":"667455358","answers":[{"choice_id":"4385138624"}]},{"id":"667455370","answers":[{"choice_id":"4385138701"}]},{"id":"667455395","answers":[{"choice_id":"4385138780"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139016"}]},{"id":"667455439","answers":[{"choice_id":"4385139062"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139235"}]},{"id":"667455466","answers":[{"choice_id":"4385139245"}]}]}]},"emitted_at":1674149672913} +{"stream":"survey_responses","data":{"id":"12731278204","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=IqIG55XKRRDg9SlyFaGnS3M3bEcCu3Kc0adBsNxgJoXgsm_2FSsAZO5dQiHmAg137N","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731278204","total_time":29,"date_modified":"2021-06-10T10:33:09+00:00","date_created":"2021-06-10T10:32:40+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731278204","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138589"}]},{"id":"667455351","answers":[{"choice_id":"4385138596"}]},{"id":"667455358","answers":[{"choice_id":"4385138621"}]},{"id":"667455370","answers":[{"choice_id":"4385138705"}]},{"id":"667455395","answers":[{"choice_id":"4385138780"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139016"}]},{"id":"667455439","answers":[{"choice_id":"4385139063"}]},{"id":"667455443","answers":[{"choice_id":"4385139113"}]},{"id":"667455463","answers":[{"choice_id":"4385139232"}]},{"id":"667455466","answers":[{"choice_id":"4385139244"}]}]}]},"emitted_at":1674149672914} +{"stream":"survey_responses","data":{"id":"12731297693","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=4YsTEO_2Ft1AqmjnchtBZcCuBm0IyfVnOc8GnFYBmeTI3DsacLLtX6HINSLOXrSTvD","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731297693","total_time":27,"date_modified":"2021-06-10T10:40:58+00:00","date_created":"2021-06-10T10:40:30+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731297693","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138588"}]},{"id":"667455351","answers":[{"choice_id":"4385138598"}]},{"id":"667455358","answers":[{"choice_id":"4385138626"}]},{"id":"667455370","answers":[{"choice_id":"4385138704"}]},{"id":"667455395","answers":[{"choice_id":"4385138780"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139015"}]},{"id":"667455439","answers":[{"choice_id":"4385139063"}]},{"id":"667455443","answers":[{"choice_id":"4385139111"}]},{"id":"667455463","answers":[{"choice_id":"4385139230"}]},{"id":"667455466","answers":[{"choice_id":"4385139244"}]}]}]},"emitted_at":1674149672916} +{"stream":"survey_responses","data":{"id":"12731317951","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=0MbtsVOF4vEh5Xcf2H_2B4YhWcgeBtjnt_2BlJxPWFG88HIYuNIOdDcQkUMEv2VCZHUT","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731317951","total_time":27,"date_modified":"2021-06-10T10:49:06+00:00","date_created":"2021-06-10T10:48:39+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731317951","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138589"}]},{"id":"667455351","answers":[{"choice_id":"4385138596"}]},{"id":"667455358","answers":[{"choice_id":"4385138624"}]},{"id":"667455370","answers":[{"choice_id":"4385138702"}]},{"id":"667455395","answers":[{"choice_id":"4385138779"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139018"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139109"}]},{"id":"667455463","answers":[{"choice_id":"4385139236"}]},{"id":"667455466","answers":[{"choice_id":"4385139244"}]}]}]},"emitted_at":1674149672917} +{"stream":"survey_responses","data":{"id":"12731336744","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=jRZyZbcPITg018MLWZvCHAcG0IsxU_2BF2d4PQO0uZu8xhWEPv58hIqjKkEBTk1g1x","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731336744","total_time":27,"date_modified":"2021-06-10T10:56:40+00:00","date_created":"2021-06-10T10:56:13+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731336744","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138591"}]},{"id":"667455351","answers":[{"choice_id":"4385138596"}]},{"id":"667455358","answers":[{"choice_id":"4385138623"}]},{"id":"667455370","answers":[{"choice_id":"4385138702"}]},{"id":"667455395","answers":[{"choice_id":"4385138781"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139016"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139113"}]},{"id":"667455463","answers":[{"choice_id":"4385139234"}]},{"id":"667455466","answers":[{"choice_id":"4385139246"}]}]}]},"emitted_at":1674149672918} +{"stream":"survey_responses","data":{"id":"12731356183","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843442","survey_id":"307784863","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=j2Vv3hWWCKKX8TGm3kD6g4UQCdPiw0tyfJlXlm3Yr4aHlHW_2FZ_2FCSgfXWR8mLWGn0","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XGwAs0GsZ1qsocisThgUFPk0_3D?respondent_id=12731356183","total_time":28,"date_modified":"2021-06-10T11:04:28+00:00","date_created":"2021-06-10T11:04:00+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784863/responses/12731356183","pages":[{"id":"168830093","questions":[]},{"id":"168830094","questions":[{"id":"667455348","answers":[{"choice_id":"4385138593"}]},{"id":"667455351","answers":[{"choice_id":"4385138600"}]},{"id":"667455358","answers":[{"choice_id":"4385138621"}]},{"id":"667455370","answers":[{"choice_id":"4385138702"}]},{"id":"667455395","answers":[{"choice_id":"4385138782"}]}]},{"id":"168830108","questions":[{"id":"667455427","answers":[{"choice_id":"4385139018"}]},{"id":"667455439","answers":[{"choice_id":"4385139064"}]},{"id":"667455443","answers":[{"choice_id":"4385139110"}]},{"id":"667455463","answers":[{"choice_id":"4385139233"}]},{"id":"667455466","answers":[{"choice_id":"4385139244"}]}]}]},"emitted_at":1674149672919} +{"stream":"survey_responses","data":{"id":"12731028687","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=dUjh6A_2FaiaLmSiByVq0EnrrvhqLUItqI0TokJUP8jl9SbUi5cd6hNui1hNqGv56Z","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731028687","total_time":33,"date_modified":"2021-06-10T08:40:08+00:00","date_created":"2021-06-10T08:39:35+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731028687","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137907"}]},{"id":"667455240","answers":[{"choice_id":"4385137926"}]},{"id":"667455243","answers":[{"choice_id":"4385137932"}]},{"id":"667455245","answers":[{"choice_id":"4385137947"}]},{"id":"667455263","answers":[{"choice_id":"4385138061"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138109"}]},{"id":"667455272","answers":[{"choice_id":"4385138133"}]},{"id":"667455276","answers":[{"choice_id":"4385138157"}]},{"id":"667455290","answers":[{"choice_id":"4385138210"}]},{"id":"667455293","answers":[{"choice_id":"4385138240"}]}]}]},"emitted_at":1674149674733} +{"stream":"survey_responses","data":{"id":"12731036487","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=5ir6yV1yx1xcxnDqd5CbKT7hxkDCbqeG_2BHctWsXeZb015fsixx9pWXx0NgTuAnPh","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731036487","total_time":31,"date_modified":"2021-06-10T08:44:28+00:00","date_created":"2021-06-10T08:43:56+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731036487","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137911"}]},{"id":"667455240","answers":[{"choice_id":"4385137926"}]},{"id":"667455243","answers":[{"choice_id":"4385137935"}]},{"id":"667455245","answers":[{"choice_id":"4385137946"}]},{"id":"667455263","answers":[{"choice_id":"4385138064"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138110"}]},{"id":"667455272","answers":[{"choice_id":"4385138126"}]},{"id":"667455276","answers":[{"choice_id":"4385138156"}]},{"id":"667455290","answers":[{"choice_id":"4385138210"}]},{"id":"667455293","answers":[{"choice_id":"4385138243"}]}]}]},"emitted_at":1674149674733} +{"stream":"survey_responses","data":{"id":"12731050647","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=5b_2BmMZNzhREunXwy6FMGNiacjaGpQeXb3F9yW3dcaVweZLGQY8t0kgV3XBTUneNG","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731050647","total_time":31,"date_modified":"2021-06-10T08:52:13+00:00","date_created":"2021-06-10T08:51:41+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731050647","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137907"}]},{"id":"667455240","answers":[{"choice_id":"4385137926"}]},{"id":"667455243","answers":[{"choice_id":"4385137933"}]},{"id":"667455245","answers":[{"choice_id":"4385137949"}]},{"id":"667455263","answers":[{"choice_id":"4385138063"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138108"}]},{"id":"667455272","answers":[{"choice_id":"4385138126"}]},{"id":"667455276","answers":[{"choice_id":"4385138156"}]},{"id":"667455290","answers":[{"choice_id":"4385138216"}]},{"id":"667455293","answers":[{"choice_id":"4385138243"}]}]}]},"emitted_at":1674149674734} +{"stream":"survey_responses","data":{"id":"12731065101","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=ivYcxChrgUjC39ad0me9CZw6BmVAkTQjhWy6e7bR1QV_2BZ7rOJIplHeJnM7IdV0ev","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731065101","total_time":31,"date_modified":"2021-06-10T08:59:55+00:00","date_created":"2021-06-10T08:59:24+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731065101","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137908"}]},{"id":"667455240","answers":[{"choice_id":"4385137925"}]},{"id":"667455243","answers":[{"choice_id":"4385137933"}]},{"id":"667455245","answers":[{"choice_id":"4385137949"}]},{"id":"667455263","answers":[{"choice_id":"4385138061"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138113"}]},{"id":"667455272","answers":[{"choice_id":"4385138131"}]},{"id":"667455276","answers":[{"choice_id":"4385138155"}]},{"id":"667455290","answers":[{"choice_id":"4385138216"}]},{"id":"667455293","answers":[{"choice_id":"4385138243"}]}]}]},"emitted_at":1674149674734} +{"stream":"survey_responses","data":{"id":"12731080861","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=3uxM3bC1ju6y0ZbYbgP_2BvgFNEF0MBf07Z1sR5msqxiFnqdE8BnFPnrip62Dyzq_2FJ","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731080861","total_time":31,"date_modified":"2021-06-10T09:07:39+00:00","date_created":"2021-06-10T09:07:07+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731080861","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137906"}]},{"id":"667455240","answers":[{"choice_id":"4385137924"}]},{"id":"667455243","answers":[{"choice_id":"4385137931"}]},{"id":"667455245","answers":[{"choice_id":"4385137944"}]},{"id":"667455263","answers":[{"choice_id":"4385138061"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138111"}]},{"id":"667455272","answers":[{"choice_id":"4385138129"}]},{"id":"667455276","answers":[{"choice_id":"4385138156"}]},{"id":"667455290","answers":[{"choice_id":"4385138209"}]},{"id":"667455293","answers":[{"choice_id":"4385138243"}]}]}]},"emitted_at":1674149674734} +{"stream":"survey_responses","data":{"id":"12731097254","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=zCaGCrPMhDj216XESYkQCRoFWd5JT94Z_2F_2Bns224Ht4yvHiBMzA0R869PAJ_2FrE_2F_2BS","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731097254","total_time":31,"date_modified":"2021-06-10T09:15:24+00:00","date_created":"2021-06-10T09:14:52+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731097254","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137904"}]},{"id":"667455240","answers":[{"choice_id":"4385137926"}]},{"id":"667455243","answers":[{"choice_id":"4385137936"}]},{"id":"667455245","answers":[{"choice_id":"4385137950"}]},{"id":"667455263","answers":[{"choice_id":"4385138062"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138110"}]},{"id":"667455272","answers":[{"choice_id":"4385138131"}]},{"id":"667455276","answers":[{"choice_id":"4385138155"}]},{"id":"667455290","answers":[{"choice_id":"4385138216"}]},{"id":"667455293","answers":[{"choice_id":"4385138239"}]}]}]},"emitted_at":1674149674735} +{"stream":"survey_responses","data":{"id":"12731113718","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=VoxvgtLVPESmmstl7tMZG_2BuMDM0Aa9E5fCEa86a_2BuXZa6pilvyY520S9G1tWgrRY","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731113718","total_time":31,"date_modified":"2021-06-10T09:23:02+00:00","date_created":"2021-06-10T09:22:30+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731113718","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137907"}]},{"id":"667455240","answers":[{"choice_id":"4385137925"}]},{"id":"667455243","answers":[{"choice_id":"4385137935"}]},{"id":"667455245","answers":[{"choice_id":"4385137949"}]},{"id":"667455263","answers":[{"choice_id":"4385138063"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138110"}]},{"id":"667455272","answers":[{"choice_id":"4385138130"}]},{"id":"667455276","answers":[{"choice_id":"4385138156"}]},{"id":"667455290","answers":[{"choice_id":"4385138210"}]},{"id":"667455293","answers":[{"choice_id":"4385138241"}]}]}]},"emitted_at":1674149674735} +{"stream":"survey_responses","data":{"id":"12731130369","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=z7UD89cfARngMPT8rraMXX6AgkCQ7ffFPZ0s_2BXsx7CQathuufUT_2FM9g_2B2Y8fjZzA","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731130369","total_time":31,"date_modified":"2021-06-10T09:30:44+00:00","date_created":"2021-06-10T09:30:13+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731130369","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137905"}]},{"id":"667455240","answers":[{"choice_id":"4385137927"}]},{"id":"667455243","answers":[{"choice_id":"4385137934"}]},{"id":"667455245","answers":[{"choice_id":"4385137947"}]},{"id":"667455263","answers":[{"choice_id":"4385138064"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138111"}]},{"id":"667455272","answers":[{"choice_id":"4385138130"}]},{"id":"667455276","answers":[{"choice_id":"4385138155"}]},{"id":"667455290","answers":[{"choice_id":"4385138213"}]},{"id":"667455293","answers":[{"choice_id":"4385138239"}]}]}]},"emitted_at":1674149674735} +{"stream":"survey_responses","data":{"id":"12731148248","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=ju0hkPiuicpj80ml6Hl_2F22nPizQlWQLGiYwxc_2FDGxTXzgomNhfw66UPrCE0D636O","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731148248","total_time":33,"date_modified":"2021-06-10T09:38:28+00:00","date_created":"2021-06-10T09:37:55+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731148248","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137907"}]},{"id":"667455240","answers":[{"choice_id":"4385137927"}]},{"id":"667455243","answers":[{"choice_id":"4385137936"}]},{"id":"667455245","answers":[{"choice_id":"4385137949"}]},{"id":"667455263","answers":[{"choice_id":"4385138062"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138112"}]},{"id":"667455272","answers":[{"choice_id":"4385138130"}]},{"id":"667455276","answers":[{"choice_id":"4385138157"}]},{"id":"667455290","answers":[{"choice_id":"4385138214"}]},{"id":"667455293","answers":[{"choice_id":"4385138242"}]}]}]},"emitted_at":1674149674735} +{"stream":"survey_responses","data":{"id":"12731165533","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=CJNhekEYhzbzSqz1R0VHxVjTmJ866MvLYw4aVPGTNOnsy33BOg1S1_2F_2Faesq41w0h","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731165533","total_time":32,"date_modified":"2021-06-10T09:46:10+00:00","date_created":"2021-06-10T09:45:38+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731165533","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137909"}]},{"id":"667455240","answers":[{"choice_id":"4385137927"}]},{"id":"667455243","answers":[{"choice_id":"4385137932"}]},{"id":"667455245","answers":[{"choice_id":"4385137945"}]},{"id":"667455263","answers":[{"choice_id":"4385138062"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138110"}]},{"id":"667455272","answers":[{"choice_id":"4385138128"}]},{"id":"667455276","answers":[{"choice_id":"4385138156"}]},{"id":"667455290","answers":[{"choice_id":"4385138213"}]},{"id":"667455293","answers":[{"choice_id":"4385138240"}]}]}]},"emitted_at":1674149674736} +{"stream":"survey_responses","data":{"id":"12731183192","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=bEWAYVF9toetHEI2_2BOwwwWoYM7U4BuBikNpbjp7LRt5pr8geoSPYOEqTu3ySeLJ0","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731183192","total_time":35,"date_modified":"2021-06-10T09:54:12+00:00","date_created":"2021-06-10T09:53:36+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731183192","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137911"}]},{"id":"667455240","answers":[{"choice_id":"4385137924"}]},{"id":"667455243","answers":[{"choice_id":"4385137935"}]},{"id":"667455245","answers":[{"choice_id":"4385137949"}]},{"id":"667455263","answers":[{"choice_id":"4385138063"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138111"}]},{"id":"667455272","answers":[{"choice_id":"4385138127"}]},{"id":"667455276","answers":[{"choice_id":"4385138156"}]},{"id":"667455290","answers":[{"choice_id":"4385138216"}]},{"id":"667455293","answers":[{"choice_id":"4385138241"}]}]}]},"emitted_at":1674149674736} +{"stream":"survey_responses","data":{"id":"12731202203","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=cVfxg1YUnkHWG5xh95O_2FZH6JrXJKyH7dK1jz4klmqpr6kkJW4Nyg6pAF9RU6K8Yo","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731202203","total_time":33,"date_modified":"2021-06-10T10:02:33+00:00","date_created":"2021-06-10T10:02:00+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731202203","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137908"}]},{"id":"667455240","answers":[{"choice_id":"4385137925"}]},{"id":"667455243","answers":[{"choice_id":"4385137932"}]},{"id":"667455245","answers":[{"choice_id":"4385137947"}]},{"id":"667455263","answers":[{"choice_id":"4385138064"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138109"}]},{"id":"667455272","answers":[{"choice_id":"4385138133"}]},{"id":"667455276","answers":[{"choice_id":"4385138156"}]},{"id":"667455290","answers":[{"choice_id":"4385138214"}]},{"id":"667455293","answers":[{"choice_id":"4385138243"}]}]}]},"emitted_at":1674149674736} +{"stream":"survey_responses","data":{"id":"12731222304","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=YIMZ6ZxwVSC8E_2FINoIUPvqiJVxX2_2B7h72mIiWrB82xJdDZqY_2BGZdCN_2FCfsiwQr_2Bv","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731222304","total_time":31,"date_modified":"2021-06-10T10:10:21+00:00","date_created":"2021-06-10T10:09:50+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731222304","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137909"}]},{"id":"667455240","answers":[{"choice_id":"4385137925"}]},{"id":"667455243","answers":[{"choice_id":"4385137937"}]},{"id":"667455245","answers":[{"choice_id":"4385137948"}]},{"id":"667455263","answers":[{"choice_id":"4385138062"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138108"}]},{"id":"667455272","answers":[{"choice_id":"4385138131"}]},{"id":"667455276","answers":[{"choice_id":"4385138157"}]},{"id":"667455290","answers":[{"choice_id":"4385138209"}]},{"id":"667455293","answers":[{"choice_id":"4385138243"}]}]}]},"emitted_at":1674149674737} +{"stream":"survey_responses","data":{"id":"12731242020","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Qg5RZVMhJ6CDLIoNt_2Fdza6f_2FQJjxJXII1xxBSj3_2Fq6BnYaKChCZI73piSP5nhUtB","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731242020","total_time":31,"date_modified":"2021-06-10T10:18:19+00:00","date_created":"2021-06-10T10:17:48+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731242020","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137904"}]},{"id":"667455240","answers":[{"choice_id":"4385137924"}]},{"id":"667455243","answers":[{"choice_id":"4385137932"}]},{"id":"667455245","answers":[{"choice_id":"4385137948"}]},{"id":"667455263","answers":[{"choice_id":"4385138062"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138109"}]},{"id":"667455272","answers":[{"choice_id":"4385138127"}]},{"id":"667455276","answers":[{"choice_id":"4385138155"}]},{"id":"667455290","answers":[{"choice_id":"4385138211"}]},{"id":"667455293","answers":[{"choice_id":"4385138239"}]}]}]},"emitted_at":1674149674737} +{"stream":"survey_responses","data":{"id":"12731260237","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=mm7m2qJMFmTa3oybMk65fiRc3YyuaqIC4txcJF43fNUph71wneRBif0eIJvUBTcs","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731260237","total_time":31,"date_modified":"2021-06-10T10:25:55+00:00","date_created":"2021-06-10T10:25:23+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731260237","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137906"}]},{"id":"667455240","answers":[{"choice_id":"4385137926"}]},{"id":"667455243","answers":[{"choice_id":"4385137932"}]},{"id":"667455245","answers":[{"choice_id":"4385137948"}]},{"id":"667455263","answers":[{"choice_id":"4385138062"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138112"}]},{"id":"667455272","answers":[{"choice_id":"4385138126"}]},{"id":"667455276","answers":[{"choice_id":"4385138157"}]},{"id":"667455290","answers":[{"choice_id":"4385138211"}]},{"id":"667455293","answers":[{"choice_id":"4385138241"}]}]}]},"emitted_at":1674149674737} +{"stream":"survey_responses","data":{"id":"12731279578","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=FEjSAqhsmwQRvI0nIbXznSQrW_2Fs9Zok9WSmUIEpPh_2Ftrvxkif6aWXIcsv7S3npp4","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731279578","total_time":34,"date_modified":"2021-06-10T10:33:48+00:00","date_created":"2021-06-10T10:33:13+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731279578","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137911"}]},{"id":"667455240","answers":[{"choice_id":"4385137926"}]},{"id":"667455243","answers":[{"choice_id":"4385137934"}]},{"id":"667455245","answers":[{"choice_id":"4385137951"}]},{"id":"667455263","answers":[{"choice_id":"4385138062"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138113"}]},{"id":"667455272","answers":[{"choice_id":"4385138130"}]},{"id":"667455276","answers":[{"choice_id":"4385138156"}]},{"id":"667455290","answers":[{"choice_id":"4385138212"}]},{"id":"667455293","answers":[{"choice_id":"4385138241"}]}]}]},"emitted_at":1674149674738} +{"stream":"survey_responses","data":{"id":"12731299025","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=3IJV7_2FsHEFUvR3AFurcV71Uh5BITVe91sCc8NyxnqEaGN7SJCiiuPB87bmvoaGw1","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731299025","total_time":34,"date_modified":"2021-06-10T10:41:36+00:00","date_created":"2021-06-10T10:41:02+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731299025","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137905"}]},{"id":"667455240","answers":[{"choice_id":"4385137927"}]},{"id":"667455243","answers":[{"choice_id":"4385137936"}]},{"id":"667455245","answers":[{"choice_id":"4385137950"}]},{"id":"667455263","answers":[{"choice_id":"4385138062"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138109"}]},{"id":"667455272","answers":[{"choice_id":"4385138130"}]},{"id":"667455276","answers":[{"choice_id":"4385138157"}]},{"id":"667455290","answers":[{"choice_id":"4385138215"}]},{"id":"667455293","answers":[{"choice_id":"4385138239"}]}]}]},"emitted_at":1674149674738} +{"stream":"survey_responses","data":{"id":"12731319249","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=GlfLviGx8LUycI0kX0T8cF_2FFpkVAIQj5obyoRevuZv4czryRkMD2PZvND9Sb17Up","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731319249","total_time":33,"date_modified":"2021-06-10T10:49:44+00:00","date_created":"2021-06-10T10:49:11+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731319249","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137909"}]},{"id":"667455240","answers":[{"choice_id":"4385137924"}]},{"id":"667455243","answers":[{"choice_id":"4385137931"}]},{"id":"667455245","answers":[{"choice_id":"4385137944"}]},{"id":"667455263","answers":[{"choice_id":"4385138064"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138109"}]},{"id":"667455272","answers":[{"choice_id":"4385138133"}]},{"id":"667455276","answers":[{"choice_id":"4385138157"}]},{"id":"667455290","answers":[{"choice_id":"4385138210"}]},{"id":"667455293","answers":[{"choice_id":"4385138239"}]}]}]},"emitted_at":1674149674738} +{"stream":"survey_responses","data":{"id":"12731338028","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=H_2BVgWdKB0xr0jY94jPfEAo0VmKxhUUF4pufmYQx4fDmquorp1yOG5FlQBPgiHLrx","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731338028","total_time":31,"date_modified":"2021-06-10T10:57:15+00:00","date_created":"2021-06-10T10:56:44+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731338028","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137911"}]},{"id":"667455240","answers":[{"choice_id":"4385137927"}]},{"id":"667455243","answers":[{"choice_id":"4385137932"}]},{"id":"667455245","answers":[{"choice_id":"4385137950"}]},{"id":"667455263","answers":[{"choice_id":"4385138060"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138111"}]},{"id":"667455272","answers":[{"choice_id":"4385138131"}]},{"id":"667455276","answers":[{"choice_id":"4385138155"}]},{"id":"667455290","answers":[{"choice_id":"4385138215"}]},{"id":"667455293","answers":[{"choice_id":"4385138241"}]}]}]},"emitted_at":1674149674739} +{"stream":"survey_responses","data":{"id":"12731357558","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405829776","survey_id":"307784846","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=tfLWR7lVR8G3JC7jFc4srAqfLvwuFEvSW_2Ffbm1CZxKHZ6J8nad7_2FnXzcLHhgXchk","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG0D0cevwMQIvVNwWzg_2Bmm4o_3D?respondent_id=12731357558","total_time":31,"date_modified":"2021-06-10T11:05:04+00:00","date_created":"2021-06-10T11:04:32+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784846/responses/12731357558","pages":[{"id":"168830067","questions":[]},{"id":"168830068","questions":[{"id":"667455236","answers":[{"choice_id":"4385137904"}]},{"id":"667455240","answers":[{"choice_id":"4385137926"}]},{"id":"667455243","answers":[{"choice_id":"4385137932"}]},{"id":"667455245","answers":[{"choice_id":"4385137950"}]},{"id":"667455263","answers":[{"choice_id":"4385138060"}]}]},{"id":"168830074","questions":[{"id":"667455268","answers":[{"choice_id":"4385138108"}]},{"id":"667455272","answers":[{"choice_id":"4385138126"}]},{"id":"667455276","answers":[{"choice_id":"4385138155"}]},{"id":"667455290","answers":[{"choice_id":"4385138214"}]},{"id":"667455293","answers":[{"choice_id":"4385138240"}]}]}]},"emitted_at":1674149674739} +{"stream":"survey_responses","data":{"id":"12731029969","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=APV_2FZ7VTm09gZj5b0f0NUIlksURZJjTLWSe4fg4_2FRKA8y93l4UjzYAPkgAla3AIo","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731029969","total_time":32,"date_modified":"2021-06-10T08:40:52+00:00","date_created":"2021-06-10T08:40:19+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731029969","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138279"}]},{"id":"667455299","answers":[{"choice_id":"4385138286"}]},{"id":"667455301","answers":[{"choice_id":"4385138291"}]},{"id":"667455314","answers":[{"choice_id":"4385138316"}]},{"id":"667455318","answers":[{"choice_id":"4385138386"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138414"}]},{"id":"667455325","answers":[{"choice_id":"4385138427"}]},{"id":"667455328","answers":[{"choice_id":"4385138437"}]},{"id":"667455329","answers":[{"choice_id":"4385138442"}]},{"id":"667455332","answers":[{"choice_id":"4385138468"}]}]}]},"emitted_at":1674149675861} +{"stream":"survey_responses","data":{"id":"12731037636","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=iToNu2Xqp1PZ2VPT32fencmUbPumpf00lYTMhCdGbbG2LXZSZ277leTsfXYDwFtv","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731037636","total_time":32,"date_modified":"2021-06-10T08:45:07+00:00","date_created":"2021-06-10T08:44:34+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731037636","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138279"}]},{"id":"667455299","answers":[{"choice_id":"4385138286"}]},{"id":"667455301","answers":[{"choice_id":"4385138288"}]},{"id":"667455314","answers":[{"choice_id":"4385138315"}]},{"id":"667455318","answers":[{"choice_id":"4385138389"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138413"}]},{"id":"667455325","answers":[{"choice_id":"4385138424"}]},{"id":"667455328","answers":[{"choice_id":"4385138432"}]},{"id":"667455329","answers":[{"choice_id":"4385138446"}]},{"id":"667455332","answers":[{"choice_id":"4385138501"}]}]}]},"emitted_at":1674149675863} +{"stream":"survey_responses","data":{"id":"12731051876","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=QRhskGxFdS_2BJr5Lu32xTKbFyIMZUHZjCRh3x_2Bw039aa_2BRtw9tyy6pHa1Lf_2FC57ic","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731051876","total_time":32,"date_modified":"2021-06-10T08:52:52+00:00","date_created":"2021-06-10T08:52:19+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731051876","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138287"}]},{"id":"667455301","answers":[{"choice_id":"4385138294"}]},{"id":"667455314","answers":[{"choice_id":"4385138318"}]},{"id":"667455318","answers":[{"choice_id":"4385138386"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138416"}]},{"id":"667455325","answers":[{"choice_id":"4385138422"}]},{"id":"667455328","answers":[{"choice_id":"4385138439"}]},{"id":"667455329","answers":[{"choice_id":"4385138446"}]},{"id":"667455332","answers":[{"choice_id":"4385138500"}]}]}]},"emitted_at":1674149675865} +{"stream":"survey_responses","data":{"id":"12731066155","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=McbGtSUJW9mHgwplanqgtYWhK7utHcK1iZyh5FsyiMXjBFayK7UQxIRtfgwtM_2Bca","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731066155","total_time":31,"date_modified":"2021-06-10T09:00:33+00:00","date_created":"2021-06-10T09:00:01+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731066155","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138283"}]},{"id":"667455301","answers":[{"choice_id":"4385138293"}]},{"id":"667455314","answers":[{"choice_id":"4385138317"}]},{"id":"667455318","answers":[{"choice_id":"4385138386"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138414"}]},{"id":"667455325","answers":[{"choice_id":"4385138423"}]},{"id":"667455328","answers":[{"choice_id":"4385138438"}]},{"id":"667455329","answers":[{"choice_id":"4385138442"}]},{"id":"667455332","answers":[{"choice_id":"4385138502"}]}]}]},"emitted_at":1674149675866} +{"stream":"survey_responses","data":{"id":"12731082183","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=IG3sd3Y0qV_2FQGladjE04s9jje9y8SwVJC2bX5QbuekXXduCLZZ2TedtTVTZU5dGc","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731082183","total_time":32,"date_modified":"2021-06-10T09:08:18+00:00","date_created":"2021-06-10T09:07:46+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731082183","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138278"}]},{"id":"667455299","answers":[{"choice_id":"4385138284"}]},{"id":"667455301","answers":[{"choice_id":"4385138288"}]},{"id":"667455314","answers":[{"choice_id":"4385138318"}]},{"id":"667455318","answers":[{"choice_id":"4385138386"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138416"}]},{"id":"667455325","answers":[{"choice_id":"4385138423"}]},{"id":"667455328","answers":[{"choice_id":"4385138438"}]},{"id":"667455329","answers":[{"choice_id":"4385138446"}]},{"id":"667455332","answers":[{"choice_id":"4385138499"}]}]}]},"emitted_at":1674149675868} +{"stream":"survey_responses","data":{"id":"12731098436","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=MV4ZWqb4qCvpVsm9l8DE5bPr9uyUbMzuYGBxSnRcZ1REiHW2ugohyYyDG7vYEDPl","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731098436","total_time":31,"date_modified":"2021-06-10T09:16:00+00:00","date_created":"2021-06-10T09:15:28+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731098436","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138284"}]},{"id":"667455301","answers":[{"choice_id":"4385138291"}]},{"id":"667455314","answers":[{"choice_id":"4385138320"}]},{"id":"667455318","answers":[{"choice_id":"4385138389"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138414"}]},{"id":"667455325","answers":[{"choice_id":"4385138421"}]},{"id":"667455328","answers":[{"choice_id":"4385138439"}]},{"id":"667455329","answers":[{"choice_id":"4385138443"}]},{"id":"667455332","answers":[{"choice_id":"4385138501"}]}]}]},"emitted_at":1674149675869} +{"stream":"survey_responses","data":{"id":"12731115074","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=BHzC6lqHgVLzZ1lCVMXIDPuMoH8yVGnrQsGh6WbIIUI3nRO_2F6cMb_2BuTaApRu6hdt","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731115074","total_time":31,"date_modified":"2021-06-10T09:23:39+00:00","date_created":"2021-06-10T09:23:07+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731115074","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138287"}]},{"id":"667455301","answers":[{"choice_id":"4385138290"}]},{"id":"667455314","answers":[{"choice_id":"4385138318"}]},{"id":"667455318","answers":[{"choice_id":"4385138387"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138416"}]},{"id":"667455325","answers":[{"choice_id":"4385138422"}]},{"id":"667455328","answers":[{"choice_id":"4385138432"}]},{"id":"667455329","answers":[{"choice_id":"4385138441"}]},{"id":"667455332","answers":[{"choice_id":"4385138499"}]}]}]},"emitted_at":1674149675871} +{"stream":"survey_responses","data":{"id":"12731131693","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=WYN2n8yADqGUJHwNtkRzDB8UgTsiinkFRQKNlRO2tOl_2FgYSeg5AwgcAfpVBqPc9Z","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731131693","total_time":31,"date_modified":"2021-06-10T09:31:22+00:00","date_created":"2021-06-10T09:30:50+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731131693","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138278"}]},{"id":"667455299","answers":[{"choice_id":"4385138287"}]},{"id":"667455301","answers":[{"choice_id":"4385138292"}]},{"id":"667455314","answers":[{"choice_id":"4385138317"}]},{"id":"667455318","answers":[{"choice_id":"4385138387"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138414"}]},{"id":"667455325","answers":[{"choice_id":"4385138423"}]},{"id":"667455328","answers":[{"choice_id":"4385138438"}]},{"id":"667455329","answers":[{"choice_id":"4385138444"}]},{"id":"667455332","answers":[{"choice_id":"4385138503"}]}]}]},"emitted_at":1674149675872} +{"stream":"survey_responses","data":{"id":"12731149596","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=I4wWuuErezAO1McHSX4e_2FC_2BNPLPDMiVmc0o7Q21l2qpRsReL4GXorsYqqLman2mF","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731149596","total_time":31,"date_modified":"2021-06-10T09:39:04+00:00","date_created":"2021-06-10T09:38:32+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731149596","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138279"}]},{"id":"667455299","answers":[{"choice_id":"4385138286"}]},{"id":"667455301","answers":[{"choice_id":"4385138288"}]},{"id":"667455314","answers":[{"choice_id":"4385138319"}]},{"id":"667455318","answers":[{"choice_id":"4385138388"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138415"}]},{"id":"667455325","answers":[{"choice_id":"4385138422"}]},{"id":"667455328","answers":[{"choice_id":"4385138434"}]},{"id":"667455329","answers":[{"choice_id":"4385138444"}]},{"id":"667455332","answers":[{"choice_id":"4385138498"}]}]}]},"emitted_at":1674149675874} +{"stream":"survey_responses","data":{"id":"12731167001","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=oF11Z5EpZ0lcqLyzezPfZ7YyRd8_2FNkQHaVMTUl3_2B_2FvwfgV5z5JscZwGxgOXTCvE_2F","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731167001","total_time":32,"date_modified":"2021-06-10T09:46:50+00:00","date_created":"2021-06-10T09:46:17+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731167001","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138279"}]},{"id":"667455299","answers":[{"choice_id":"4385138282"}]},{"id":"667455301","answers":[{"choice_id":"4385138295"}]},{"id":"667455314","answers":[{"choice_id":"4385138320"}]},{"id":"667455318","answers":[{"choice_id":"4385138386"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138414"}]},{"id":"667455325","answers":[{"choice_id":"4385138426"}]},{"id":"667455328","answers":[{"choice_id":"4385138434"}]},{"id":"667455329","answers":[{"choice_id":"4385138441"}]},{"id":"667455332","answers":[{"choice_id":"4385138502"}]}]}]},"emitted_at":1674149675875} +{"stream":"survey_responses","data":{"id":"12731184662","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=2m4cTOSjC_2FTrSbvTeTRqC4CdH_2F10I0y0VrEPTPWCsU9zVgHoB7Jj9EFyjh7Eso8A","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731184662","total_time":35,"date_modified":"2021-06-10T09:54:53+00:00","date_created":"2021-06-10T09:54:17+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731184662","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138284"}]},{"id":"667455301","answers":[{"choice_id":"4385138292"}]},{"id":"667455314","answers":[{"choice_id":"4385138315"}]},{"id":"667455318","answers":[{"choice_id":"4385138386"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138412"}]},{"id":"667455325","answers":[{"choice_id":"4385138421"}]},{"id":"667455328","answers":[{"choice_id":"4385138438"}]},{"id":"667455329","answers":[{"choice_id":"4385138441"}]},{"id":"667455332","answers":[{"choice_id":"4385138498"}]}]}]},"emitted_at":1674149675877} +{"stream":"survey_responses","data":{"id":"12731204167","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=MDNWDmNrUDODNjQjATix_2BWBUiXJqVC8POKFh8fvebZujKwgJ_2B6XlCVEKCced6L16","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731204167","total_time":32,"date_modified":"2021-06-10T10:03:16+00:00","date_created":"2021-06-10T10:02:43+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731204167","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138279"}]},{"id":"667455299","answers":[{"choice_id":"4385138287"}]},{"id":"667455301","answers":[{"choice_id":"4385138292"}]},{"id":"667455314","answers":[{"choice_id":"4385138315"}]},{"id":"667455318","answers":[{"choice_id":"4385138388"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138414"}]},{"id":"667455325","answers":[{"choice_id":"4385138423"}]},{"id":"667455328","answers":[{"choice_id":"4385138432"}]},{"id":"667455329","answers":[{"choice_id":"4385138447"}]},{"id":"667455332","answers":[{"choice_id":"4385138499"}]}]}]},"emitted_at":1674149675878} +{"stream":"survey_responses","data":{"id":"12731223860","recipient_id":"","collection_mode":"default","response_status":"partial","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":["168830082","168830083","168830087"],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=cwttWQdofPxpfAkwREhinTUX2Ac_2BMviHT6jlan_2BWYlBpX3h0gEfYptMi_2F2sF_2FIut","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731223860","total_time":16,"date_modified":"2021-06-10T10:10:45+00:00","date_created":"2021-06-10T10:10:28+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731223860","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138279"}]},{"id":"667455299","answers":[{"choice_id":"4385138282"}]},{"id":"667455301","answers":[{"choice_id":"4385138292"}]},{"id":"667455314","answers":[{"choice_id":"4385138317"}]},{"id":"667455318","answers":[{"choice_id":"4385138388"}]}]},{"id":"168830087","questions":[]}]},"emitted_at":1674149675879} +{"stream":"survey_responses","data":{"id":"12731243435","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=kl6SOoj4lel7HllGtpDwHTPILQJujXr_2Bpkcndfg_2FPQpyHzOR6XWv1saPjDTiOeH4","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731243435","total_time":31,"date_modified":"2021-06-10T10:18:55+00:00","date_created":"2021-06-10T10:18:23+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731243435","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138283"}]},{"id":"667455301","answers":[{"choice_id":"4385138288"}]},{"id":"667455314","answers":[{"choice_id":"4385138317"}]},{"id":"667455318","answers":[{"choice_id":"4385138389"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138414"}]},{"id":"667455325","answers":[{"choice_id":"4385138426"}]},{"id":"667455328","answers":[{"choice_id":"4385138434"}]},{"id":"667455329","answers":[{"choice_id":"4385138441"}]},{"id":"667455332","answers":[{"choice_id":"4385138468"}]}]}]},"emitted_at":1674149675881} +{"stream":"survey_responses","data":{"id":"12731261675","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=5CaWLgB4g6FYPekVOqKYg2mpmDFcRgFD_2FvNGi7Xqozpk2f_2BA5WGRd_2F8q5jr1Jwan","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731261675","total_time":31,"date_modified":"2021-06-10T10:26:32+00:00","date_created":"2021-06-10T10:26:01+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731261675","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138282"}]},{"id":"667455301","answers":[{"choice_id":"4385138290"}]},{"id":"667455314","answers":[{"choice_id":"4385138315"}]},{"id":"667455318","answers":[{"choice_id":"4385138389"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138416"}]},{"id":"667455325","answers":[{"choice_id":"4385138423"}]},{"id":"667455328","answers":[{"choice_id":"4385138434"}]},{"id":"667455329","answers":[{"choice_id":"4385138445"}]},{"id":"667455332","answers":[{"choice_id":"4385138500"}]}]}]},"emitted_at":1674149675882} +{"stream":"survey_responses","data":{"id":"12731281414","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=q5Ky3UvnlTpc15S78mm8JQSFeuSBuv8iuZCnl9MZYl_2BB5nkG8L9uJmUl1JNNtwyv","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731281414","total_time":34,"date_modified":"2021-06-10T10:34:33+00:00","date_created":"2021-06-10T10:33:58+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731281414","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138279"}]},{"id":"667455299","answers":[{"choice_id":"4385138282"}]},{"id":"667455301","answers":[{"choice_id":"4385138293"}]},{"id":"667455314","answers":[{"choice_id":"4385138316"}]},{"id":"667455318","answers":[{"choice_id":"4385138388"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138412"}]},{"id":"667455325","answers":[{"choice_id":"4385138427"}]},{"id":"667455328","answers":[{"choice_id":"4385138439"}]},{"id":"667455329","answers":[{"choice_id":"4385138445"}]},{"id":"667455332","answers":[{"choice_id":"4385138468"}]}]}]},"emitted_at":1674149675884} +{"stream":"survey_responses","data":{"id":"12731300699","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=ATEXrllobiYc9DU6PcEpkS_2F8617dJW0dLGMQupo4QwGEGwqFQJ7m6Bks7oWF7Rae","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731300699","total_time":34,"date_modified":"2021-06-10T10:42:18+00:00","date_created":"2021-06-10T10:41:43+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731300699","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138282"}]},{"id":"667455301","answers":[{"choice_id":"4385138295"}]},{"id":"667455314","answers":[{"choice_id":"4385138315"}]},{"id":"667455318","answers":[{"choice_id":"4385138386"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138416"}]},{"id":"667455325","answers":[{"choice_id":"4385138427"}]},{"id":"667455328","answers":[{"choice_id":"4385138433"}]},{"id":"667455329","answers":[{"choice_id":"4385138442"}]},{"id":"667455332","answers":[{"choice_id":"4385138503"}]}]}]},"emitted_at":1674149675885} +{"stream":"survey_responses","data":{"id":"12731320713","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=319qghptwfcFVSVtQrSzrw_2BQzR8BlHJbviMDirTnupaGrVddWmTDjhG7R3Tkvb5J","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731320713","total_time":31,"date_modified":"2021-06-10T10:50:19+00:00","date_created":"2021-06-10T10:49:48+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731320713","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138283"}]},{"id":"667455301","answers":[{"choice_id":"4385138293"}]},{"id":"667455314","answers":[{"choice_id":"4385138317"}]},{"id":"667455318","answers":[{"choice_id":"4385138386"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138415"}]},{"id":"667455325","answers":[{"choice_id":"4385138426"}]},{"id":"667455328","answers":[{"choice_id":"4385138433"}]},{"id":"667455329","answers":[{"choice_id":"4385138444"}]},{"id":"667455332","answers":[{"choice_id":"4385138499"}]}]}]},"emitted_at":1674149675886} +{"stream":"survey_responses","data":{"id":"12731339540","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=unN8NiMSyoHjiCeMXzhPxCruuBwPKAXbf1kk1TZxnnc04vi5qaipiErEFBUKU3Vw","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731339540","total_time":32,"date_modified":"2021-06-10T10:57:54+00:00","date_created":"2021-06-10T10:57:22+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731339540","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138287"}]},{"id":"667455301","answers":[{"choice_id":"4385138291"}]},{"id":"667455314","answers":[{"choice_id":"4385138318"}]},{"id":"667455318","answers":[{"choice_id":"4385138387"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138412"}]},{"id":"667455325","answers":[{"choice_id":"4385138426"}]},{"id":"667455328","answers":[{"choice_id":"4385138432"}]},{"id":"667455329","answers":[{"choice_id":"4385138444"}]},{"id":"667455332","answers":[{"choice_id":"4385138498"}]}]}]},"emitted_at":1674149675888} +{"stream":"survey_responses","data":{"id":"12731359116","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843460","survey_id":"307784856","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=t_2BHFU_2BkwbG0L8cOxkJuYSUIt0ArFixObCD15GpXjKrp4kEQv20jOpUIgPXB30R0f","analyze_url":"https://www.surveymonkey.com/analyze/browse/moGgts_2Bl1LYlJ1mbVw6XG6cfdBSOknoT0fzVp7iTUO4_3D?respondent_id=12731359116","total_time":32,"date_modified":"2021-06-10T11:05:43+00:00","date_created":"2021-06-10T11:05:11+00:00","href":"https://api.surveymonkey.com/v3/surveys/307784856/responses/12731359116","pages":[{"id":"168830082","questions":[]},{"id":"168830083","questions":[{"id":"667455297","answers":[{"choice_id":"4385138277"}]},{"id":"667455299","answers":[{"choice_id":"4385138284"}]},{"id":"667455301","answers":[{"choice_id":"4385138290"}]},{"id":"667455314","answers":[{"choice_id":"4385138319"}]},{"id":"667455318","answers":[{"choice_id":"4385138387"}]}]},{"id":"168830087","questions":[{"id":"667455323","answers":[{"choice_id":"4385138412"}]},{"id":"667455325","answers":[{"choice_id":"4385138426"}]},{"id":"667455328","answers":[{"choice_id":"4385138434"}]},{"id":"667455329","answers":[{"choice_id":"4385138441"}]},{"id":"667455332","answers":[{"choice_id":"4385138501"}]}]}]},"emitted_at":1674149675889} +{"stream":"survey_responses","data":{"id":"12731031048","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=oj7KuTDJShqSiV97LkSV6uvYXz_2BBmc1ocrvgJB_2F6EIN4dNLEz7QkUKli1frVW9z_2B","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731031048","total_time":32,"date_modified":"2021-06-10T08:41:28+00:00","date_created":"2021-06-10T08:40:56+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731031048","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172937"}]},{"id":"667461433","answers":[{"choice_id":"4385172950"}]},{"id":"667461439","answers":[{"choice_id":"4385172991"}]},{"id":"667461441","answers":[{"choice_id":"4385173023"}]},{"id":"667461444","answers":[{"choice_id":"4385173041"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173078"}]},{"id":"667461452","answers":[{"choice_id":"4385173088"}]},{"id":"667461454","answers":[{"choice_id":"4385173103"}]},{"id":"667461456","answers":[{"choice_id":"4385173115"}]},{"id":"667461462","answers":[{"choice_id":"4385173170"}]}]}]},"emitted_at":1674149677137} +{"stream":"survey_responses","data":{"id":"12731038731","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=NvnexeVe1TL2cbU10b8utpSHSxTK1HTwbsncQeCDCuIJKnwvRo58aul3yetztS1_2B","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731038731","total_time":31,"date_modified":"2021-06-10T08:45:43+00:00","date_created":"2021-06-10T08:45:11+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731038731","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172935"}]},{"id":"667461433","answers":[{"choice_id":"4385172953"}]},{"id":"667461439","answers":[{"choice_id":"4385172990"}]},{"id":"667461441","answers":[{"choice_id":"4385173021"}]},{"id":"667461444","answers":[{"choice_id":"4385173041"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173089"}]},{"id":"667461454","answers":[{"choice_id":"4385173104"}]},{"id":"667461456","answers":[{"choice_id":"4385173116"}]},{"id":"667461462","answers":[{"choice_id":"4385173170"}]}]}]},"emitted_at":1674149677139} +{"stream":"survey_responses","data":{"id":"12731053047","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=TWL1aXuGzW_2Bld3kwRCla449GewPFQF3JFwcpsO1LndH1s3tFfKtesgelUuLTCGR6","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731053047","total_time":31,"date_modified":"2021-06-10T08:53:29+00:00","date_created":"2021-06-10T08:52:57+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731053047","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172937"}]},{"id":"667461433","answers":[{"choice_id":"4385172948"}]},{"id":"667461439","answers":[{"choice_id":"4385172991"}]},{"id":"667461441","answers":[{"choice_id":"4385173020"}]},{"id":"667461444","answers":[{"choice_id":"4385173045"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173088"}]},{"id":"667461454","answers":[{"choice_id":"4385173105"}]},{"id":"667461456","answers":[{"choice_id":"4385173114"}]},{"id":"667461462","answers":[{"choice_id":"4385173168"}]}]}]},"emitted_at":1674149677141} +{"stream":"survey_responses","data":{"id":"12731067385","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=3aXaERIhrxNROtqwHMzJ7BQrVYzI9ua7E_2FxCsZfjUOxvEf88Av09k8zGLpOFLBw_2B","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731067385","total_time":31,"date_modified":"2021-06-10T09:01:09+00:00","date_created":"2021-06-10T09:00:37+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731067385","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172934"}]},{"id":"667461433","answers":[{"choice_id":"4385172953"}]},{"id":"667461439","answers":[{"choice_id":"4385172995"}]},{"id":"667461441","answers":[{"choice_id":"4385173022"}]},{"id":"667461444","answers":[{"choice_id":"4385173042"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173091"}]},{"id":"667461454","answers":[{"choice_id":"4385173104"}]},{"id":"667461456","answers":[{"choice_id":"4385173114"}]},{"id":"667461462","answers":[{"choice_id":"4385173168"}]}]}]},"emitted_at":1674149677143} +{"stream":"survey_responses","data":{"id":"12731083422","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=kmKEpAG_2FngBuSmfP0e49vf6Q2YDpzhvzQyHTBrwvk0ZeV8Na8b5Evuz7N4wEaQuN","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731083422","total_time":32,"date_modified":"2021-06-10T09:08:54+00:00","date_created":"2021-06-10T09:08:22+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731083422","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172932"}]},{"id":"667461433","answers":[{"choice_id":"4385172953"}]},{"id":"667461439","answers":[{"choice_id":"4385172990"}]},{"id":"667461441","answers":[{"choice_id":"4385173022"}]},{"id":"667461444","answers":[{"choice_id":"4385173042"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173078"}]},{"id":"667461452","answers":[{"choice_id":"4385173089"}]},{"id":"667461454","answers":[{"choice_id":"4385173105"}]},{"id":"667461456","answers":[{"choice_id":"4385173113"}]},{"id":"667461462","answers":[{"choice_id":"4385173169"}]}]}]},"emitted_at":1674149677144} +{"stream":"survey_responses","data":{"id":"12731099693","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=YgZuSogQMKDrPTmOoLetMqFtiUi_2BJHKxcATXloIoBnmzHLDvYmNSSoajIC4_2BX2qc","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731099693","total_time":31,"date_modified":"2021-06-10T09:16:36+00:00","date_created":"2021-06-10T09:16:04+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731099693","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172933"}]},{"id":"667461433","answers":[{"choice_id":"4385172951"}]},{"id":"667461439","answers":[{"choice_id":"4385172993"}]},{"id":"667461441","answers":[{"choice_id":"4385173023"}]},{"id":"667461444","answers":[{"choice_id":"4385173043"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173076"}]},{"id":"667461452","answers":[{"choice_id":"4385173090"}]},{"id":"667461454","answers":[{"choice_id":"4385173105"}]},{"id":"667461456","answers":[{"choice_id":"4385173113"}]},{"id":"667461462","answers":[{"choice_id":"4385173168"}]}]}]},"emitted_at":1674149677147} +{"stream":"survey_responses","data":{"id":"12731116372","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=w67tX9wQ238KZ8cKM0cnTSfg3hzhdt35TpCZfm6_2B7K6B_2F0VZpeEefqMTVZQXnuVe","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731116372","total_time":31,"date_modified":"2021-06-10T09:24:15+00:00","date_created":"2021-06-10T09:23:43+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731116372","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172932"}]},{"id":"667461433","answers":[{"choice_id":"4385172948"}]},{"id":"667461439","answers":[{"choice_id":"4385172990"}]},{"id":"667461441","answers":[{"choice_id":"4385173022"}]},{"id":"667461444","answers":[{"choice_id":"4385173046"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173089"}]},{"id":"667461454","answers":[{"choice_id":"4385173103"}]},{"id":"667461456","answers":[{"choice_id":"4385173117"}]},{"id":"667461462","answers":[{"choice_id":"4385173167"}]}]}]},"emitted_at":1674149677148} +{"stream":"survey_responses","data":{"id":"12731133155","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=KkixO6u45W2ICclAKrxKYNgJxrynUdDZxArXycLA_2FpZUBsG3FcMXHvqQmk3DsHGL","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731133155","total_time":31,"date_modified":"2021-06-10T09:31:58+00:00","date_created":"2021-06-10T09:31:27+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731133155","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172933"}]},{"id":"667461433","answers":[{"choice_id":"4385172948"}]},{"id":"667461439","answers":[{"choice_id":"4385172990"}]},{"id":"667461441","answers":[{"choice_id":"4385173022"}]},{"id":"667461444","answers":[{"choice_id":"4385173044"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173078"}]},{"id":"667461452","answers":[{"choice_id":"4385173090"}]},{"id":"667461454","answers":[{"choice_id":"4385173105"}]},{"id":"667461456","answers":[{"choice_id":"4385173118"}]},{"id":"667461462","answers":[{"choice_id":"4385173168"}]}]}]},"emitted_at":1674149677150} +{"stream":"survey_responses","data":{"id":"12731151051","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Ep0IYx019QcuhuuRrvANkBTw0Ti8WirkyKLpMo62qXxWHwkYGtgh9c143qYGmywG","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731151051","total_time":31,"date_modified":"2021-06-10T09:39:40+00:00","date_created":"2021-06-10T09:39:08+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731151051","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172937"}]},{"id":"667461433","answers":[{"choice_id":"4385172949"}]},{"id":"667461439","answers":[{"choice_id":"4385172993"}]},{"id":"667461441","answers":[{"choice_id":"4385173020"}]},{"id":"667461444","answers":[{"choice_id":"4385173046"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173076"}]},{"id":"667461452","answers":[{"choice_id":"4385173091"}]},{"id":"667461454","answers":[{"choice_id":"4385173105"}]},{"id":"667461456","answers":[{"choice_id":"4385173118"}]},{"id":"667461462","answers":[{"choice_id":"4385173169"}]}]}]},"emitted_at":1674149677151} +{"stream":"survey_responses","data":{"id":"12731168310","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=HS7SOSb9j2AarAA_2BdLKuhIUhWoas6e_2BtUPh9aNHRDTHOTwcnvASYUjIFJk2Aha4I","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731168310","total_time":31,"date_modified":"2021-06-10T09:47:26+00:00","date_created":"2021-06-10T09:46:54+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731168310","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172933"}]},{"id":"667461433","answers":[{"choice_id":"4385172955"}]},{"id":"667461439","answers":[{"choice_id":"4385172995"}]},{"id":"667461441","answers":[{"choice_id":"4385173020"}]},{"id":"667461444","answers":[{"choice_id":"4385173047"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173089"}]},{"id":"667461454","answers":[{"choice_id":"4385173106"}]},{"id":"667461456","answers":[{"choice_id":"4385173113"}]},{"id":"667461462","answers":[{"choice_id":"4385173168"}]}]}]},"emitted_at":1674149677153} +{"stream":"survey_responses","data":{"id":"12731186075","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Cc0IypCRFbsr7v94sQfKFHhIf_2FH89oCDUARL5wWkYsguNXp0zyA6DxHEdm_2BNMhJ_2F","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731186075","total_time":35,"date_modified":"2021-06-10T09:55:32+00:00","date_created":"2021-06-10T09:54:57+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731186075","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172932"}]},{"id":"667461433","answers":[{"choice_id":"4385172954"}]},{"id":"667461439","answers":[{"choice_id":"4385172992"}]},{"id":"667461441","answers":[{"choice_id":"4385173022"}]},{"id":"667461444","answers":[{"choice_id":"4385173041"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173078"}]},{"id":"667461452","answers":[{"choice_id":"4385173088"}]},{"id":"667461454","answers":[{"choice_id":"4385173104"}]},{"id":"667461456","answers":[{"choice_id":"4385173118"}]},{"id":"667461462","answers":[{"choice_id":"4385173169"}]}]}]},"emitted_at":1674149677155} +{"stream":"survey_responses","data":{"id":"12731205704","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=nuK5QZZCJUv9YoeVqOpq22Tt3VOETEzxSzV_2Fk4xjbEXXiwUUe6gMiDzLVDs1IWo_2F","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731205704","total_time":31,"date_modified":"2021-06-10T10:03:50+00:00","date_created":"2021-06-10T10:03:19+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731205704","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172933"}]},{"id":"667461433","answers":[{"choice_id":"4385172948"}]},{"id":"667461439","answers":[{"choice_id":"4385172995"}]},{"id":"667461441","answers":[{"choice_id":"4385173023"}]},{"id":"667461444","answers":[{"choice_id":"4385173045"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173090"}]},{"id":"667461454","answers":[{"choice_id":"4385173104"}]},{"id":"667461456","answers":[{"choice_id":"4385173115"}]},{"id":"667461462","answers":[{"choice_id":"4385173168"}]}]}]},"emitted_at":1674149677156} +{"stream":"survey_responses","data":{"id":"12731225522","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=E977wLXc6H_2BfVEbR4rzSs1q6JCgk1O_2BeQ5Sr2f_2BEeSGpDaPDGuslUALFqPRPlZDW","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731225522","total_time":31,"date_modified":"2021-06-10T10:11:38+00:00","date_created":"2021-06-10T10:11:06+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731225522","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172935"}]},{"id":"667461433","answers":[{"choice_id":"4385172951"}]},{"id":"667461439","answers":[{"choice_id":"4385172995"}]},{"id":"667461441","answers":[{"choice_id":"4385173022"}]},{"id":"667461444","answers":[{"choice_id":"4385173044"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173076"}]},{"id":"667461452","answers":[{"choice_id":"4385173091"}]},{"id":"667461454","answers":[{"choice_id":"4385173103"}]},{"id":"667461456","answers":[{"choice_id":"4385173118"}]},{"id":"667461462","answers":[{"choice_id":"4385173167"}]}]}]},"emitted_at":1674149677158} +{"stream":"survey_responses","data":{"id":"12731244870","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=3wY0IYE_2F0V4hMJO6Hd2YuVpnFpa2qt5soGs4KM6L3wgFb3k2BHMHLGtDGfFRCSfQ","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731244870","total_time":31,"date_modified":"2021-06-10T10:19:30+00:00","date_created":"2021-06-10T10:18:59+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731244870","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172932"}]},{"id":"667461433","answers":[{"choice_id":"4385172953"}]},{"id":"667461439","answers":[{"choice_id":"4385172993"}]},{"id":"667461441","answers":[{"choice_id":"4385173020"}]},{"id":"667461444","answers":[{"choice_id":"4385173040"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173091"}]},{"id":"667461454","answers":[{"choice_id":"4385173102"}]},{"id":"667461456","answers":[{"choice_id":"4385173116"}]},{"id":"667461462","answers":[{"choice_id":"4385173170"}]}]}]},"emitted_at":1674149677159} +{"stream":"survey_responses","data":{"id":"12731263131","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=StRkIgYeE5JwNLawW20wxeS_2FED8yP1J_2FHGw3CFhxGAXfN5lodZFoZ7n2CQYuFI4m","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731263131","total_time":31,"date_modified":"2021-06-10T10:27:08+00:00","date_created":"2021-06-10T10:26:37+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731263131","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172933"}]},{"id":"667461433","answers":[{"choice_id":"4385172951"}]},{"id":"667461439","answers":[{"choice_id":"4385172995"}]},{"id":"667461441","answers":[{"choice_id":"4385173021"}]},{"id":"667461444","answers":[{"choice_id":"4385173046"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173078"}]},{"id":"667461452","answers":[{"choice_id":"4385173089"}]},{"id":"667461454","answers":[{"choice_id":"4385173106"}]},{"id":"667461456","answers":[{"choice_id":"4385173118"}]},{"id":"667461462","answers":[{"choice_id":"4385173169"}]}]}]},"emitted_at":1674149677160} +{"stream":"survey_responses","data":{"id":"12731283031","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=J4cSx3UMmpoujky2cMr76AMl3Fslun9t7M7fr8ahVpWNGLwaW_2Bu8X3jQJkNttUcC","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731283031","total_time":34,"date_modified":"2021-06-10T10:35:10+00:00","date_created":"2021-06-10T10:34:36+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731283031","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172936"}]},{"id":"667461433","answers":[{"choice_id":"4385172948"}]},{"id":"667461439","answers":[{"choice_id":"4385172994"}]},{"id":"667461441","answers":[{"choice_id":"4385173021"}]},{"id":"667461444","answers":[{"choice_id":"4385173041"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173078"}]},{"id":"667461452","answers":[{"choice_id":"4385173090"}]},{"id":"667461454","answers":[{"choice_id":"4385173103"}]},{"id":"667461456","answers":[{"choice_id":"4385173118"}]},{"id":"667461462","answers":[{"choice_id":"4385173169"}]}]}]},"emitted_at":1674149677161} +{"stream":"survey_responses","data":{"id":"12731302340","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=ILLNvXOj_2BrxmX_2By2ZRAmTpFslgCTd_2Feoso7P36bgr0_2FDMlf4kKul9iF6Ox4uTGnl","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731302340","total_time":34,"date_modified":"2021-06-10T10:42:56+00:00","date_created":"2021-06-10T10:42:22+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731302340","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172937"}]},{"id":"667461433","answers":[{"choice_id":"4385172951"}]},{"id":"667461439","answers":[{"choice_id":"4385172994"}]},{"id":"667461441","answers":[{"choice_id":"4385173022"}]},{"id":"667461444","answers":[{"choice_id":"4385173042"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173091"}]},{"id":"667461454","answers":[{"choice_id":"4385173105"}]},{"id":"667461456","answers":[{"choice_id":"4385173114"}]},{"id":"667461462","answers":[{"choice_id":"4385173167"}]}]}]},"emitted_at":1674149677162} +{"stream":"survey_responses","data":{"id":"12731322211","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=4UUhK9SRY_2FM3fA_2FqkLCL5mS8aBtccVCgcBQMTDfpX84us_2FZDOkgCVuCexjzjooNm","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731322211","total_time":31,"date_modified":"2021-06-10T10:50:54+00:00","date_created":"2021-06-10T10:50:23+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731322211","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172935"}]},{"id":"667461433","answers":[{"choice_id":"4385172950"}]},{"id":"667461439","answers":[{"choice_id":"4385172995"}]},{"id":"667461441","answers":[{"choice_id":"4385173023"}]},{"id":"667461444","answers":[{"choice_id":"4385173047"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173090"}]},{"id":"667461454","answers":[{"choice_id":"4385173102"}]},{"id":"667461456","answers":[{"choice_id":"4385173115"}]},{"id":"667461462","answers":[{"choice_id":"4385173170"}]}]}]},"emitted_at":1674149677163} +{"stream":"survey_responses","data":{"id":"12731341043","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=K51RB0BiJ39RT0TzevECB3iQ54AUAqtSYC5AGG_2Fb3JiEOIV74uOcQhGpP_2B9Xzumv","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731341043","total_time":32,"date_modified":"2021-06-10T10:58:30+00:00","date_created":"2021-06-10T10:57:58+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731341043","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172932"}]},{"id":"667461433","answers":[{"choice_id":"4385172949"}]},{"id":"667461439","answers":[{"choice_id":"4385172991"}]},{"id":"667461441","answers":[{"choice_id":"4385173020"}]},{"id":"667461444","answers":[{"choice_id":"4385173042"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173078"}]},{"id":"667461452","answers":[{"choice_id":"4385173088"}]},{"id":"667461454","answers":[{"choice_id":"4385173106"}]},{"id":"667461456","answers":[{"choice_id":"4385173114"}]},{"id":"667461462","answers":[{"choice_id":"4385173170"}]}]}]},"emitted_at":1674149677164} +{"stream":"survey_responses","data":{"id":"12731360608","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843624","survey_id":"307785388","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=joQxJxoDIf61JZdELXuIeomTgZquDM7T76ksdKdRUHFrgw1Him4UO_2BbCMcv0tXrC","analyze_url":"https://www.surveymonkey.com/analyze/browse/5QHdVgvFd_2Bn4fvmj_2F1aNtwM9q4oP_2B3VqXy_2BeJTiumoQ_3D?respondent_id=12731360608","total_time":31,"date_modified":"2021-06-10T11:06:19+00:00","date_created":"2021-06-10T11:05:47+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785388/responses/12731360608","pages":[{"id":"168831335","questions":[]},{"id":"168831336","questions":[{"id":"667461429","answers":[{"choice_id":"4385172934"}]},{"id":"667461433","answers":[{"choice_id":"4385172951"}]},{"id":"667461439","answers":[{"choice_id":"4385172991"}]},{"id":"667461441","answers":[{"choice_id":"4385173022"}]},{"id":"667461444","answers":[{"choice_id":"4385173040"}]}]},{"id":"168831340","questions":[{"id":"667461449","answers":[{"choice_id":"4385173077"}]},{"id":"667461452","answers":[{"choice_id":"4385173089"}]},{"id":"667461454","answers":[{"choice_id":"4385173103"}]},{"id":"667461456","answers":[{"choice_id":"4385173113"}]},{"id":"667461462","answers":[{"choice_id":"4385173167"}]}]}]},"emitted_at":1674149677165} +{"stream":"survey_responses","data":{"id":"12731032160","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=k5_2BoYr8L1JivcJuf1rH2GX_2BHMQI9F9YIVUvhVjaOj1ZaTr1AN4RrYerLAgE0dex5","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731032160","total_time":30,"date_modified":"2021-06-10T08:42:04+00:00","date_created":"2021-06-10T08:41:34+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731032160","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174702"}]},{"id":"667461777","answers":[{"choice_id":"4385174976"}]},{"id":"667461791","answers":[{"choice_id":"4385175058"}]},{"id":"667461794","answers":[{"choice_id":"4385175072"}]},{"id":"667461797","answers":[{"choice_id":"4385175099"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175117"}]},{"id":"667461805","answers":[{"choice_id":"4385175148"}]},{"id":"667461811","answers":[{"choice_id":"4385175199"}]},{"id":"667461833","answers":[{"choice_id":"4385175281"}]},{"id":"667461834","answers":[{"choice_id":"4385175295"}]}]}]},"emitted_at":1674149678650} +{"stream":"survey_responses","data":{"id":"12731039882","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=ueh4txTCmZOSY56GbXU_2BI53xrA9e5AOQ2EOFNrDgskH2E4ZDeJ4HcDXDLxDPUl8L","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731039882","total_time":29,"date_modified":"2021-06-10T08:46:16+00:00","date_created":"2021-06-10T08:45:47+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731039882","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174702"}]},{"id":"667461777","answers":[{"choice_id":"4385174972"}]},{"id":"667461791","answers":[{"choice_id":"4385175057"}]},{"id":"667461794","answers":[{"choice_id":"4385175072"}]},{"id":"667461797","answers":[{"choice_id":"4385175100"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175116"}]},{"id":"667461805","answers":[{"choice_id":"4385175148"}]},{"id":"667461811","answers":[{"choice_id":"4385175200"}]},{"id":"667461833","answers":[{"choice_id":"4385175283"}]},{"id":"667461834","answers":[{"choice_id":"4385175296"}]}]}]},"emitted_at":1674149678652} +{"stream":"survey_responses","data":{"id":"12731054183","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=6Utx9fT_2BqzHMlSdMksExZ0ph_2BvNfvb4CBc5S5YuvlA0kAV4HfmiM38IyZMLnHuoK","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731054183","total_time":29,"date_modified":"2021-06-10T08:54:02+00:00","date_created":"2021-06-10T08:53:33+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731054183","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174700"}]},{"id":"667461777","answers":[{"choice_id":"4385174971"}]},{"id":"667461791","answers":[{"choice_id":"4385175055"}]},{"id":"667461794","answers":[{"choice_id":"4385175070"}]},{"id":"667461797","answers":[{"choice_id":"4385175102"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175120"}]},{"id":"667461805","answers":[{"choice_id":"4385175152"}]},{"id":"667461811","answers":[{"choice_id":"4385175200"}]},{"id":"667461833","answers":[{"choice_id":"4385175284"}]},{"id":"667461834","answers":[{"choice_id":"4385175296"}]}]}]},"emitted_at":1674149678654} +{"stream":"survey_responses","data":{"id":"12731068596","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=Y_2BpA02_2Br_2B8t0cCK8Ua99SpTBk8YAUIPP5rIlV7TWE2bRQsxJ7Wy8nlQiPeSSH1Aj","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731068596","total_time":29,"date_modified":"2021-06-10T09:01:43+00:00","date_created":"2021-06-10T09:01:13+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731068596","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174700"}]},{"id":"667461777","answers":[{"choice_id":"4385174974"}]},{"id":"667461791","answers":[{"choice_id":"4385175058"}]},{"id":"667461794","answers":[{"choice_id":"4385175070"}]},{"id":"667461797","answers":[{"choice_id":"4385175102"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175117"}]},{"id":"667461805","answers":[{"choice_id":"4385175147"}]},{"id":"667461811","answers":[{"choice_id":"4385175200"}]},{"id":"667461833","answers":[{"choice_id":"4385175279"}]},{"id":"667461834","answers":[{"choice_id":"4385175296"}]}]}]},"emitted_at":1674149678656} +{"stream":"survey_responses","data":{"id":"12731084672","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=oDcOq8OB_2BpjrJzvV_2B78DTMP7bGXGg_2FFfY5m4CGX3bYG_2BHn3WUTPsqZIYhsLwynBU","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731084672","total_time":29,"date_modified":"2021-06-10T09:09:28+00:00","date_created":"2021-06-10T09:08:59+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731084672","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174702"}]},{"id":"667461777","answers":[{"choice_id":"4385174970"}]},{"id":"667461791","answers":[{"choice_id":"4385175057"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175097"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175115"}]},{"id":"667461805","answers":[{"choice_id":"4385175146"}]},{"id":"667461811","answers":[{"choice_id":"4385175200"}]},{"id":"667461833","answers":[{"choice_id":"4385175284"}]},{"id":"667461834","answers":[{"choice_id":"4385175294"}]}]}]},"emitted_at":1674149678658} +{"stream":"survey_responses","data":{"id":"12731100913","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=5kE4DYJKeO6DrzEs62N47RQ2rioxaIjqDc5G3RxsiNkZeZZ2L6PL09YQRzsKPf5P","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731100913","total_time":29,"date_modified":"2021-06-10T09:17:08+00:00","date_created":"2021-06-10T09:16:39+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731100913","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174701"}]},{"id":"667461777","answers":[{"choice_id":"4385174975"}]},{"id":"667461791","answers":[{"choice_id":"4385175058"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175102"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175121"}]},{"id":"667461805","answers":[{"choice_id":"4385175148"}]},{"id":"667461811","answers":[{"choice_id":"4385175202"}]},{"id":"667461833","answers":[{"choice_id":"4385175279"}]},{"id":"667461834","answers":[{"choice_id":"4385175295"}]}]}]},"emitted_at":1674149678659} +{"stream":"survey_responses","data":{"id":"12731117664","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=MK3EF7tVkhtzcIOL0XN0yqP2HY1_2Fqf1WCffD2MxDMDr4xww37ssvSgs9tAUezwLH","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731117664","total_time":29,"date_modified":"2021-06-10T09:24:48+00:00","date_created":"2021-06-10T09:24:19+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731117664","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174702"}]},{"id":"667461777","answers":[{"choice_id":"4385174977"}]},{"id":"667461791","answers":[{"choice_id":"4385175057"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175103"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175119"}]},{"id":"667461805","answers":[{"choice_id":"4385175147"}]},{"id":"667461811","answers":[{"choice_id":"4385175204"}]},{"id":"667461833","answers":[{"choice_id":"4385175279"}]},{"id":"667461834","answers":[{"choice_id":"4385175294"}]}]}]},"emitted_at":1674149678660} +{"stream":"survey_responses","data":{"id":"12731134542","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=vaKWu1zSFOcQlKfr2_2FhbI4n7QTTLkC4cwx4WG8fdzf9IVtI3MzE7e_2FRnH89alHIc","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731134542","total_time":29,"date_modified":"2021-06-10T09:32:32+00:00","date_created":"2021-06-10T09:32:03+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731134542","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174701"}]},{"id":"667461777","answers":[{"choice_id":"4385174973"}]},{"id":"667461791","answers":[{"choice_id":"4385175057"}]},{"id":"667461794","answers":[{"choice_id":"4385175070"}]},{"id":"667461797","answers":[{"choice_id":"4385175099"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175118"}]},{"id":"667461805","answers":[{"choice_id":"4385175149"}]},{"id":"667461811","answers":[{"choice_id":"4385175203"}]},{"id":"667461833","answers":[{"choice_id":"4385175284"}]},{"id":"667461834","answers":[{"choice_id":"4385175296"}]}]}]},"emitted_at":1674149678661} +{"stream":"survey_responses","data":{"id":"12731152328","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=IVs8i7sYR_2FPHAlgRFsF_2FqtmR8VKhb4HLvOemx_2F_2Bx31hPXV_2FqSHT1WSMqyx9fGWRv","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731152328","total_time":29,"date_modified":"2021-06-10T09:40:14+00:00","date_created":"2021-06-10T09:39:45+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731152328","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174702"}]},{"id":"667461777","answers":[{"choice_id":"4385174970"}]},{"id":"667461791","answers":[{"choice_id":"4385175056"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175103"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175116"}]},{"id":"667461805","answers":[{"choice_id":"4385175152"}]},{"id":"667461811","answers":[{"choice_id":"4385175204"}]},{"id":"667461833","answers":[{"choice_id":"4385175282"}]},{"id":"667461834","answers":[{"choice_id":"4385175295"}]}]}]},"emitted_at":1674149678662} +{"stream":"survey_responses","data":{"id":"12731169686","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=I6lNoZHdDu_2FqdBBrqWGXmuNL5Ezwzz6bS8n4LrSLKUFZ5_2FTaf8k7MnS_2FxWjh5UYN","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731169686","total_time":29,"date_modified":"2021-06-10T09:48:00+00:00","date_created":"2021-06-10T09:47:30+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731169686","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174701"}]},{"id":"667461777","answers":[{"choice_id":"4385174973"}]},{"id":"667461791","answers":[{"choice_id":"4385175056"}]},{"id":"667461794","answers":[{"choice_id":"4385175070"}]},{"id":"667461797","answers":[{"choice_id":"4385175102"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175116"}]},{"id":"667461805","answers":[{"choice_id":"4385175152"}]},{"id":"667461811","answers":[{"choice_id":"4385175200"}]},{"id":"667461833","answers":[{"choice_id":"4385175282"}]},{"id":"667461834","answers":[{"choice_id":"4385175295"}]}]}]},"emitted_at":1674149678663} +{"stream":"survey_responses","data":{"id":"12731187603","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=FiK9D4oAC52vzwBrNjbYa9wHiLT6nJc_2BvhbFVDpRqaS4N9_2FeTfbrKcUlu1iDPmLr","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731187603","total_time":32,"date_modified":"2021-06-10T09:56:10+00:00","date_created":"2021-06-10T09:55:38+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731187603","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174701"}]},{"id":"667461777","answers":[{"choice_id":"4385174970"}]},{"id":"667461791","answers":[{"choice_id":"4385175058"}]},{"id":"667461794","answers":[{"choice_id":"4385175070"}]},{"id":"667461797","answers":[{"choice_id":"4385175101"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175116"}]},{"id":"667461805","answers":[{"choice_id":"4385175150"}]},{"id":"667461811","answers":[{"choice_id":"4385175201"}]},{"id":"667461833","answers":[{"choice_id":"4385175281"}]},{"id":"667461834","answers":[{"choice_id":"4385175295"}]}]}]},"emitted_at":1674149678664} +{"stream":"survey_responses","data":{"id":"12731207265","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=DxJNIKLDsZB0jSdF3mQJziPzHSc1QhKVEAwTlaWxpmlfbYqie5vDH6pcFcXka8HP","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731207265","total_time":29,"date_modified":"2021-06-10T10:04:24+00:00","date_created":"2021-06-10T10:03:55+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731207265","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174700"}]},{"id":"667461777","answers":[{"choice_id":"4385174976"}]},{"id":"667461791","answers":[{"choice_id":"4385175055"}]},{"id":"667461794","answers":[{"choice_id":"4385175071"}]},{"id":"667461797","answers":[{"choice_id":"4385175102"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175121"}]},{"id":"667461805","answers":[{"choice_id":"4385175150"}]},{"id":"667461811","answers":[{"choice_id":"4385175203"}]},{"id":"667461833","answers":[{"choice_id":"4385175280"}]},{"id":"667461834","answers":[{"choice_id":"4385175296"}]}]}]},"emitted_at":1674149678665} +{"stream":"survey_responses","data":{"id":"12731227055","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=hifnhc2BvbuUJ2eC5tqTz1sgyzN6BVSqhHrOZMc67UAWrZ86iRSDesnY2EqLW3sf","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731227055","total_time":30,"date_modified":"2021-06-10T10:12:13+00:00","date_created":"2021-06-10T10:11:43+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731227055","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174702"}]},{"id":"667461777","answers":[{"choice_id":"4385174974"}]},{"id":"667461791","answers":[{"choice_id":"4385175057"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175096"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175121"}]},{"id":"667461805","answers":[{"choice_id":"4385175148"}]},{"id":"667461811","answers":[{"choice_id":"4385175202"}]},{"id":"667461833","answers":[{"choice_id":"4385175279"}]},{"id":"667461834","answers":[{"choice_id":"4385175295"}]}]}]},"emitted_at":1674149678666} +{"stream":"survey_responses","data":{"id":"12731246288","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=9TFIXzJKIgVd5dHU3k_2BM3i00wcrMbvDj3vBf1YYe_2FDh5Hv2kyiiZ13WyXCNq5Og9","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731246288","total_time":29,"date_modified":"2021-06-10T10:20:04+00:00","date_created":"2021-06-10T10:19:35+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731246288","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174700"}]},{"id":"667461777","answers":[{"choice_id":"4385174974"}]},{"id":"667461791","answers":[{"choice_id":"4385175057"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175098"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175117"}]},{"id":"667461805","answers":[{"choice_id":"4385175151"}]},{"id":"667461811","answers":[{"choice_id":"4385175198"}]},{"id":"667461833","answers":[{"choice_id":"4385175284"}]},{"id":"667461834","answers":[{"choice_id":"4385175294"}]}]}]},"emitted_at":1674149678667} +{"stream":"survey_responses","data":{"id":"12731264698","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=s1IbylETE10QgXtryui0Bdz_2Bj5IU5LzqBMHDbnhunQHBP5CedlG7l56df1BhmnL2","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731264698","total_time":29,"date_modified":"2021-06-10T10:27:44+00:00","date_created":"2021-06-10T10:27:15+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731264698","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174700"}]},{"id":"667461777","answers":[{"choice_id":"4385174977"}]},{"id":"667461791","answers":[{"choice_id":"4385175058"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175096"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175119"}]},{"id":"667461805","answers":[{"choice_id":"4385175146"}]},{"id":"667461811","answers":[{"choice_id":"4385175199"}]},{"id":"667461833","answers":[{"choice_id":"4385175281"}]},{"id":"667461834","answers":[{"choice_id":"4385175294"}]}]}]},"emitted_at":1674149678668} +{"stream":"survey_responses","data":{"id":"12731284644","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=gRmE1HF_2BBq7nrEqx2yWW8g0zVXXWYXVJ2u7ohGYqL6fyVTm6aN1WqlcfWrYGOvpl","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731284644","total_time":32,"date_modified":"2021-06-10T10:35:47+00:00","date_created":"2021-06-10T10:35:15+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731284644","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174700"}]},{"id":"667461777","answers":[{"choice_id":"4385174972"}]},{"id":"667461791","answers":[{"choice_id":"4385175055"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175098"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175116"}]},{"id":"667461805","answers":[{"choice_id":"4385175146"}]},{"id":"667461811","answers":[{"choice_id":"4385175202"}]},{"id":"667461833","answers":[{"choice_id":"4385175283"}]},{"id":"667461834","answers":[{"choice_id":"4385175296"}]}]}]},"emitted_at":1674149678668} +{"stream":"survey_responses","data":{"id":"12731303856","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=R15XZO_2FAOou8IYPELNzZWNvHyYHz5f2yg5XY9DyTPB_2F1F9zoalgsQcLiDzAzYgfp","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731303856","total_time":31,"date_modified":"2021-06-10T10:43:31+00:00","date_created":"2021-06-10T10:43:00+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731303856","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174700"}]},{"id":"667461777","answers":[{"choice_id":"4385174972"}]},{"id":"667461791","answers":[{"choice_id":"4385175056"}]},{"id":"667461794","answers":[{"choice_id":"4385175072"}]},{"id":"667461797","answers":[{"choice_id":"4385175101"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175115"}]},{"id":"667461805","answers":[{"choice_id":"4385175148"}]},{"id":"667461811","answers":[{"choice_id":"4385175198"}]},{"id":"667461833","answers":[{"choice_id":"4385175284"}]},{"id":"667461834","answers":[{"choice_id":"4385175296"}]}]}]},"emitted_at":1674149678669} +{"stream":"survey_responses","data":{"id":"12731323720","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=EiMwydLUjYosaJKqAS7XvTZYSRk1ONKVDTvKy287UbU9nHh4OUTunOiBk4lTOMIX","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731323720","total_time":29,"date_modified":"2021-06-10T10:51:27+00:00","date_created":"2021-06-10T10:50:58+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731323720","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174700"}]},{"id":"667461777","answers":[{"choice_id":"4385174977"}]},{"id":"667461791","answers":[{"choice_id":"4385175057"}]},{"id":"667461794","answers":[{"choice_id":"4385175071"}]},{"id":"667461797","answers":[{"choice_id":"4385175103"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175119"}]},{"id":"667461805","answers":[{"choice_id":"4385175152"}]},{"id":"667461811","answers":[{"choice_id":"4385175201"}]},{"id":"667461833","answers":[{"choice_id":"4385175282"}]},{"id":"667461834","answers":[{"choice_id":"4385175295"}]}]}]},"emitted_at":1674149678670} +{"stream":"survey_responses","data":{"id":"12731342570","recipient_id":"","collection_mode":"default","response_status":"completed","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":[],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=26PW15rB0RZChb0Db5YdoDywvKkwI95rERJAB_2BeZi_2F8EbRztchqEvwih9zygXayj","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731342570","total_time":30,"date_modified":"2021-06-10T10:59:05+00:00","date_created":"2021-06-10T10:58:35+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731342570","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174701"}]},{"id":"667461777","answers":[{"choice_id":"4385174971"}]},{"id":"667461791","answers":[{"choice_id":"4385175056"}]},{"id":"667461794","answers":[{"choice_id":"4385175073"}]},{"id":"667461797","answers":[{"choice_id":"4385175099"}]}]},{"id":"168831402","questions":[{"id":"667461801","answers":[{"choice_id":"4385175116"}]},{"id":"667461805","answers":[{"choice_id":"4385175146"}]},{"id":"667461811","answers":[{"choice_id":"4385175202"}]},{"id":"667461833","answers":[{"choice_id":"4385175283"}]},{"id":"667461834","answers":[{"choice_id":"4385175295"}]}]}]},"emitted_at":1674149678670} +{"stream":"survey_responses","data":{"id":"12731362003","recipient_id":"","collection_mode":"default","response_status":"partial","custom_value":"","first_name":"","last_name":"","email_address":"","ip_address":"91.242.192.88","logic_path":{},"metadata":{"contact":{}},"page_path":["168831392","168831393","168831402"],"collector_id":"405843634","survey_id":"307785415","custom_variables":{},"edit_url":"https://www.surveymonkey.com/r/?sm=LFmWWSa5B0YPzIswFuEpoIxYrVHHhorNICipbTUhp6Z3p5apUZsA3ENZGZbaPFH0","analyze_url":"https://www.surveymonkey.com/analyze/browse/BPAkhAawaMN8C17tmmNFxjZ0KOiJJ3FCQU4krShVQhg_3D?respondent_id=12731362003","total_time":19,"date_modified":"2021-06-10T11:06:42+00:00","date_created":"2021-06-10T11:06:23+00:00","href":"https://api.surveymonkey.com/v3/surveys/307785415/responses/12731362003","pages":[{"id":"168831392","questions":[]},{"id":"168831393","questions":[{"id":"667461690","answers":[{"choice_id":"4385174702"}]},{"id":"667461777","answers":[{"choice_id":"4385174976"}]},{"id":"667461791","answers":[{"choice_id":"4385175058"}]},{"id":"667461794","answers":[{"choice_id":"4385175071"}]},{"id":"667461797","answers":[{"choice_id":"4385175099"}]}]},{"id":"168831402","questions":[]}]},"emitted_at":1674149678671} +{"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/streams.py b/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/streams.py index 695cb2b1a236f..3a5340b272aac 100644 --- a/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/streams.py +++ b/airbyte-integrations/connectors/source-surveymonkey/source_surveymonkey/streams.py @@ -11,6 +11,7 @@ import requests import vcr from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream cache_file = tempfile.NamedTemporaryFile() @@ -27,6 +28,10 @@ def __init__(self, start_date: pendulum.datetime, survey_ids: List[str], **kwarg self._start_date = start_date self._survey_ids = survey_ids + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def next_page_token(self, response: requests.Response) -> Optional[Mapping[str, Any]]: resp_json = response.json() links = resp_json.get("links", {}) diff --git a/airbyte-integrations/connectors/source-tempo/source_tempo/tempo.yaml b/airbyte-integrations/connectors/source-tempo/source_tempo/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-tempo/source_tempo/tempo.yaml rename to airbyte-integrations/connectors/source-tempo/source_tempo/manifest.yaml diff --git a/airbyte-integrations/connectors/source-tempo/source_tempo/source.py b/airbyte-integrations/connectors/source-tempo/source_tempo/source.py index 3b744d6ad807c..b36c63992ac98 100644 --- a/airbyte-integrations/connectors/source-tempo/source_tempo/source.py +++ b/airbyte-integrations/connectors/source-tempo/source_tempo/source.py @@ -14,4 +14,4 @@ # Declarative Source class SourceTempo(YamlDeclarativeSource): def __init__(self): - super().__init__(path_to_yaml="tempo.yaml") + super().__init__(path_to_yaml="manifest.yaml") diff --git a/airbyte-integrations/connectors/source-the-guardian-api/source_the_guardian_api/the_guardian_api.yaml b/airbyte-integrations/connectors/source-the-guardian-api/source_the_guardian_api/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-the-guardian-api/source_the_guardian_api/the_guardian_api.yaml rename to airbyte-integrations/connectors/source-the-guardian-api/source_the_guardian_api/manifest.yaml diff --git a/airbyte-integrations/connectors/source-the-guardian-api/source_the_guardian_api/source.py b/airbyte-integrations/connectors/source-the-guardian-api/source_the_guardian_api/source.py index 19ae06a52dae8..ecc2af875840a 100644 --- a/airbyte-integrations/connectors/source-the-guardian-api/source_the_guardian_api/source.py +++ b/airbyte-integrations/connectors/source-the-guardian-api/source_the_guardian_api/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceTheGuardianApi(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "the_guardian_api.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/Dockerfile b/airbyte-integrations/connectors/source-tiktok-marketing/Dockerfile index 2e453506445a0..38780ac1e4676 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/Dockerfile +++ b/airbyte-integrations/connectors/source-tiktok-marketing/Dockerfile @@ -32,5 +32,5 @@ COPY source_tiktok_marketing ./source_tiktok_marketing ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=1.0.1 +LABEL io.airbyte.version=2.0.1 LABEL io.airbyte.name=airbyte/source-tiktok-marketing diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/README.md b/airbyte-integrations/connectors/source-tiktok-marketing/README.md index a3864e25fcf47..09f3a7b0f733a 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/README.md +++ b/airbyte-integrations/connectors/source-tiktok-marketing/README.md @@ -79,7 +79,7 @@ docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/integration_tests:/integrat 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] +pip install .'[tests]' ``` ### Unit Tests To run unit tests locally, from the connector directory run: diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/acceptance-test-config.yml b/airbyte-integrations/connectors/source-tiktok-marketing/acceptance-test-config.yml index 3f3067b67b13d..41d5419702846 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-tiktok-marketing/acceptance-test-config.yml @@ -3,97 +3,130 @@ connector_image: airbyte/source-tiktok-marketing:dev cache_discovered_catalog: False -tests: +acceptance_tests: spec: - - spec_path: "integration_tests/spec.json" - + tests: + - spec_path: "integration_tests/spec.json" connection: - - config_path: "secrets/prod_config.json" - status: "succeed" - - config_path: "secrets/prod_config_with_day_granularity.json" - status: "succeed" - - config_path: "secrets/prod_config_with_lifetime_granularity.json" - status: "succeed" - - config_path: "secrets/new_config_prod.json" - status: "succeed" - - config_path: "secrets/config_oauth.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" - - config_path: "integration_tests/invalid_config_access_token.json" - status: "failed" - - config_path: "integration_tests/invalid_config_oauth.json" - status: "failed" - + tests: + - config_path: "secrets/prod_config.json" + status: "succeed" + - config_path: "secrets/prod_config_with_day_granularity.json" + status: "succeed" + - config_path: "secrets/prod_config_with_lifetime_granularity.json" + status: "succeed" + - config_path: "secrets/new_config_prod.json" + status: "succeed" + - config_path: "secrets/config_oauth.json" + status: "succeed" + - config_path: "integration_tests/invalid_config.json" + status: "failed" + - config_path: "integration_tests/invalid_config_access_token.json" + status: "failed" + - config_path: "integration_tests/invalid_config_oauth.json" + status: "failed" discovery: - - config_path: "secrets/prod_config.json" - backward_compatibility_tests_config: - disable_for_version: "1.0.0" - - config_path: "secrets/prod_config_with_day_granularity.json" - backward_compatibility_tests_config: - disable_for_version: "1.0.0" - - config_path: "secrets/prod_config_with_lifetime_granularity.json" - backward_compatibility_tests_config: - disable_for_version: "1.0.0" - - config_path: "secrets/config.json" - backward_compatibility_tests_config: - disable_for_version: "1.0.0" - - config_path: "secrets/new_config_prod.json" - backward_compatibility_tests_config: - disable_for_version: "1.0.0" - - config_path: "secrets/config_oauth.json" - backward_compatibility_tests_config: - disable_for_version: "1.0.0" - + tests: + - config_path: "secrets/prod_config.json" + backward_compatibility_tests_config: + disable_for_version: "1.0.1" + - config_path: "secrets/prod_config_with_day_granularity.json" + backward_compatibility_tests_config: + disable_for_version: "1.0.1" + - config_path: "secrets/prod_config_with_lifetime_granularity.json" + backward_compatibility_tests_config: + disable_for_version: "1.0.1" + - config_path: "secrets/config.json" + backward_compatibility_tests_config: + disable_for_version: "1.0.1" + - config_path: "secrets/new_config_prod.json" + backward_compatibility_tests_config: + disable_for_version: "1.0.1" + - config_path: "secrets/config_oauth.json" + backward_compatibility_tests_config: + disable_for_version: "1.0.1" basic_read: - # New style streams (for >= 0.1.13): - - config_path: "secrets/prod_config.json" - configured_catalog_path: "integration_tests/streams_basic.json" - timeout_seconds: 1200 - - config_path: "secrets/prod_config.json" - configured_catalog_path: "integration_tests/streams_reports_daily.json" - timeout_seconds: 1200 - - config_path: "secrets/prod_config.json" - configured_catalog_path: "integration_tests/streams_reports_lifetime.json" - timeout_seconds: 1200 - # Old style streams with granularity config (for < 0.1.13) - # Note: not needed to be tested separately in full and incremental tests, because code of - # these streams is called directly in new style streams - - config_path: "secrets/prod_config_with_day_granularity.json" - configured_catalog_path: "integration_tests/streams_with_day_granularity.json" - timeout_seconds: 1200 - - config_path: "secrets/prod_config_with_lifetime_granularity.json" - configured_catalog_path: "integration_tests/streams_with_lifetime_granularity.json" - timeout_seconds: 1200 - - incremental: - - config_path: "secrets/prod_config.json" - configured_catalog_path: "integration_tests/streams_basic.json" - timeout_seconds: 7200 - future_state_path: "integration_tests/abnormal_state.json" - - config_path: "secrets/prod_config.json" - configured_catalog_path: "integration_tests/streams_reports_daily.json" - timeout_seconds: 7200 - future_state_path: "integration_tests/abnormal_state.json" - # LIFETIME granularity: does not support incremental sync - + tests: + - config_path: "secrets/config.json" + timeout_seconds: 1200 + empty_streams: + - name: ads_reports_hourly + bypass_reason: "Tested with daily granularity." + - name: ad_groups_reports_hourly + bypass_reason: "Tested with daily granularity." + - name: advertisers_reports_hourly + bypass_reason: "Tested with daily granularity." + - name: campaigns_reports_hourly + bypass_reason: "Tested with daily granularity." + - name: advertisers_reports + bypass_reason: "Stream was added during discover with granularity config. Will be tested below." + - name: advertisers_audience_reports + bypass_reason: "Stream was added during discover with granularity config. Will be tested below." + - name: campaigns_audience_reports_by_country + bypass_reason: "Stream was added during discover with granularity config. Will be tested below." + - name: ad_group_audience_reports + bypass_reason: "Stream was added during discover with granularity config. Will be tested below." + - name: ads_audience_reports + bypass_reason: "Stream was added during discover with granularity config. Will be tested below." + - name: ad_groups_reports + bypass_reason: "Stream was added during discover with granularity config. Will be tested below." + - name: ads_reports + bypass_reason: "Stream was added during discover with granularity config. Will be tested below." + - name: campaigns_reports + bypass_reason: "Stream was added during discover with granularity config. Will be tested below." + # Old style streams with granularity config (for < 0.1.13) + # Note: not needed to be tested separately in full and incremental tests, because code of + # these streams is called directly in new style streams + - config_path: "secrets/prod_config_with_day_granularity.json" + timeout_seconds: 1200 + empty_streams: + - name: ads_reports_lifetime + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: ad_groups_reports_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: advertisers_audience_reports_lifetime + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: campaigns_reports_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: ads_reports_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: advertisers_reports_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: ad_groups_reports_lifetime + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: campaigns_reports_hourly + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: ads_audience_reports_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: ads_audience_reports_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: ad_group_audience_reports_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: campaigns_reports_lifetime + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: ad_groups_reports_hourly + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: advertisers_reports_lifetime + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: campaigns_audience_reports_by_country_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: advertisers_audience_reports_daily + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: advertisers_reports_hourly + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." + - name: ads_reports_hourly + bypass_reason: "Stream was added during discover without granularity config. Was tested abowe." full_refresh: - - config_path: "secrets/prod_config.json" - configured_catalog_path: "integration_tests/streams_basic.json" - timeout_seconds: 7200 - ignored_fields: # Important: sometimes some streams does not return the same records in subsequent syncs - "ad_groups": - [ - "dayparting", - "enable_search_result", - "display_mode", - "schedule_infos", - "feed_type", - "status", - ] - - config_path: "secrets/prod_config.json" - configured_catalog_path: "integration_tests/streams_reports_daily.json" - timeout_seconds: 7200 - - config_path: "secrets/prod_config.json" - configured_catalog_path: "integration_tests/streams_reports_lifetime.json" - timeout_seconds: 7200 + tests: + - config_path: "secrets/prod_config_with_day_granularity.json" + configured_catalog_path: "integration_tests/configured_catalogs/configured_catalog.json" + timeout_seconds: 7200 + incremental: + tests: + - config_path: "secrets/prod_config_with_day_granularity.json" + configured_catalog_path: "integration_tests/configured_catalogs/configured_catalog_incremental.json" + timeout_seconds: 7200 + skip_comprehensive_incremental_tests: true + future_state: + future_state_path: "integration_tests/abnormal_state.json" + # LIFETIME granularity: does not support incremental sync diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/bootstrap.md b/airbyte-integrations/connectors/source-tiktok-marketing/bootstrap.md index 95bf87a6de807..0f295dea239f6 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/bootstrap.md +++ b/airbyte-integrations/connectors/source-tiktok-marketing/bootstrap.md @@ -11,3 +11,50 @@ The basic entity is 'advertiser'. All other streams use this required parameter Dependent streams have required parameter advertiser_id. As cursor field this connector uses "modify_time" values. But endpoints don't provide any mechanism for correct data filtering and sorting thus for incremental sync this connector tries to load all data and to validate a cursor field value on own side. + + + +`stream` method has granularity condition depend on that report streams supports by different connector version: +- For all version: + basic streams list: + * ad_groups + * ads + * campaigns + * advertisers +- for < 0.1.13 - expose report streams initialized with 'report_granularity' argument, like: + Example: + - AdsReports(report_granularity='DAILY') + - AdsReports(report_granularity='LIFETIME') + streams list: + * advertisers_reports + * advertisers_audience_reports + * campaigns_audience_reports_by_country + * ad_group_audience_reports + * ads_audience_reports + * ad_groups_reports + * ads_reports + * campaigns_reports + +- for >= 0.1.13 - expose report streams in format: _, like: + Example: + - AdsReportsDaily(Daily, AdsReports) + - AdsReportsLifetime(Lifetime, AdsReports) + streams: + * campaigns_audience_reports_by_country_daily + * campaigns_reports_daily + * advertisers_audience_reports_daily + * advertisers_reports_daily + * ad_group_audience_reports_daily + * ads_reports_lifetime + * advertiser_ids + * campaigns_reports_lifetime + * advertisers_audience_reports_lifetime + * ad_groups_reports_lifetime + * ad_groups_reports_daily + * advertisers_reports_lifetime + * ads_reports_daily + * ads_audience_reports_daily + * ads_reports_hourly + * ad_groups_reports_hourly + * advertisers_reports_hourly + * campaigns_reports_hourly diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/abnormal_state.json index a4cd2bd35c2e0..150067dcfcade 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/abnormal_state.json @@ -27,7 +27,7 @@ "stat_time_day": "2030-01-01", "dimensions": { "stat_time_day": "2030-01-01" } }, - "stream_descriptor": { "name": "ads_reports_daily" } + "stream_descriptor": { "name": "ads_reports" } } }, { @@ -37,7 +37,7 @@ "stat_time_day": "2030-01-01", "dimensions": { "stat_time_day": "2030-01-01" } }, - "stream_descriptor": { "name": "advertisers_reports_daily" } + "stream_descriptor": { "name": "advertisers_reports" } } }, { @@ -47,7 +47,7 @@ "stat_time_day": "2030-01-01", "dimensions": { "stat_time_day": "2030-01-01" } }, - "stream_descriptor": { "name": "ad_groups_reports_daily" } + "stream_descriptor": { "name": "ad_groups_reports" } } }, { @@ -57,7 +57,7 @@ "stat_time_day": "2030-01-01", "dimensions": { "stat_time_day": "2030-01-01" } }, - "stream_descriptor": { "name": "campaigns_reports_daily" } + "stream_descriptor": { "name": "campaigns_reports" } } }, { @@ -67,7 +67,7 @@ "stat_time_day": "2030-01-01", "dimensions": { "stat_time_day": "2030-01-01" } }, - "stream_descriptor": { "name": "ads_audience_reports_daily" } + "stream_descriptor": { "name": "ads_audience_reports" } } }, { @@ -77,7 +77,7 @@ "stat_time_day": "2030-01-01", "dimensions": { "stat_time_day": "2030-01-01" } }, - "stream_descriptor": { "name": "advertisers_audience_reports_daily" } + "stream_descriptor": { "name": "advertisers_audience_reports" } } }, { @@ -87,7 +87,7 @@ "stat_time_day": "2030-01-01", "dimensions": { "stat_time_day": "2030-01-01" } }, - "stream_descriptor": { "name": "ad_group_audience_reports_daily" } + "stream_descriptor": { "name": "ad_group_audience_reports" } } }, { @@ -98,7 +98,7 @@ "dimensions": { "stat_time_day": "2030-01-01" } }, "stream_descriptor": { - "name": "campaigns_audience_reports_by_country_daily" + "name": "campaigns_audience_reports_by_country" } } } diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/configured_catalog.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/configured_catalog.json new file mode 100644 index 0000000000000..60d68d22ee2d8 --- /dev/null +++ b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/configured_catalog.json @@ -0,0 +1,169 @@ +{ + "streams": [ + { + "stream": { + "name": "advertisers", + "json_schema": {}, + "supported_sync_modes": ["full_refresh"], + "source_defined_primary_key": [["id"]] + }, + "sync_mode": "full_refresh", + "destination_sync_mode": "append", + "primary_key": [["id"]] + }, + { + "stream": { + "name": "ads", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["modify_time"], + "source_defined_primary_key": [["ad_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["modify_time"], + "primary_key": [["ad_id"]] + }, + { + "stream": { + "name": "ad_groups", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["modify_time"], + "source_defined_primary_key": [["adgroup_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["modify_time"], + "primary_key": [["adgroup_id"]] + }, + { + "stream": { + "name": "campaigns", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["modify_time"], + "source_defined_primary_key": [["campaign_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "primary_key": [["campaign_id"]], + "cursor_field": ["modify_time"] + }, + { + "stream": { + "name": "ads_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["ad_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["ad_id"]] + }, + { + "stream": { + "name": "advertisers_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["advertiser_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["advertiser_id"]] + }, + { + "stream": { + "name": "ad_groups_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["adgroup_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["adgroup_id"]] + }, + { + "stream": { + "name": "campaigns_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["campaign_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["campaign_id"]] + }, + { + "stream": { + "name": "campaigns_audience_reports_by_country", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["campaign_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["campaign_id"]] + }, + { + "stream": { + "name": "ad_group_audience_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["adgroup_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["adgroup_id"]] + }, + { + "stream": { + "name": "ads_audience_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["ad_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["ad_id"]] + }, + { + "stream": { + "name": "advertisers_audience_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["advertiser_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["advertiser_id"]] + } + ] +} diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/configured_catalog_incremental.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/configured_catalog_incremental.json new file mode 100644 index 0000000000000..dfa741a1b48ba --- /dev/null +++ b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/configured_catalog_incremental.json @@ -0,0 +1,158 @@ +{ + "streams": [ + { + "stream": { + "name": "ads", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["modify_time"], + "source_defined_primary_key": [["ad_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["modify_time"], + "primary_key": [["ad_id"]] + }, + { + "stream": { + "name": "ad_groups", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["modify_time"], + "source_defined_primary_key": [["adgroup_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["modify_time"], + "primary_key": [["adgroup_id"]] + }, + { + "stream": { + "name": "campaigns", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["modify_time"], + "source_defined_primary_key": [["campaign_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "primary_key": [["campaign_id"]], + "cursor_field": ["modify_time"] + }, + { + "stream": { + "name": "ads_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["ad_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["ad_id"]] + }, + { + "stream": { + "name": "advertisers_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["advertiser_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["advertiser_id"]] + }, + { + "stream": { + "name": "ad_groups_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["adgroup_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["adgroup_id"]] + }, + { + "stream": { + "name": "campaigns_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["campaign_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["campaign_id"]] + }, + { + "stream": { + "name": "campaigns_audience_reports_by_country", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["campaign_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["campaign_id"]] + }, + { + "stream": { + "name": "ad_group_audience_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["adgroup_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["adgroup_id"]] + }, + { + "stream": { + "name": "ads_audience_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["ad_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["ad_id"]] + }, + { + "stream": { + "name": "advertisers_audience_reports", + "json_schema": {}, + "supported_sync_modes": ["full_refresh", "incremental"], + "source_defined_cursor": true, + "default_cursor_field": ["stat_time_day"], + "source_defined_primary_key": [["advertiser_id"]] + }, + "sync_mode": "incremental", + "destination_sync_mode": "append", + "cursor_field": ["stat_time_day"], + "primary_key": [["advertiser_id"]] + } + ] +} diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams.json similarity index 100% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams.json diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_all.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_all.json similarity index 99% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_all.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_all.json index dd4dbb4bc3b68..ec7b882e6234d 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_all.json +++ b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_all.json @@ -10,7 +10,6 @@ "sync_mode": "full_refresh", "destination_sync_mode": "append" }, - { "stream": { "name": "ads", @@ -47,7 +46,6 @@ "sync_mode": "full_refresh", "destination_sync_mode": "append" }, - { "stream": { "name": "ads_reports_daily", diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_all_incremental.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_all_incremental.json similarity index 100% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_all_incremental.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_all_incremental.json diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_audience_incremental.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_audience_incremental.json similarity index 100% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_audience_incremental.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_audience_incremental.json diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_basic.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_basic.json similarity index 100% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_basic.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_basic.json diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_reports_daily.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_reports_daily.json similarity index 100% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_reports_daily.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_reports_daily.json diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_reports_lifetime.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_reports_lifetime.json similarity index 100% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_reports_lifetime.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_reports_lifetime.json diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_with_day_granularity.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_with_day_granularity.json similarity index 100% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_with_day_granularity.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_with_day_granularity.json diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_with_lifetime_granularity.json b/airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_with_lifetime_granularity.json similarity index 100% rename from airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/streams_with_lifetime_granularity.json rename to airbyte-integrations/connectors/source-tiktok-marketing/integration_tests/configured_catalogs/streams_with_lifetime_granularity.json diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/schemas/audience_reports.json b/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/schemas/audience_reports.json index fcd9525995328..5c80cc93575b7 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/schemas/audience_reports.json +++ b/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/schemas/audience_reports.json @@ -47,7 +47,7 @@ "type": ["null", "string"] }, "tt_app_id": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "tt_app_name": { "type": ["null", "string"] @@ -62,64 +62,64 @@ "type": ["null", "string"] }, "spend": { - "type": ["null", "number"] + "type": ["null", "string"] }, "cpc": { - "type": ["null", "number"] + "type": ["null", "string"] }, "cpm": { - "type": ["null", "number"] + "type": ["null", "string"] }, "impressions": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "clicks": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "ctr": { - "type": ["null", "number"] + "type": ["null", "string"] }, "reach": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "cost_per_1000_reached": { - "type": ["null", "number"] + "type": ["null", "string"] }, "conversion": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "cost_per_conversion": { - "type": ["null", "number"] + "type": ["null", "string"] }, "conversion_rate": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_conversion": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "real_time_cost_per_conversion": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_conversion_rate": { - "type": ["null", "number"] + "type": ["null", "string"] }, "result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "cost_per_result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "result_rate": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_cost_per_result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_result_rate": { - "type": ["null", "number"] + "type": ["null", "string"] } } }, diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/schemas/basic_reports.json b/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/schemas/basic_reports.json index d09e10309a914..aa21b173b8b65 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/schemas/basic_reports.json +++ b/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/schemas/basic_reports.json @@ -62,82 +62,82 @@ "type": ["null", "string"] }, "spend": { - "type": ["null", "number"] + "type": ["null", "string"] }, "cash_spend": { - "type": ["null", "number"] + "type": ["null", "string"] }, "voucher_spend": { - "type": ["null", "number"] + "type": ["null", "string"] }, "cpc": { - "type": ["null", "number"] + "type": ["null", "string"] }, "cpm": { - "type": ["null", "number"] + "type": ["null", "string"] }, "impressions": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "clicks": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "ctr": { - "type": ["null", "number"] + "type": ["null", "string"] }, "reach": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "cost_per_1000_reached": { - "type": ["null", "number"] + "type": ["null", "string"] }, "conversion": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "cost_per_conversion": { - "type": ["null", "number"] + "type": ["null", "string"] }, "conversion_rate": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_conversion": { - "type": ["null", "integer"] + "type": ["null", "string"] }, "real_time_cost_per_conversion": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_conversion_rate": { - "type": ["null", "number"] + "type": ["null", "string"] }, "result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "cost_per_result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "result_rate": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_cost_per_result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "real_time_result_rate": { - "type": ["null", "number"] + "type": ["null", "string"] }, "secondary_goal_result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "cost_per_secondary_goal_result": { - "type": ["null", "number"] + "type": ["null", "string"] }, "secondary_goal_result_rate": { - "type": ["null", "number"] + "type": ["null", "string"] }, "frequency": { - "type": ["null", "number"] + "type": ["null", "string"] } } }, diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/streams.py b/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/streams.py index 855658f596f40..f426710b7169f 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/streams.py +++ b/airbyte-integrations/connectors/source-tiktok-marketing/source_tiktok_marketing/streams.py @@ -15,6 +15,7 @@ import pydantic import requests from airbyte_cdk.models import SyncMode +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.core import package_name_from_class from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.utils.schema_helpers import ResourceSchemaLoader @@ -153,6 +154,10 @@ def __init__(self, **kwargs): # only sandbox has non-empty self._advertiser_id self.is_sandbox = bool(self._advertiser_id) + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def parse_response(self, response: requests.Response, **kwargs) -> Iterable[Mapping]: """All responses have the similar structure: { diff --git a/airbyte-integrations/connectors/source-tiktok-marketing/unit_tests/unit_test.py b/airbyte-integrations/connectors/source-tiktok-marketing/unit_tests/unit_test.py index 41c3ef34391df..ec992b7f890b1 100644 --- a/airbyte-integrations/connectors/source-tiktok-marketing/unit_tests/unit_test.py +++ b/airbyte-integrations/connectors/source-tiktok-marketing/unit_tests/unit_test.py @@ -16,7 +16,7 @@ from source_tiktok_marketing import SourceTiktokMarketing from source_tiktok_marketing.streams import Ads, Advertisers, JsonUpdatedState -SANDBOX_CONFIG_FILE = "secrets/config.json" +SANDBOX_CONFIG_FILE = "secrets/sandbox_config.json" PROD_CONFIG_FILE = "secrets/prod_config.json" diff --git a/airbyte-integrations/connectors/source-tmdb/source_tmdb/tmdb.yaml b/airbyte-integrations/connectors/source-tmdb/source_tmdb/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-tmdb/source_tmdb/tmdb.yaml rename to airbyte-integrations/connectors/source-tmdb/source_tmdb/manifest.yaml diff --git a/airbyte-integrations/connectors/source-tmdb/source_tmdb/source.py b/airbyte-integrations/connectors/source-tmdb/source_tmdb/source.py index be00b94482afe..62a950e4fb6f7 100644 --- a/airbyte-integrations/connectors/source-tmdb/source_tmdb/source.py +++ b/airbyte-integrations/connectors/source-tmdb/source_tmdb/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceTmdb(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "tmdb.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-toggl/source_toggl/toggl.yaml b/airbyte-integrations/connectors/source-toggl/source_toggl/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-toggl/source_toggl/toggl.yaml rename to airbyte-integrations/connectors/source-toggl/source_toggl/manifest.yaml diff --git a/airbyte-integrations/connectors/source-toggl/source_toggl/source.py b/airbyte-integrations/connectors/source-toggl/source_toggl/source.py index 30b928ef3e14f..2c5736b5e5a69 100644 --- a/airbyte-integrations/connectors/source-toggl/source_toggl/source.py +++ b/airbyte-integrations/connectors/source-toggl/source_toggl/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceToggl(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "toggl.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-tvmaze-schedule/source_tvmaze_schedule/tvmaze_schedule.yaml b/airbyte-integrations/connectors/source-tvmaze-schedule/source_tvmaze_schedule/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-tvmaze-schedule/source_tvmaze_schedule/tvmaze_schedule.yaml rename to airbyte-integrations/connectors/source-tvmaze-schedule/source_tvmaze_schedule/manifest.yaml diff --git a/airbyte-integrations/connectors/source-tvmaze-schedule/source_tvmaze_schedule/source.py b/airbyte-integrations/connectors/source-tvmaze-schedule/source_tvmaze_schedule/source.py index 49dc934451b41..d684593e716c7 100644 --- a/airbyte-integrations/connectors/source-tvmaze-schedule/source_tvmaze_schedule/source.py +++ b/airbyte-integrations/connectors/source-tvmaze-schedule/source_tvmaze_schedule/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceTvmazeSchedule(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "tvmaze_schedule.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-twilio-taskrouter/source_twilio_taskrouter/twilio_taskrouter.yaml b/airbyte-integrations/connectors/source-twilio-taskrouter/source_twilio_taskrouter/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-twilio-taskrouter/source_twilio_taskrouter/twilio_taskrouter.yaml rename to airbyte-integrations/connectors/source-twilio-taskrouter/source_twilio_taskrouter/manifest.yaml diff --git a/airbyte-integrations/connectors/source-twilio-taskrouter/source_twilio_taskrouter/source.py b/airbyte-integrations/connectors/source-twilio-taskrouter/source_twilio_taskrouter/source.py index b04146f84464b..aec37062a2a5b 100644 --- a/airbyte-integrations/connectors/source-twilio-taskrouter/source_twilio_taskrouter/source.py +++ b/airbyte-integrations/connectors/source-twilio-taskrouter/source_twilio_taskrouter/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceTwilioTaskrouter(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "twilio_taskrouter.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-twilio/Dockerfile b/airbyte-integrations/connectors/source-twilio/Dockerfile index bcdfcaf5d9200..b189ece2d760f 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.1.14 +LABEL io.airbyte.version=0.1.15 LABEL io.airbyte.name=airbyte/source-twilio diff --git a/airbyte-integrations/connectors/source-twilio/source_twilio/streams.py b/airbyte-integrations/connectors/source-twilio/source_twilio/streams.py index 390794f2dee47..7dea15c222d18 100644 --- a/airbyte-integrations/connectors/source-twilio/source_twilio/streams.py +++ b/airbyte-integrations/connectors/source-twilio/source_twilio/streams.py @@ -12,6 +12,7 @@ import requests from airbyte_cdk.models import SyncMode from airbyte_cdk.sources.streams import IncrementalMixin +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream from airbyte_cdk.sources.streams.http.auth.core import HttpAuthenticator from airbyte_cdk.sources.utils.transform import TransformConfig, TypeTransformer @@ -40,6 +41,10 @@ def changeable_fields(self): """ return [] + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def path(self, **kwargs): return f"{self.name.title()}.json" diff --git a/airbyte-integrations/connectors/source-twitter/source_twitter/twitter.yaml b/airbyte-integrations/connectors/source-twitter/source_twitter/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-twitter/source_twitter/twitter.yaml rename to airbyte-integrations/connectors/source-twitter/source_twitter/manifest.yaml diff --git a/airbyte-integrations/connectors/source-twitter/source_twitter/source.py b/airbyte-integrations/connectors/source-twitter/source_twitter/source.py index d5bedefc9da98..c11ea62d31147 100644 --- a/airbyte-integrations/connectors/source-twitter/source_twitter/source.py +++ b/airbyte-integrations/connectors/source-twitter/source_twitter/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceTwitter(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "twitter.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-tyntec-sms/source_tyntec_sms/tyntec_sms.yaml b/airbyte-integrations/connectors/source-tyntec-sms/source_tyntec_sms/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-tyntec-sms/source_tyntec_sms/tyntec_sms.yaml rename to airbyte-integrations/connectors/source-tyntec-sms/source_tyntec_sms/manifest.yaml diff --git a/airbyte-integrations/connectors/source-tyntec-sms/source_tyntec_sms/source.py b/airbyte-integrations/connectors/source-tyntec-sms/source_tyntec_sms/source.py index bf81253de26b5..515b3854077df 100644 --- a/airbyte-integrations/connectors/source-tyntec-sms/source_tyntec_sms/source.py +++ b/airbyte-integrations/connectors/source-tyntec-sms/source_tyntec_sms/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceTyntecSms(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "tyntec_sms.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-typeform/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-typeform/integration_tests/expected_records.jsonl index 771ff67b76f0d..68c6f5e1d7942 100644 --- a/airbyte-integrations/connectors/source-typeform/integration_tests/expected_records.jsonl +++ b/airbyte-integrations/connectors/source-typeform/integration_tests/expected_records.jsonl @@ -1,7 +1,7 @@ -{"stream":"forms","data":{"id":"VWO7mLtl","type":"quiz","title":"Connector Extensibility meetup","workspace":{"href":"https://api.typeform.com/workspaces/sDaAqs"},"theme":{"href":"https://api.typeform.com/themes/qHWOQ7"},"settings":{"language":"en","progress_bar":"proportion","meta":{"allow_indexing":false},"hide_navigation":false,"is_public":true,"is_trial":false,"show_progress_bar":true,"show_typeform_branding":true,"are_uploads_public":false,"show_time_to_complete":true,"show_number_of_submissions":false,"show_cookie_consent":false,"show_question_number":true,"pro_subdomain_enabled":false,"capabilities":{"e2e_encryption":{"enabled":false,"modifiable":false}}},"thankyou_screens":[{"id":"qvDqCNAHuIC8","ref":"01GHC6KQ5Y0M8VN6XHVAG75J0G","title":"","type":"thankyou_screen","properties":{"show_button":true,"share_icons":true,"button_mode":"default_redirect","button_text":"Create a typeform"}},{"id":"DefaultTyScreen","ref":"default_tys","title":"Thanks for completing this typeform\nNow *create your own* — it's free, easy, & beautiful","type":"thankyou_screen","properties":{"show_button":true,"share_icons":false,"button_mode":"default_redirect","button_text":"Create a *typeform*"},"attachment":{"type":"image","href":"https://images.typeform.com/images/2dpnUBBkz2VN"}}],"fields":[{"id":"ZdzF0rrvsVdB","title":"What times work for you to visit San Francisco to work with the team?","ref":"01GHC6KQ5Y6S9ZQH5CHKZPT1RM","properties":{"randomize":false,"allow_multiple_selection":true,"allow_other_choice":true,"vertical_alignment":true,"choices":[{"id":"nLpt4rvNjFB3","ref":"01GHC6KQ5Y155J0F550BGYYS1A","label":"Dec 12-16"},{"id":"4xpK9sqA06eL","ref":"01GHC6KQ5YBATX0CFENVVB5BYG","label":"Dec 19-23"},{"id":"jQHb3mqslOsZ","ref":"1c392fa3-e693-49fe-b334-3a5cddc1db6f","label":"Jan 9-14"},{"id":"wS5FKMUnMgqR","ref":"2ac396a3-1b8e-4e56-b36d-d1f27c1b834d","label":"Jan 16-20"},{"id":"uvmLX80Loava","ref":"8fffd3a8-1e96-421d-a605-a7029bd55e97","label":"Jan 22-26"},{"id":"7ubtgCrW2meb","ref":"17403cc9-74cd-49d1-856a-be6662b3b497","label":"Jan30 - Feb3"},{"id":"51q0g4fTFtYc","ref":"3a1295b4-97b9-4986-9c37-f1af1d72501d","label":"Feb 6 - 11"},{"id":"vi3iwtpETqlb","ref":"54edf52a-c9c7-4bc4-a5a6-bd86115f5adb","label":"Feb 13-17"},{"id":"iI0hDpta14Kk","ref":"e149c19f-8b61-4ff0-a17a-e9e65c3a8fee","label":"Feb 19-24"}]},"validations":{"required":false},"type":"multiple_choice","attachment":{"type":"image","href":"https://images.typeform.com/images/WMALzu59xbXQ"},"layout":{"type":"split","attachment":{"type":"image","href":"https://images.typeform.com/images/WMALzu59xbXQ"}}}],"created_at":"2022-11-08T18:04:03+00:00","last_updated_at":"2022-11-08T21:10:54+00:00","published_at":"2022-11-08T21:10:54+00:00","_links":{"display":"https://xe03v5buli4.typeform.com/to/VWO7mLtl"}},"emitted_at":1673035157921} -{"stream":"forms","data":{"id":"SdMKQYkv","type":"quiz","title":"Event Registration (copy)","workspace":{"href":"https://api.typeform.com/workspaces/sDaAqs"},"theme":{"href":"https://api.typeform.com/themes/JPnxbU"},"settings":{"language":"en","progress_bar":"proportion","meta":{"allow_indexing":true},"hide_navigation":false,"is_public":true,"is_trial":false,"show_progress_bar":true,"show_typeform_branding":true,"are_uploads_public":false,"show_time_to_complete":true,"show_number_of_submissions":false,"show_cookie_consent":false,"show_question_number":true,"pro_subdomain_enabled":false,"capabilities":{"e2e_encryption":{"enabled":false,"modifiable":false}}},"thankyou_screens":[{"id":"DefaultTyScreen","ref":"default_tys","title":"Thanks for completing this typeform\nNow *create your own* — it's free, easy, & beautiful","type":"thankyou_screen","properties":{"show_button":true,"share_icons":false,"button_mode":"default_redirect","button_text":"Create a *typeform*"},"attachment":{"type":"image","href":"https://images.typeform.com/images/2dpnUBBkz2VN"}}],"welcome_screens":[{"id":"3rc53L8DmKJ5","ref":"70d54ea2e68f27ae","title":"The annual FormConf is almost here.\n\nWant to come?","properties":{"show_button":true,"button_text":"Count me in"},"attachment":{"type":"image","href":"https://images.typeform.com/images/UD82iitWn5XY"}}],"fields":[{"id":"63WvXUnvSCa9","title":"Great, can we get your full name?","ref":"ef34b985c51e4131","properties":{"description":"We'll print this on your event pass."},"validations":{"required":true},"type":"short_text"},{"id":"kwpFrd2lI3ok","title":"And what's your email address?","ref":"0c3cabd70157cf16","properties":{"description":"We'll only use it to send you a confirmation."},"validations":{"required":true},"type":"email"},{"id":"1Ua3d1mzhJwj","title":"Are you planning on staying for the afterparty?","ref":"7207397713e2b5e3","properties":{"description":"We have a surprise guest lined up...","randomize":false,"allow_multiple_selection":false,"allow_other_choice":false,"supersized":false,"show_labels":true,"choices":[{"id":"z5hxxjpJl07L","ref":"bfcc3fbf608583f7","label":"Yes","attachment":{"type":"image","href":"https://images.typeform.com/images/xDriVAzzHfVq"}},{"id":"37iaitPaS03r","ref":"5bf390ce5210d38b","label":"No","attachment":{"type":"image","href":"https://images.typeform.com/images/Rn4AmMgzPrYg"}}]},"validations":{"required":false},"type":"picture_choice"},{"id":"MmrPLXSaCF5B","title":"And do you have any food allergies we should know about?","ref":"9aaaeeebe70858c4","properties":{},"validations":{"required":false},"type":"short_text"},{"id":"gurSOcuvNnvb","title":"Any questions about the event?","ref":"18842abd9aa9ded4","properties":{"description":"Write them here and we'll get back to you via email."},"validations":{"required":false},"type":"long_text"},{"id":"fCaCvjCJ57cO","title":"And finally, would you mind telling us how you heard about the FormConf?","ref":"261d0775b1f029cb","properties":{"randomize":false,"allow_multiple_selection":false,"allow_other_choice":true,"vertical_alignment":false,"choices":[{"id":"IhbdgAo2LHXJ","ref":"51c76f5fa66c6725","label":"Social media"},{"id":"h6Ss8i8gQdOw","ref":"87408191d53179ee","label":"Google"},{"id":"45jv6vFn2nrz","ref":"8bc14882d0521d6a","label":"Local advertising"},{"id":"Iahtxl1jeQwh","ref":"fce1c86f-fb00-4c33-8085-6e4a4f12ea35","label":"From a friend"}]},"validations":{"required":false},"type":"multiple_choice"},{"id":"i8rReP3KV7c0","title":"That's everything. We'll send you an email confirmation with some details a few minutes after you submit this form.\n\nWe hope you're excited as we are :)","ref":"c6d179ae9c4794e0","properties":{"button_text":"See you there!","hide_marks":true},"type":"statement"}],"created_at":"2021-06-26T14:39:53+00:00","last_updated_at":"2021-06-27T15:15:56+00:00","published_at":"2021-06-27T15:15:56+00:00","_links":{"display":"https://xe03v5buli4.typeform.com/to/SdMKQYkv"}},"emitted_at":1673035158049} -{"stream":"forms","data":{"id":"kRt99jlK","type":"quiz","title":"Political Poll [DEMO 2] (copy)","workspace":{"href":"https://api.typeform.com/workspaces/sDaAqs"},"theme":{"href":"https://api.typeform.com/themes/wvWlco"},"settings":{"language":"en","progress_bar":"percentage","meta":{"allow_indexing":true},"hide_navigation":false,"is_public":true,"is_trial":false,"show_progress_bar":true,"show_typeform_branding":true,"are_uploads_public":false,"show_time_to_complete":true,"show_number_of_submissions":false,"show_cookie_consent":false,"show_question_number":true,"pro_subdomain_enabled":false,"capabilities":{"e2e_encryption":{"enabled":false,"modifiable":false}}},"thankyou_screens":[{"id":"DefaultTyScreen","ref":"default_tys","title":"Thanks for completing this typeform\nNow *create your own* — it's free, easy, & beautiful","type":"thankyou_screen","properties":{"show_button":true,"share_icons":false,"button_mode":"default_redirect","button_text":"Create a *typeform*"},"attachment":{"type":"image","href":"https://images.typeform.com/images/2dpnUBBkz2VN"}}],"welcome_screens":[{"id":"4jguOatzh4QX","ref":"e8ee8d1500fec6d9","title":"*National Voting Intentions*","properties":{"show_button":true,"button_text":"Take Poll","description":"If you're ok with it, we'd like to know about how you might vote in a general election"},"attachment":{"type":"image","href":"https://images.typeform.com/images/ty98jF8FppfC"}}],"fields":[{"id":"qthblBc7InVU","title":"Let's get right to the point:\nIf there was a general election tomorrow, which party would you vote for?","ref":"8267768033031e53","properties":{"randomize":false,"allow_multiple_selection":false,"allow_other_choice":true,"vertical_alignment":true,"choices":[{"id":"3XbsOhLiGFkv","ref":"fc3c3f5dbe75a01e","label":"Center-right party"},{"id":"FesJYxqJ0SNX","ref":"61f5e8b36fcdbd91","label":"Center-left party"},{"id":"prJzwOH23zsc","ref":"495e234f7c65d582","label":"Green party"},{"id":"6IXNu85c5dOl","ref":"566c959b6ef92437","label":"Don't know"}]},"validations":{"required":true},"type":"multiple_choice"},{"id":"rB7FJUThFlu4","title":"OK, how do you feel about the general direction of our country at the moment?","ref":"b13b02912db6f287","properties":{"randomize":false,"allow_multiple_selection":false,"allow_other_choice":false,"supersized":true,"show_labels":true,"choices":[{"id":"Jt8FTorS35Sb","ref":"b99bb45c5b8c25be","label":"Going in the wrong direction","attachment":{"type":"image","href":"https://images.typeform.com/images/evDEZYspmvjm"}},{"id":"KUJ0sF2mqG5A","ref":"2e07534517a152a2","label":"Going in the right direction","attachment":{"type":"image","href":"https://images.typeform.com/images/DgjPyuz9Aphy"}},{"id":"Dlb3UhA4keI4","ref":"50be578304fe3e92","label":"At a standstill","attachment":{"type":"image","href":"https://images.typeform.com/images/ZqbqJ6h4zGmM"}},{"id":"21TAgDkTV2zE","ref":"d9993c86773807a8","label":"Unsure","attachment":{"type":"image","href":"https://images.typeform.com/images/mNFNeMbxPQMt"}}]},"validations":{"required":true},"type":"picture_choice"},{"id":"vV7ISYSgZ94I","title":"Thanks, and how do you feel about your own situation this year?","ref":"f1939629f760be75","properties":{"start_at_one":true,"steps":5,"labels":{"left":"Much worse","center":"About the same","right":"Much better"}},"validations":{"required":true},"type":"opinion_scale"},{"id":"Mrq4qNeRInni","title":"Thanks again. Just a couple more questions to go. \nWhich of these issues is most important to you?","ref":"c52566d91c5052e2","properties":{"randomize":true,"allow_multiple_selection":false,"allow_other_choice":false,"supersized":false,"show_labels":true,"choices":[{"id":"pTMw2DVbpMyD","ref":"d9374e70c6cb2f9c","label":"Taxes & Economy","attachment":{"type":"image","href":"https://images.typeform.com/images/6eSzJ9khSfvS"}},{"id":"dymEoJ3SUDZp","ref":"d3278566f523cef0","label":"Labor & Business","attachment":{"type":"image","href":"https://images.typeform.com/images/HWfXuXCR3Ls8"}},{"id":"mOq857nilN8V","ref":"39ecf093bc5e645b","label":"Infrastructures","attachment":{"type":"image","href":"https://images.typeform.com/images/rW2P45guvd63"}},{"id":"rnul7dwtsWbg","ref":"aa1c16d517ffbea0","label":"Health","attachment":{"type":"image","href":"https://images.typeform.com/images/nVsmUESsAzCs"}},{"id":"Ii1K3mlYioOm","ref":"4b9a4b0defbf04e5","label":"Environment","attachment":{"type":"image","href":"https://images.typeform.com/images/7ZwHmRi3ZYeg"}},{"id":"TGZeXHyDgTrQ","ref":"536d99289a1f80d1","label":"Education","attachment":{"type":"image","href":"https://images.typeform.com/images/Z8qCFjGRD78P"}},{"id":"1Asa5xFxfuCi","ref":"68b9b4d37fabf862","label":"Family & Equality","attachment":{"type":"image","href":"https://images.typeform.com/images/YC4Fx6ud6bKq"}},{"id":"szBe0vqnkCUK","ref":"3f1692f85c3cd73b","label":"Military & Defense","attachment":{"type":"image","href":"https://images.typeform.com/images/YA746sDt87Xf"}}]},"validations":{"required":true},"type":"picture_choice"},{"id":"aDJXqNTyDXxD","title":"To finish up, would you mind telling us how you think the current government doing on these issues?","ref":"f684d8bc4fbca5d3","properties":{"description":"From 1, doing badly, to 5, doing great...","button_text":"Continue","show_button":false,"fields":[{"id":"x9myjwStSn9a","title":"Economy","ref":"55c2e5c15f7dccec","properties":{"shape":"star","steps":5},"validations":{"required":true},"type":"rating"},{"id":"zaP8jDAArI5x","title":"National Debt","ref":"f853e99096a32208","properties":{"shape":"up","steps":5},"validations":{"required":true},"type":"rating"},{"id":"VFmcjbHlFTzg","title":"Employment","ref":"6f0fd734177ecf27","properties":{"shape":"user","steps":5},"validations":{"required":true},"type":"rating"},{"id":"DgGh4ZkRBAyH","title":"Healthcare","ref":"b4171ed292dc3cee","properties":{"shape":"heart","steps":5},"validations":{"required":true},"type":"rating"},{"id":"yC3UrwN1LKT8","title":"Education","ref":"c8dd7d63c26777d9","properties":{"shape":"pencil","steps":5},"validations":{"required":true},"type":"rating"}]},"type":"group"}],"created_at":"2021-06-26T14:39:14+00:00","last_updated_at":"2021-07-01T10:03:13+00:00","published_at":"2021-07-01T10:03:13+00:00","_links":{"display":"https://xe03v5buli4.typeform.com/to/kRt99jlK"}},"emitted_at":1673035158319} -{"stream":"forms","data":{"id":"XtrcGoGJ","type":"quiz","title":"Basic Form","workspace":{"href":"https://api.typeform.com/workspaces/sDaAqs"},"theme":{"href":"https://api.typeform.com/themes/qHWOQ7"},"settings":{"language":"en","progress_bar":"proportion","meta":{"allow_indexing":false},"hide_navigation":false,"is_public":true,"is_trial":false,"show_progress_bar":true,"show_typeform_branding":true,"are_uploads_public":false,"show_time_to_complete":true,"show_number_of_submissions":false,"show_cookie_consent":false,"show_question_number":true,"pro_subdomain_enabled":false,"capabilities":{"e2e_encryption":{"enabled":false,"modifiable":false}}},"thankyou_screens":[{"id":"Xg85PhXqk4HR","ref":"01F8N53B82QB6T2VM7ASP16198","title":"","type":"thankyou_screen","properties":{"show_button":true,"share_icons":true,"button_mode":"reload","button_text":"reload"}},{"id":"DefaultTyScreen","ref":"default_tys","title":"Thanks for completing this typeform\nNow *create your own* — it's free, easy, & beautiful","type":"thankyou_screen","properties":{"show_button":true,"share_icons":false,"button_mode":"default_redirect","button_text":"Create a *typeform*"},"attachment":{"type":"image","href":"https://images.typeform.com/images/2dpnUBBkz2VN"}}],"fields":[{"id":"8VK4KwNd0DgB","title":"Hello, what's your name?","ref":"01F8N53B7KPZ2A1DWGZTTK9SKG","properties":{},"validations":{"required":false},"type":"short_text","attachment":{"type":"image","href":"https://images.typeform.com/images/WMALzu59xbXQ"},"layout":{"type":"split","attachment":{"type":"image","href":"https://images.typeform.com/images/WMALzu59xbXQ"}}},{"id":"HbNDNK4LLOXB","title":"Fill your email here:","ref":"b7980774-f17f-43bc-920b-586e03398f03","properties":{},"validations":{"required":false},"type":"email"},{"id":"5l7cx4NRa7aX","title":"enter site","ref":"e98312ff-df57-4de2-82ae-3617e6dd32ab","properties":{},"validations":{"required":false},"type":"website"},{"id":"6lGZzhNfrqwB","title":"Multi-Select question.","ref":"43153da3-fbbc-443e-b66f-1752770c0e0a","properties":{"randomize":false,"allow_multiple_selection":true,"allow_other_choice":false,"vertical_alignment":true,"choices":[{"id":"3HfyxDo5JoXf","ref":"f83999f6-c869-47cc-af2f-f22b628a0fdb","label":"choice 3"},{"id":"03VP9UxCwCLT","ref":"27b8dfcb-ef16-4ad7-b2be-734ec24c34ca","label":"choice 4"},{"id":"ELm7HbFr0OOq","ref":"ce51ab49-2cce-490d-b831-309337c79fa0","label":"choice2"},{"id":"acwDGU8NeO2A","ref":"74ef0411-0c8a-4c09-a6f3-7a62b0745f68","label":"choice1"}]},"validations":{"required":false},"type":"multiple_choice"},{"id":"X6dq0mumvtKq","title":"Nice to meet you, {{field:01F8N53B7KPZ2A1DWGZTTK9SKG}}, how is your day going?","ref":"01F8N53B8293QHVDDHT84RZR6K","properties":{"randomize":false,"allow_multiple_selection":false,"allow_other_choice":false,"vertical_alignment":true,"choices":[{"id":"FWQrVLFdHroI","ref":"01F8N53B82JXPXZ1B53BMJY0X2","label":"Terrific!"},{"id":"7jNEfjJ2cDAl","ref":"01F8N53B82RE3YZK7RR50KNRQ0","label":"Not so well..."}]},"validations":{"required":false},"type":"multiple_choice"}],"created_at":"2021-06-20T16:47:13+00:00","last_updated_at":"2022-06-20T10:19:58+00:00","published_at":"2021-06-20T16:47:26+00:00","_links":{"display":"https://xe03v5buli4.typeform.com/to/XtrcGoGJ"}},"emitted_at":1673035158458} +{"stream": "forms", "data": {"id": "VWO7mLtl", "type": "quiz", "title": "Connector Extensibility meetup", "workspace": {"href": "https://api.typeform.com/workspaces/sDaAqs"}, "theme": {"href": "https://api.typeform.com/themes/qHWOQ7"}, "settings": {"language": "en", "progress_bar": "proportion", "meta": {"allow_indexing": false}, "hide_navigation": false, "is_public": true, "is_trial": false, "show_progress_bar": true, "show_typeform_branding": true, "are_uploads_public": false, "show_time_to_complete": true, "show_number_of_submissions": false, "show_cookie_consent": false, "show_question_number": true, "show_key_hint_on_choices": true, "pro_subdomain_enabled": false, "capabilities": {"e2e_encryption": {"enabled": false, "modifiable": false}}}, "thankyou_screens": [{"id": "qvDqCNAHuIC8", "ref": "01GHC6KQ5Y0M8VN6XHVAG75J0G", "title": "", "type": "thankyou_screen", "properties": {"show_button": true, "share_icons": true, "button_mode": "default_redirect", "button_text": "Create a typeform"}}, {"id": "DefaultTyScreen", "ref": "default_tys", "title": "Thanks for completing this typeform\nNow *create your own* \u2014 it's free, easy, & beautiful", "type": "thankyou_screen", "properties": {"show_button": true, "share_icons": false, "button_mode": "default_redirect", "button_text": "Create a *typeform*"}, "attachment": {"type": "image", "href": "https://images.typeform.com/images/2dpnUBBkz2VN"}}], "fields": [{"id": "ZdzF0rrvsVdB", "title": "What times work for you to visit San Francisco to work with the team?", "ref": "01GHC6KQ5Y6S9ZQH5CHKZPT1RM", "properties": {"randomize": false, "allow_multiple_selection": true, "allow_other_choice": true, "vertical_alignment": true, "choices": [{"id": "nLpt4rvNjFB3", "ref": "01GHC6KQ5Y155J0F550BGYYS1A", "label": "Dec 12-16"}, {"id": "4xpK9sqA06eL", "ref": "01GHC6KQ5YBATX0CFENVVB5BYG", "label": "Dec 19-23"}, {"id": "jQHb3mqslOsZ", "ref": "1c392fa3-e693-49fe-b334-3a5cddc1db6f", "label": "Jan 9-14"}, {"id": "wS5FKMUnMgqR", "ref": "2ac396a3-1b8e-4e56-b36d-d1f27c1b834d", "label": "Jan 16-20"}, {"id": "uvmLX80Loava", "ref": "8fffd3a8-1e96-421d-a605-a7029bd55e97", "label": "Jan 22-26"}, {"id": "7ubtgCrW2meb", "ref": "17403cc9-74cd-49d1-856a-be6662b3b497", "label": "Jan30 - Feb3"}, {"id": "51q0g4fTFtYc", "ref": "3a1295b4-97b9-4986-9c37-f1af1d72501d", "label": "Feb 6 - 11"}, {"id": "vi3iwtpETqlb", "ref": "54edf52a-c9c7-4bc4-a5a6-bd86115f5adb", "label": "Feb 13-17"}, {"id": "iI0hDpta14Kk", "ref": "e149c19f-8b61-4ff0-a17a-e9e65c3a8fee", "label": "Feb 19-24"}]}, "validations": {"required": false}, "type": "multiple_choice", "attachment": {"type": "image", "href": "https://images.typeform.com/images/WMALzu59xbXQ"}, "layout": {"type": "split", "attachment": {"type": "image", "href": "https://images.typeform.com/images/WMALzu59xbXQ"}}}], "created_at": "2022-11-08T18:04:03+00:00", "last_updated_at": "2022-11-08T21:10:54+00:00", "published_at": "2022-11-08T21:10:54+00:00", "_links": {"display": "https://xe03v5buli4.typeform.com/to/VWO7mLtl"}}, "emitted_at": 1674208909563} +{"stream": "forms", "data": {"id": "SdMKQYkv", "type": "quiz", "title": "Event Registration (copy)", "workspace": {"href": "https://api.typeform.com/workspaces/sDaAqs"}, "theme": {"href": "https://api.typeform.com/themes/JPnxbU"}, "settings": {"language": "en", "progress_bar": "proportion", "meta": {"allow_indexing": true}, "hide_navigation": false, "is_public": true, "is_trial": false, "show_progress_bar": true, "show_typeform_branding": true, "are_uploads_public": false, "show_time_to_complete": true, "show_number_of_submissions": false, "show_cookie_consent": false, "show_question_number": true, "show_key_hint_on_choices": true, "pro_subdomain_enabled": false, "capabilities": {"e2e_encryption": {"enabled": false, "modifiable": false}}}, "thankyou_screens": [{"id": "DefaultTyScreen", "ref": "default_tys", "title": "Thanks for completing this typeform\nNow *create your own* \u2014 it's free, easy, & beautiful", "type": "thankyou_screen", "properties": {"show_button": true, "share_icons": false, "button_mode": "default_redirect", "button_text": "Create a *typeform*"}, "attachment": {"type": "image", "href": "https://images.typeform.com/images/2dpnUBBkz2VN"}}], "welcome_screens": [{"id": "3rc53L8DmKJ5", "ref": "70d54ea2e68f27ae", "title": "The annual FormConf is almost here.\n\nWant to come?", "properties": {"show_button": true, "button_text": "Count me in"}, "attachment": {"type": "image", "href": "https://images.typeform.com/images/UD82iitWn5XY"}}], "fields": [{"id": "63WvXUnvSCa9", "title": "Great, can we get your full name?", "ref": "ef34b985c51e4131", "properties": {"description": "We'll print this on your event pass."}, "validations": {"required": true}, "type": "short_text"}, {"id": "kwpFrd2lI3ok", "title": "And what's your email address?", "ref": "0c3cabd70157cf16", "properties": {"description": "We'll only use it to send you a confirmation."}, "validations": {"required": true}, "type": "email"}, {"id": "1Ua3d1mzhJwj", "title": "Are you planning on staying for the afterparty?", "ref": "7207397713e2b5e3", "properties": {"description": "We have a surprise guest lined up...", "randomize": false, "allow_multiple_selection": false, "allow_other_choice": false, "supersized": false, "show_labels": true, "choices": [{"id": "z5hxxjpJl07L", "ref": "bfcc3fbf608583f7", "label": "Yes", "attachment": {"type": "image", "href": "https://images.typeform.com/images/xDriVAzzHfVq"}}, {"id": "37iaitPaS03r", "ref": "5bf390ce5210d38b", "label": "No", "attachment": {"type": "image", "href": "https://images.typeform.com/images/Rn4AmMgzPrYg"}}]}, "validations": {"required": false}, "type": "picture_choice"}, {"id": "MmrPLXSaCF5B", "title": "And do you have any food allergies we should know about?", "ref": "9aaaeeebe70858c4", "properties": {}, "validations": {"required": false}, "type": "short_text"}, {"id": "gurSOcuvNnvb", "title": "Any questions about the event?", "ref": "18842abd9aa9ded4", "properties": {"description": "Write them here and we'll get back to you via email."}, "validations": {"required": false}, "type": "long_text"}, {"id": "fCaCvjCJ57cO", "title": "And finally, would you mind telling us how you heard about the FormConf?", "ref": "261d0775b1f029cb", "properties": {"randomize": false, "allow_multiple_selection": false, "allow_other_choice": true, "vertical_alignment": false, "choices": [{"id": "IhbdgAo2LHXJ", "ref": "51c76f5fa66c6725", "label": "Social media"}, {"id": "h6Ss8i8gQdOw", "ref": "87408191d53179ee", "label": "Google"}, {"id": "45jv6vFn2nrz", "ref": "8bc14882d0521d6a", "label": "Local advertising"}, {"id": "Iahtxl1jeQwh", "ref": "fce1c86f-fb00-4c33-8085-6e4a4f12ea35", "label": "From a friend"}]}, "validations": {"required": false}, "type": "multiple_choice"}, {"id": "i8rReP3KV7c0", "title": "That's everything. We'll send you an email confirmation with some details a few minutes after you submit this form.\n\nWe hope you're excited as we are :)", "ref": "c6d179ae9c4794e0", "properties": {"button_text": "See you there!", "hide_marks": true}, "type": "statement"}], "created_at": "2021-06-26T14:39:53+00:00", "last_updated_at": "2021-06-27T15:15:56+00:00", "published_at": "2021-06-27T15:15:56+00:00", "_links": {"display": "https://xe03v5buli4.typeform.com/to/SdMKQYkv"}}, "emitted_at": 1674208909865} +{"stream": "forms", "data": {"id": "kRt99jlK", "type": "quiz", "title": "Political Poll [DEMO 2] (copy)", "workspace": {"href": "https://api.typeform.com/workspaces/sDaAqs"}, "theme": {"href": "https://api.typeform.com/themes/wvWlco"}, "settings": {"language": "en", "progress_bar": "percentage", "meta": {"allow_indexing": true}, "hide_navigation": false, "is_public": true, "is_trial": false, "show_progress_bar": true, "show_typeform_branding": true, "are_uploads_public": false, "show_time_to_complete": true, "show_number_of_submissions": false, "show_cookie_consent": false, "show_question_number": true, "show_key_hint_on_choices": true, "pro_subdomain_enabled": false, "capabilities": {"e2e_encryption": {"enabled": false, "modifiable": false}}}, "thankyou_screens": [{"id": "DefaultTyScreen", "ref": "default_tys", "title": "Thanks for completing this typeform\nNow *create your own* \u2014 it's free, easy, & beautiful", "type": "thankyou_screen", "properties": {"show_button": true, "share_icons": false, "button_mode": "default_redirect", "button_text": "Create a *typeform*"}, "attachment": {"type": "image", "href": "https://images.typeform.com/images/2dpnUBBkz2VN"}}], "welcome_screens": [{"id": "4jguOatzh4QX", "ref": "e8ee8d1500fec6d9", "title": "*National Voting Intentions*", "properties": {"show_button": true, "button_text": "Take Poll", "description": "If you're ok with it, we'd like to know about how you might vote in a general election"}, "attachment": {"type": "image", "href": "https://images.typeform.com/images/ty98jF8FppfC"}}], "fields": [{"id": "qthblBc7InVU", "title": "Let's get right to the point:\nIf there was a general election tomorrow, which party would you vote for?", "ref": "8267768033031e53", "properties": {"randomize": false, "allow_multiple_selection": false, "allow_other_choice": true, "vertical_alignment": true, "choices": [{"id": "3XbsOhLiGFkv", "ref": "fc3c3f5dbe75a01e", "label": "Center-right party"}, {"id": "FesJYxqJ0SNX", "ref": "61f5e8b36fcdbd91", "label": "Center-left party"}, {"id": "prJzwOH23zsc", "ref": "495e234f7c65d582", "label": "Green party"}, {"id": "6IXNu85c5dOl", "ref": "566c959b6ef92437", "label": "Don't know"}]}, "validations": {"required": true}, "type": "multiple_choice"}, {"id": "rB7FJUThFlu4", "title": "OK, how do you feel about the general direction of our country at the moment?", "ref": "b13b02912db6f287", "properties": {"randomize": false, "allow_multiple_selection": false, "allow_other_choice": false, "supersized": true, "show_labels": true, "choices": [{"id": "Jt8FTorS35Sb", "ref": "b99bb45c5b8c25be", "label": "Going in the wrong direction", "attachment": {"type": "image", "href": "https://images.typeform.com/images/evDEZYspmvjm"}}, {"id": "KUJ0sF2mqG5A", "ref": "2e07534517a152a2", "label": "Going in the right direction", "attachment": {"type": "image", "href": "https://images.typeform.com/images/DgjPyuz9Aphy"}}, {"id": "Dlb3UhA4keI4", "ref": "50be578304fe3e92", "label": "At a standstill", "attachment": {"type": "image", "href": "https://images.typeform.com/images/ZqbqJ6h4zGmM"}}, {"id": "21TAgDkTV2zE", "ref": "d9993c86773807a8", "label": "Unsure", "attachment": {"type": "image", "href": "https://images.typeform.com/images/mNFNeMbxPQMt"}}]}, "validations": {"required": true}, "type": "picture_choice"}, {"id": "vV7ISYSgZ94I", "title": "Thanks, and how do you feel about your own situation this year?", "ref": "f1939629f760be75", "properties": {"start_at_one": true, "steps": 5, "labels": {"left": "Much worse", "center": "About the same", "right": "Much better"}}, "validations": {"required": true}, "type": "opinion_scale"}, {"id": "Mrq4qNeRInni", "title": "Thanks again. Just a couple more questions to go. \nWhich of these issues is most important to you?", "ref": "c52566d91c5052e2", "properties": {"randomize": true, "allow_multiple_selection": false, "allow_other_choice": false, "supersized": false, "show_labels": true, "choices": [{"id": "pTMw2DVbpMyD", "ref": "d9374e70c6cb2f9c", "label": "Taxes & Economy", "attachment": {"type": "image", "href": "https://images.typeform.com/images/6eSzJ9khSfvS"}}, {"id": "dymEoJ3SUDZp", "ref": "d3278566f523cef0", "label": "Labor & Business", "attachment": {"type": "image", "href": "https://images.typeform.com/images/HWfXuXCR3Ls8"}}, {"id": "mOq857nilN8V", "ref": "39ecf093bc5e645b", "label": "Infrastructures", "attachment": {"type": "image", "href": "https://images.typeform.com/images/rW2P45guvd63"}}, {"id": "rnul7dwtsWbg", "ref": "aa1c16d517ffbea0", "label": "Health", "attachment": {"type": "image", "href": "https://images.typeform.com/images/nVsmUESsAzCs"}}, {"id": "Ii1K3mlYioOm", "ref": "4b9a4b0defbf04e5", "label": "Environment", "attachment": {"type": "image", "href": "https://images.typeform.com/images/7ZwHmRi3ZYeg"}}, {"id": "TGZeXHyDgTrQ", "ref": "536d99289a1f80d1", "label": "Education", "attachment": {"type": "image", "href": "https://images.typeform.com/images/Z8qCFjGRD78P"}}, {"id": "1Asa5xFxfuCi", "ref": "68b9b4d37fabf862", "label": "Family & Equality", "attachment": {"type": "image", "href": "https://images.typeform.com/images/YC4Fx6ud6bKq"}}, {"id": "szBe0vqnkCUK", "ref": "3f1692f85c3cd73b", "label": "Military & Defense", "attachment": {"type": "image", "href": "https://images.typeform.com/images/YA746sDt87Xf"}}]}, "validations": {"required": true}, "type": "picture_choice"}, {"id": "aDJXqNTyDXxD", "title": "To finish up, would you mind telling us how you think the current government doing on these issues?", "ref": "f684d8bc4fbca5d3", "properties": {"description": "From 1, doing badly, to 5, doing great...", "button_text": "Continue", "show_button": false, "fields": [{"id": "x9myjwStSn9a", "title": "Economy", "ref": "55c2e5c15f7dccec", "properties": {"shape": "star", "steps": 5}, "validations": {"required": true}, "type": "rating"}, {"id": "zaP8jDAArI5x", "title": "National Debt", "ref": "f853e99096a32208", "properties": {"shape": "up", "steps": 5}, "validations": {"required": true}, "type": "rating"}, {"id": "VFmcjbHlFTzg", "title": "Employment", "ref": "6f0fd734177ecf27", "properties": {"shape": "user", "steps": 5}, "validations": {"required": true}, "type": "rating"}, {"id": "DgGh4ZkRBAyH", "title": "Healthcare", "ref": "b4171ed292dc3cee", "properties": {"shape": "heart", "steps": 5}, "validations": {"required": true}, "type": "rating"}, {"id": "yC3UrwN1LKT8", "title": "Education", "ref": "c8dd7d63c26777d9", "properties": {"shape": "pencil", "steps": 5}, "validations": {"required": true}, "type": "rating"}]}, "type": "group"}], "created_at": "2021-06-26T14:39:14+00:00", "last_updated_at": "2021-07-01T10:03:13+00:00", "published_at": "2021-07-01T10:03:13+00:00", "_links": {"display": "https://xe03v5buli4.typeform.com/to/kRt99jlK"}}, "emitted_at": 1674208910341} +{"stream": "forms", "data": {"id": "XtrcGoGJ", "type": "quiz", "title": "Basic Form", "workspace": {"href": "https://api.typeform.com/workspaces/sDaAqs"}, "theme": {"href": "https://api.typeform.com/themes/qHWOQ7"}, "settings": {"language": "en", "progress_bar": "proportion", "meta": {"allow_indexing": false}, "hide_navigation": false, "is_public": true, "is_trial": false, "show_progress_bar": true, "show_typeform_branding": true, "are_uploads_public": false, "show_time_to_complete": true, "show_number_of_submissions": false, "show_cookie_consent": false, "show_question_number": true, "show_key_hint_on_choices": true, "pro_subdomain_enabled": false, "capabilities": {"e2e_encryption": {"enabled": false, "modifiable": false}}}, "thankyou_screens": [{"id": "Xg85PhXqk4HR", "ref": "01F8N53B82QB6T2VM7ASP16198", "title": "", "type": "thankyou_screen", "properties": {"show_button": true, "share_icons": true, "button_mode": "reload", "button_text": "reload"}}, {"id": "DefaultTyScreen", "ref": "default_tys", "title": "Thanks for completing this typeform\nNow *create your own* \u2014 it's free, easy, & beautiful", "type": "thankyou_screen", "properties": {"show_button": true, "share_icons": false, "button_mode": "default_redirect", "button_text": "Create a *typeform*"}, "attachment": {"type": "image", "href": "https://images.typeform.com/images/2dpnUBBkz2VN"}}], "fields": [{"id": "8VK4KwNd0DgB", "title": "Hello, what's your name?", "ref": "01F8N53B7KPZ2A1DWGZTTK9SKG", "properties": {}, "validations": {"required": false}, "type": "short_text", "attachment": {"type": "image", "href": "https://images.typeform.com/images/WMALzu59xbXQ"}, "layout": {"type": "split", "attachment": {"type": "image", "href": "https://images.typeform.com/images/WMALzu59xbXQ"}}}, {"id": "HbNDNK4LLOXB", "title": "Fill your email here:", "ref": "b7980774-f17f-43bc-920b-586e03398f03", "properties": {}, "validations": {"required": false}, "type": "email"}, {"id": "5l7cx4NRa7aX", "title": "enter site", "ref": "e98312ff-df57-4de2-82ae-3617e6dd32ab", "properties": {}, "validations": {"required": false}, "type": "website"}, {"id": "6lGZzhNfrqwB", "title": "Multi-Select question.", "ref": "43153da3-fbbc-443e-b66f-1752770c0e0a", "properties": {"randomize": false, "allow_multiple_selection": true, "allow_other_choice": false, "vertical_alignment": true, "choices": [{"id": "3HfyxDo5JoXf", "ref": "f83999f6-c869-47cc-af2f-f22b628a0fdb", "label": "choice 3"}, {"id": "03VP9UxCwCLT", "ref": "27b8dfcb-ef16-4ad7-b2be-734ec24c34ca", "label": "choice 4"}, {"id": "ELm7HbFr0OOq", "ref": "ce51ab49-2cce-490d-b831-309337c79fa0", "label": "choice2"}, {"id": "acwDGU8NeO2A", "ref": "74ef0411-0c8a-4c09-a6f3-7a62b0745f68", "label": "choice1"}]}, "validations": {"required": false}, "type": "multiple_choice"}, {"id": "X6dq0mumvtKq", "title": "Nice to meet you, {{field:01F8N53B7KPZ2A1DWGZTTK9SKG}}, how is your day going?", "ref": "01F8N53B8293QHVDDHT84RZR6K", "properties": {"randomize": false, "allow_multiple_selection": false, "allow_other_choice": false, "vertical_alignment": true, "choices": [{"id": "FWQrVLFdHroI", "ref": "01F8N53B82JXPXZ1B53BMJY0X2", "label": "Terrific!"}, {"id": "7jNEfjJ2cDAl", "ref": "01F8N53B82RE3YZK7RR50KNRQ0", "label": "Not so well..."}]}, "validations": {"required": false}, "type": "multiple_choice"}], "created_at": "2021-06-20T16:47:13+00:00", "last_updated_at": "2022-06-20T10:19:58+00:00", "published_at": "2021-06-20T16:47:26+00:00", "_links": {"display": "https://xe03v5buli4.typeform.com/to/XtrcGoGJ"}}, "emitted_at": 1674208910581} {"stream":"responses","data":{"landing_id":"fr2wm964fnyxpdx9a8tfr2wmlph34hqi","token":"fr2wm964fnyxpdx9a8tfr2wmlph34hqi","response_id":"fr2wm964fnyxpdx9a8tfr2wmlph34hqi","landed_at":"2022-11-08T21:59:53Z","submitted_at":"2022-11-08T22:00:24Z","metadata":{"user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36","platform":"other","referer":"https://xe03v5buli4.typeform.com/to/VWO7mLtl","network_id":"8a0111039f","browser":"default"},"hidden":{},"calculated":{"score":0},"answers":[{"field":{"id":"ZdzF0rrvsVdB","ref":"01GHC6KQ5Y6S9ZQH5CHKZPT1RM","type":"multiple_choice"},"type":"choices","choices":{"ids":["nLpt4rvNjFB3","4xpK9sqA06eL","jQHb3mqslOsZ","wS5FKMUnMgqR","uvmLX80Loava","7ubtgCrW2meb","iI0hDpta14Kk"],"refs":["01GHC6KQ5Y155J0F550BGYYS1A","01GHC6KQ5YBATX0CFENVVB5BYG","1c392fa3-e693-49fe-b334-3a5cddc1db6f","2ac396a3-1b8e-4e56-b36d-d1f27c1b834d","8fffd3a8-1e96-421d-a605-a7029bd55e97","17403cc9-74cd-49d1-856a-be6662b3b497","e149c19f-8b61-4ff0-a17a-e9e65c3a8fee"],"labels":["Dec 12-16","Dec 19-23","Jan 9-14","Jan 16-20","Jan 22-26","Jan30 - Feb3","Feb 19-24"]}}]},"emitted_at":1673035160703} {"stream":"responses","data":{"landing_id":"0dc8djmlrkmxuwu7s7mmia0dc8dj4a1r","token":"0dc8djmlrkmxuwu7s7mmia0dc8dj4a1r","response_id":"0dc8djmlrkmxuwu7s7mmia0dc8dj4a1r","landed_at":"2022-11-08T22:08:39Z","submitted_at":"2022-11-08T22:10:04Z","metadata":{"user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36","platform":"other","referer":"https://xe03v5buli4.typeform.com/to/VWO7mLtl","network_id":"d4b74277d2","browser":"default"},"hidden":{},"calculated":{"score":0},"answers":[{"field":{"id":"ZdzF0rrvsVdB","ref":"01GHC6KQ5Y6S9ZQH5CHKZPT1RM","type":"multiple_choice"},"type":"choices","choices":{"ids":["nLpt4rvNjFB3","wS5FKMUnMgqR","jQHb3mqslOsZ","51q0g4fTFtYc","vi3iwtpETqlb","iI0hDpta14Kk"],"refs":["01GHC6KQ5Y155J0F550BGYYS1A","2ac396a3-1b8e-4e56-b36d-d1f27c1b834d","1c392fa3-e693-49fe-b334-3a5cddc1db6f","3a1295b4-97b9-4986-9c37-f1af1d72501d","54edf52a-c9c7-4bc4-a5a6-bd86115f5adb","e149c19f-8b61-4ff0-a17a-e9e65c3a8fee"],"labels":["Dec 12-16","Jan 16-20","Jan 9-14","Feb 6 - 11","Feb 13-17","Feb 19-24"]}}]},"emitted_at":1673035160703} {"stream":"responses","data":{"landing_id":"ng2hh3i6cy7ikeyorbnl0ng2hh3icyvq","token":"ng2hh3i6cy7ikeyorbnl0ng2hh3icyvq","response_id":"ng2hh3i6cy7ikeyorbnl0ng2hh3icyvq","landed_at":"2022-11-09T06:16:08Z","submitted_at":"2022-11-09T06:16:10Z","metadata":{"user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36","platform":"other","referer":"https://xe03v5buli4.typeform.com/to/VWO7mLtl","network_id":"2be9dd4bab","browser":"default"},"hidden":{},"calculated":{"score":0},"answers":[{"field":{"id":"ZdzF0rrvsVdB","ref":"01GHC6KQ5Y6S9ZQH5CHKZPT1RM","type":"multiple_choice"},"type":"choices","choices":{"ids":["nLpt4rvNjFB3","wS5FKMUnMgqR","uvmLX80Loava","7ubtgCrW2meb","51q0g4fTFtYc","vi3iwtpETqlb","iI0hDpta14Kk"],"refs":["01GHC6KQ5Y155J0F550BGYYS1A","2ac396a3-1b8e-4e56-b36d-d1f27c1b834d","8fffd3a8-1e96-421d-a605-a7029bd55e97","17403cc9-74cd-49d1-856a-be6662b3b497","3a1295b4-97b9-4986-9c37-f1af1d72501d","54edf52a-c9c7-4bc4-a5a6-bd86115f5adb","e149c19f-8b61-4ff0-a17a-e9e65c3a8fee"],"labels":["Dec 12-16","Jan 16-20","Jan 22-26","Jan30 - Feb3","Feb 6 - 11","Feb 13-17","Feb 19-24"]}}]},"emitted_at":1673035160855} diff --git a/airbyte-integrations/connectors/source-vantage/source_vantage/vantage.yaml b/airbyte-integrations/connectors/source-vantage/source_vantage/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-vantage/source_vantage/vantage.yaml rename to airbyte-integrations/connectors/source-vantage/source_vantage/manifest.yaml diff --git a/airbyte-integrations/connectors/source-vantage/source_vantage/source.py b/airbyte-integrations/connectors/source-vantage/source_vantage/source.py index 0d907c3358a69..7623996406d04 100644 --- a/airbyte-integrations/connectors/source-vantage/source_vantage/source.py +++ b/airbyte-integrations/connectors/source-vantage/source_vantage/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceVantage(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "vantage.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-vitally/source_vitally/vitally.yaml b/airbyte-integrations/connectors/source-vitally/source_vitally/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-vitally/source_vitally/vitally.yaml rename to airbyte-integrations/connectors/source-vitally/source_vitally/manifest.yaml diff --git a/airbyte-integrations/connectors/source-vitally/source_vitally/source.py b/airbyte-integrations/connectors/source-vitally/source_vitally/source.py index 1cb69b35a7799..84b454c5becf2 100644 --- a/airbyte-integrations/connectors/source-vitally/source_vitally/source.py +++ b/airbyte-integrations/connectors/source-vitally/source_vitally/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceVitally(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "vitally.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-waiteraid/source_waiteraid/waiteraid.yaml b/airbyte-integrations/connectors/source-waiteraid/source_waiteraid/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-waiteraid/source_waiteraid/waiteraid.yaml rename to airbyte-integrations/connectors/source-waiteraid/source_waiteraid/manifest.yaml diff --git a/airbyte-integrations/connectors/source-waiteraid/source_waiteraid/source.py b/airbyte-integrations/connectors/source-waiteraid/source_waiteraid/source.py index 7e2b4027a8ed1..dbab976d1a358 100644 --- a/airbyte-integrations/connectors/source-waiteraid/source_waiteraid/source.py +++ b/airbyte-integrations/connectors/source-waiteraid/source_waiteraid/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceWaiteraid(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "waiteraid.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-whisky-hunter/source_whisky_hunter/whisky_hunter.yaml b/airbyte-integrations/connectors/source-whisky-hunter/source_whisky_hunter/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-whisky-hunter/source_whisky_hunter/whisky_hunter.yaml rename to airbyte-integrations/connectors/source-whisky-hunter/source_whisky_hunter/manifest.yaml diff --git a/airbyte-integrations/connectors/source-whisky-hunter/source_whisky_hunter/source.py b/airbyte-integrations/connectors/source-whisky-hunter/source_whisky_hunter/source.py index c0d22e785848a..0d23c829bf1a7 100644 --- a/airbyte-integrations/connectors/source-whisky-hunter/source_whisky_hunter/source.py +++ b/airbyte-integrations/connectors/source-whisky-hunter/source_whisky_hunter/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceWhiskyHunter(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "whisky_hunter.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-wikipedia-pageviews/source_wikipedia_pageviews/wikipedia_pageviews.yaml b/airbyte-integrations/connectors/source-wikipedia-pageviews/source_wikipedia_pageviews/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-wikipedia-pageviews/source_wikipedia_pageviews/wikipedia_pageviews.yaml rename to airbyte-integrations/connectors/source-wikipedia-pageviews/source_wikipedia_pageviews/manifest.yaml diff --git a/airbyte-integrations/connectors/source-wikipedia-pageviews/source_wikipedia_pageviews/source.py b/airbyte-integrations/connectors/source-wikipedia-pageviews/source_wikipedia_pageviews/source.py index 19ed7ee95fb34..0a07b1cb7e671 100755 --- a/airbyte-integrations/connectors/source-wikipedia-pageviews/source_wikipedia_pageviews/source.py +++ b/airbyte-integrations/connectors/source-wikipedia-pageviews/source_wikipedia_pageviews/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceWikipediaPageviews(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "wikipedia_pageviews.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-woocommerce/source_woocommerce/woocommerce.yaml b/airbyte-integrations/connectors/source-woocommerce/source_woocommerce/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-woocommerce/source_woocommerce/woocommerce.yaml rename to airbyte-integrations/connectors/source-woocommerce/source_woocommerce/manifest.yaml diff --git a/airbyte-integrations/connectors/source-woocommerce/source_woocommerce/source.py b/airbyte-integrations/connectors/source-woocommerce/source_woocommerce/source.py index 4f4b454e9bf34..36b56ae3e66db 100644 --- a/airbyte-integrations/connectors/source-woocommerce/source_woocommerce/source.py +++ b/airbyte-integrations/connectors/source-woocommerce/source_woocommerce/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceWoocommerce(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "woocommerce.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-workable/source_workable/workable.yaml b/airbyte-integrations/connectors/source-workable/source_workable/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-workable/source_workable/workable.yaml rename to airbyte-integrations/connectors/source-workable/source_workable/manifest.yaml diff --git a/airbyte-integrations/connectors/source-workable/source_workable/source.py b/airbyte-integrations/connectors/source-workable/source_workable/source.py index cbb89faaacb73..a948b80af6726 100644 --- a/airbyte-integrations/connectors/source-workable/source_workable/source.py +++ b/airbyte-integrations/connectors/source-workable/source_workable/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceWorkable(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "workable.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-workramp/source_workramp/workramp.yaml b/airbyte-integrations/connectors/source-workramp/source_workramp/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-workramp/source_workramp/workramp.yaml rename to airbyte-integrations/connectors/source-workramp/source_workramp/manifest.yaml diff --git a/airbyte-integrations/connectors/source-workramp/source_workramp/source.py b/airbyte-integrations/connectors/source-workramp/source_workramp/source.py index 999cd736e1b12..9ec1317397602 100644 --- a/airbyte-integrations/connectors/source-workramp/source_workramp/source.py +++ b/airbyte-integrations/connectors/source-workramp/source_workramp/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceWorkramp(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "workramp.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-zapier-supported-storage/source_zapier_supported_storage/zapier_supported_storage.yaml b/airbyte-integrations/connectors/source-zapier-supported-storage/source_zapier_supported_storage/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-zapier-supported-storage/source_zapier_supported_storage/zapier_supported_storage.yaml rename to airbyte-integrations/connectors/source-zapier-supported-storage/source_zapier_supported_storage/manifest.yaml diff --git a/airbyte-integrations/connectors/source-zapier-supported-storage/source_zapier_supported_storage/source.py b/airbyte-integrations/connectors/source-zapier-supported-storage/source_zapier_supported_storage/source.py index 4a2e44426b81b..c4ba64c3b1b3a 100644 --- a/airbyte-integrations/connectors/source-zapier-supported-storage/source_zapier_supported_storage/source.py +++ b/airbyte-integrations/connectors/source-zapier-supported-storage/source_zapier_supported_storage/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceZapierSupportedStorage(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "zapier_supported_storage.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-integrations/connectors/source-zendesk-chat/Dockerfile b/airbyte-integrations/connectors/source-zendesk-chat/Dockerfile index 409f1b8a8038a..2cc19b5d9f083 100644 --- a/airbyte-integrations/connectors/source-zendesk-chat/Dockerfile +++ b/airbyte-integrations/connectors/source-zendesk-chat/Dockerfile @@ -16,5 +16,5 @@ RUN pip install . ENTRYPOINT ["python", "/airbyte/integration_code/main_dev.py"] -LABEL io.airbyte.version=0.1.11 +LABEL io.airbyte.version=0.1.12 LABEL io.airbyte.name=airbyte/source-zendesk-chat diff --git a/airbyte-integrations/connectors/source-zendesk-chat/source_zendesk_chat/streams.py b/airbyte-integrations/connectors/source-zendesk-chat/source_zendesk_chat/streams.py index 5e26e8119972a..92b4e9806a716 100644 --- a/airbyte-integrations/connectors/source-zendesk-chat/source_zendesk_chat/streams.py +++ b/airbyte-integrations/connectors/source-zendesk-chat/source_zendesk_chat/streams.py @@ -9,6 +9,7 @@ import pendulum import requests +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream @@ -20,6 +21,10 @@ class Stream(HttpStream, ABC): limit = 100 + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def request_kwargs( self, stream_state: Mapping[str, Any], diff --git a/airbyte-integrations/connectors/source-zendesk-support/Dockerfile b/airbyte-integrations/connectors/source-zendesk-support/Dockerfile index e6cd2ad493b80..4010966ca4e23 100644 --- a/airbyte-integrations/connectors/source-zendesk-support/Dockerfile +++ b/airbyte-integrations/connectors/source-zendesk-support/Dockerfile @@ -25,5 +25,5 @@ COPY source_zendesk_support ./source_zendesk_support ENV AIRBYTE_ENTRYPOINT "python /airbyte/integration_code/main.py" ENTRYPOINT ["python", "/airbyte/integration_code/main.py"] -LABEL io.airbyte.version=0.2.20 +LABEL io.airbyte.version=0.2.21 LABEL io.airbyte.name=airbyte/source-zendesk-support diff --git a/airbyte-integrations/connectors/source-zendesk-support/source_zendesk_support/streams.py b/airbyte-integrations/connectors/source-zendesk-support/source_zendesk_support/streams.py index 34329111efadd..d2139bed9593b 100644 --- a/airbyte-integrations/connectors/source-zendesk-support/source_zendesk_support/streams.py +++ b/airbyte-integrations/connectors/source-zendesk-support/source_zendesk_support/streams.py @@ -21,6 +21,7 @@ import pytz 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 airbyte_cdk.sources.streams.http.auth.core import HttpAuthenticator from airbyte_cdk.sources.streams.http.exceptions import DefaultBackoffException @@ -116,6 +117,10 @@ def __init__(self, subdomain: str, start_date: str, ignore_pagination: bool = Fa self._subdomain = subdomain self._ignore_pagination = ignore_pagination + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def backoff_time(self, response: requests.Response) -> Union[int, float]: """ The rate limit is 700 requests per minute diff --git a/airbyte-integrations/connectors/source-zendesk-talk/Dockerfile b/airbyte-integrations/connectors/source-zendesk-talk/Dockerfile index 2e633bb8fdfbd..a1a523d5025b0 100644 --- a/airbyte-integrations/connectors/source-zendesk-talk/Dockerfile +++ b/airbyte-integrations/connectors/source-zendesk-talk/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.5 +LABEL io.airbyte.version=0.1.6 LABEL io.airbyte.name=airbyte/source-zendesk-talk diff --git a/airbyte-integrations/connectors/source-zendesk-talk/README.md b/airbyte-integrations/connectors/source-zendesk-talk/README.md index a414b1323f5ec..45f10e19d37a5 100644 --- a/airbyte-integrations/connectors/source-zendesk-talk/README.md +++ b/airbyte-integrations/connectors/source-zendesk-talk/README.md @@ -49,7 +49,7 @@ and place them into `secrets/config.json`. 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 sample_files/configured_catalog.json +python main.py read --config secrets/config.json --catalog integration_tests/configured_catalog.json ``` ### Locally running the connector docker image @@ -57,7 +57,7 @@ python main.py read --config secrets/config.json --catalog sample_files/configur #### Build First, make sure you build the latest Docker image: ``` -docker build . -t airbyte/zendesk-talk:dev +docker build . -t airbyte/source-zendesk-talk:dev ``` You can also build the connector image via Gradle: @@ -79,7 +79,7 @@ docker run --rm -v $(pwd)/secrets:/secrets -v $(pwd)/sample_files:/sample_files 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] +pip install .'[tests]' ``` ### Unit Tests To run unit tests locally, from the connector directory run: diff --git a/airbyte-integrations/connectors/source-zendesk-talk/acceptance-test-config.yml b/airbyte-integrations/connectors/source-zendesk-talk/acceptance-test-config.yml index a4cb208d9cd7d..56e2156d43c62 100644 --- a/airbyte-integrations/connectors/source-zendesk-talk/acceptance-test-config.yml +++ b/airbyte-integrations/connectors/source-zendesk-talk/acceptance-test-config.yml @@ -2,32 +2,52 @@ # for more information about how to configure these tests # intentionally left out explicit configured_catalog.json to test all streams from discovery connector_image: airbyte/source-zendesk-talk:dev -tests: +test_strictness_level: "high" +acceptance_tests: spec: - - spec_path: "source_zendesk_talk/spec.json" + tests: + - spec_path: "source_zendesk_talk/spec.json" connection: - - config_path: "secrets/config.json" - status: "succeed" - - config_path: "integration_tests/invalid_config.json" - status: "failed" - - config_path: "secrets/config_old.json" - status: "succeed" + 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" discovery: - - config_path: "secrets/config.json" - backward_compatibility_tests_config: - disable_for_version: "0.1.3" - - config_path: "secrets/config_old.json" - backward_compatibility_tests_config: - disable_for_version: "0.1.3" + tests: + - config_path: "secrets/config.json" + backward_compatibility_tests_config: + disable_for_version: "0.1.3" + - config_path: "secrets/config_old.json" + backward_compatibility_tests_config: + disable_for_version: "0.1.3" basic_read: - - config_path: "secrets/config.json" + tests: + - config_path: "secrets/config.json" + expect_records: + path: "integration_tests/expected_records.jsonl" + extra_fields: no + exact_order: no + extra_records: yes + empty_streams: + - name: "account_overview" + bypass_reason: "The objects can mutate quite often." + - name: "agents_overview" + bypass_reason: "The objects can mutate quite often." + - name: "current_queue_activity" + bypass_reason: "The objects can mutate quite often." incremental: - - config_path: "secrets/config.json" - future_state_path: "integration_tests/abnormal_state.json" + tests: + - config_path: "secrets/config.json" + future_state: + future_state_path: "integration_tests/abnormal_state.json" full_refresh: - - config_path: "secrets/config.json" - configured_catalog_path: "integration_tests/configured_catalog.json" - ignored_fields: - account_overview: ["current_timestamp"] - agents_overview: ["current_timestamp"] - current_queue_activity: ["current_timestamp"] + tests: + - config_path: "secrets/config.json" + configured_catalog_path: "integration_tests/configured_catalog.json" + ignored_fields: + account_overview: ["current_timestamp"] + agents_overview: ["current_timestamp"] + current_queue_activity: ["current_timestamp"] diff --git a/airbyte-integrations/connectors/source-zendesk-talk/integration_tests/abnormal_state.json b/airbyte-integrations/connectors/source-zendesk-talk/integration_tests/abnormal_state.json index 6c8e657de0642..26862a32c0efe 100644 --- a/airbyte-integrations/connectors/source-zendesk-talk/integration_tests/abnormal_state.json +++ b/airbyte-integrations/connectors/source-zendesk-talk/integration_tests/abnormal_state.json @@ -1,8 +1,20 @@ -{ - "calls": { - "updated_at": "2121-01-01T00:00:00Z" +[ + { + "type": "STREAM", + "stream": { + "stream_state": { + "updated_at": "2121-01-01T00:00:00Z" + }, + "stream_descriptor": { "name": "calls" } + } }, - "call_legs": { - "updated_at": "2121-01-01T00:00:00Z" + { + "type": "STREAM", + "stream": { + "stream_state": { + "updated_at": "2121-01-01T00:00:00Z" + }, + "stream_descriptor": { "name": "call_legs" } + } } -} +] diff --git a/airbyte-integrations/connectors/source-zendesk-talk/integration_tests/expected_records.jsonl b/airbyte-integrations/connectors/source-zendesk-talk/integration_tests/expected_records.jsonl new file mode 100644 index 0000000000000..5e1deb1cca938 --- /dev/null +++ b/airbyte-integrations/connectors/source-zendesk-talk/integration_tests/expected_records.jsonl @@ -0,0 +1,81 @@ +{"stream": "addresses", "data": {"id": 360000047935, "name": "Fake Zendesk 1001", "street": "1019 Market Street", "zip": "94103", "city": "San Francisco", "state": null, "province": "California", "country_code": "US", "provider_reference": "AD89734a096af9bab5eb8d364a00e03859"}, "emitted_at": 1674159463524} +{"stream": "addresses", "data": {"id": 360000049316, "name": "Fake Zendesk 1000", "street": "1019 Market Street", "zip": "94103", "city": "San Francisco", "state": null, "province": "California", "country_code": "US", "provider_reference": "AD15e4b6ac73c4e727e2b00c29963d8e06"}, "emitted_at": 1674159463524} +{"stream": "addresses", "data": {"id": 360000049296, "name": "Fake Zendesk 999", "street": "1019 Market Street", "zip": "94103", "city": "San Francisco", "state": null, "province": "California", "country_code": "US", "provider_reference": "ADad90fc569206d6cbe5f5a6f160c01516"}, "emitted_at": 1674159463525} +{"stream": "addresses", "data": {"id": 360000047915, "name": "Fake Zendesk 998", "street": "1019 Market Street", "zip": "94103", "city": "San Francisco", "state": null, "province": "California", "country_code": "US", "provider_reference": "ADa89d87601b4f38b45ca172ba36bc4c36"}, "emitted_at": 1674159463525} +{"stream": "addresses", "data": {"id": 360000049276, "name": "Fake Zendesk 997", "street": "1019 Market Street", "zip": "94103", "city": "San Francisco", "state": null, "province": "California", "country_code": "US", "provider_reference": "AD1b03f6250ae793c562f9290a47404e5b"}, "emitted_at": 1674159463525} +{"stream": "agents_activity", "data": {"name": "Team Airbyte", "agent_id": 360786799676, "via": "client", "avatar_url": "https://d3v-airbyte.zendesk.com/images/2016/default-avatar-80.png", "forwarding_number": null, "average_talk_time": 0, "calls_accepted": 0, "calls_denied": 0, "calls_missed": 0, "online_time": 0, "available_time": 0, "total_call_duration": 0, "total_talk_time": 0, "total_wrap_up_time": 0, "away_time": 0, "call_status": null, "agent_state": "offline", "transfers_only_time": 0, "average_wrap_up_time": 0, "accepted_transfers": 0, "started_transfers": 0, "calls_put_on_hold": 0, "average_hold_time": 0, "total_hold_time": 0, "started_third_party_conferences": 0, "accepted_third_party_conferences": 0}, "emitted_at": 1674159464163} +{"stream": "calls", "data": {"id": 360088814475, "created_at": "2021-04-01T13:42:47Z", "updated_at": "2021-04-01T14:23:15Z", "agent_id": null, "call_charge": "0.003", "consultation_time": 0, "completion_status": "failed", "customer_id": null, "customer_requested_voicemail": false, "direction": "outbound", "duration": 18, "exceeded_queue_wait_time": null, "hold_time": 0, "minutes_billed": 1, "outside_business_hours": null, "phone_number_id": 360000121575, "phone_number": "+12059531462", "ticket_id": null, "time_to_answer": null, "voicemail": false, "wait_time": 0, "wrap_up_time": 0, "ivr_time_spent": null, "ivr_hops": null, "ivr_destination_group_name": null, "talk_time": null, "ivr_routed_to": null, "callback": null, "callback_source": null, "default_group": false, "ivr_action": null, "overflowed": false, "overflowed_to": null, "recording_control_interactions": 0, "recording_time": 0, "not_recording_time": 0, "call_recording_consent": "always", "call_recording_consent_action": null, "call_recording_consent_keypress": null, "call_group_id": null, "call_channel": null, "quality_issues": ["silence"], "line": "+12059531462", "line_id": 360000121575, "line_type": "phone"}, "emitted_at": 1674159472100} +{"stream": "calls", "data": {"id": 360120314196, "created_at": "2021-10-20T15:16:31Z", "updated_at": "2021-10-20T15:56:54Z", "agent_id": null, "call_charge": "0.003", "consultation_time": 0, "completion_status": "completed", "customer_id": null, "customer_requested_voicemail": false, "direction": "outbound", "duration": 8, "exceeded_queue_wait_time": false, "hold_time": 0, "minutes_billed": 1, "outside_business_hours": false, "phone_number_id": 360000121575, "phone_number": "+12059531462", "ticket_id": null, "time_to_answer": null, "voicemail": false, "wait_time": 0, "wrap_up_time": 0, "ivr_time_spent": null, "ivr_hops": null, "ivr_destination_group_name": null, "talk_time": 0, "ivr_routed_to": null, "callback": false, "callback_source": null, "default_group": false, "ivr_action": null, "overflowed": false, "overflowed_to": null, "recording_control_interactions": 0, "recording_time": 0, "not_recording_time": 0, "call_recording_consent": "always", "call_recording_consent_action": null, "call_recording_consent_keypress": null, "call_group_id": null, "call_channel": null, "quality_issues": ["none"], "line": "+12059531462", "line_id": 360000121575, "line_type": "phone"}, "emitted_at": 1674159472101} +{"stream": "calls", "data": {"id": 360121169675, "created_at": "2021-10-20T15:16:42Z", "updated_at": "2021-10-20T15:57:03Z", "agent_id": null, "call_charge": "0.003", "consultation_time": 0, "completion_status": "completed", "customer_id": null, "customer_requested_voicemail": false, "direction": "outbound", "duration": 7, "exceeded_queue_wait_time": false, "hold_time": 0, "minutes_billed": 1, "outside_business_hours": false, "phone_number_id": 360000121575, "phone_number": "+12059531462", "ticket_id": null, "time_to_answer": null, "voicemail": false, "wait_time": 0, "wrap_up_time": 0, "ivr_time_spent": null, "ivr_hops": null, "ivr_destination_group_name": null, "talk_time": 0, "ivr_routed_to": null, "callback": false, "callback_source": null, "default_group": false, "ivr_action": null, "overflowed": false, "overflowed_to": null, "recording_control_interactions": 0, "recording_time": 0, "not_recording_time": 0, "call_recording_consent": "always", "call_recording_consent_action": null, "call_recording_consent_keypress": null, "call_group_id": null, "call_channel": null, "quality_issues": ["none"], "line": "+12059531462", "line_id": 360000121575, "line_type": "phone"}, "emitted_at": 1674159472101} +{"stream": "calls", "data": {"id": 360121166995, "created_at": "2021-10-20T13:22:25Z", "updated_at": "2021-10-20T16:22:34Z", "agent_id": null, "call_charge": "0.003", "consultation_time": 0, "completion_status": "completed", "customer_id": null, "customer_requested_voicemail": false, "direction": "outbound", "duration": 6, "exceeded_queue_wait_time": false, "hold_time": 0, "minutes_billed": 1, "outside_business_hours": false, "phone_number_id": 360000121575, "phone_number": "+12059531462", "ticket_id": null, "time_to_answer": null, "voicemail": false, "wait_time": 0, "wrap_up_time": 0, "ivr_time_spent": null, "ivr_hops": null, "ivr_destination_group_name": null, "talk_time": 0, "ivr_routed_to": null, "callback": false, "callback_source": null, "default_group": false, "ivr_action": null, "overflowed": false, "overflowed_to": null, "recording_control_interactions": 0, "recording_time": 0, "not_recording_time": 0, "call_recording_consent": "always", "call_recording_consent_action": null, "call_recording_consent_keypress": null, "call_group_id": null, "call_channel": null, "quality_issues": ["none"], "line": "+12059531462", "line_id": 360000121575, "line_type": "phone"}, "emitted_at": 1674159472102} +{"stream": "calls", "data": {"id": 360120313416, "created_at": "2021-10-20T14:34:26Z", "updated_at": "2021-10-20T17:34:36Z", "agent_id": null, "call_charge": "0.003", "consultation_time": 0, "completion_status": "completed", "customer_id": null, "customer_requested_voicemail": false, "direction": "outbound", "duration": 349, "exceeded_queue_wait_time": false, "hold_time": 0, "minutes_billed": 6, "outside_business_hours": false, "phone_number_id": 360000121575, "phone_number": "+12059531462", "ticket_id": null, "time_to_answer": null, "voicemail": false, "wait_time": 0, "wrap_up_time": 0, "ivr_time_spent": null, "ivr_hops": null, "ivr_destination_group_name": null, "talk_time": 0, "ivr_routed_to": null, "callback": false, "callback_source": null, "default_group": false, "ivr_action": null, "overflowed": false, "overflowed_to": null, "recording_control_interactions": 0, "recording_time": 0, "not_recording_time": 0, "call_recording_consent": "always", "call_recording_consent_action": null, "call_recording_consent_keypress": null, "call_group_id": null, "call_channel": null, "quality_issues": ["none"], "line": "+12059531462", "line_id": 360000121575, "line_type": "phone"}, "emitted_at": 1674159472102} +{"stream": "calls", "data": {"id": 360121168815, "created_at": "2021-10-20T14:40:05Z", "updated_at": "2021-10-20T17:40:25Z", "agent_id": null, "call_charge": "0.003", "consultation_time": 0, "completion_status": "completed", "customer_id": null, "customer_requested_voicemail": false, "direction": "outbound", "duration": 17, "exceeded_queue_wait_time": false, "hold_time": 0, "minutes_billed": 1, "outside_business_hours": false, "phone_number_id": 360000121575, "phone_number": "+12059531462", "ticket_id": null, "time_to_answer": null, "voicemail": false, "wait_time": 0, "wrap_up_time": 0, "ivr_time_spent": null, "ivr_hops": null, "ivr_destination_group_name": null, "talk_time": 0, "ivr_routed_to": null, "callback": false, "callback_source": null, "default_group": false, "ivr_action": null, "overflowed": false, "overflowed_to": null, "recording_control_interactions": 0, "recording_time": 0, "not_recording_time": 0, "call_recording_consent": "always", "call_recording_consent_action": null, "call_recording_consent_keypress": null, "call_group_id": null, "call_channel": null, "quality_issues": ["none"], "line": "+12059531462", "line_id": 360000121575, "line_type": "phone"}, "emitted_at": 1674159472102} +{"stream": "calls", "data": {"id": 360120313656, "created_at": "2021-10-20T14:49:50Z", "updated_at": "2021-10-20T17:50:02Z", "agent_id": null, "call_charge": "0.003", "consultation_time": 0, "completion_status": "completed", "customer_id": null, "customer_requested_voicemail": false, "direction": "outbound", "duration": 5, "exceeded_queue_wait_time": false, "hold_time": 0, "minutes_billed": 1, "outside_business_hours": false, "phone_number_id": 360000121575, "phone_number": "+12059531462", "ticket_id": null, "time_to_answer": null, "voicemail": false, "wait_time": 0, "wrap_up_time": 0, "ivr_time_spent": null, "ivr_hops": null, "ivr_destination_group_name": null, "talk_time": 0, "ivr_routed_to": null, "callback": false, "callback_source": null, "default_group": false, "ivr_action": null, "overflowed": false, "overflowed_to": null, "recording_control_interactions": 0, "recording_time": 0, "not_recording_time": 0, "call_recording_consent": "always", "call_recording_consent_action": null, "call_recording_consent_keypress": null, "call_group_id": null, "call_channel": null, "quality_issues": ["none"], "line": "+12059531462", "line_id": 360000121575, "line_type": "phone"}, "emitted_at": 1674159472103} +{"stream": "calls", "data": {"id": 360120313676, "created_at": "2021-10-20T14:50:08Z", "updated_at": "2021-10-20T17:50:16Z", "agent_id": null, "call_charge": "0.003", "consultation_time": 0, "completion_status": "completed", "customer_id": null, "customer_requested_voicemail": false, "direction": "outbound", "duration": 6, "exceeded_queue_wait_time": false, "hold_time": 0, "minutes_billed": 1, "outside_business_hours": false, "phone_number_id": 360000121575, "phone_number": "+12059531462", "ticket_id": null, "time_to_answer": null, "voicemail": false, "wait_time": 0, "wrap_up_time": 0, "ivr_time_spent": null, "ivr_hops": null, "ivr_destination_group_name": null, "talk_time": 0, "ivr_routed_to": null, "callback": false, "callback_source": null, "default_group": false, "ivr_action": null, "overflowed": false, "overflowed_to": null, "recording_control_interactions": 0, "recording_time": 0, "not_recording_time": 0, "call_recording_consent": "always", "call_recording_consent_action": null, "call_recording_consent_keypress": null, "call_group_id": null, "call_channel": null, "quality_issues": ["none"], "line": "+12059531462", "line_id": 360000121575, "line_type": "phone"}, "emitted_at": 1674159472103} +{"stream": "call_legs", "data": {"id": 360167085115, "created_at": "2021-04-01T13:42:47Z", "updated_at": "2021-04-01T14:23:14Z", "agent_id": 360786799676, "user_id": 0, "duration": 18, "hold_time": 0, "wrap_up_time": 0, "available_via": "browser", "forwarded_to": null, "consultation_from": null, "transferred_from": null, "transferred_to": null, "minutes_billed": 1, "call_charge": "0.003", "completion_status": "completed", "consultation_time": null, "talk_time": 0, "consultation_to": null, "conference_time": null, "conference_from": null, "conference_to": null, "quality_issues": ["silence"], "call_id": 360088814475, "type": "agent"}, "emitted_at": 1674159475493} +{"stream": "call_legs", "data": {"id": 360222253536, "created_at": "2021-10-20T13:22:27Z", "updated_at": "2021-10-20T14:02:47Z", "agent_id": 0, "user_id": null, "duration": 4, "hold_time": 0, "wrap_up_time": null, "available_via": null, "forwarded_to": null, "consultation_from": null, "transferred_from": null, "transferred_to": null, "minutes_billed": null, "call_charge": "0.0", "completion_status": "completed", "consultation_time": null, "talk_time": 0, "consultation_to": null, "conference_time": null, "conference_from": null, "conference_to": null, "quality_issues": ["none"], "call_id": 360121166995, "type": "customer"}, "emitted_at": 1674159475493} +{"stream": "call_legs", "data": {"id": 360223248835, "created_at": "2021-10-20T14:34:28Z", "updated_at": "2021-10-20T14:40:20Z", "agent_id": 0, "user_id": null, "duration": 347, "hold_time": 0, "wrap_up_time": null, "available_via": null, "forwarded_to": null, "consultation_from": null, "transferred_from": null, "transferred_to": null, "minutes_billed": null, "call_charge": "0.0", "completion_status": "completed", "consultation_time": null, "talk_time": 0, "consultation_to": null, "conference_time": null, "conference_from": null, "conference_to": null, "quality_issues": ["information_not_available"], "call_id": 360120313416, "type": "customer"}, "emitted_at": 1674159475494} +{"stream": "call_legs", "data": {"id": 360222256556, "created_at": "2021-10-20T14:50:30Z", "updated_at": "2021-10-20T14:55:21Z", "agent_id": 0, "user_id": null, "duration": 286, "hold_time": 0, "wrap_up_time": null, "available_via": null, "forwarded_to": null, "consultation_from": null, "transferred_from": null, "transferred_to": null, "minutes_billed": null, "call_charge": "0.0", "completion_status": "completed", "consultation_time": null, "talk_time": 0, "consultation_to": null, "conference_time": null, "conference_from": null, "conference_to": null, "quality_issues": ["information_not_available"], "call_id": 360120313696, "type": "customer"}, "emitted_at": 1674159475494} +{"stream": "call_legs", "data": {"id": 360223248815, "created_at": "2021-10-20T14:34:12Z", "updated_at": "2021-10-20T15:14:34Z", "agent_id": 0, "user_id": null, "duration": 9, "hold_time": 0, "wrap_up_time": null, "available_via": null, "forwarded_to": null, "consultation_from": null, "transferred_from": null, "transferred_to": null, "minutes_billed": null, "call_charge": "0.0", "completion_status": "completed", "consultation_time": null, "talk_time": 0, "consultation_to": null, "conference_time": null, "conference_from": null, "conference_to": null, "quality_issues": ["none"], "call_id": 360120313376, "type": "customer"}, "emitted_at": 1674159475495} +{"stream": "call_legs", "data": {"id": 360222257236, "created_at": "2021-10-20T15:16:08Z", "updated_at": "2021-10-20T15:20:17Z", "agent_id": 0, "user_id": null, "duration": 247, "hold_time": 0, "wrap_up_time": null, "available_via": null, "forwarded_to": null, "consultation_from": null, "transferred_from": null, "transferred_to": null, "minutes_billed": null, "call_charge": "0.0", "completion_status": "completed", "consultation_time": null, "talk_time": 0, "consultation_to": null, "conference_time": null, "conference_from": null, "conference_to": null, "quality_issues": ["information_not_available"], "call_id": 360121169655, "type": "customer"}, "emitted_at": 1674159475495} +{"stream": "call_legs", "data": {"id": 360222256136, "created_at": "2021-10-20T14:40:08Z", "updated_at": "2021-10-20T15:20:35Z", "agent_id": 0, "user_id": null, "duration": 14, "hold_time": 0, "wrap_up_time": null, "available_via": null, "forwarded_to": null, "consultation_from": null, "transferred_from": null, "transferred_to": null, "minutes_billed": null, "call_charge": "0.0", "completion_status": "completed", "consultation_time": null, "talk_time": 0, "consultation_to": null, "conference_time": null, "conference_from": null, "conference_to": null, "quality_issues": ["none"], "call_id": 360121168815, "type": "customer"}, "emitted_at": 1674159475495} +{"stream": "call_legs", "data": {"id": 360223249615, "created_at": "2021-10-20T14:49:52Z", "updated_at": "2021-10-20T15:30:06Z", "agent_id": 0, "user_id": null, "duration": 3, "hold_time": 0, "wrap_up_time": null, "available_via": null, "forwarded_to": null, "consultation_from": null, "transferred_from": null, "transferred_to": null, "minutes_billed": null, "call_charge": "0.0", "completion_status": "completed", "consultation_time": null, "talk_time": 0, "consultation_to": null, "conference_time": null, "conference_from": null, "conference_to": null, "quality_issues": ["none"], "call_id": 360120313656, "type": "customer"}, "emitted_at": 1674159475496} +{"stream": "greetings", "data": {"id": "voicemail_en", "name": "Default (voicemail on)", "category_id": 1, "default": true, "default_lang": true, "active": true, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_voicemail_greeting-2f8e559817bdaf572b7399ba19bd077943a99102eb79421fb37c45c6c209dc42.mp3", "audio_name": "voicemail_en.mp3", "upload_id": null, "phone_number_ids": [360000121575], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479082} +{"stream": "greetings", "data": {"id": "voicemail_jp", "name": "Default (Japanese)", "category_id": 1, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_jp_voicemail_greeting-877bed4a67aa833401f1e6dd9e26cc18aeee83f39a88cf60aa939a5987292286.mp3", "audio_name": "voicemail_jp.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479082} +{"stream": "greetings", "data": {"id": "voicemail_none", "name": "None", "category_id": 1, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": null, "audio_name": "voicemail_none.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479082} +{"stream": "greetings", "data": {"id": "available_en", "name": "Default", "category_id": 2, "default": true, "default_lang": true, "active": true, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_available_greeting-4fc2c1e71ea75b4bf5b7dd32a7104e10e4e8bf24000201429d7c11a845784dc5.mp3", "audio_name": "available_en.mp3", "upload_id": null, "phone_number_ids": [360000121575], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479083} +{"stream": "greetings", "data": {"id": "available_jp", "name": "Default (Japanese)", "category_id": 2, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_jp_available_greeting-046a59a7baffe238eb7370e7cf5fe7305371540474c93e0f30c731328b342174.mp3", "audio_name": "available_jp.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479084} +{"stream": "greetings", "data": {"id": "available_none", "name": "None", "category_id": 2, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": null, "audio_name": "available_none.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479084} +{"stream": "greetings", "data": {"id": "wait_en", "name": "Default", "category_id": 3, "default": true, "default_lang": true, "active": true, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_wait_greeting-9af4ed352eb6d50cf3f85aa7c41492be6ff1bab5228cc3cf0fbb8957738dbe40.mp3", "audio_name": "wait_en.mp3", "upload_id": null, "phone_number_ids": [360000121575], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479085} +{"stream": "greetings", "data": {"id": "hold_en", "name": "Default", "category_id": 4, "default": true, "default_lang": true, "active": true, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_hold_greeting-9af4ed352eb6d50cf3f85aa7c41492be6ff1bab5228cc3cf0fbb8957738dbe40.mp3", "audio_name": "hold_en.mp3", "upload_id": null, "phone_number_ids": [360000121575], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479086} +{"stream": "greetings", "data": {"id": "ivr_none", "name": "None", "category_id": 5, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": null, "audio_name": "ivr_none.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479086} +{"stream": "greetings", "data": {"id": "available_en_call_monitoring", "name": "Default (call monitoring)", "category_id": 2, "default": true, "default_lang": true, "active": false, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_available_greeting_with_call_monitoring-efc19b939e4c5ceb8455db8e9754335806beb7bb9a28ce3571071a5a96871d76.mp3", "audio_name": "available_en_call_monitoring.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479087} +{"stream": "greetings", "data": {"id": "available_jp_call_monitoring", "name": "Default (Japanese call monitoring)", "category_id": 2, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_jp_available_greeting_with_call_monitoring-7268e49ae9cc8f2fc675c96dfed1af98c9d0e9ae77f90d773d3cd96aed5b9e58.mp3", "audio_name": "available_jp_call_monitoring.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479087} +{"stream": "greetings", "data": {"id": "callback_en", "name": "Default", "category_id": 6, "default": true, "default_lang": true, "active": true, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_callback_greeting_V2-bf2424b358a4faeaa828ccb69c967ad4074445229bbb0c73dd120700319de68a.mp3", "audio_name": "callback_en.mp3", "upload_id": null, "phone_number_ids": [360000121575], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479088} +{"stream": "greetings", "data": {"id": "callback-confirmation_en", "name": "Default", "category_id": 7, "default": true, "default_lang": true, "active": true, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_callback_confirmation_greeting_V2-bf7b6a1645341aab989b52a1eb3425d51e41f906396e8b13d669256917697c79.mp3", "audio_name": "callback-confirmation_en.mp3", "upload_id": null, "phone_number_ids": [360000121575], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479088} +{"stream": "greetings", "data": {"id": "callback_none", "name": "None", "category_id": 6, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": null, "audio_name": "callback_none.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479089} +{"stream": "greetings", "data": {"id": "callback-confirmation_none", "name": "None", "category_id": 7, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": null, "audio_name": "callback-confirmation_none.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479089} +{"stream": "greetings", "data": {"id": "available_en_voicemail_config", "name": "Default (voicemail off)", "category_id": 2, "default": true, "default_lang": true, "active": false, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_available_greeting_no_voicemail-1b9769a85defcc80aac0ab62cbc99b8ecc72f8d0fbfd7165fead98dd49c21c4e.mp3", "audio_name": "available_en_voicemail_config.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479090} +{"stream": "greetings", "data": {"id": "available_jp_voicemail_config", "name": "Default (Japanese voicemail off)", "category_id": 2, "default": true, "default_lang": false, "active": false, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_jp_available_greeting_no_voicemail-350a937a599dc9b3314d270602cb9e152ce2adeee1cb5b31b31f1995c8cc7882.mp3", "audio_name": "available_jp_voicemail_config.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479090} +{"stream": "greetings", "data": {"id": "voicemail_en_voicemail_config", "name": "Default (voicemail off)", "category_id": 1, "default": true, "default_lang": true, "active": false, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_voicemail_off_greeting-37c1fef28743683024b42c5577e6eb1bce42aa3aabe1dd01c875c65fb0ec4b05.mp3", "audio_name": "voicemail_en_voicemail_config.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479091} +{"stream": "greetings", "data": {"id": "call-recording-opt-out_en", "name": "Opt-out consent greeting (default)", "category_id": 8, "default": true, "default_lang": true, "active": true, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_call_recording_opt_out-4ccf97e7c00fa861dc2905d23931fd94b6293416c7f1dc0db3b6d3fe1c2fcf33.mp3", "audio_name": "call-recording-opt-out_en.mp3", "upload_id": null, "phone_number_ids": [360000121575], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479091} +{"stream": "greetings", "data": {"id": "call-recording-opt-in_en", "name": "Opt-in consent greeting (default)", "category_id": 9, "default": true, "default_lang": true, "active": true, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_call_recording_opt_in-e1054755d6c6b90661bdd8f5e8cff1beb73b1841ef515544f386b96e6ed4bad1.mp3", "audio_name": "call-recording-opt-in_en.mp3", "upload_id": null, "phone_number_ids": [360000121575], "ivr_ids": [], "has_sub_settings": false}, "emitted_at": 1674159479092} +{"stream": "greetings", "data": {"id": "available_en_digital_lines", "name": "Default (digital line)", "category_id": 2, "default": true, "default_lang": true, "active": false, "pending": false, "audio_url": "https://static.zdassets.com/voice/ef9da20555606d86a6f57f86f07ad1bfb0de132c/voice/assets/default_en_available_digital_line_greeting_2-1b9769a85defcc80aac0ab62cbc99b8ecc72f8d0fbfd7165fead98dd49c21c4e.mp3", "audio_name": "available_en_digital_lines.mp3", "upload_id": null, "phone_number_ids": [], "ivr_ids": [], "has_sub_settings": true}, "emitted_at": 1674159479093} +{"stream": "greeting_categories", "data": {"id": 1, "name": "voicemail"}, "emitted_at": 1674159479490} +{"stream": "greeting_categories", "data": {"id": 2, "name": "available"}, "emitted_at": 1674159479491} +{"stream": "greeting_categories", "data": {"id": 3, "name": "wait"}, "emitted_at": 1674159479491} +{"stream": "greeting_categories", "data": {"id": 4, "name": "hold"}, "emitted_at": 1674159479491} +{"stream": "greeting_categories", "data": {"id": 5, "name": "ivr"}, "emitted_at": 1674159479491} +{"stream": "greeting_categories", "data": {"id": 6, "name": "callback"}, "emitted_at": 1674159479491} +{"stream": "greeting_categories", "data": {"id": 7, "name": "callback_confirmation"}, "emitted_at": 1674159479491} +{"stream": "greeting_categories", "data": {"id": 8, "name": "call_recording_opt_out"}, "emitted_at": 1674159479492} +{"stream": "greeting_categories", "data": {"id": 9, "name": "call_recording_opt_in"}, "emitted_at": 1674159479492} +{"stream": "ivr_menus", "data": {"ivr_id": 360000011856, "id": 360000018476, "name": "Main menu", "default": true, "greeting_id": null, "routes": [{"id": 360000016516, "keypress": "5", "greeting": null, "action": "menu", "options": {"menu_id": 360000018476}, "option_text": "Main menu", "overflow_options": []}]}, "emitted_at": 1674159480308} +{"stream": "ivr_menus", "data": {"ivr_id": 360000011876, "id": 360000018496, "name": "Main menu", "default": true, "greeting_id": null, "routes": [{"id": 360000015935, "keypress": "0", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015955, "keypress": "2", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015975, "keypress": "3", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015995, "keypress": "4", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016015, "keypress": "6", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016035, "keypress": "8", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016436, "keypress": "1", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016456, "keypress": "5", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016476, "keypress": "7", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016496, "keypress": "9", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}]}, "emitted_at": 1674159480308} +{"stream": "ivr_menus", "data": {"ivr_id": 360000011896, "id": 360000018516, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480309} +{"stream": "ivr_menus", "data": {"ivr_id": 360000011916, "id": 360000018536, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480310} +{"stream": "ivr_menus", "data": {"ivr_id": 360000011936, "id": 360000018556, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480310} +{"stream": "ivr_menus", "data": {"ivr_id": 360000011956, "id": 360000018576, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480310} +{"stream": "ivr_menus", "data": {"ivr_id": 360000011976, "id": 360000018596, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480310} +{"stream": "ivr_menus", "data": {"ivr_id": 360000011996, "id": 360000018616, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480311} +{"stream": "ivr_menus", "data": {"ivr_id": 360000012016, "id": 360000018636, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480311} +{"stream": "ivr_routes", "data": {"ivr_id": 360000011856, "ivr_menu_id": 360000018476, "id": 360000018476, "name": "Main menu", "default": true, "greeting_id": null, "routes": [{"id": 360000016516, "keypress": "5", "greeting": null, "action": "menu", "options": {"menu_id": 360000018476}, "option_text": "Main menu", "overflow_options": []}]}, "emitted_at": 1674159480341} +{"stream": "ivr_routes", "data": {"ivr_id": 360000011876, "ivr_menu_id": 360000018496, "id": 360000018496, "name": "Main menu", "default": true, "greeting_id": null, "routes": [{"id": 360000015935, "keypress": "0", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015955, "keypress": "2", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015975, "keypress": "3", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015995, "keypress": "4", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016015, "keypress": "6", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016035, "keypress": "8", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016436, "keypress": "1", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016456, "keypress": "5", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016476, "keypress": "7", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016496, "keypress": "9", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}]}, "emitted_at": 1674159480342} +{"stream": "ivr_routes", "data": {"ivr_id": 360000011896, "ivr_menu_id": 360000018516, "id": 360000018516, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480343} +{"stream": "ivr_routes", "data": {"ivr_id": 360000011916, "ivr_menu_id": 360000018536, "id": 360000018536, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480343} +{"stream": "ivr_routes", "data": {"ivr_id": 360000011936, "ivr_menu_id": 360000018556, "id": 360000018556, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480345} +{"stream": "ivr_routes", "data": {"ivr_id": 360000011956, "ivr_menu_id": 360000018576, "id": 360000018576, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480345} +{"stream": "ivr_routes", "data": {"ivr_id": 360000011976, "ivr_menu_id": 360000018596, "id": 360000018596, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480346} +{"stream": "ivr_routes", "data": {"ivr_id": 360000011996, "ivr_menu_id": 360000018616, "id": 360000018616, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480347} +{"stream": "ivr_routes", "data": {"ivr_id": 360000012016, "ivr_menu_id": 360000018636, "id": 360000018636, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}, "emitted_at": 1674159480348} +{"stream": "ivrs", "data": {"id": 360000011856, "name": "Fake IVR Menu 3", "menus": [{"id": 360000018476, "name": "Main menu", "default": true, "greeting_id": null, "routes": [{"id": 360000016516, "keypress": "5", "greeting": null, "action": "menu", "options": {"menu_id": 360000018476}, "option_text": "Main menu", "overflow_options": []}]}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480404} +{"stream": "ivrs", "data": {"id": 360000011876, "name": "Fake IVR Menu 5", "menus": [{"id": 360000018496, "name": "Main menu", "default": true, "greeting_id": null, "routes": [{"id": 360000015935, "keypress": "0", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015955, "keypress": "2", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015975, "keypress": "3", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000015995, "keypress": "4", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016015, "keypress": "6", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016035, "keypress": "8", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016436, "keypress": "1", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016456, "keypress": "5", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016476, "keypress": "7", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}, {"id": 360000016496, "keypress": "9", "greeting": null, "action": "group", "options": {"group_ids": [10001]}, "option_text": null, "overflow_options": []}]}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480405} +{"stream": "ivrs", "data": {"id": 360000011896, "name": "Fake IVR Menu 6", "menus": [{"id": 360000018516, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480406} +{"stream": "ivrs", "data": {"id": 360000011916, "name": "Fake IVR Menu 7", "menus": [{"id": 360000018536, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480406} +{"stream": "ivrs", "data": {"id": 360000011936, "name": "Fake IVR Menu 9", "menus": [{"id": 360000018556, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480407} +{"stream": "ivrs", "data": {"id": 360000011956, "name": "Fake IVR Menu 10", "menus": [{"id": 360000018576, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480407} +{"stream": "ivrs", "data": {"id": 360000011976, "name": "Fake IVR Menu 17", "menus": [{"id": 360000018596, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480407} +{"stream": "ivrs", "data": {"id": 360000011996, "name": "Fake IVR Menu 19", "menus": [{"id": 360000018616, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480408} +{"stream": "ivrs", "data": {"id": 360000012016, "name": "Fake IVR Menu 20", "menus": [{"id": 360000018636, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480408} +{"stream": "ivrs", "data": {"id": 360000012036, "name": "Fake IVR Menu 21", "menus": [{"id": 360000018656, "name": "Main menu", "default": true, "greeting_id": null, "routes": []}], "phone_number_ids": [], "phone_number_names": []}, "emitted_at": 1674159480408} +{"stream": "phone_numbers", "data": {"id": 360000121575, "country_code": "US", "created_at": "2020-12-14T18:44:31Z", "external": false, "number": "+12059531462", "name": "+1 (205) 953-1462", "nickname": null, "display_number": "+1 (205) 953-1462", "location": "AL", "toll_free": false, "transcription": true, "recorded": true, "call_recording_consent": "always", "group_ids": [], "default_group_id": null, "greeting_ids": [], "default_greeting_ids": ["voicemail_en", "available_en", "wait_en", "hold_en", "callback_en", "callback-confirmation_en", "call-recording-opt-out_en", "call-recording-opt-in_en"], "categorised_greetings": {"1": "voicemail_en", "2": "available_en", "3": "wait_en", "4": "hold_en", "6": "callback_en", "7": "callback-confirmation_en", "8": "call-recording-opt-out_en", "9": "call-recording-opt-in_en"}, "categorised_greetings_with_sub_settings": {"1": {"voicemail_on_outside_business_hours": "voicemail_en", "voicemail_on_inside_business_hours": "voicemail_en", "voicemail_off_inside_business_hours": "voicemail_en_voicemail_config", "voicemail_off_outside_business_hours": "voicemail_en_voicemail_config"}, "2": {"voicemail_on": "available_en", "voicemail_off": "available_en_voicemail_config"}, "3": "wait_en", "4": "hold_en", "6": "callback_en", "7": "callback-confirmation_en", "8": "call-recording-opt-out_en", "9": "call-recording-opt-in_en"}, "sms_group_id": null, "capabilities": {"sms": true, "mms": true, "voice": true, "emergency_address": true}, "sms_enabled": false, "voice_enabled": true, "priority": 0, "outbound_enabled": true, "line_type": "phone", "ivr_id": null, "schedule_id": null, "failover_number": null}, "emitted_at": 1674159481130} diff --git a/airbyte-integrations/connectors/source-zendesk-talk/source_zendesk_talk/streams.py b/airbyte-integrations/connectors/source-zendesk-talk/source_zendesk_talk/streams.py index 14b6f25e5d3ae..793832d77c5fe 100644 --- a/airbyte-integrations/connectors/source-zendesk-talk/source_zendesk_talk/streams.py +++ b/airbyte-integrations/connectors/source-zendesk-talk/source_zendesk_talk/streams.py @@ -10,6 +10,7 @@ import pendulum as pendulum import requests +from airbyte_cdk.sources.streams.availability_strategy import AvailabilityStrategy from airbyte_cdk.sources.streams.http import HttpStream @@ -33,6 +34,10 @@ def url_base(self) -> str: """API base url based on configured subdomain""" return f"https://{self._subdomain}.zendesk.com/api/v2/channels/voice/" + @property + def availability_strategy(self) -> Optional["AvailabilityStrategy"]: + return None + def backoff_time(self, response: requests.Response) -> Optional[float]: """ Override this method to dynamically determine backoff time e.g: by reading the X-Retry-After header. diff --git a/airbyte-integrations/connectors/source-zenloop/source_zenloop/zenloop.yaml b/airbyte-integrations/connectors/source-zenloop/source_zenloop/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-zenloop/source_zenloop/zenloop.yaml rename to airbyte-integrations/connectors/source-zenloop/source_zenloop/manifest.yaml diff --git a/airbyte-integrations/connectors/source-zenloop/source_zenloop/source.py b/airbyte-integrations/connectors/source-zenloop/source_zenloop/source.py index d3eeb2cf46c14..240d275c29f86 100644 --- a/airbyte-integrations/connectors/source-zenloop/source_zenloop/source.py +++ b/airbyte-integrations/connectors/source-zenloop/source_zenloop/source.py @@ -14,4 +14,4 @@ # Declarative Source class SourceZenloop(YamlDeclarativeSource): def __init__(self): - super().__init__(path_to_yaml="zenloop.yaml") + super().__init__(path_to_yaml="manifest.yaml") diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml b/airbyte-integrations/connectors/source-zoom/source_zoom/manifest.yaml similarity index 100% rename from airbyte-integrations/connectors/source-zoom/source_zoom/zoom.yaml rename to airbyte-integrations/connectors/source-zoom/source_zoom/manifest.yaml diff --git a/airbyte-integrations/connectors/source-zoom/source_zoom/source.py b/airbyte-integrations/connectors/source-zoom/source_zoom/source.py index f7c16e43a355b..f195857afbe7b 100644 --- a/airbyte-integrations/connectors/source-zoom/source_zoom/source.py +++ b/airbyte-integrations/connectors/source-zoom/source_zoom/source.py @@ -15,4 +15,4 @@ # Declarative Source class SourceZoom(YamlDeclarativeSource): def __init__(self): - super().__init__(**{"path_to_yaml": "zoom.yaml"}) + super().__init__(**{"path_to_yaml": "manifest.yaml"}) diff --git a/airbyte-metrics/reporter/Dockerfile b/airbyte-metrics/reporter/Dockerfile index 10960cae90a27..24bfbf28f8d79 100644 --- a/airbyte-metrics/reporter/Dockerfile +++ b/airbyte-metrics/reporter/Dockerfile @@ -1,7 +1,7 @@ ARG JDK_IMAGE=airbyte/airbyte-base-java-image:1.0 FROM ${JDK_IMAGE} AS metrics-reporter -ARG VERSION=0.40.28 +ARG VERSION=0.40.30 ENV APPLICATION airbyte-metrics-reporter ENV VERSION ${VERSION} diff --git a/airbyte-oauth/src/main/java/io/airbyte/oauth/OAuthImplementationFactory.java b/airbyte-oauth/src/main/java/io/airbyte/oauth/OAuthImplementationFactory.java index dbb7de039e55b..f8e49a6776162 100644 --- a/airbyte-oauth/src/main/java/io/airbyte/oauth/OAuthImplementationFactory.java +++ b/airbyte-oauth/src/main/java/io/airbyte/oauth/OAuthImplementationFactory.java @@ -71,6 +71,7 @@ public OAuthImplementationFactory(final ConfigRepository configRepository, final .put("airbyte/source-snowflake", new SourceSnowflakeOAuthFlow(configRepository, httpClient)) .put("airbyte/source-okta", new OktaOAuthFlow(configRepository, httpClient)) .put("airbyte/source-paypal-transaction", new PayPalTransactionOAuthFlow(configRepository, httpClient)) + .put("airbyte/source-airtable", new AirtableOAuthFlow(configRepository, httpClient)) .build(); } diff --git a/airbyte-oauth/src/main/java/io/airbyte/oauth/flows/AirtableOAuthFlow.java b/airbyte-oauth/src/main/java/io/airbyte/oauth/flows/AirtableOAuthFlow.java new file mode 100644 index 0000000000000..0adc54d6de3a1 --- /dev/null +++ b/airbyte-oauth/src/main/java/io/airbyte/oauth/flows/AirtableOAuthFlow.java @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2022 Airbyte, Inc., all rights reserved. + */ + +package io.airbyte.oauth.flows; + +import com.fasterxml.jackson.databind.JsonNode; +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableMap; +import io.airbyte.commons.json.Jsons; +import io.airbyte.config.persistence.ConfigRepository; +import io.airbyte.oauth.BaseOAuth2Flow; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; +import java.nio.charset.StandardCharsets; +import java.time.Clock; +import java.time.Instant; +import java.util.Arrays; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.function.Supplier; +import org.apache.http.client.utils.URIBuilder; + +/** + * Following docs from + * https://airtable.com/developers/web/api/oauth-reference#authorization-request-query + */ +public class AirtableOAuthFlow extends BaseOAuth2Flow { + + private static final String ACCESS_TOKEN_URL = "https://airtable.com/oauth2/v1/token"; + private final Clock clock; + private static final List SCOPES = Arrays.asList( + "data.records:read", + "data.recordComments:read", + "schema.bases:read"); + + public String getScopes() { + // More info and additional scopes could be found here: + // https://airtable.com/developers/web/api/scopes + // should be space-delimitered + return String.join(" ", SCOPES); + } + + public String getCodeVerifier() { + // Randomly generated string, min 43 - max 150 symbols + return "XmG5afcqXCamPk3jshWQXmG5afcqXCamPk3jshWQXmG5afcqXCamPk3jshWQXmG5afcqXCamPk3jshWQ"; + } + + public String getCodeChanlenge() { + // Base64(s256) from CODE_VERIFIER + return "jajoblvFNHmH8rSnW84xFEUKMGC8CYwR82phhRR6iCg"; + } + + @Override + public String getState() { + // State + return "WeHH_yy2irpl8UYAvv-my"; + } + + public AirtableOAuthFlow(final ConfigRepository configRepository, final HttpClient httpClient) { + super(configRepository, httpClient); + this.clock = Clock.systemUTC(); + } + + @VisibleForTesting + public AirtableOAuthFlow(final ConfigRepository configRepository, final HttpClient httpClient, final Supplier stateSupplier, Clock clock) { + super(configRepository, httpClient, stateSupplier); + this.clock = clock; + } + + @Override + protected String formatConsentUrl(final UUID definitionId, + final String clientId, + final String redirectUrl, + final JsonNode inputOAuthConfiguration) + throws IOException { + + final URIBuilder builder = new URIBuilder() + .setScheme("https") + .setHost("airtable.com") + .setPath("oauth2/v1/authorize") + // required + .addParameter("redirect_uri", redirectUrl) + .addParameter("client_id", clientId) + .addParameter("response_type", "code") + .addParameter("scope", getScopes()) + .addParameter("code_challenge", getCodeChanlenge()) + .addParameter("code_challenge_method", "S256") + .addParameter("state", getState()); + + try { + return builder.build().toString(); + } catch (final URISyntaxException e) { + throw new IOException("Failed to format Consent URL for OAuth flow", e); + } + } + + @Override + protected String getAccessTokenUrl(final JsonNode inputOAuthConfiguration) { + return ACCESS_TOKEN_URL; + } + + @Override + protected Map getAccessTokenQueryParameters(String clientId, + String clientSecret, + String authCode, + String redirectUrl) { + return ImmutableMap.builder() + // required + .put("code", authCode) + .put("redirect_uri", redirectUrl) + .put("grant_type", "authorization_code") + .put("client_id", clientId) + .put("code_verifier", getCodeVerifier()) + .put("code_challenge_method", "S256") + .build(); + } + + @Override + protected Map completeOAuthFlow(final String clientId, + final String clientSecret, + final String authCode, + final String redirectUrl, + final JsonNode inputOAuthConfiguration, + final JsonNode oAuthParamConfig) + throws IOException { + final var accessTokenUrl = getAccessTokenUrl(inputOAuthConfiguration); + final byte[] authorization = Base64.getEncoder() + .encode((clientId + ":" + clientSecret).getBytes(StandardCharsets.UTF_8)); + final HttpRequest request = HttpRequest.newBuilder() + .POST(HttpRequest.BodyPublishers + .ofString(tokenReqContentType.getConverter().apply( + getAccessTokenQueryParameters(clientId, clientSecret, authCode, redirectUrl)))) + .uri(URI.create(accessTokenUrl)) + .header("Content-Type", tokenReqContentType.getContentType()) + .header("Authorization", "Basic " + new String(authorization, StandardCharsets.UTF_8)) + .build(); + try { + final HttpResponse response = httpClient.send(request, + HttpResponse.BodyHandlers.ofString()); + + return extractOAuthOutput(Jsons.deserialize(response.body()), accessTokenUrl); + } catch (final InterruptedException e) { + throw new IOException("Failed to complete OAuth flow", e); + } + } + + @Override + protected Map extractOAuthOutput(final JsonNode data, final String accessTokenUrl) throws IOException { + final Map result = new HashMap<>(); + if (data.has("refresh_token")) { + result.put("refresh_token", data.get("refresh_token").asText()); + } else { + throw new IOException(String.format("Missing 'refresh_token' in query params from %s", accessTokenUrl)); + } + if (data.has("access_token")) { + result.put("access_token", data.get("access_token").asText()); + } else { + throw new IOException(String.format("Missing 'access_token' in query params from %s", accessTokenUrl)); + } + if (data.has("expires_in")) { + Instant expires_in = Instant.now(this.clock).plusSeconds(data.get("expires_in").asInt()); + result.put("token_expiry_date", expires_in.toString()); + } else { + throw new IOException(String.format("Missing 'expires_in' in query params from %s", accessTokenUrl)); + } + return result; + } + +} diff --git a/airbyte-proxy/Dockerfile b/airbyte-proxy/Dockerfile index 42b78790c74ae..83bfbd84e9bd1 100644 --- a/airbyte-proxy/Dockerfile +++ b/airbyte-proxy/Dockerfile @@ -2,7 +2,7 @@ FROM nginx:latest -ARG VERSION=0.40.28 +ARG VERSION=0.40.30 ENV APPLICATION airbyte-proxy ENV VERSION ${VERSION} diff --git a/airbyte-server/Dockerfile b/airbyte-server/Dockerfile index b7ab48ef8543c..bcb370cc6c326 100644 --- a/airbyte-server/Dockerfile +++ b/airbyte-server/Dockerfile @@ -3,7 +3,7 @@ FROM ${JDK_IMAGE} AS server EXPOSE 8000 -ARG VERSION=0.40.28 +ARG VERSION=0.40.30 ENV APPLICATION airbyte-server ENV VERSION ${VERSION} diff --git a/airbyte-server/build.gradle b/airbyte-server/build.gradle index 19d391456bcd3..c75ccaf1add05 100644 --- a/airbyte-server/build.gradle +++ b/airbyte-server/build.gradle @@ -35,6 +35,7 @@ dependencies { implementation project(':airbyte-api') implementation project(':airbyte-commons-docker') implementation project(':airbyte-commons-temporal') + implementation project(':airbyte-commons-server') implementation project(':airbyte-commons-worker') implementation project(':airbyte-config:init') implementation project(':airbyte-config:config-models') diff --git a/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java b/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java index 16f3405d07e53..30e11d97c09c5 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java +++ b/airbyte-server/src/main/java/io/airbyte/server/ServerApp.java @@ -10,6 +10,13 @@ import io.airbyte.commons.features.EnvVariableFeatureFlags; import io.airbyte.commons.features.FeatureFlags; import io.airbyte.commons.resources.MoreResources; +import io.airbyte.commons.server.RequestLogger; +import io.airbyte.commons.server.errors.*; +import io.airbyte.commons.server.handlers.*; +import io.airbyte.commons.server.scheduler.DefaultSynchronousSchedulerClient; +import io.airbyte.commons.server.scheduler.EventRunner; +import io.airbyte.commons.server.scheduler.TemporalEventRunner; +import io.airbyte.commons.server.services.AirbyteGithubStore; import io.airbyte.commons.temporal.ConnectionManagerUtils; import io.airbyte.commons.temporal.StreamResetRecordsHelper; import io.airbyte.commons.temporal.TemporalClient; @@ -38,12 +45,6 @@ import io.airbyte.persistence.job.errorreporter.JobErrorReportingClientFactory; import io.airbyte.persistence.job.factory.OAuthConfigSupplier; import io.airbyte.persistence.job.tracker.JobTracker; -import io.airbyte.server.errors.*; -import io.airbyte.server.handlers.*; -import io.airbyte.server.scheduler.DefaultSynchronousSchedulerClient; -import io.airbyte.server.scheduler.EventRunner; -import io.airbyte.server.scheduler.TemporalEventRunner; -import io.airbyte.server.services.AirbyteGithubStore; import io.airbyte.validation.json.JsonSchemaValidator; import io.airbyte.workers.helper.ConnectionHelper; import io.temporal.serviceclient.WorkflowServiceStubs; diff --git a/airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java b/airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java index 4fb8307719065..2ceb52bd9e4d2 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/ServerFactory.java @@ -5,6 +5,9 @@ package io.airbyte.server; import io.airbyte.analytics.TrackingClient; +import io.airbyte.commons.server.handlers.*; +import io.airbyte.commons.server.scheduler.EventRunner; +import io.airbyte.commons.server.scheduler.SynchronousSchedulerClient; import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs.WorkerEnvironment; import io.airbyte.config.helpers.LogConfigs; @@ -13,9 +16,6 @@ import io.airbyte.config.persistence.SecretsRepositoryWriter; import io.airbyte.db.Database; import io.airbyte.persistence.job.JobPersistence; -import io.airbyte.server.handlers.*; -import io.airbyte.server.scheduler.EventRunner; -import io.airbyte.server.scheduler.SynchronousSchedulerClient; import java.net.http.HttpClient; import java.nio.file.Path; import java.util.HashSet; diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/ApiHelper.java b/airbyte-server/src/main/java/io/airbyte/server/apis/ApiHelper.java index b24eda21e7541..63541a77b34ce 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/ApiHelper.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/ApiHelper.java @@ -4,9 +4,9 @@ package io.airbyte.server.apis; +import io.airbyte.commons.server.errors.BadObjectSchemaKnownException; +import io.airbyte.commons.server.errors.IdNotFoundKnownException; import io.airbyte.config.persistence.ConfigNotFoundException; -import io.airbyte.server.errors.BadObjectSchemaKnownException; -import io.airbyte.server.errors.IdNotFoundKnownException; import io.airbyte.validation.json.JsonValidationException; import java.io.IOException; import org.slf4j.LoggerFactory; diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/AttemptApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/AttemptApiController.java index d50e731d5e8d8..64e8c4730d8fa 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/AttemptApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/AttemptApiController.java @@ -4,20 +4,25 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.ADMIN; + import io.airbyte.api.generated.AttemptApi; import io.airbyte.api.model.generated.InternalOperationResult; import io.airbyte.api.model.generated.SaveStatsRequestBody; import io.airbyte.api.model.generated.SetWorkflowInAttemptRequestBody; -import io.airbyte.server.handlers.AttemptHandler; +import io.airbyte.commons.server.handlers.AttemptHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/attempt/") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class AttemptApiController implements AttemptApi { private final AttemptHandler attemptHandler; @@ -36,6 +41,7 @@ public InternalOperationResult saveStats(final SaveStatsRequestBody requestBody) @Override @Post(uri = "/set_workflow_in_attempt", processes = MediaType.APPLICATION_JSON) + @Secured({ADMIN}) public InternalOperationResult setWorkflowInAttempt(@Body final SetWorkflowInAttemptRequestBody requestBody) { return ApiHelper.execute(() -> attemptHandler.setWorkflowInAttempt(requestBody)); } diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/ConnectionApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/ConnectionApiController.java index f0de78d03d312..094acc9416e30 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/ConnectionApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/ConnectionApiController.java @@ -4,6 +4,9 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.ConnectionApi; import io.airbyte.api.model.generated.ConnectionCreate; import io.airbyte.api.model.generated.ConnectionIdRequestBody; @@ -13,19 +16,24 @@ import io.airbyte.api.model.generated.ConnectionUpdate; import io.airbyte.api.model.generated.JobInfoRead; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; -import io.airbyte.server.handlers.ConnectionsHandler; -import io.airbyte.server.handlers.OperationsHandler; -import io.airbyte.server.handlers.SchedulerHandler; +import io.airbyte.commons.server.handlers.ConnectionsHandler; +import io.airbyte.commons.server.handlers.OperationsHandler; +import io.airbyte.commons.server.handlers.SchedulerHandler; import io.micronaut.context.annotation.Context; import io.micronaut.context.annotation.Requires; +import io.micronaut.http.HttpStatus; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.http.annotation.Status; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/connections") @Context() @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class ConnectionApiController implements ConnectionApi { private final ConnectionsHandler connectionsHandler; @@ -42,24 +50,28 @@ public ConnectionApiController(final ConnectionsHandler connectionsHandler, @Override @Post(uri = "/create") + @Secured({EDITOR}) public ConnectionRead createConnection(@Body final ConnectionCreate connectionCreate) { return ApiHelper.execute(() -> connectionsHandler.createConnection(connectionCreate)); } @Override @Post(uri = "/update") + @Secured({EDITOR}) public ConnectionRead updateConnection(@Body final ConnectionUpdate connectionUpdate) { return ApiHelper.execute(() -> connectionsHandler.updateConnection(connectionUpdate)); } @Override @Post(uri = "/list") + @Secured({READER}) public ConnectionReadList listConnectionsForWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> connectionsHandler.listConnectionsForWorkspace(workspaceIdRequestBody)); } @Override @Post(uri = "/list_all") + @Secured({READER}) public ConnectionReadList listAllConnectionsForWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> connectionsHandler.listAllConnectionsForWorkspace(workspaceIdRequestBody)); } @@ -72,12 +84,15 @@ public ConnectionReadList searchConnections(@Body final ConnectionSearch connect @Override @Post(uri = "/get") + @Secured({READER}) public ConnectionRead getConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> connectionsHandler.getConnection(connectionIdRequestBody.getConnectionId())); } @Override @Post(uri = "/delete") + @Status(HttpStatus.NO_CONTENT) + @Secured({EDITOR}) public void deleteConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { ApiHelper.execute(() -> { operationsHandler.deleteOperationsForConnection(connectionIdRequestBody); @@ -88,12 +103,14 @@ public void deleteConnection(@Body final ConnectionIdRequestBody connectionIdReq @Override @Post(uri = "/sync") + @Secured({EDITOR}) public JobInfoRead syncConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> schedulerHandler.syncConnection(connectionIdRequestBody)); } @Override @Post(uri = "/reset") + @Secured({EDITOR}) public JobInfoRead resetConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> schedulerHandler.resetConnection(connectionIdRequestBody)); } diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationApiController.java index 6c16cec4a596e..0b3c16ea84246 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationApiController.java @@ -4,6 +4,9 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.DestinationApi; import io.airbyte.api.model.generated.CheckConnectionRead; import io.airbyte.api.model.generated.DestinationCloneRequestBody; @@ -14,30 +17,40 @@ import io.airbyte.api.model.generated.DestinationSearch; import io.airbyte.api.model.generated.DestinationUpdate; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; -import io.airbyte.server.handlers.DestinationHandler; -import io.airbyte.server.handlers.SchedulerHandler; +import io.airbyte.commons.server.handlers.DestinationHandler; +import io.airbyte.commons.server.handlers.SchedulerHandler; import io.micronaut.context.annotation.Requires; +import io.micronaut.http.HttpStatus; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; -import lombok.AllArgsConstructor; +import io.micronaut.http.annotation.Status; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/destinations") @Requires(property = "airbyte.deployment-mode", value = "OSS") -@AllArgsConstructor +@Secured(SecurityRule.IS_AUTHENTICATED) public class DestinationApiController implements DestinationApi { private final DestinationHandler destinationHandler; private final SchedulerHandler schedulerHandler; + public DestinationApiController(final DestinationHandler destinationHandler, final SchedulerHandler schedulerHandler) { + this.destinationHandler = destinationHandler; + this.schedulerHandler = schedulerHandler; + } + @Post(uri = "/check_connection") + @Secured({EDITOR}) @Override public CheckConnectionRead checkConnectionToDestination(@Body final DestinationIdRequestBody destinationIdRequestBody) { return ApiHelper.execute(() -> schedulerHandler.checkDestinationConnectionFromDestinationId(destinationIdRequestBody)); } @Post(uri = "/check_connection_for_update") + @Secured({EDITOR}) @Override public CheckConnectionRead checkConnectionToDestinationForUpdate(@Body final DestinationUpdate destinationUpdate) { return ApiHelper.execute(() -> schedulerHandler.checkDestinationConnectionFromDestinationIdForUpdate(destinationUpdate)); @@ -50,13 +63,16 @@ public DestinationRead cloneDestination(@Body final DestinationCloneRequestBody } @Post(uri = "/create") + @Secured({EDITOR}) @Override public DestinationRead createDestination(@Body final DestinationCreate destinationCreate) { return ApiHelper.execute(() -> destinationHandler.createDestination(destinationCreate)); } @Post(uri = "/delete") + @Secured({EDITOR}) @Override + @Status(HttpStatus.NO_CONTENT) public void deleteDestination(@Body final DestinationIdRequestBody destinationIdRequestBody) { ApiHelper.execute(() -> { destinationHandler.deleteDestination(destinationIdRequestBody); @@ -65,12 +81,14 @@ public void deleteDestination(@Body final DestinationIdRequestBody destinationId } @Post(uri = "/get") + @Secured({READER}) @Override public DestinationRead getDestination(@Body final DestinationIdRequestBody destinationIdRequestBody) { return ApiHelper.execute(() -> destinationHandler.getDestination(destinationIdRequestBody)); } @Post(uri = "/list") + @Secured({READER}) @Override public DestinationReadList listDestinationsForWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> destinationHandler.listDestinationsForWorkspace(workspaceIdRequestBody)); @@ -83,6 +101,7 @@ public DestinationReadList searchDestinations(@Body final DestinationSearch dest } @Post(uri = "/update") + @Secured({EDITOR}) @Override public DestinationRead updateDestination(@Body final DestinationUpdate destinationUpdate) { return ApiHelper.execute(() -> destinationHandler.updateDestination(destinationUpdate)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationDefinitionApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationDefinitionApiController.java index 54409d2810210..6fe120b689f63 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationDefinitionApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationDefinitionApiController.java @@ -4,6 +4,11 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.ADMIN; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.DestinationDefinitionApi; import io.airbyte.api.model.generated.CustomDestinationDefinitionCreate; import io.airbyte.api.model.generated.DestinationDefinitionIdRequestBody; @@ -14,16 +19,21 @@ import io.airbyte.api.model.generated.PrivateDestinationDefinitionRead; import io.airbyte.api.model.generated.PrivateDestinationDefinitionReadList; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; -import io.airbyte.server.handlers.DestinationDefinitionsHandler; +import io.airbyte.commons.server.handlers.DestinationDefinitionsHandler; import io.micronaut.context.annotation.Context; import io.micronaut.context.annotation.Requires; +import io.micronaut.http.HttpStatus; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.http.annotation.Status; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/destination_definitions") @Requires(property = "airbyte.deployment-mode", value = "OSS") @Context +@Secured(SecurityRule.IS_AUTHENTICATED) public class DestinationDefinitionApiController implements DestinationDefinitionApi { private final DestinationDefinitionsHandler destinationDefinitionsHandler; @@ -33,13 +43,16 @@ public DestinationDefinitionApiController(final DestinationDefinitionsHandler de } @Post(uri = "/create_custom") + @Secured({EDITOR}) @Override public DestinationDefinitionRead createCustomDestinationDefinition(final CustomDestinationDefinitionCreate customDestinationDefinitionCreate) { return ApiHelper.execute(() -> destinationDefinitionsHandler.createCustomDestinationDefinition(customDestinationDefinitionCreate)); } @Post(uri = "/delete") + @Secured({ADMIN}) @Override + @Status(HttpStatus.NO_CONTENT) public void deleteDestinationDefinition(final DestinationDefinitionIdRequestBody destinationDefinitionIdRequestBody) { ApiHelper.execute(() -> { destinationDefinitionsHandler.deleteDestinationDefinition(destinationDefinitionIdRequestBody); @@ -48,18 +61,21 @@ public void deleteDestinationDefinition(final DestinationDefinitionIdRequestBody } @Post(uri = "/get") + @Secured({AUTHENTICATED_USER}) @Override public DestinationDefinitionRead getDestinationDefinition(final DestinationDefinitionIdRequestBody destinationDefinitionIdRequestBody) { return ApiHelper.execute(() -> destinationDefinitionsHandler.getDestinationDefinition(destinationDefinitionIdRequestBody)); } @Post(uri = "/get_for_workspace") + @Secured({READER}) @Override public DestinationDefinitionRead getDestinationDefinitionForWorkspace(final DestinationDefinitionIdWithWorkspaceId destinationDefinitionIdWithWorkspaceId) { return ApiHelper.execute(() -> destinationDefinitionsHandler.getDestinationDefinitionForWorkspace(destinationDefinitionIdWithWorkspaceId)); } @Post(uri = "/grant_definition") + @Secured({ADMIN}) @Override public PrivateDestinationDefinitionRead grantDestinationDefinitionToWorkspace(final DestinationDefinitionIdWithWorkspaceId destinationDefinitionIdWithWorkspaceId) { return ApiHelper @@ -67,30 +83,35 @@ public PrivateDestinationDefinitionRead grantDestinationDefinitionToWorkspace(fi } @Post(uri = "/list") + @Secured({AUTHENTICATED_USER}) @Override public DestinationDefinitionReadList listDestinationDefinitions() { return ApiHelper.execute(destinationDefinitionsHandler::listDestinationDefinitions); } @Post(uri = "/list_for_workspace") + @Secured({READER}) @Override public DestinationDefinitionReadList listDestinationDefinitionsForWorkspace(final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> destinationDefinitionsHandler.listDestinationDefinitionsForWorkspace(workspaceIdRequestBody)); } @Post(uri = "/list_latest") + @Secured({AUTHENTICATED_USER}) @Override public DestinationDefinitionReadList listLatestDestinationDefinitions() { return ApiHelper.execute(destinationDefinitionsHandler::listLatestDestinationDefinitions); } @Post(uri = "/list_private") + @Secured({ADMIN}) @Override public PrivateDestinationDefinitionReadList listPrivateDestinationDefinitions(final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> destinationDefinitionsHandler.listPrivateDestinationDefinitions(workspaceIdRequestBody)); } @Post(uri = "/revoke_definition") + @Secured({ADMIN}) @Override public void revokeDestinationDefinitionFromWorkspace(final DestinationDefinitionIdWithWorkspaceId destinationDefinitionIdWithWorkspaceId) { ApiHelper.execute(() -> { @@ -100,6 +121,7 @@ public void revokeDestinationDefinitionFromWorkspace(final DestinationDefinition } @Post(uri = "/update") + @Secured({AUTHENTICATED_USER}) @Override public DestinationDefinitionRead updateDestinationDefinition(final DestinationDefinitionUpdate destinationDefinitionUpdate) { return ApiHelper.execute(() -> destinationDefinitionsHandler.updateDestinationDefinition(destinationDefinitionUpdate)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationDefinitionSpecificationApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationDefinitionSpecificationApiController.java index 54492c4a905f4..a6c013df95421 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationDefinitionSpecificationApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationDefinitionSpecificationApiController.java @@ -4,17 +4,22 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; + import io.airbyte.api.generated.DestinationDefinitionSpecificationApi; import io.airbyte.api.model.generated.DestinationDefinitionIdWithWorkspaceId; import io.airbyte.api.model.generated.DestinationDefinitionSpecificationRead; -import io.airbyte.server.handlers.SchedulerHandler; +import io.airbyte.commons.server.handlers.SchedulerHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/destination_definition_specifications") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class DestinationDefinitionSpecificationApiController implements DestinationDefinitionSpecificationApi { private final SchedulerHandler schedulerHandler; @@ -24,6 +29,7 @@ public DestinationDefinitionSpecificationApiController(final SchedulerHandler sc } @Post("/get") + @Secured({AUTHENTICATED_USER}) @Override public DestinationDefinitionSpecificationRead getDestinationDefinitionSpecification(final DestinationDefinitionIdWithWorkspaceId destinationDefinitionIdWithWorkspaceId) { return ApiHelper.execute(() -> schedulerHandler.getDestinationSpecification(destinationDefinitionIdWithWorkspaceId)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationOauthApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationOauthApiController.java index 33318e14efcbc..3d508935a4bd0 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationOauthApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/DestinationOauthApiController.java @@ -4,22 +4,28 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.ADMIN; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; + import io.airbyte.api.generated.DestinationOauthApi; import io.airbyte.api.model.generated.CompleteDestinationOAuthRequest; import io.airbyte.api.model.generated.DestinationOauthConsentRequest; import io.airbyte.api.model.generated.OAuthConsentRead; import io.airbyte.api.model.generated.SetInstancewideDestinationOauthParamsRequestBody; -import io.airbyte.server.handlers.OAuthHandler; +import io.airbyte.commons.server.handlers.OAuthHandler; import io.micronaut.context.annotation.Context; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; import java.util.Map; @Controller("/api/v1/destination_oauths") @Requires(property = "airbyte.deployment-mode", value = "OSS") @Context +@Secured(SecurityRule.IS_AUTHENTICATED) public class DestinationOauthApiController implements DestinationOauthApi { private final OAuthHandler oAuthHandler; @@ -29,18 +35,21 @@ public DestinationOauthApiController(final OAuthHandler oAuthHandler) { } @Post("/complete_oauth") + @Secured({EDITOR}) @Override public Map completeDestinationOAuth(final CompleteDestinationOAuthRequest completeDestinationOAuthRequest) { return ApiHelper.execute(() -> oAuthHandler.completeDestinationOAuth(completeDestinationOAuthRequest)); } @Post("/get_consent_url") + @Secured({EDITOR}) @Override public OAuthConsentRead getDestinationOAuthConsent(final DestinationOauthConsentRequest destinationOauthConsentRequest) { return ApiHelper.execute(() -> oAuthHandler.getDestinationOAuthConsent(destinationOauthConsentRequest)); } @Post("/oauth_params/create") + @Secured({ADMIN}) @Override public void setInstancewideDestinationOauthParams(final SetInstancewideDestinationOauthParamsRequestBody setInstancewideDestinationOauthParamsRequestBody) { ApiHelper.execute(() -> { diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/HealthApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/HealthApiController.java index a5b46d39742b5..de386a5367754 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/HealthApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/HealthApiController.java @@ -6,15 +6,18 @@ import io.airbyte.api.generated.HealthApi; import io.airbyte.api.model.generated.HealthCheckRead; -import io.airbyte.server.handlers.HealthCheckHandler; +import io.airbyte.commons.server.handlers.HealthCheckHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/health") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_ANONYMOUS) public class HealthApiController implements HealthApi { private final HealthCheckHandler healthCheckHandler; diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/JobsApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/JobsApiController.java index f09d331038a24..8ca1195c92f49 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/JobsApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/JobsApiController.java @@ -4,25 +4,34 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.ADMIN; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.JobsApi; import io.airbyte.api.model.generated.AttemptNormalizationStatusReadList; +import io.airbyte.api.model.generated.ConnectionIdRequestBody; import io.airbyte.api.model.generated.JobDebugInfoRead; import io.airbyte.api.model.generated.JobIdRequestBody; import io.airbyte.api.model.generated.JobInfoLightRead; import io.airbyte.api.model.generated.JobInfoRead; import io.airbyte.api.model.generated.JobListRequestBody; +import io.airbyte.api.model.generated.JobOptionalRead; import io.airbyte.api.model.generated.JobReadList; -import io.airbyte.server.handlers.JobHistoryHandler; -import io.airbyte.server.handlers.SchedulerHandler; +import io.airbyte.commons.server.handlers.JobHistoryHandler; +import io.airbyte.commons.server.handlers.SchedulerHandler; import io.micronaut.context.annotation.Context; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/jobs") @Requires(property = "airbyte.deployment-mode", value = "OSS") @Context +@Secured(SecurityRule.IS_AUTHENTICATED) public class JobsApiController implements JobsApi { private final JobHistoryHandler jobHistoryHandler; @@ -34,36 +43,49 @@ public JobsApiController(final JobHistoryHandler jobHistoryHandler, final Schedu } @Post("/cancel") + @Secured({EDITOR}) @Override public JobInfoRead cancelJob(final JobIdRequestBody jobIdRequestBody) { return ApiHelper.execute(() -> schedulerHandler.cancelJob(jobIdRequestBody)); } @Post("/get_normalization_status") + @Secured({ADMIN}) @Override public AttemptNormalizationStatusReadList getAttemptNormalizationStatusesForJob(final JobIdRequestBody jobIdRequestBody) { return ApiHelper.execute(() -> jobHistoryHandler.getAttemptNormalizationStatuses(jobIdRequestBody)); } @Post("/get_debug_info") + @Secured({READER}) @Override public JobDebugInfoRead getJobDebugInfo(final JobIdRequestBody jobIdRequestBody) { return ApiHelper.execute(() -> jobHistoryHandler.getJobDebugInfo(jobIdRequestBody)); } @Post("/get") + @Secured({READER}) @Override public JobInfoRead getJobInfo(final JobIdRequestBody jobIdRequestBody) { return ApiHelper.execute(() -> jobHistoryHandler.getJobInfo(jobIdRequestBody)); } @Post("/get_light") + @Secured({READER}) @Override public JobInfoLightRead getJobInfoLight(final JobIdRequestBody jobIdRequestBody) { return ApiHelper.execute(() -> jobHistoryHandler.getJobInfoLight(jobIdRequestBody)); } + @Post("/get_last_replication_job") + @Secured({READER}) + @Override + public JobOptionalRead getLastReplicationJob(final ConnectionIdRequestBody connectionIdRequestBody) { + return ApiHelper.execute(() -> jobHistoryHandler.getLastReplicationJob(connectionIdRequestBody)); + } + @Post("/list") + @Secured({READER}) @Override public JobReadList listJobsFor(final JobListRequestBody jobListRequestBody) { return ApiHelper.execute(() -> jobHistoryHandler.listJobsFor(jobListRequestBody)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/LogsApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/LogsApiController.java index 126ed82026938..e98749577545b 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/LogsApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/LogsApiController.java @@ -4,19 +4,24 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.ADMIN; + import io.airbyte.api.generated.LogsApi; import io.airbyte.api.model.generated.LogsRequestBody; -import io.airbyte.server.handlers.LogsHandler; +import io.airbyte.commons.server.handlers.LogsHandler; import io.micronaut.context.annotation.Context; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; import java.io.File; @Controller("/api/v1/logs") @Requires(property = "airbyte.deployment-mode", value = "OSS") @Context +@Secured(SecurityRule.IS_AUTHENTICATED) public class LogsApiController implements LogsApi { private final LogsHandler logsHandler; @@ -26,6 +31,7 @@ public LogsApiController(final LogsHandler logsHandler) { } @Post("/get") + @Secured({ADMIN}) @Override public File getLogs(final LogsRequestBody logsRequestBody) { return ApiHelper.execute(() -> logsHandler.getLogs(logsRequestBody)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/NotFoundController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/NotFoundController.java index a59dea440b05e..0a089a21b7629 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/NotFoundController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/NotFoundController.java @@ -11,6 +11,8 @@ import io.micronaut.http.MediaType; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Error; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; /** * Custom controller that handles global 404 responses for unknown/unmapped paths. @@ -18,6 +20,7 @@ @Controller("/api/notfound") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_ANONYMOUS) public class NotFoundController { @Error(status = HttpStatus.NOT_FOUND, diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/NotificationsApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/NotificationsApiController.java index 6af6a1cdf242a..e2cf648e33985 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/NotificationsApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/NotificationsApiController.java @@ -4,18 +4,23 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; + import io.airbyte.api.generated.NotificationsApi; import io.airbyte.api.model.generated.Notification; import io.airbyte.api.model.generated.NotificationRead; -import io.airbyte.server.handlers.WorkspacesHandler; +import io.airbyte.commons.server.handlers.WorkspacesHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/notifications/try") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class NotificationsApiController implements NotificationsApi { private final WorkspacesHandler workspacesHandler; @@ -25,6 +30,7 @@ public NotificationsApiController(final WorkspacesHandler workspacesHandler) { } @Post + @Secured({AUTHENTICATED_USER}) @Override public NotificationRead tryNotificationConfig(@Body final Notification notification) { return ApiHelper.execute(() -> workspacesHandler.tryNotification(notification)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/OpenapiApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/OpenapiApiController.java index 3aa984d7b2c7e..0f1754d014921 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/OpenapiApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/OpenapiApiController.java @@ -4,16 +4,21 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; + import io.airbyte.api.generated.OpenapiApi; -import io.airbyte.server.handlers.OpenApiConfigHandler; +import io.airbyte.commons.server.handlers.OpenApiConfigHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Get; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; import java.io.File; @Controller("/api/v1/openapi") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class OpenapiApiController implements OpenapiApi { private final OpenApiConfigHandler openApiConfigHandler; @@ -23,6 +28,7 @@ public OpenapiApiController(final OpenApiConfigHandler openApiConfigHandler) { } @Get(produces = "text/plain") + @Secured({AUTHENTICATED_USER}) @Override public File getOpenApiSpec() { return ApiHelper.execute(openApiConfigHandler::getFile); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/OperationApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/OperationApiController.java index a892ca03d47b2..73e19c1848052 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/OperationApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/OperationApiController.java @@ -4,6 +4,10 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.OperationApi; import io.airbyte.api.model.generated.CheckOperationRead; import io.airbyte.api.model.generated.ConnectionIdRequestBody; @@ -13,15 +17,20 @@ import io.airbyte.api.model.generated.OperationReadList; import io.airbyte.api.model.generated.OperationUpdate; import io.airbyte.api.model.generated.OperatorConfiguration; -import io.airbyte.server.handlers.OperationsHandler; +import io.airbyte.commons.server.handlers.OperationsHandler; import io.micronaut.context.annotation.Requires; +import io.micronaut.http.HttpStatus; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.http.annotation.Status; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/operations") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class OperationApiController implements OperationApi { private final OperationsHandler operationsHandler; @@ -31,6 +40,7 @@ public OperationApiController(final OperationsHandler operationsHandler) { } @Post("/check") + @Secured({AUTHENTICATED_USER}) @Override public CheckOperationRead checkOperation(@Body final OperatorConfiguration operatorConfiguration) { return ApiHelper.execute(() -> operationsHandler.checkOperation(operatorConfiguration)); @@ -38,12 +48,15 @@ public CheckOperationRead checkOperation(@Body final OperatorConfiguration opera @Post("/create") @Override + @Secured({EDITOR}) public OperationRead createOperation(@Body final OperationCreate operationCreate) { return ApiHelper.execute(() -> operationsHandler.createOperation(operationCreate)); } @Post("/delete") + @Secured({EDITOR}) @Override + @Status(HttpStatus.NO_CONTENT) public void deleteOperation(@Body final OperationIdRequestBody operationIdRequestBody) { ApiHelper.execute(() -> { operationsHandler.deleteOperation(operationIdRequestBody); @@ -52,18 +65,21 @@ public void deleteOperation(@Body final OperationIdRequestBody operationIdReques } @Post("/get") + @Secured({READER}) @Override public OperationRead getOperation(@Body final OperationIdRequestBody operationIdRequestBody) { return ApiHelper.execute(() -> operationsHandler.getOperation(operationIdRequestBody)); } @Post("/list") + @Secured({READER}) @Override public OperationReadList listOperationsForConnection(@Body final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> operationsHandler.listOperationsForConnection(connectionIdRequestBody)); } @Post("/update") + @Secured({EDITOR}) @Override public OperationRead updateOperation(@Body final OperationUpdate operationUpdate) { return ApiHelper.execute(() -> operationsHandler.updateOperation(operationUpdate)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/SchedulerApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/SchedulerApiController.java index 53019774aeca0..4799406c8a42a 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/SchedulerApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/SchedulerApiController.java @@ -4,19 +4,25 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; + import io.airbyte.api.generated.SchedulerApi; import io.airbyte.api.model.generated.CheckConnectionRead; import io.airbyte.api.model.generated.DestinationCoreConfig; import io.airbyte.api.model.generated.SourceCoreConfig; import io.airbyte.api.model.generated.SourceDiscoverSchemaRead; -import io.airbyte.server.handlers.SchedulerHandler; +import io.airbyte.commons.server.handlers.SchedulerHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/scheduler") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class SchedulerApiController implements SchedulerApi { private final SchedulerHandler schedulerHandler; @@ -26,18 +32,21 @@ public SchedulerApiController(final SchedulerHandler schedulerHandler) { } @Post("/destinations/check_connection") + @Secured({AUTHENTICATED_USER}) @Override public CheckConnectionRead executeDestinationCheckConnection(final DestinationCoreConfig destinationCoreConfig) { return ApiHelper.execute(() -> schedulerHandler.checkDestinationConnectionFromDestinationCreate(destinationCoreConfig)); } @Post("/sources/check_connection") + @Secured({AUTHENTICATED_USER}) @Override public CheckConnectionRead executeSourceCheckConnection(final SourceCoreConfig sourceCoreConfig) { return ApiHelper.execute(() -> schedulerHandler.checkSourceConnectionFromSourceCreate(sourceCoreConfig)); } @Post("/sources/discover_schema") + @Secured({EDITOR}) @Override public SourceDiscoverSchemaRead executeSourceDiscoverSchema(final SourceCoreConfig sourceCoreConfig) { return ApiHelper.execute(() -> schedulerHandler.discoverSchemaForSourceFromSourceCreate(sourceCoreConfig)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/SourceApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/SourceApiController.java index 64cf7c58dfd62..12efa77023167 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/SourceApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/SourceApiController.java @@ -4,28 +4,38 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.SourceApi; import io.airbyte.api.model.generated.ActorCatalogWithUpdatedAt; import io.airbyte.api.model.generated.CheckConnectionRead; +import io.airbyte.api.model.generated.DiscoverCatalogResult; import io.airbyte.api.model.generated.SourceCloneRequestBody; import io.airbyte.api.model.generated.SourceCreate; import io.airbyte.api.model.generated.SourceDiscoverSchemaRead; import io.airbyte.api.model.generated.SourceDiscoverSchemaRequestBody; +import io.airbyte.api.model.generated.SourceDiscoverSchemaWriteRequestBody; import io.airbyte.api.model.generated.SourceIdRequestBody; import io.airbyte.api.model.generated.SourceRead; import io.airbyte.api.model.generated.SourceReadList; import io.airbyte.api.model.generated.SourceSearch; import io.airbyte.api.model.generated.SourceUpdate; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; -import io.airbyte.server.handlers.SchedulerHandler; -import io.airbyte.server.handlers.SourceHandler; +import io.airbyte.commons.server.handlers.SchedulerHandler; +import io.airbyte.commons.server.handlers.SourceHandler; import io.micronaut.context.annotation.Requires; +import io.micronaut.http.HttpStatus; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.http.annotation.Status; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/sources") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class SourceApiController implements SourceApi { private final SchedulerHandler schedulerHandler; @@ -37,12 +47,14 @@ public SourceApiController(final SchedulerHandler schedulerHandler, final Source } @Post("/check_connection") + @Secured({EDITOR}) @Override public CheckConnectionRead checkConnectionToSource(final SourceIdRequestBody sourceIdRequestBody) { return ApiHelper.execute(() -> schedulerHandler.checkSourceConnectionFromSourceId(sourceIdRequestBody)); } @Post("/check_connection_for_update") + @Secured({EDITOR}) @Override public CheckConnectionRead checkConnectionToSourceForUpdate(final SourceUpdate sourceUpdate) { return ApiHelper.execute(() -> schedulerHandler.checkSourceConnectionFromSourceIdForUpdate(sourceUpdate)); @@ -55,13 +67,16 @@ public SourceRead cloneSource(final SourceCloneRequestBody sourceCloneRequestBod } @Post("/create") + @Secured({EDITOR}) @Override public SourceRead createSource(final SourceCreate sourceCreate) { return ApiHelper.execute(() -> sourceHandler.createSource(sourceCreate)); } @Post("/delete") + @Secured({EDITOR}) @Override + @Status(HttpStatus.NO_CONTENT) public void deleteSource(final SourceIdRequestBody sourceIdRequestBody) { ApiHelper.execute(() -> { sourceHandler.deleteSource(sourceIdRequestBody); @@ -70,24 +85,28 @@ public void deleteSource(final SourceIdRequestBody sourceIdRequestBody) { } @Post("/discover_schema") + @Secured({EDITOR}) @Override public SourceDiscoverSchemaRead discoverSchemaForSource(final SourceDiscoverSchemaRequestBody sourceDiscoverSchemaRequestBody) { return ApiHelper.execute(() -> schedulerHandler.discoverSchemaForSourceFromSourceId(sourceDiscoverSchemaRequestBody)); } @Post("/get") + @Secured({READER}) @Override public SourceRead getSource(final SourceIdRequestBody sourceIdRequestBody) { return ApiHelper.execute(() -> sourceHandler.getSource(sourceIdRequestBody)); } @Post("/most_recent_source_actor_catalog") + @Secured({READER}) @Override public ActorCatalogWithUpdatedAt getMostRecentSourceActorCatalog(final SourceIdRequestBody sourceIdRequestBody) { return ApiHelper.execute(() -> sourceHandler.getMostRecentSourceActorCatalogWithUpdatedAt(sourceIdRequestBody)); } @Post("/list") + @Secured({READER}) @Override public SourceReadList listSourcesForWorkspace(final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> sourceHandler.listSourcesForWorkspace(workspaceIdRequestBody)); @@ -100,9 +119,16 @@ public SourceReadList searchSources(final SourceSearch sourceSearch) { } @Post("/update") + @Secured({EDITOR}) @Override public SourceRead updateSource(final SourceUpdate sourceUpdate) { return ApiHelper.execute(() -> sourceHandler.updateSource(sourceUpdate)); } + @Post("/write_discover_catalog_result") + @Override + public DiscoverCatalogResult writeDiscoverCatalogResult(final SourceDiscoverSchemaWriteRequestBody request) { + return ApiHelper.execute(() -> sourceHandler.writeDiscoverCatalogResult(request)); + } + } diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/SourceDefinitionApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/SourceDefinitionApiController.java index 71222c7873c22..ef7004105e5b0 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/SourceDefinitionApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/SourceDefinitionApiController.java @@ -4,6 +4,11 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.ADMIN; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.SourceDefinitionApi; import io.airbyte.api.model.generated.CustomSourceDefinitionCreate; import io.airbyte.api.model.generated.PrivateSourceDefinitionRead; @@ -14,16 +19,21 @@ import io.airbyte.api.model.generated.SourceDefinitionReadList; import io.airbyte.api.model.generated.SourceDefinitionUpdate; import io.airbyte.api.model.generated.WorkspaceIdRequestBody; -import io.airbyte.server.handlers.SourceDefinitionsHandler; +import io.airbyte.commons.server.handlers.SourceDefinitionsHandler; import io.micronaut.context.annotation.Context; import io.micronaut.context.annotation.Requires; +import io.micronaut.http.HttpStatus; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.http.annotation.Status; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/source_definitions") @Requires(property = "airbyte.deployment-mode", value = "OSS") @Context +@Secured(SecurityRule.IS_AUTHENTICATED) public class SourceDefinitionApiController implements SourceDefinitionApi { private final SourceDefinitionsHandler sourceDefinitionsHandler; @@ -33,13 +43,16 @@ public SourceDefinitionApiController(final SourceDefinitionsHandler sourceDefini } @Post("/create_custom") + @Secured({EDITOR}) @Override public SourceDefinitionRead createCustomSourceDefinition(final CustomSourceDefinitionCreate customSourceDefinitionCreate) { return ApiHelper.execute(() -> sourceDefinitionsHandler.createCustomSourceDefinition(customSourceDefinitionCreate)); } @Post("/delete") + @Secured({ADMIN}) @Override + @Status(HttpStatus.NO_CONTENT) public void deleteSourceDefinition(final SourceDefinitionIdRequestBody sourceDefinitionIdRequestBody) { ApiHelper.execute(() -> { sourceDefinitionsHandler.deleteSourceDefinition(sourceDefinitionIdRequestBody); @@ -48,49 +61,58 @@ public void deleteSourceDefinition(final SourceDefinitionIdRequestBody sourceDef } @Post("/get") + @Secured({AUTHENTICATED_USER}) @Override public SourceDefinitionRead getSourceDefinition(final SourceDefinitionIdRequestBody sourceDefinitionIdRequestBody) { return ApiHelper.execute(() -> sourceDefinitionsHandler.getSourceDefinition(sourceDefinitionIdRequestBody)); } @Post("/get_for_workspace") + @Secured({READER}) @Override public SourceDefinitionRead getSourceDefinitionForWorkspace(final SourceDefinitionIdWithWorkspaceId sourceDefinitionIdWithWorkspaceId) { return ApiHelper.execute(() -> sourceDefinitionsHandler.getSourceDefinitionForWorkspace(sourceDefinitionIdWithWorkspaceId)); } @Post("/grant_definition") + @Secured({ADMIN}) @Override public PrivateSourceDefinitionRead grantSourceDefinitionToWorkspace(final SourceDefinitionIdWithWorkspaceId sourceDefinitionIdWithWorkspaceId) { return ApiHelper.execute(() -> sourceDefinitionsHandler.grantSourceDefinitionToWorkspace(sourceDefinitionIdWithWorkspaceId)); } @Post("/list_latest") + @Secured({AUTHENTICATED_USER}) @Override public SourceDefinitionReadList listLatestSourceDefinitions() { return ApiHelper.execute(sourceDefinitionsHandler::listLatestSourceDefinitions); } @Post("/list_private") + @Secured({ADMIN}) @Override public PrivateSourceDefinitionReadList listPrivateSourceDefinitions(final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> sourceDefinitionsHandler.listPrivateSourceDefinitions(workspaceIdRequestBody)); } @Post("/list") + @Secured({AUTHENTICATED_USER}) @Override public SourceDefinitionReadList listSourceDefinitions() { return ApiHelper.execute(sourceDefinitionsHandler::listSourceDefinitions); } @Post("/list_for_workspace") + @Secured({READER}) @Override public SourceDefinitionReadList listSourceDefinitionsForWorkspace(final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> sourceDefinitionsHandler.listSourceDefinitionsForWorkspace(workspaceIdRequestBody)); } @Post("/revoke_definition") + @Secured({ADMIN}) @Override + @Status(HttpStatus.NO_CONTENT) public void revokeSourceDefinitionFromWorkspace(final SourceDefinitionIdWithWorkspaceId sourceDefinitionIdWithWorkspaceId) { ApiHelper.execute(() -> { sourceDefinitionsHandler.revokeSourceDefinitionFromWorkspace(sourceDefinitionIdWithWorkspaceId); @@ -99,6 +121,7 @@ public void revokeSourceDefinitionFromWorkspace(final SourceDefinitionIdWithWork } @Post("/update") + @Secured({AUTHENTICATED_USER}) @Override public SourceDefinitionRead updateSourceDefinition(final SourceDefinitionUpdate sourceDefinitionUpdate) { return ApiHelper.execute(() -> sourceDefinitionsHandler.updateSourceDefinition(sourceDefinitionUpdate)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/SourceDefinitionSpecificationApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/SourceDefinitionSpecificationApiController.java index 590f7340b61bf..2e094bc3f7058 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/SourceDefinitionSpecificationApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/SourceDefinitionSpecificationApiController.java @@ -4,17 +4,22 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; + import io.airbyte.api.generated.SourceDefinitionSpecificationApi; import io.airbyte.api.model.generated.SourceDefinitionIdWithWorkspaceId; import io.airbyte.api.model.generated.SourceDefinitionSpecificationRead; -import io.airbyte.server.handlers.SchedulerHandler; +import io.airbyte.commons.server.handlers.SchedulerHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/source_definition_specifications") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class SourceDefinitionSpecificationApiController implements SourceDefinitionSpecificationApi { private final SchedulerHandler schedulerHandler; @@ -24,6 +29,7 @@ public SourceDefinitionSpecificationApiController(final SchedulerHandler schedul } @Post("/get") + @Secured({AUTHENTICATED_USER}) @Override public SourceDefinitionSpecificationRead getSourceDefinitionSpecification(final SourceDefinitionIdWithWorkspaceId sourceDefinitionIdWithWorkspaceId) { return ApiHelper.execute(() -> schedulerHandler.getSourceDefinitionSpecification(sourceDefinitionIdWithWorkspaceId)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/SourceOauthApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/SourceOauthApiController.java index 2bba632cf6386..785c41519bf50 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/SourceOauthApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/SourceOauthApiController.java @@ -4,21 +4,27 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.ADMIN; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; + import io.airbyte.api.generated.SourceOauthApi; import io.airbyte.api.model.generated.CompleteSourceOauthRequest; import io.airbyte.api.model.generated.OAuthConsentRead; import io.airbyte.api.model.generated.SetInstancewideSourceOauthParamsRequestBody; import io.airbyte.api.model.generated.SourceOauthConsentRequest; -import io.airbyte.server.handlers.OAuthHandler; +import io.airbyte.commons.server.handlers.OAuthHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; import java.util.Map; @Controller("/api/v1/source_oauths") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class SourceOauthApiController implements SourceOauthApi { private final OAuthHandler oAuthHandler; @@ -28,18 +34,21 @@ public SourceOauthApiController(final OAuthHandler oAuthHandler) { } @Post("/complete_oauth") + @Secured({EDITOR}) @Override public Map completeSourceOAuth(@Body final CompleteSourceOauthRequest completeSourceOauthRequest) { return ApiHelper.execute(() -> oAuthHandler.completeSourceOAuth(completeSourceOauthRequest)); } @Post("/get_consent_url") + @Secured({EDITOR}) @Override public OAuthConsentRead getSourceOAuthConsent(@Body final SourceOauthConsentRequest sourceOauthConsentRequest) { return ApiHelper.execute(() -> oAuthHandler.getSourceOAuthConsent(sourceOauthConsentRequest)); } @Post("/oauth_params/create") + @Secured({ADMIN}) @Override public void setInstancewideSourceOauthParams(@Body final SetInstancewideSourceOauthParamsRequestBody setInstancewideSourceOauthParamsRequestBody) { ApiHelper.execute(() -> { diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/StateApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/StateApiController.java index b1b62373aaa1c..02b1941e5bd8e 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/StateApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/StateApiController.java @@ -4,18 +4,24 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.ADMIN; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.StateApi; import io.airbyte.api.model.generated.ConnectionIdRequestBody; import io.airbyte.api.model.generated.ConnectionState; import io.airbyte.api.model.generated.ConnectionStateCreateOrUpdate; -import io.airbyte.server.handlers.StateHandler; +import io.airbyte.commons.server.handlers.StateHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/state") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class StateApiController implements StateApi { private final StateHandler stateHandler; @@ -25,12 +31,14 @@ public StateApiController(final StateHandler stateHandler) { } @Post("/create_or_update") + @Secured({ADMIN}) @Override public ConnectionState createOrUpdateState(final ConnectionStateCreateOrUpdate connectionStateCreateOrUpdate) { return ApiHelper.execute(() -> stateHandler.createOrUpdateState(connectionStateCreateOrUpdate)); } @Post("/get") + @Secured({READER}) @Override public ConnectionState getState(final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> stateHandler.getState(connectionIdRequestBody)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/WebBackendApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/WebBackendApiController.java index ac13e02015c1b..b5c515e37f93d 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/WebBackendApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/WebBackendApiController.java @@ -4,6 +4,10 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; +import static io.airbyte.commons.auth.AuthRoleConstants.EDITOR; +import static io.airbyte.commons.auth.AuthRoleConstants.READER; + import io.airbyte.api.generated.WebBackendApi; import io.airbyte.api.model.generated.ConnectionIdRequestBody; import io.airbyte.api.model.generated.ConnectionStateType; @@ -17,16 +21,19 @@ import io.airbyte.api.model.generated.WebBackendGeographiesListResult; import io.airbyte.api.model.generated.WebBackendWorkspaceState; import io.airbyte.api.model.generated.WebBackendWorkspaceStateResult; -import io.airbyte.server.handlers.WebBackendCheckUpdatesHandler; -import io.airbyte.server.handlers.WebBackendConnectionsHandler; -import io.airbyte.server.handlers.WebBackendGeographiesHandler; +import io.airbyte.commons.server.handlers.WebBackendCheckUpdatesHandler; +import io.airbyte.commons.server.handlers.WebBackendConnectionsHandler; +import io.airbyte.commons.server.handlers.WebBackendGeographiesHandler; import io.micronaut.context.annotation.Requires; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/web_backend") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) public class WebBackendApiController implements WebBackendApi { private final WebBackendConnectionsHandler webBackendConnectionsHandler; @@ -42,48 +49,56 @@ public WebBackendApiController(final WebBackendConnectionsHandler webBackendConn } @Post("/state/get_type") + @Secured({READER}) @Override public ConnectionStateType getStateType(final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> webBackendConnectionsHandler.getStateType(connectionIdRequestBody)); } @Post("/check_updates") + @Secured({READER}) @Override public WebBackendCheckUpdatesRead webBackendCheckUpdates() { return ApiHelper.execute(webBackendCheckUpdatesHandler::checkUpdates); } @Post("/connections/create") + @Secured({EDITOR}) @Override public WebBackendConnectionRead webBackendCreateConnection(final WebBackendConnectionCreate webBackendConnectionCreate) { return ApiHelper.execute(() -> webBackendConnectionsHandler.webBackendCreateConnection(webBackendConnectionCreate)); } @Post("/connections/get") + @Secured({READER}) @Override public WebBackendConnectionRead webBackendGetConnection(final WebBackendConnectionRequestBody webBackendConnectionRequestBody) { return ApiHelper.execute(() -> webBackendConnectionsHandler.webBackendGetConnection(webBackendConnectionRequestBody)); } @Post("/workspace/state") + @Secured({READER}) @Override public WebBackendWorkspaceStateResult webBackendGetWorkspaceState(final WebBackendWorkspaceState webBackendWorkspaceState) { return ApiHelper.execute(() -> webBackendConnectionsHandler.getWorkspaceState(webBackendWorkspaceState)); } @Post("/connections/list") + @Secured({READER}) @Override public WebBackendConnectionReadList webBackendListConnectionsForWorkspace(final WebBackendConnectionListRequestBody webBackendConnectionListRequestBody) { return ApiHelper.execute(() -> webBackendConnectionsHandler.webBackendListConnectionsForWorkspace(webBackendConnectionListRequestBody)); } @Post("/geographies/list") + @Secured({AUTHENTICATED_USER}) @Override public WebBackendGeographiesListResult webBackendListGeographies() { return ApiHelper.execute(webBackendGeographiesHandler::listGeographiesOSS); } @Post("/connections/update") + @Secured({EDITOR}) @Override public WebBackendConnectionRead webBackendUpdateConnection(final WebBackendConnectionUpdate webBackendConnectionUpdate) { return ApiHelper.execute(() -> webBackendConnectionsHandler.webBackendUpdateConnection(webBackendConnectionUpdate)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/apis/WorkspaceApiController.java b/airbyte-server/src/main/java/io/airbyte/server/apis/WorkspaceApiController.java index 14d3fdc90ad8d..5bc66adb7ffd0 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/apis/WorkspaceApiController.java +++ b/airbyte-server/src/main/java/io/airbyte/server/apis/WorkspaceApiController.java @@ -4,6 +4,9 @@ package io.airbyte.server.apis; +import static io.airbyte.commons.auth.AuthRoleConstants.AUTHENTICATED_USER; +import static io.airbyte.commons.auth.AuthRoleConstants.OWNER; + import io.airbyte.api.generated.WorkspaceApi; import io.airbyte.api.model.generated.ConnectionIdRequestBody; import io.airbyte.api.model.generated.SlugRequestBody; @@ -14,15 +17,21 @@ import io.airbyte.api.model.generated.WorkspaceReadList; import io.airbyte.api.model.generated.WorkspaceUpdate; import io.airbyte.api.model.generated.WorkspaceUpdateName; -import io.airbyte.server.handlers.WorkspacesHandler; +import io.airbyte.commons.server.handlers.WorkspacesHandler; import io.micronaut.context.annotation.Requires; +import io.micronaut.http.HttpStatus; import io.micronaut.http.annotation.Body; import io.micronaut.http.annotation.Controller; import io.micronaut.http.annotation.Post; +import io.micronaut.http.annotation.Status; +import io.micronaut.security.annotation.Secured; +import io.micronaut.security.rules.SecurityRule; @Controller("/api/v1/workspaces") @Requires(property = "airbyte.deployment-mode", value = "OSS") +@Secured(SecurityRule.IS_AUTHENTICATED) +@SuppressWarnings("PMD.AvoidDuplicateLiterals") public class WorkspaceApiController implements WorkspaceApi { private final WorkspacesHandler workspacesHandler; @@ -32,13 +41,16 @@ public WorkspaceApiController(final WorkspacesHandler workspacesHandler) { } @Post("/create") + @Secured({AUTHENTICATED_USER}) @Override public WorkspaceRead createWorkspace(@Body final WorkspaceCreate workspaceCreate) { return ApiHelper.execute(() -> workspacesHandler.createWorkspace(workspaceCreate)); } @Post("/delete") + @Secured({OWNER}) @Override + @Status(HttpStatus.NO_CONTENT) public void deleteWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) { ApiHelper.execute(() -> { workspacesHandler.deleteWorkspace(workspaceIdRequestBody); @@ -47,30 +59,35 @@ public void deleteWorkspace(@Body final WorkspaceIdRequestBody workspaceIdReques } @Post("/get") + @Secured({OWNER}) @Override public WorkspaceRead getWorkspace(@Body final WorkspaceIdRequestBody workspaceIdRequestBody) { return ApiHelper.execute(() -> workspacesHandler.getWorkspace(workspaceIdRequestBody)); } @Post("/get_by_slug") + @Secured({OWNER}) @Override public WorkspaceRead getWorkspaceBySlug(@Body final SlugRequestBody slugRequestBody) { return ApiHelper.execute(() -> workspacesHandler.getWorkspaceBySlug(slugRequestBody)); } @Post("/list") + @Secured({AUTHENTICATED_USER}) @Override public WorkspaceReadList listWorkspaces() { return ApiHelper.execute(workspacesHandler::listWorkspaces); } @Post("/update") + @Secured({OWNER}) @Override public WorkspaceRead updateWorkspace(@Body final WorkspaceUpdate workspaceUpdate) { return ApiHelper.execute(() -> workspacesHandler.updateWorkspace(workspaceUpdate)); } @Post("/tag_feedback_status_as_done") + @Secured({OWNER}) @Override public void updateWorkspaceFeedback(@Body final WorkspaceGiveFeedback workspaceGiveFeedback) { ApiHelper.execute(() -> { @@ -80,12 +97,14 @@ public void updateWorkspaceFeedback(@Body final WorkspaceGiveFeedback workspaceG } @Post("/update_name") + @Secured({OWNER}) @Override public WorkspaceRead updateWorkspaceName(@Body final WorkspaceUpdateName workspaceUpdateName) { return ApiHelper.execute(() -> workspacesHandler.updateWorkspaceName(workspaceUpdateName)); } @Post("/get_by_connection_id") + @Secured({AUTHENTICATED_USER}) @Override public WorkspaceRead getWorkspaceByConnectionId(@Body final ConnectionIdRequestBody connectionIdRequestBody) { return ApiHelper.execute(() -> workspacesHandler.getWorkspaceByConnectionId(connectionIdRequestBody)); diff --git a/airbyte-server/src/main/java/io/airbyte/server/config/ApplicationBeanFactory.java b/airbyte-server/src/main/java/io/airbyte/server/config/ApplicationBeanFactory.java index 13111f657156b..e21046c46c687 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/config/ApplicationBeanFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/config/ApplicationBeanFactory.java @@ -7,6 +7,9 @@ import io.airbyte.analytics.TrackingClient; import io.airbyte.commons.features.EnvVariableFeatureFlags; import io.airbyte.commons.features.FeatureFlags; +import io.airbyte.commons.server.scheduler.EventRunner; +import io.airbyte.commons.server.scheduler.TemporalEventRunner; +import io.airbyte.commons.server.services.AirbyteGithubStore; import io.airbyte.commons.temporal.TemporalClient; import io.airbyte.commons.version.AirbyteProtocolVersionRange; import io.airbyte.commons.version.AirbyteVersion; @@ -18,9 +21,6 @@ import io.airbyte.persistence.job.JobPersistence; import io.airbyte.persistence.job.WebUrlHelper; import io.airbyte.persistence.job.tracker.JobTracker; -import io.airbyte.server.scheduler.EventRunner; -import io.airbyte.server.scheduler.TemporalEventRunner; -import io.airbyte.server.services.AirbyteGithubStore; import io.airbyte.validation.json.JsonSchemaValidator; import io.micronaut.context.annotation.Factory; import io.micronaut.context.annotation.Value; diff --git a/airbyte-server/src/main/java/io/airbyte/server/config/TemporalBeanFactory.java b/airbyte-server/src/main/java/io/airbyte/server/config/TemporalBeanFactory.java index 069a3853193f7..f3dd40c530af8 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/config/TemporalBeanFactory.java +++ b/airbyte-server/src/main/java/io/airbyte/server/config/TemporalBeanFactory.java @@ -7,6 +7,8 @@ import io.airbyte.analytics.Deployment; import io.airbyte.analytics.TrackingClient; import io.airbyte.analytics.TrackingClientSingleton; +import io.airbyte.commons.server.scheduler.DefaultSynchronousSchedulerClient; +import io.airbyte.commons.server.scheduler.SynchronousSchedulerClient; import io.airbyte.commons.temporal.TemporalClient; import io.airbyte.commons.version.AirbyteVersion; import io.airbyte.config.Configs.DeploymentMode; @@ -17,8 +19,6 @@ import io.airbyte.persistence.job.errorreporter.JobErrorReporter; import io.airbyte.persistence.job.factory.OAuthConfigSupplier; import io.airbyte.persistence.job.tracker.JobTracker; -import io.airbyte.server.scheduler.DefaultSynchronousSchedulerClient; -import io.airbyte.server.scheduler.SynchronousSchedulerClient; import io.micronaut.context.annotation.Factory; import io.micronaut.context.annotation.Value; import jakarta.inject.Singleton; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidInputExceptionHandler.java b/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidInputExceptionHandler.java index 6cdc923e3ebfc..77d11239d1d58 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidInputExceptionHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidInputExceptionHandler.java @@ -4,9 +4,8 @@ package io.airbyte.server.errors; -import io.airbyte.api.model.generated.InvalidInputExceptionInfo; -import io.airbyte.api.model.generated.InvalidInputProperty; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.errors.InvalidInputExceptionMapper; import io.micronaut.context.annotation.Requires; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; @@ -15,11 +14,7 @@ import io.micronaut.http.annotation.Produces; import io.micronaut.http.server.exceptions.ExceptionHandler; import jakarta.inject.Singleton; -import java.util.ArrayList; -import java.util.List; -import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolationException; -import org.apache.logging.log4j.core.util.Throwables; // https://www.baeldung.com/jersey-bean-validation#custom-exception-handler // handles exceptions related to the request body not matching the openapi config. @@ -28,27 +23,10 @@ @Requires(classes = ConstraintViolationException.class) public class InvalidInputExceptionHandler implements ExceptionHandler { - public static InvalidInputExceptionInfo infoFromConstraints(final ConstraintViolationException cve) { - final InvalidInputExceptionInfo exceptionInfo = new InvalidInputExceptionInfo() - .exceptionClassName(cve.getClass().getName()) - .message("Some properties contained invalid input.") - .exceptionStack(Throwables.toStringList(cve)); - - final List props = new ArrayList(); - for (final ConstraintViolation cv : cve.getConstraintViolations()) { - props.add(new InvalidInputProperty() - .propertyPath(cv.getPropertyPath().toString()) - .message(cv.getMessage()) - .invalidValue(cv.getInvalidValue() != null ? cv.getInvalidValue().toString() : "null")); - } - exceptionInfo.validationErrors(props); - return exceptionInfo; - } - @Override public HttpResponse handle(final HttpRequest request, final ConstraintViolationException exception) { return HttpResponse.status(HttpStatus.BAD_REQUEST) - .body(Jsons.serialize(InvalidInputExceptionHandler.infoFromConstraints(exception))) + .body(Jsons.serialize(InvalidInputExceptionMapper.infoFromConstraints(exception))) .contentType(MediaType.APPLICATION_JSON_TYPE); } diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidInputExceptionMapper.java b/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidInputExceptionMapper.java deleted file mode 100644 index 4fe9b202265cb..0000000000000 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidInputExceptionMapper.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright (c) 2022 Airbyte, Inc., all rights reserved. - */ - -package io.airbyte.server.errors; - -import io.airbyte.commons.json.Jsons; -import javax.validation.ConstraintViolationException; -import javax.ws.rs.core.Response; -import javax.ws.rs.ext.ExceptionMapper; -import javax.ws.rs.ext.Provider; - -@Provider -public class InvalidInputExceptionMapper implements ExceptionMapper { - - @Override - public Response toResponse(final ConstraintViolationException e) { - return Response.status(Response.Status.BAD_REQUEST) - .entity(Jsons.serialize(InvalidInputExceptionHandler.infoFromConstraints(e))) - .type("application/json") - .build(); - } - -} diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonExceptionHandler.java b/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonExceptionHandler.java index ee7a3e57a2e97..e8aa3ceefb984 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonExceptionHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonExceptionHandler.java @@ -5,6 +5,7 @@ package io.airbyte.server.errors; import com.fasterxml.jackson.core.JsonParseException; +import io.airbyte.commons.server.errors.KnownException; import io.micronaut.context.annotation.Requires; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonInputExceptionHandler.java b/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonInputExceptionHandler.java index fe5f7abaa4b89..ebb9a5158667b 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonInputExceptionHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/errors/InvalidJsonInputExceptionHandler.java @@ -5,6 +5,7 @@ package io.airbyte.server.errors; import com.fasterxml.jackson.databind.JsonMappingException; +import io.airbyte.commons.server.errors.KnownException; import io.micronaut.context.annotation.Requires; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/KnownExceptionHandler.java b/airbyte-server/src/main/java/io/airbyte/server/errors/KnownExceptionHandler.java index 4b928ded59266..1d4b932fe00ab 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/KnownExceptionHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/errors/KnownExceptionHandler.java @@ -5,6 +5,7 @@ package io.airbyte.server.errors; import io.airbyte.commons.json.Jsons; +import io.airbyte.commons.server.errors.KnownException; import io.micronaut.context.annotation.Requires; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/NotFoundExceptionHandler.java b/airbyte-server/src/main/java/io/airbyte/server/errors/NotFoundExceptionHandler.java index 86d83a33bdb18..e522fea2c78bf 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/NotFoundExceptionHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/errors/NotFoundExceptionHandler.java @@ -4,6 +4,8 @@ package io.airbyte.server.errors; +import io.airbyte.commons.server.errors.IdNotFoundKnownException; +import io.airbyte.commons.server.errors.KnownException; import io.micronaut.context.annotation.Requires; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; diff --git a/airbyte-server/src/main/java/io/airbyte/server/errors/UncaughtExceptionHandler.java b/airbyte-server/src/main/java/io/airbyte/server/errors/UncaughtExceptionHandler.java index afaf26bd4842b..00b032d524ec0 100644 --- a/airbyte-server/src/main/java/io/airbyte/server/errors/UncaughtExceptionHandler.java +++ b/airbyte-server/src/main/java/io/airbyte/server/errors/UncaughtExceptionHandler.java @@ -4,6 +4,7 @@ package io.airbyte.server.errors; +import io.airbyte.commons.server.errors.KnownException; import io.micronaut.context.annotation.Requires; import io.micronaut.http.HttpRequest; import io.micronaut.http.HttpResponse; diff --git a/airbyte-server/src/main/resources/application.yml b/airbyte-server/src/main/resources/application.yml index 3c4ebd3a862f9..1c58a63ef5466 100644 --- a/airbyte-server/src/main/resources/application.yml +++ b/airbyte-server/src/main/resources/application.yml @@ -2,23 +2,16 @@ micronaut: application: name: airbyte-server security: - intercept-url-map: - - pattern: /** - httpMethod: GET - access: - - isAnonymous() - - pattern: /** - httpMethod: POST - access: - - isAnonymous() - - pattern: /** - httpMethod: HEAD - access: - - isAnonymous() + authentication-provider-strategy: ALL + enabled: ${API_AUTHORIZATION_ENABLED:false} server: port: 8001 cors: enabled: true + configurations: + web: + allowedOrigins: + - ^.*$ airbyte: cloud: storage: @@ -114,6 +107,32 @@ datasources: username: ${DATABASE_USER} password: ${DATABASE_PASSWORD} +endpoints: + beans: + enabled: true + sensitive: false + env: + enabled: true + sensitive: false + health: + enabled: true + sensitive: false + info: + enabled: true + sensitive: true + loggers: + enabled: true + sensitive: true + refresh: + enabled: false + sensitive: true + routes: + enabled: true + sensitive: false + threaddump: + enabled: true + sensitive: true + flyway: enabled: true datasources: @@ -134,3 +153,10 @@ jooq: jobs: jackson-converter-enabled: true sql-dialect: POSTGRES + +logger: + levels: + # Uncomment to help resolve issues with conditional beans + # io.micronaut.context.condition: DEBUG + # Uncomment to help resolve issues with security beans + # io.micronaut.security: DEBUG diff --git a/airbyte-server/src/test/java/io/airbyte/server/apis/HealthCheckApiTest.java b/airbyte-server/src/test/java/io/airbyte/server/apis/HealthCheckApiTest.java index cc4f5d814e35e..eb9f258eb1782 100644 --- a/airbyte-server/src/test/java/io/airbyte/server/apis/HealthCheckApiTest.java +++ b/airbyte-server/src/test/java/io/airbyte/server/apis/HealthCheckApiTest.java @@ -9,7 +9,7 @@ import static org.mockito.Mockito.when; import io.airbyte.api.model.generated.HealthCheckRead; -import io.airbyte.server.handlers.HealthCheckHandler; +import io.airbyte.commons.server.handlers.HealthCheckHandler; import org.junit.jupiter.api.Test; class HealthCheckApiTest { diff --git a/airbyte-tests/src/acceptanceTests/java/io/airbyte/test/acceptance/BasicAcceptanceTests.java b/airbyte-tests/src/acceptanceTests/java/io/airbyte/test/acceptance/BasicAcceptanceTests.java index 92f8f53ce8eb7..71b8d73e658bd 100644 --- a/airbyte-tests/src/acceptanceTests/java/io/airbyte/test/acceptance/BasicAcceptanceTests.java +++ b/airbyte-tests/src/acceptanceTests/java/io/airbyte/test/acceptance/BasicAcceptanceTests.java @@ -337,7 +337,8 @@ void testDiscoverSourceSchema() throws ApiException { .destinationSyncMode(DestinationSyncMode.APPEND) .primaryKey(Collections.emptyList()) .aliasName(STREAM_NAME.replace(".", "_")) - .selected(true); + .selected(true) + .suggested(true); final AirbyteCatalog expected = new AirbyteCatalog() .streams(Lists.newArrayList(new AirbyteStreamAndConfiguration() .stream(stream) @@ -359,6 +360,7 @@ void testCreateConnection() throws ApiException { catalog.getStreams().forEach(s -> s.getConfig().syncMode(syncMode).destinationSyncMode(destinationSyncMode).setFieldSelectionEnabled(false)); final ConnectionRead createdConnection = testHarness.createConnection(name, sourceId, destinationId, List.of(operationId), catalog, ConnectionScheduleType.BASIC, BASIC_SCHEDULE_DATA); + createdConnection.getSyncCatalog().getStreams().forEach(s -> s.getConfig().setSuggested(true)); assertEquals(sourceId, createdConnection.getSourceId()); assertEquals(destinationId, createdConnection.getDestinationId()); diff --git a/airbyte-webapp-e2e-tests/cypress.json b/airbyte-webapp-e2e-tests/cypress.json index 474344d4272fd..83ab67ad57df2 100644 --- a/airbyte-webapp-e2e-tests/cypress.json +++ b/airbyte-webapp-e2e-tests/cypress.json @@ -1,6 +1,6 @@ { "projectId": "916nvw", - "baseUrl": "http://localhost:3000", + "baseUrl": "https://localhost:3000", "testFiles": ["**/*.spec.*"], "viewportHeight": 800, "viewportWidth": 1280, @@ -14,6 +14,6 @@ "host": "localhost", "database": "airbyte_ci_source", "password": "secret_password", - "port":5433 + "port": 5433 } } diff --git a/airbyte-webapp-e2e-tests/cypress/integration/connectorBuilder.spec.ts b/airbyte-webapp-e2e-tests/cypress/integration/connectorBuilder.spec.ts index 059e317cfbf89..5377bb69abe7e 100644 --- a/airbyte-webapp-e2e-tests/cypress/integration/connectorBuilder.spec.ts +++ b/airbyte-webapp-e2e-tests/cypress/integration/connectorBuilder.spec.ts @@ -1,8 +1,18 @@ import { goToConnectorBuilderPage, testStream } from "pages/connectorBuilderPage"; -import { assertTestReadItems, assertTestReadAuthFailure, configureAuth, configureGlobals, configureStream, configurePagination, assertMultiPageReadItems } from "commands/connectorBuilder"; +import { + assertTestReadItems, + assertTestReadAuthFailure, + configureAuth, + configureGlobals, + configureStream, + configurePagination, + assertMultiPageReadItems, +} from "commands/connectorBuilder"; +import { initialSetupCompleted } from "commands/workspaces"; describe("Connector builder", () => { before(() => { + initialSetupCompleted(); goToConnectorBuilderPage(); }); diff --git a/airbyte-webapp/.stylelintrc b/airbyte-webapp/.stylelintrc index 55b5a685b4cf5..e777d222acd55 100644 --- a/airbyte-webapp/.stylelintrc +++ b/airbyte-webapp/.stylelintrc @@ -16,7 +16,8 @@ "scss/percent-placeholder-pattern": null, "value-keyword-case": null, "color-no-hex": true, - "airbyte/no-color-variables-in-rgba": true + "airbyte/no-color-variables-in-rgba": true, + "airbyte/no-use-renaming": true }, "ignoreFiles": ["**/build/**", "**/dist/**"], "plugins": ["./packages/stylelint-plugin/index.js"] diff --git a/airbyte-webapp/build.gradle b/airbyte-webapp/build.gradle index 0d58b5218d043..5fd9ee0dce4be 100644 --- a/airbyte-webapp/build.gradle +++ b/airbyte-webapp/build.gradle @@ -106,16 +106,8 @@ task copyNginx(type: Copy) { into "build/docker/bin/nginx" } -task stylelint(type: NpmTask) { - dependsOn npmInstall - args = ['run', 'stylelint'] - inputs.files commonConfigs - inputs.file '.stylelintrc' - inputs.dir 'src' -} - // Those tasks should be run as part of the "check" task -check.dependsOn validateLinks, licenseCheck, test, stylelint +check.dependsOn validateLinks, licenseCheck, test build.dependsOn buildStorybook diff --git a/airbyte-webapp/craco.config.js b/airbyte-webapp/craco.config.js deleted file mode 100644 index 45bea2176cf52..0000000000000 --- a/airbyte-webapp/craco.config.js +++ /dev/null @@ -1,26 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-var-requires -const MiniCssExtractPlugin = require("mini-css-extract-plugin"); - -module.exports = { - webpack: { - configure: (webpackConfig) => { - webpackConfig = { - ...webpackConfig, - plugins: [ - ...webpackConfig.plugins.filter((element) => { - if (element.options) { - return !element.options.hasOwnProperty("ignoreOrder"); - } - return true; - }), - new MiniCssExtractPlugin({ - ignoreOrder: true, - filename: "static/css/[name].[contenthash:8].css", - chunkFilename: "static/css/[name].[contenthash:8].chunk.css", - }), - ], - }; - return webpackConfig; - }, - }, -}; diff --git a/airbyte-webapp/public/index.html b/airbyte-webapp/index.html similarity index 68% rename from airbyte-webapp/public/index.html rename to airbyte-webapp/index.html index b04f783d9e6e1..1389418021201 100644 --- a/airbyte-webapp/public/index.html +++ b/airbyte-webapp/index.html @@ -2,7 +2,7 @@ - + - - - + + + Airbyte
    + diff --git a/airbyte-webapp/package-lock.json b/airbyte-webapp/package-lock.json index 01f3d90ec7da9..44d216ffbf96a 100644 --- a/airbyte-webapp/package-lock.json +++ b/airbyte-webapp/package-lock.json @@ -1,12 +1,12 @@ { "name": "airbyte-webapp", - "version": "0.40.28", + "version": "0.40.30", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "airbyte-webapp", - "version": "0.40.28", + "version": "0.40.30", "dependencies": { "@datadog/browser-rum": "^4.21.2", "@floating-ui/react-dom": "^1.0.0", @@ -24,6 +24,7 @@ "@types/segment-analytics": "^0.0.34", "@types/uuid": "^9.0.0", "classnames": "^2.3.1", + "date-fns": "^2.29.3", "dayjs": "^1.11.3", "diff": "^5.1.0", "firebase": "^9.8.2", @@ -31,9 +32,11 @@ "formik": "^2.2.9", "framer-motion": "^6.3.11", "js-yaml": "^4.1.0", + "json-schema": "^0.4.0", "launchdarkly-js-client-sdk": "^2.22.1", "lodash": "^4.17.21", "mdast": "^3.0.0", + "monaco-editor": "^0.34.1", "query-string": "^6.13.1", "react": "^17.0.2", "react-datepicker": "^4.8.0", @@ -63,6 +66,7 @@ "sass": "^1.52.2", "styled-components": "^5.3.5", "typesafe-actions": "^5.1.0", + "unified": "^10.1.2", "unist-util-visit": "^4.1.0", "uuid": "^9.0.0", "yup": "^0.32.11" @@ -73,7 +77,7 @@ "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@craco/craco": "^7.0.0-alpha.7", + "@storybook/addon-actions": "^6.5.15", "@storybook/addon-essentials": "^6.5.7", "@storybook/builder-webpack5": "^6.5.7", "@storybook/manager-webpack5": "^6.5.7", @@ -105,14 +109,18 @@ "@types/unist": "^2.0.5", "@typescript-eslint/eslint-plugin": "^5.27.1", "@typescript-eslint/parser": "^5.27.1", + "@vitejs/plugin-basic-ssl": "^1.0.1", + "@vitejs/plugin-react": "^3.0.1", "babel-jest": "^29.3.1", "dotenv": "^16.0.3", - "eslint-config-prettier": "^8.5.0", + "eslint": "^8.32.0", + "eslint-config-prettier": "^8.6.0", "eslint-config-react-app": "^7.0.1", "eslint-plugin-css-modules": "^2.11.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-jest": "^26.5.3", - "eslint-plugin-jsx-a11y": "^6.6.1", - "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-unused-imports": "^2.0.0", "express": "^4.18.1", "husky": "^8.0.1", @@ -120,11 +128,11 @@ "jest-environment-jsdom": "^29.3.1", "license-checker": "^25.0.1", "lint-staged": "^12.3.7", - "mini-css-extract-plugin": "^2.6.1", + "meow": "^9.0.0", "node-fetch": "^2.6.7", + "optionator": "^0.9.1", "orval": "^6.11.0-alpha.10", "prettier": "^2.6.2", - "react-scripts": "^5.0.1", "react-select-event": "^5.5.0", "storybook-addon-mock": "^2.4.1", "stylelint": "^14.9.1", @@ -136,7 +144,11 @@ "timezone-mock": "^1.3.4", "tmpl": "^1.0.5", "ts-node": "^10.8.1", - "typescript": "^4.7.3" + "typescript": "^4.7.3", + "vite": "^4.0.4", + "vite-plugin-checker": "^0.5.3", + "vite-plugin-svgr": "^2.4.0", + "vite-tsconfig-paths": "^4.0.3" }, "engines": { "node": "16.18.1" @@ -1732,6 +1744,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.13.tgz", "integrity": "sha512-qmzKVTn46Upvtxv8LQoQ8mTCdUC83AOVQIQm57e9oekLT5cmK9GOMOfcWhe8jMNx4UJXn/UDhVZ/7lGofVNeDQ==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1788,6 +1801,36 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", @@ -2326,24 +2369,11 @@ } }, "node_modules/@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "dependencies": { - "regenerator-runtime": "^0.13.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", - "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", - "dev": true, + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "dependencies": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" @@ -2433,119 +2463,6 @@ "node": ">=0.1.90" } }, - "node_modules/@craco/craco": { - "version": "7.0.0-alpha.7", - "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-7.0.0-alpha.7.tgz", - "integrity": "sha512-3RU+Ur1GvBQKDBL1JhssSgazc8s3pMAgndyS+95UaXdMTuozpI9h4k4OokQRRjiLmr7i0y39l6fBZvknGj2i1w==", - "dev": true, - "dependencies": { - "autoprefixer": "^10.4.7", - "cosmiconfig": "^7.0.1", - "cosmiconfig-typescript-loader": "^2.0.2", - "cross-spawn": "^7.0.3", - "lodash": "^4.17.21", - "semver": "^7.3.7", - "webpack-merge": "^5.8.0" - }, - "bin": { - "craco": "dist/bin/craco.js" - }, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "react-scripts": "^5.0.0" - } - }, - "node_modules/@craco/craco/node_modules/autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@craco/craco/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@craco/craco/node_modules/postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "peer": true, - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/@craco/craco/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -2562,7 +2479,8 @@ "version": "12.0.0", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@datadog/browser-core": { "version": "4.21.2", @@ -2767,6 +2685,150 @@ "node": ">=12" } }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/linux-loong64": { "version": "0.15.18", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", @@ -2783,30 +2845,209 @@ "node": ">=12" } }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -2818,15 +3059,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@eslint/eslintrc/node_modules/ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -3741,19 +3973,32 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -5776,6 +6021,48 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@mdx-js/mdx/node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@mdx-js/mdx/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/@mdx-js/mdx/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/@mdx-js/mdx/node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -5797,6 +6084,34 @@ "semver": "bin/semver" } }, + "node_modules/@mdx-js/mdx/node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mdx-js/mdx/node_modules/unist-util-visit": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", @@ -5894,12 +6209,12 @@ "dev": true }, "node_modules/@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "dependencies": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" }, "engines": { @@ -5907,21 +6222,21 @@ } }, "node_modules/@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "dependencies": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" }, "engines": { @@ -6230,6 +6545,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", "dev": true, + "peer": true, "dependencies": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" @@ -6274,6 +6590,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, + "peer": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", @@ -6294,6 +6611,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -6303,6 +6621,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, + "peer": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" @@ -7202,18 +7521,18 @@ "dev": true }, "node_modules/@storybook/addon-actions": { - "version": "6.5.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.8.tgz", - "integrity": "sha512-9ciR1iWBTzQNBDlq0iQs9+TV7gng+FbQxW5mHNxNvT9SxY1dt02wCPHZeVE/5la61wBXZs/zpEepZA93VzVBDw==", + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.15.tgz", + "integrity": "sha512-cnLzVK1S+EydFDSuvxMmMAxVqNXijBGdV9QTgsu6ys5sOkoiXRETKZmxuN8/ZRbkfc4N+1KAylSCZOOHzBQTBQ==", "dev": true, "dependencies": { - "@storybook/addons": "6.5.8", - "@storybook/api": "6.5.8", - "@storybook/client-logger": "6.5.8", - "@storybook/components": "6.5.8", - "@storybook/core-events": "6.5.8", + "@storybook/addons": "6.5.15", + "@storybook/api": "6.5.15", + "@storybook/client-logger": "6.5.15", + "@storybook/components": "6.5.15", + "@storybook/core-events": "6.5.15", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.8", + "@storybook/theming": "6.5.15", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", @@ -7244,6 +7563,173 @@ } } }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/addons": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.15.tgz", + "integrity": "sha512-xT31SuSX+kYGyxCNK2nqL7WTxucs3rSmhiCLovJcUjYk+QquV3c2c53Ki7lwwdDbzfXFcNAe0HJ4hoTN4jhn0Q==", + "dev": true, + "dependencies": { + "@storybook/api": "6.5.15", + "@storybook/channels": "6.5.15", + "@storybook/client-logger": "6.5.15", + "@storybook/core-events": "6.5.15", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.15", + "@storybook/theming": "6.5.15", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/api": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.15.tgz", + "integrity": "sha512-BBE0KXKvj1/3jTghbIoWfrcDM0t+xO7EYtWWAXD6XlhGsZVD2Dy82Z52ONyLulMDRpMWl0OYy3h6A1YnFUH25w==", + "dev": true, + "dependencies": { + "@storybook/channels": "6.5.15", + "@storybook/client-logger": "6.5.15", + "@storybook/core-events": "6.5.15", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.15", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.15", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/channels": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.15.tgz", + "integrity": "sha512-gPpsBgirv2NCXbH4WbYqdkI0JLE96aiVuu7UEWfn9yu071pQ9CLHbhXGD9fSFNrfOkyBBY10ppSE7uCXw3Wexg==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/client-logger": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.15.tgz", + "integrity": "sha512-0uyxKvodq+FycGv6aUwC1wUR6suXf2+7ywMFAOlYolI4UvNj8NyU/5AfgKT5XnxYAgPmoCiAjOE700TrfHrosw==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2", + "global": "^4.4.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/components": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.15.tgz", + "integrity": "sha512-bHTT0Oa3s4g+MBMaLBbX9ofMtb1AW59AzIUNGrfqW1XqJMGuUHMiJ7TSo+i5dRSFpbFygnwMEG9LfHxpR2Z0Dw==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.5.15", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.15", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/core-events": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.15.tgz", + "integrity": "sha512-B1Ba6l5W7MeNclclqMMTMHgYgfdpB5SIhNCQFnzIz8blynzRhNFMdxvbAl6Je5G0S4xydYYd7Lno2kXQebs7HA==", + "dev": true, + "dependencies": { + "core-js": "^3.8.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/router": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.15.tgz", + "integrity": "sha512-9t8rI8t7/Krolau29gsdjdbRQ66orONIyP0efp0EukVgv6reNFzb/U14ARrl0uHys6Tl5Xyece9FoakQUdn8Kg==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.5.15", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/addon-actions/node_modules/@storybook/theming": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.15.tgz", + "integrity": "sha512-pgdW0lVZKKXQ4VhIfLHycMmwFSVOY7vLTKnytag4Y8Yz+aXm0bwDN/QxPntFzDH47F1Rcy2ywNnvty8ooDTvuA==", + "dev": true, + "dependencies": { + "@storybook/client-logger": "6.5.15", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/@storybook/addon-backgrounds": { "version": "6.5.8", "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-6.5.8.tgz", @@ -7456,6 +7942,49 @@ } } }, + "node_modules/@storybook/addon-essentials/node_modules/@storybook/addon-actions": { + "version": "6.5.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.8.tgz", + "integrity": "sha512-9ciR1iWBTzQNBDlq0iQs9+TV7gng+FbQxW5mHNxNvT9SxY1dt02wCPHZeVE/5la61wBXZs/zpEepZA93VzVBDw==", + "dev": true, + "dependencies": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, "node_modules/@storybook/addon-measure": { "version": "6.5.8", "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-6.5.8.tgz", @@ -7927,6 +8456,12 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "node_modules/@storybook/builder-webpack4/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/@storybook/builder-webpack4/node_modules/enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -8347,6 +8882,23 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/@storybook/builder-webpack4/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@storybook/builder-webpack4/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -8535,18 +9087,6 @@ "integrity": "sha512-j11XSuRuAlft6vLDEX4RvhqC0KxNxx6QIyMXNb0vHHSNPXTPeiy3algESWmOOIzEtiEL0qiowPU3ewW9hHVa7Q==", "dev": true }, - "node_modules/@storybook/builder-webpack5/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/clean-css": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", @@ -8991,24 +9531,6 @@ "node": ">=6" } }, - "node_modules/@storybook/builder-webpack5/node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@storybook/builder-webpack5/node_modules/terser-webpack-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", @@ -9043,12 +9565,6 @@ } } }, - "node_modules/@storybook/builder-webpack5/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/@storybook/builder-webpack5/node_modules/webpack-dev-middleware": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-4.3.0.tgz", @@ -9608,6 +10124,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/@storybook/core-common/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/@storybook/core-common/node_modules/enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -10066,6 +10588,23 @@ "node": ">=8" } }, + "node_modules/@storybook/core-common/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@storybook/core-common/node_modules/terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -10880,6 +11419,23 @@ "node": ">=8" } }, + "node_modules/@storybook/core-server/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@storybook/core-server/node_modules/terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -10903,6 +11459,12 @@ "webpack": "^4.0.0" } }, + "node_modules/@storybook/core-server/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/@storybook/core-server/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -11396,6 +11958,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/@storybook/manager-webpack4/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/@storybook/manager-webpack4/node_modules/enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -11842,6 +12410,23 @@ "node": ">=8" } }, + "node_modules/@storybook/manager-webpack4/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@storybook/manager-webpack4/node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -12021,18 +12606,6 @@ "integrity": "sha512-j11XSuRuAlft6vLDEX4RvhqC0KxNxx6QIyMXNb0vHHSNPXTPeiy3algESWmOOIzEtiEL0qiowPU3ewW9hHVa7Q==", "dev": true }, - "node_modules/@storybook/manager-webpack5/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/@storybook/manager-webpack5/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -12617,24 +13190,6 @@ "node": ">=6" } }, - "node_modules/@storybook/manager-webpack5/node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@storybook/manager-webpack5/node_modules/terser-webpack-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", @@ -12669,12 +13224,6 @@ } } }, - "node_modules/@storybook/manager-webpack5/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/@storybook/manager-webpack5/node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -13797,6 +14346,7 @@ "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", "dev": true, + "peer": true, "dependencies": { "ejs": "^3.1.6", "json5": "^2.2.0", @@ -13809,6 +14359,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "dependencies": { "minimist": "^1.2.5" }, @@ -13824,6 +14375,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -13863,6 +14415,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -13876,6 +14429,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -13889,6 +14443,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -13902,6 +14457,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -13915,6 +14471,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -13928,6 +14485,7 @@ "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", "dev": true, + "peer": true, "dependencies": { "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", @@ -13951,6 +14509,7 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", "dev": true, + "peer": true, "dependencies": { "@svgr/plugin-jsx": "^5.5.0", "camelcase": "^6.2.0", @@ -13969,6 +14528,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, + "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -13985,6 +14545,7 @@ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", "dev": true, + "peer": true, "dependencies": { "@babel/types": "^7.12.6" }, @@ -14001,6 +14562,7 @@ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.12.3", "@svgr/babel-preset": "^5.5.0", @@ -14020,6 +14582,7 @@ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", "dev": true, + "peer": true, "dependencies": { "cosmiconfig": "^7.0.0", "deepmerge": "^4.2.2", @@ -14038,6 +14601,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, + "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -14054,6 +14618,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -14063,6 +14628,7 @@ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/plugin-transform-react-constant-elements": "^7.12.1", @@ -14086,6 +14652,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "dependencies": { "minimist": "^1.2.5" }, @@ -14101,6 +14668,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, + "peer": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -14175,15 +14743,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@testing-library/dom/node_modules/aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/@testing-library/dom/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -14276,15 +14835,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@testing-library/jest-dom/node_modules/aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/@testing-library/jest-dom/node_modules/chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -14444,6 +14994,7 @@ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, + "peer": true, "engines": { "node": ">=10.13.0" } @@ -14530,6 +15081,7 @@ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, + "peer": true, "dependencies": { "@types/connect": "*", "@types/node": "*" @@ -14540,6 +15092,7 @@ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*" } @@ -14549,6 +15102,7 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*" } @@ -14558,6 +15112,7 @@ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dev": true, + "peer": true, "dependencies": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -14616,6 +15171,7 @@ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, + "peer": true, "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -14628,6 +15184,7 @@ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -14687,6 +15244,7 @@ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*" } @@ -14786,7 +15344,7 @@ "node_modules/@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "node_modules/@types/lodash": { @@ -14816,7 +15374,8 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/minimatch": { "version": "3.0.3", @@ -14894,7 +15453,8 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/qs": { "version": "6.9.6", @@ -14916,7 +15476,8 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/react": { "version": "17.0.39", @@ -15035,6 +15596,7 @@ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*" } @@ -15043,7 +15605,8 @@ "version": "0.12.1", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/sanitize-html": { "version": "2.6.2", @@ -15069,6 +15632,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, + "peer": true, "dependencies": { "@types/express": "*" } @@ -15078,6 +15642,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, + "peer": true, "dependencies": { "@types/mime": "^1", "@types/node": "*" @@ -15088,6 +15653,7 @@ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*" } @@ -15140,7 +15706,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/@types/uglify-js": { "version": "3.12.0", @@ -15235,6 +15802,7 @@ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*" } @@ -15823,6 +16391,58 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.0.1.tgz", + "integrity": "sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.20.7", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.27.0", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0" + } + }, + "node_modules/@vitejs/plugin-react/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@vitejs/plugin-react/node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -16192,6 +16812,7 @@ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, + "peer": true, "dependencies": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", @@ -16221,6 +16842,7 @@ "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, + "peer": true, "dependencies": { "loader-utils": "^2.0.0", "regex-parser": "^2.2.11" @@ -16234,6 +16856,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "dependencies": { "minimist": "^1.2.5" }, @@ -16249,6 +16872,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, + "peer": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -16501,7 +17125,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/argparse": { "version": "2.0.1", @@ -16509,18 +17134,48 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/aria-query/node_modules/deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", "dev": true, "dependencies": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" }, - "engines": { - "node": ">=6.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/aria-query/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -16561,18 +17216,19 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" }, "engines": { @@ -16610,14 +17266,15 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -16627,14 +17284,15 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -16785,6 +17443,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, + "peer": true, "dependencies": { "lodash": "^4.17.14" } @@ -16851,19 +17510,68 @@ "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axe-core": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", - "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.2.tgz", + "integrity": "sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg==", "dev": true, "engines": { "node": ">=4" } }, "node_modules/axobject-query": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "dependencies": { + "deep-equal": "^2.0.5" + } + }, + "node_modules/axobject-query/node_modules/deep-equal": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axobject-query/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", "dev": true }, "node_modules/babel-jest": { @@ -17266,6 +17974,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", "dev": true, + "peer": true, "peerDependencies": { "@babel/core": "^7.1.0" } @@ -17457,10 +18166,9 @@ "dev": true }, "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "dev": true, + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -17562,7 +18270,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "dev": true, + "peer": true }, "node_modules/better-opn": { "version": "2.1.1", @@ -17597,6 +18306,7 @@ "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", "dev": true, + "peer": true, "dependencies": { "bluebird": "^3.5.5", "check-types": "^11.1.1", @@ -17716,6 +18426,7 @@ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, + "peer": true, "dependencies": { "array-flatten": "^2.1.0", "deep-equal": "^1.0.1", @@ -17901,7 +18612,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true + "dev": true, + "peer": true }, "node_modules/browserify-aes": { "version": "1.2.0", @@ -18053,7 +18765,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true + "dev": true, + "peer": true }, "node_modules/buffer-xor": { "version": "1.0.3", @@ -18066,6 +18779,7 @@ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", "dev": true, + "peer": true, "engines": { "node": ">=6" }, @@ -18316,27 +19030,50 @@ } }, "node_modules/camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "optional": true, "dependencies": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=6" + } + }, + "node_modules/camelcase-keys/node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys/node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/camelize": { @@ -18349,6 +19086,7 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -18467,7 +19205,8 @@ "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/chokidar": { "version": "3.5.3", @@ -18782,6 +19521,7 @@ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, + "peer": true, "dependencies": { "@types/q": "^1.5.1", "chalk": "^2.4.1", @@ -18896,6 +19636,7 @@ "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", "dev": true, + "peer": true, "engines": { "node": ">=4.0.0" } @@ -19018,6 +19759,7 @@ "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", "dev": true, + "peer": true, "engines": { "node": ">=0.8" } @@ -19203,41 +19945,6 @@ "node": ">=8" } }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz", - "integrity": "sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==", - "dev": true, - "dependencies": { - "cosmiconfig": "^7", - "ts-node": "^10.8.1" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "typescript": ">=3" - } - }, - "node_modules/cosmiconfig-typescript-loader/node_modules/cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cp-file": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", @@ -19629,6 +20336,7 @@ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -19704,6 +20412,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, + "peer": true, "dependencies": { "boolbase": "^1.0.0", "css-what": "^3.2.1", @@ -19715,7 +20424,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/css-to-react-native": { "version": "3.0.0", @@ -19732,6 +20442,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, + "peer": true, "dependencies": { "mdn-data": "2.0.4", "source-map": "^0.6.1" @@ -19745,6 +20456,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -19759,6 +20471,7 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "dev": true, + "peer": true, "engines": { "node": ">= 6" }, @@ -19776,7 +20489,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz", "integrity": "sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/cssesc": { "version": "3.0.0", @@ -19795,6 +20509,7 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, + "peer": true, "dependencies": { "css-tree": "^1.1.2" }, @@ -19807,6 +20522,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", "dev": true, + "peer": true, "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -19819,13 +20535,15 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "dev": true, + "peer": true }, "node_modules/csso/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -20127,6 +20845,7 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, + "peer": true, "dependencies": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", @@ -20171,6 +20890,186 @@ "node": ">=0.10.0" } }, + "node_modules/default-browser-id/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "optional": true, + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "optional": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "optional": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "optional": true, + "dependencies": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "optional": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "optional": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "optional": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "optional": true, + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "optional": true, + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-browser-id/node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", @@ -20263,7 +21162,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true + "dev": true, + "peer": true }, "node_modules/degenerator": { "version": "3.0.2", @@ -20401,6 +21301,7 @@ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true, + "peer": true, "engines": { "node": ">= 0.6" } @@ -20503,6 +21404,7 @@ "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "dev": true, + "peer": true, "dependencies": { "address": "^1.0.1", "debug": "^2.6.0" @@ -20520,6 +21422,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -20528,7 +21431,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "peer": true }, "node_modules/detect-port/node_modules/debug": { "version": "2.6.9", @@ -20550,6 +21454,7 @@ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, + "peer": true, "dependencies": { "acorn-node": "^1.6.1", "defined": "^1.0.0", @@ -20576,7 +21481,8 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/diff": { "version": "5.1.0", @@ -20628,19 +21534,22 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true + "dev": true, + "peer": true }, "node_modules/dns-packet": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, + "peer": true, "dependencies": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -20651,6 +21560,7 @@ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, + "peer": true, "dependencies": { "buffer-indexof": "^1.0.0" } @@ -20695,6 +21605,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, + "peer": true, "dependencies": { "domelementtype": "^2.0.1", "entities": "^2.0.0" @@ -20710,7 +21621,8 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "peer": true }, "node_modules/dom-walk": { "version": "0.1.2", @@ -20732,7 +21644,8 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/domexception": { "version": "4.0.0", @@ -20776,6 +21689,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, + "peer": true, "dependencies": { "dom-serializer": "0", "domelementtype": "1" @@ -20816,7 +21730,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/duplexify": { "version": "3.7.1", @@ -20871,6 +21786,7 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz", "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==", "dev": true, + "peer": true, "dependencies": { "jake": "^10.8.5" }, @@ -21159,6 +22075,15 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -21669,46 +22594,50 @@ } }, "node_modules/eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.1", "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -21721,9 +22650,9 @@ } }, "node_modules/eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "bin": { "eslint-config-prettier": "bin/cli.js" @@ -21785,13 +22714,14 @@ } }, "node_modules/eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "dependencies": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" } }, "node_modules/eslint-import-resolver-node/node_modules/debug": { @@ -21804,16 +22734,20 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", "dev": true, "dependencies": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "engines": { "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, "node_modules/eslint-module-utils/node_modules/debug": { @@ -21825,73 +22759,6 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-module-utils/node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint-module-utils/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/eslint-plugin-css-modules": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/eslint-plugin-css-modules/-/eslint-plugin-css-modules-2.11.0.tgz", @@ -21927,24 +22794,26 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", - "minimatch": "^3.0.4", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" }, "engines": { "node": ">=4" @@ -21954,12 +22823,12 @@ } }, "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "dependencies": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "node_modules/eslint-plugin-import/node_modules/doctrine": { @@ -21974,12 +22843,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/eslint-plugin-jest": { "version": "26.5.3", "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-26.5.3.tgz", @@ -22005,23 +22868,26 @@ } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, "dependencies": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", "minimatch": "^3.1.2", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", "semver": "^6.3.0" }, "engines": { @@ -22038,15 +22904,15 @@ "dev": true }, "node_modules/eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0" }, "engines": { - "node": ">=6.0.0" + "node": ">=12.0.0" }, "peerDependencies": { "eslint": ">=7.28.0", @@ -22280,9 +23146,9 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", @@ -22293,9 +23159,9 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -22310,6 +23176,22 @@ "node": ">=4.0" } }, + "node_modules/eslint/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -22323,9 +23205,9 @@ } }, "node_modules/eslint/node_modules/globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -22346,6 +23228,51 @@ "node": ">=8" } }, + "node_modules/eslint/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -22371,23 +23298,26 @@ } }, "node_modules/espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/espree/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -22397,9 +23327,9 @@ } }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -23319,6 +24249,7 @@ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz", "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==", "dev": true, + "peer": true, "dependencies": { "minimatch": "^5.0.1" } @@ -23328,6 +24259,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -23337,6 +24269,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, + "peer": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -23349,6 +24282,7 @@ "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", "dev": true, + "peer": true, "engines": { "node": ">= 0.4.0" } @@ -23546,6 +24480,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "peer": true, "engines": { "node": ">=4.0" }, @@ -23555,6 +24490,15 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -23817,6 +24761,7 @@ "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", "dev": true, + "peer": true, "engines": { "node": "*" }, @@ -24146,7 +25091,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "dev": true, + "peer": true }, "node_modules/get-package-type": { "version": "0.1.0", @@ -24431,6 +25377,12 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "node_modules/gonzales-pe": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", @@ -24446,17 +25398,36 @@ "node": ">=0.6.0" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, + "peer": true, "dependencies": { "duplexer": "^0.1.2" }, @@ -24471,7 +25442,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/handlebars": { "version": "4.7.7", @@ -24516,7 +25488,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/has": { "version": "1.0.3", @@ -24922,6 +25895,7 @@ "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", "dev": true, + "peer": true, "engines": { "node": ">= 6.0.0" } @@ -24937,6 +25911,7 @@ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, + "peer": true, "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -24949,6 +25924,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "peer": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -24964,6 +25940,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } @@ -25016,6 +25993,38 @@ "node": ">= 6" } }, + "node_modules/html-minifier-terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/html-minifier-terser/node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "node_modules/html-tags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", @@ -25130,7 +26139,8 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true + "dev": true, + "peer": true }, "node_modules/http-errors": { "version": "2.0.0", @@ -25170,13 +26180,15 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "peer": true, "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -25475,6 +26487,7 @@ "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", "dev": true, + "peer": true, "dependencies": { "harmony-reflect": "^1.4.6" }, @@ -25756,12 +26769,13 @@ } }, "node_modules/is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -25770,6 +26784,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -25880,10 +26908,13 @@ } }, "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -26036,7 +27067,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true + "dev": true, + "peer": true }, "node_modules/is-negative-zero": { "version": "2.0.2", @@ -26078,6 +27110,7 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -26096,15 +27129,26 @@ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, + "peer": true, "engines": { "node": ">=6" } }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -26160,6 +27204,7 @@ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -26169,6 +27214,7 @@ "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", "dev": true, + "peer": true, "engines": { "node": ">=6" } @@ -26233,6 +27279,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -26246,6 +27311,15 @@ "dev": true, "optional": true }, + "node_modules/is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -26258,6 +27332,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -26457,6 +27544,7 @@ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, + "peer": true, "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -26475,6 +27563,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -26489,13 +27578,15 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true + "dev": true, + "peer": true }, "node_modules/jake/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -26512,6 +27603,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -26523,13 +27615,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/jake/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -26539,6 +27633,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -28070,6 +29165,7 @@ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/source-map": "^27.5.1", @@ -28098,6 +29194,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -28115,6 +29212,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, + "peer": true, "dependencies": { "@jest/fake-timers": "^27.5.1", "@jest/types": "^27.5.1", @@ -28130,6 +29228,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", @@ -28147,6 +29246,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/types": "^27.5.1", @@ -28161,6 +29261,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "dev": true, + "peer": true, "dependencies": { "callsites": "^3.0.0", "graceful-fs": "^4.2.9", @@ -28175,6 +29276,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dev": true, + "peer": true, "dependencies": { "@jest/console": "^27.5.1", "@jest/types": "^27.5.1", @@ -28190,6 +29292,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.1.0", "@jest/types": "^27.5.1", @@ -28216,6 +29319,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "peer": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -28232,6 +29336,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, + "peer": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } @@ -28241,6 +29346,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, + "peer": true, "dependencies": { "@types/yargs-parser": "*" } @@ -28250,6 +29356,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -28265,6 +29372,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28287,6 +29395,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "peer": true, "engines": { "node": ">=8" } @@ -28296,6 +29405,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -28307,13 +29417,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/jest-jasmine2/node_modules/expect": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "jest-get-type": "^27.5.1", @@ -28329,6 +29441,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -28338,6 +29451,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "chalk": "^4.0.0", @@ -28354,6 +29468,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", @@ -28380,6 +29495,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.5.1", @@ -28400,6 +29516,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*" @@ -28413,6 +29530,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true, + "peer": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } @@ -28422,6 +29540,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -28455,6 +29574,7 @@ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "graceful-fs": "^4.2.9" @@ -28468,6 +29588,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", @@ -28501,6 +29622,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -28518,6 +29640,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -28532,6 +29655,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -28547,6 +29671,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -28562,6 +29687,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -28571,6 +29697,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -29038,6 +30165,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "chalk": "^4.0.0", @@ -29081,6 +30209,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "peer": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -29097,6 +30226,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, + "peer": true, "dependencies": { "@types/yargs-parser": "*" } @@ -29106,6 +30236,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -29121,6 +30252,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -29143,6 +30275,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "peer": true, "engines": { "node": ">=8" } @@ -29152,6 +30285,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -29163,13 +30297,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/jest-resolve/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -29179,6 +30315,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", @@ -29205,6 +30342,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true, + "peer": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } @@ -29214,6 +30352,7 @@ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "graceful-fs": "^4.2.9" @@ -29227,6 +30366,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -29244,6 +30384,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -29258,6 +30399,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -29273,6 +30415,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -30511,6 +31654,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "camelcase": "^6.2.0", @@ -30528,6 +31672,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "peer": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -30544,6 +31689,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, + "peer": true, "dependencies": { "@types/yargs-parser": "*" } @@ -30553,6 +31699,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -30568,6 +31715,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -30584,6 +31732,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -30595,13 +31744,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/jest-validate/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -30611,6 +31762,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -30896,6 +32048,16 @@ "node": ">=8" } }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -31087,8 +32249,7 @@ "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "node_modules/json-schema-ref-parser": { "version": "5.1.3", @@ -31732,7 +32893,8 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "dev": true, + "peer": true }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -31752,11 +32914,18 @@ "integrity": "sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==", "dev": true }, + "node_modules/lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "dev": true + }, "node_modules/lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + "dev": true, + "peer": true }, "node_modules/lodash.throttle": { "version": "4.1.1", @@ -32657,7 +33826,8 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/mdurl": { "version": "1.0.1", @@ -32759,149 +33929,83 @@ } }, "node_modules/meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", - "dev": true, - "optional": true, - "dependencies": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/meow/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, - "optional": true, "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/meow/node_modules/indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "optional": true, - "dependencies": { - "repeating": "^2.0.0" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/meow/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "optional": true, "dependencies": { - "pinkie-promise": "^2.0.0" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/meow/node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "optional": true, "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/meow/node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/meow/node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "node_modules/meow/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "optional": true, "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "lru-cache": "^6.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "optional": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/meow/node_modules/redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, - "optional": true, - "dependencies": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/meow/node_modules/strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "optional": true, - "dependencies": { - "get-stdin": "^4.0.1" - }, - "bin": { - "strip-indent": "cli.js" + "node": ">=10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/merge-descriptors": { @@ -33963,6 +35067,7 @@ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", "dev": true, + "peer": true, "dependencies": { "schema-utils": "^4.0.0" }, @@ -33982,6 +35087,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -33998,6 +35104,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -34009,13 +35116,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "peer": true }, "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -34225,10 +35334,9 @@ } }, "node_modules/monaco-editor": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.33.0.tgz", - "integrity": "sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==", - "peer": true + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.34.1.tgz", + "integrity": "sha512-FKc80TyiMaruhJKKPz5SpJPIjL+dflGvz4CpuThaPMc94AyN7SeC9HQ8hrvaxX7EyHdJcUY5i4D0gNyJj1vSZQ==" }, "node_modules/move-concurrently": { "version": "1.0.1", @@ -34274,6 +35382,7 @@ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, + "peer": true, "dependencies": { "dns-packet": "^1.3.1", "thunky": "^1.0.2" @@ -34286,7 +35395,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true + "dev": true, + "peer": true }, "node_modules/nan": { "version": "2.16.0", @@ -34671,6 +35781,7 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -34713,6 +35824,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, + "peer": true, "dependencies": { "boolbase": "~1.0.0" } @@ -34900,6 +36012,7 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", "dev": true, + "peer": true, "engines": { "node": ">= 6" } @@ -34914,12 +36027,12 @@ } }, "node_modules/object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" }, "engines": { @@ -34969,28 +36082,28 @@ } }, "node_modules/object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" } }, "node_modules/object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -35042,14 +36155,14 @@ } }, "node_modules/object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "engines": { "node": ">= 0.4" @@ -35073,7 +36186,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/on-finished": { "version": "2.4.1", @@ -35825,7 +36939,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "dev": true, + "peer": true }, "node_modules/picocolors": { "version": "1.0.0", @@ -35867,7 +36982,7 @@ "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "optional": true, "engines": { @@ -35877,7 +36992,7 @@ "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "optional": true, "dependencies": { @@ -35913,6 +37028,7 @@ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, + "peer": true, "dependencies": { "find-up": "^3.0.0" }, @@ -35925,6 +37041,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "peer": true, "dependencies": { "locate-path": "^3.0.0" }, @@ -35937,6 +37054,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "peer": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -35950,6 +37068,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "peer": true, "dependencies": { "p-limit": "^2.0.0" }, @@ -35962,6 +37081,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, + "peer": true, "engines": { "node": ">=4" } @@ -36020,6 +37140,7 @@ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, + "peer": true, "dependencies": { "async": "^2.6.2", "debug": "^3.1.1", @@ -36034,6 +37155,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "dependencies": { "ms": "^2.1.1" } @@ -36078,6 +37200,7 @@ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", "dev": true, + "peer": true, "dependencies": { "lilconfig": "^2.0.4", "yaml": "^1.10.2" @@ -36333,6 +37456,7 @@ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", "dev": true, + "peer": true, "engines": { "node": ">=6" }, @@ -36425,6 +37549,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", "dev": true, + "peer": true, "dependencies": { "asap": "~2.0.6" } @@ -36693,6 +37818,7 @@ "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true, + "peer": true, "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -36755,9 +37881,9 @@ "dev": true }, "node_modules/queue-microtask": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", - "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -36779,6 +37905,7 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -36791,6 +37918,7 @@ "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "dev": true, + "peer": true, "dependencies": { "performance-now": "^2.1.0" } @@ -36938,6 +38066,7 @@ "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", "dev": true, + "peer": true, "dependencies": { "core-js": "^3.19.2", "object-assign": "^4.1.1", @@ -36985,6 +38114,7 @@ "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.16.0", "address": "^1.1.2", @@ -37020,6 +38150,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -37035,6 +38166,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -37051,6 +38183,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -37062,13 +38195,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-dev-utils/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -37081,6 +38216,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -37097,6 +38233,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -37106,6 +38243,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", "dev": true, + "peer": true, "engines": { "node": ">= 12.13.0" } @@ -37115,6 +38253,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -37130,6 +38269,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -37145,6 +38285,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -37160,6 +38301,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -37269,7 +38411,8 @@ "version": "6.0.11", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-fast-compare": { "version": "2.0.4", @@ -37469,15 +38612,6 @@ "react": ">=16" } }, - "node_modules/react-markdown/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/react-markdown/node_modules/comma-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", @@ -37509,17 +38643,6 @@ "node": ">=4" } }, - "node_modules/react-markdown/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/react-markdown/node_modules/property-information": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz", @@ -37557,33 +38680,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/react-markdown/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/react-markdown/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/react-markdown/node_modules/unist-util-stringify-position": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", @@ -37767,6 +38863,7 @@ "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", @@ -37840,6 +38937,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -37857,6 +38955,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", "dev": true, + "peer": true, "dependencies": { "@jest/console": "^27.5.1", "@jest/reporters": "^27.5.1", @@ -37904,6 +39003,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, + "peer": true, "dependencies": { "@jest/fake-timers": "^27.5.1", "@jest/types": "^27.5.1", @@ -37919,6 +39019,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", @@ -37936,6 +39037,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/types": "^27.5.1", @@ -37950,6 +39052,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "dev": true, + "peer": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^27.5.1", @@ -37994,6 +39097,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -38003,6 +39107,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", "dev": true, + "peer": true, "dependencies": { "@sinclair/typebox": "^0.24.1" }, @@ -38015,6 +39120,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "dev": true, + "peer": true, "dependencies": { "callsites": "^3.0.0", "graceful-fs": "^4.2.9", @@ -38029,6 +39135,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -38038,6 +39145,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dev": true, + "peer": true, "dependencies": { "@jest/console": "^27.5.1", "@jest/types": "^27.5.1", @@ -38053,6 +39161,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", "dev": true, + "peer": true, "dependencies": { "@jest/test-result": "^27.5.1", "graceful-fs": "^4.2.9", @@ -38068,6 +39177,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.1.0", "@jest/types": "^27.5.1", @@ -38094,6 +39204,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -38103,6 +39214,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "peer": true, "dependencies": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -38119,6 +39231,7 @@ "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz", "integrity": "sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==", "dev": true, + "peer": true, "dependencies": { "ansi-html-community": "^0.0.8", "common-path-prefix": "^3.0.0", @@ -38169,6 +39282,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, + "peer": true, "dependencies": { "@sinonjs/commons": "^1.7.0" } @@ -38177,13 +39291,15 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-scripts/node_modules/@types/yargs": { "version": "16.0.5", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, + "peer": true, "dependencies": { "@types/yargs-parser": "*" } @@ -38193,6 +39309,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -38205,6 +39322,7 @@ "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, + "peer": true, "dependencies": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" @@ -38215,6 +39333,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -38227,6 +39346,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -38242,6 +39362,7 @@ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.19.1", "caniuse-lite": "^1.0.30001297", @@ -38269,6 +39390,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", "dev": true, + "peer": true, "dependencies": { "@jest/transform": "^27.5.1", "@jest/types": "^27.5.1", @@ -38291,6 +39413,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", "dev": true, + "peer": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -38306,6 +39429,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", "dev": true, + "peer": true, "dependencies": { "babel-plugin-jest-hoist": "^27.5.1", "babel-preset-current-node-syntax": "^1.0.0" @@ -38322,6 +39446,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -38344,6 +39469,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "peer": true, "engines": { "node": ">=8" } @@ -38353,6 +39479,7 @@ "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.3.tgz", "integrity": "sha512-qjywD7LvpZJ5+E16lf00GnMVUX5TEVBcKW1/vtGPgAerHwRwE4JP4p1Y40zbLnup2ZfWsd30P2bHdoAKH93XxA==", "dev": true, + "peer": true, "dependencies": { "source-map": "~0.6.0" }, @@ -38365,6 +39492,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -38374,6 +39502,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -38385,13 +39514,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-scripts/node_modules/commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", "dev": true, + "peer": true, "engines": { "node": ">= 12" } @@ -38401,6 +39532,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, + "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -38417,6 +39549,7 @@ "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.2.tgz", "integrity": "sha512-hOb1LFjRR+8ocA071xUSmg5VslJ8NGo/I2qpUpdeAYyBVCgupS5O8SEVo4SxEMYyFBNodBkzG3T1iqW9HCXxew==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.8" }, @@ -38435,6 +39568,7 @@ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", "dev": true, + "peer": true, "dependencies": { "timsort": "^0.3.0" }, @@ -38450,6 +39584,7 @@ "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.3.tgz", "integrity": "sha512-0gDYWEKaGacwxCqvQ3Ypg6wGdD1AztbMm5h1JsactG2hP2eiflj808QITmuWBpE7sjSEVrAlZhPTVd/nNMj/hQ==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.8" }, @@ -38468,6 +39603,7 @@ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", "dev": true, + "peer": true, "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.2.15", @@ -38494,6 +39630,7 @@ "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", "dev": true, + "peer": true, "dependencies": { "cssnano": "^5.0.6", "jest-worker": "^27.0.2", @@ -38532,6 +39669,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -38548,6 +39686,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -38560,6 +39699,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -38579,6 +39719,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -38588,6 +39729,7 @@ "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.2.tgz", "integrity": "sha512-gv0KQBEM+q/XdoKyznovq3KW7ocO7k+FhPP+hQR1MenJdu0uPGS6IZa9PzlbqBeS6XcZJNAoqoFxlAUW461CrA==", "dev": true, + "peer": true, "bin": { "css-prefers-color-scheme": "dist/cli.cjs" }, @@ -38603,6 +39745,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, + "peer": true, "dependencies": { "boolbase": "^1.0.0", "css-what": "^5.1.0", @@ -38619,6 +39762,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, + "peer": true, "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -38632,6 +39776,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -38641,6 +39786,7 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", "dev": true, + "peer": true, "engines": { "node": ">= 6" }, @@ -38653,6 +39799,7 @@ "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", "dev": true, + "peer": true, "dependencies": { "cssnano-preset-default": "^5.1.11", "lilconfig": "^2.0.3", @@ -38674,6 +39821,7 @@ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", "dev": true, + "peer": true, "dependencies": { "css-declaration-sorter": "^6.0.3", "cssnano-utils": "^3.0.1", @@ -38717,6 +39865,7 @@ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", "dev": true, + "peer": true, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -38728,13 +39877,15 @@ "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-scripts/node_modules/data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, + "peer": true, "dependencies": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", @@ -38749,6 +39900,7 @@ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -38758,6 +39910,7 @@ "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, + "peer": true, "dependencies": { "execa": "^5.0.0" }, @@ -38770,6 +39923,7 @@ "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, + "peer": true, "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", @@ -38792,6 +39946,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, + "peer": true, "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -38811,13 +39966,15 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "peer": true }, "node_modules/react-scripts/node_modules/domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, + "peer": true, "dependencies": { "webidl-conversions": "^5.0.0" }, @@ -38830,6 +39987,7 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -38839,6 +39997,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, + "peer": true, "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -38853,6 +40012,7 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", "dev": true, + "peer": true, "engines": { "node": ">=10" } @@ -38862,6 +40022,7 @@ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -38874,6 +40035,7 @@ "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", "dev": true, + "peer": true, "dependencies": { "@types/eslint": "^7.28.2", "jest-worker": "^27.3.1", @@ -38898,6 +40060,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "jest-get-type": "^27.5.1", @@ -38913,6 +40076,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "peer": true, "dependencies": { "websocket-driver": ">=0.5.1" }, @@ -38925,6 +40089,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -38941,6 +40106,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "peer": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -38953,6 +40119,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -38962,6 +40129,7 @@ "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, + "peer": true, "dependencies": { "whatwg-encoding": "^1.0.5" }, @@ -38973,13 +40141,15 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-scripts/node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, + "peer": true, "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -39001,6 +40171,7 @@ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "dev": true, + "peer": true, "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -39024,6 +40195,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", "dev": true, + "peer": true, "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -39043,6 +40215,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -39055,6 +40228,7 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "peer": true, "engines": { "node": "^10 || ^12 || >= 14" }, @@ -39067,24 +40241,17 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", "dev": true, + "peer": true, "engines": { "node": ">= 10" } }, - "node_modules/react-scripts/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/react-scripts/node_modules/jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "dev": true, + "peer": true, "dependencies": { "@jest/core": "^27.5.1", "import-local": "^3.0.2", @@ -39110,6 +40277,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "execa": "^5.0.0", @@ -39124,6 +40292,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/test-result": "^27.5.1", @@ -39154,6 +40323,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", "dev": true, + "peer": true, "dependencies": { "@jest/core": "^27.5.1", "@jest/test-result": "^27.5.1", @@ -39188,6 +40358,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.8.0", "@jest/test-sequencer": "^27.5.1", @@ -39231,6 +40402,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", "dev": true, + "peer": true, "dependencies": { "detect-newline": "^3.0.0" }, @@ -39243,6 +40415,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "chalk": "^4.0.0", @@ -39259,6 +40432,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -39277,6 +40451,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -39294,6 +40469,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", @@ -39320,6 +40496,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", "dev": true, + "peer": true, "dependencies": { "jest-get-type": "^27.5.1", "pretty-format": "^27.5.1" @@ -39333,6 +40510,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.5.1", @@ -39353,6 +40531,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*" @@ -39366,6 +40545,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", "dev": true, + "peer": true, "engines": { "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } @@ -39375,6 +40555,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "jest-regex-util": "^27.5.1", @@ -39389,6 +40570,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", "dev": true, + "peer": true, "dependencies": { "@jest/console": "^27.5.1", "@jest/environment": "^27.5.1", @@ -39421,6 +40603,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", "dev": true, + "peer": true, "dependencies": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -39454,6 +40637,7 @@ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "graceful-fs": "^4.2.9" @@ -39467,6 +40651,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "dev": true, + "peer": true, "dependencies": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", @@ -39500,6 +40685,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -39517,6 +40703,7 @@ "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", "dev": true, + "peer": true, "dependencies": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", @@ -39538,6 +40725,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -39555,6 +40743,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -39564,6 +40753,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", "dev": true, + "peer": true, "dependencies": { "@jest/console": "^28.1.3", "@jest/types": "^28.1.3", @@ -39579,6 +40769,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, + "peer": true, "dependencies": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -39596,6 +40787,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.19.tgz", "integrity": "sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==", "dev": true, + "peer": true, "dependencies": { "@types/yargs-parser": "*" } @@ -39605,6 +40797,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -39617,6 +40810,7 @@ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -39629,6 +40823,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.12.13", "@jest/types": "^28.1.3", @@ -39649,6 +40844,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -39658,6 +40854,7 @@ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", "dev": true, + "peer": true, "engines": { "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } @@ -39667,6 +40864,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, + "peer": true, "dependencies": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -39684,6 +40882,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", "dev": true, + "peer": true, "dependencies": { "@jest/test-result": "^28.1.3", "@jest/types": "^28.1.3", @@ -39703,6 +40902,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "peer": true, "dependencies": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -39716,6 +40916,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -39728,6 +40929,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "peer": true, "dependencies": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -39743,6 +40945,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -39755,6 +40958,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", "dev": true, + "peer": true, "dependencies": { "char-regex": "^2.0.0", "strip-ansi": "^7.0.1" @@ -39771,6 +40975,7 @@ "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", "dev": true, + "peer": true, "engines": { "node": ">=12.20" } @@ -39780,6 +40985,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -39795,6 +41001,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -39807,6 +41014,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", "dev": true, + "peer": true, "dependencies": { "@jest/test-result": "^27.5.1", "@jest/types": "^27.5.1", @@ -39825,6 +41033,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -39839,6 +41048,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -39854,6 +41064,7 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, + "peer": true, "dependencies": { "abab": "^2.0.5", "acorn": "^8.2.4", @@ -39900,6 +41111,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, + "peer": true, "engines": { "node": ">=8.3.0" }, @@ -39920,13 +41132,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-scripts/node_modules/json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "dependencies": { "minimist": "^1.2.5" }, @@ -39942,6 +41156,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, + "peer": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -39956,6 +41171,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -39970,13 +41186,15 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-scripts/node_modules/node-forge": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", "dev": true, + "peer": true, "engines": { "node": ">= 6.13.0" } @@ -39986,6 +41204,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, + "peer": true, "dependencies": { "boolbase": "^1.0.0" }, @@ -39998,6 +41217,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -40013,6 +41233,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -40028,6 +41249,7 @@ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, + "peer": true, "dependencies": { "@types/retry": "^0.12.0", "retry": "^0.13.1" @@ -40041,6 +41263,7 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dev": true, + "peer": true, "dependencies": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", @@ -40059,6 +41282,7 @@ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.2" }, @@ -40071,6 +41295,7 @@ "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", "dev": true, + "peer": true, "engines": { "node": ">=8" }, @@ -40084,6 +41309,7 @@ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz", "integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.0.2" @@ -40097,6 +41323,7 @@ "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.1.tgz", "integrity": "sha512-62OBIXCjRXpQZcFOYIXwXBlpAVWrYk8ek1rcjvMING4Q2cf0ipyN9qT+BhHA6HmftGSEnFQu2qgKO3gMscl3Rw==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40112,6 +41339,7 @@ "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.2.tgz", "integrity": "sha512-gyx8RgqSmGVK156NAdKcsfkY3KPGHhKqvHTL3hhveFrBBToguKFzhyiuk3cljH6L4fJ0Kv+JENuPXs1Wij27Zw==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40127,6 +41355,7 @@ "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40142,6 +41371,7 @@ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", @@ -40160,6 +41390,7 @@ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40175,6 +41406,7 @@ "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", "dev": true, + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -40187,6 +41419,7 @@ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.3.tgz", "integrity": "sha512-rtu3otIeY532PnEuuBrIIe+N+pcdbX/7JMZfrcL09wc78YayrHw5E8UkDfvnlOhEUrI4ptCuzXQfj+Or6spbGA==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40202,6 +41435,7 @@ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -40217,6 +41451,7 @@ "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.3.tgz", "integrity": "sha512-qiPm+CNAlgXiMf0J5IbBBEXA9l/Q5HGsNGkL3znIwT2ZFRLGY9U2fTUpa4lqCUXQOxaLimpacHeQC80BD2qbDw==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.8" }, @@ -40232,6 +41467,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", "dev": true, + "peer": true, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -40244,6 +41480,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", "dev": true, + "peer": true, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -40256,6 +41493,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", "dev": true, + "peer": true, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -40268,6 +41506,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", "dev": true, + "peer": true, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -40280,6 +41519,7 @@ "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.4.tgz", "integrity": "sha512-qz+s5vhKJlsHw8HjSs+HVk2QGFdRyC68KGRQGX3i+GcnUjhWhXQEmCXW6siOJkZ1giu0ddPwSO6I6JdVVVPoog==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40295,6 +41535,7 @@ "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.4.tgz", "integrity": "sha512-0ltahRTPtXSIlEZFv7zIvdEib7HN0ZbUQxrxIKn8KbiRyhALo854I/CggU5lyZe6ZBvSTJ6Al2vkZecI2OhneQ==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40310,6 +41551,7 @@ "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", "dev": true, + "peer": true, "peerDependencies": { "postcss": "^8.1.4" } @@ -40319,6 +41561,7 @@ "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.3.tgz", "integrity": "sha512-ozOsg+L1U8S+rxSHnJJiET6dNLyADcPHhEarhhtCI9DBLGOPG/2i4ddVoFch9LzrBgb8uDaaRI4nuid2OM82ZA==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.8" }, @@ -40334,6 +41577,7 @@ "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.3.tgz", "integrity": "sha512-fk9y2uFS6/Kpp7/A9Hz9Z4rlFQ8+tzgBcQCXAFSrXFGAbKx+4ZZOmmfHuYjCOMegPWoz0pnC6fNzi8j7Xyqp5Q==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.8" }, @@ -40349,6 +41593,7 @@ "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "dev": true, + "peer": true, "peerDependencies": { "postcss": "^8.1.0" } @@ -40358,6 +41603,7 @@ "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.2.tgz", "integrity": "sha512-EaMy/pbxtQnKDsnbEjdqlkCkROTQZzolcLKgIE+3b7EuJfJydH55cZeHfm+MtIezXRqhR80VKgaztO/vHq94Fw==", "dev": true, + "peer": true, "engines": { "node": "^12 || ^14 || >=16" }, @@ -40370,6 +41616,7 @@ "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.4.tgz", "integrity": "sha512-BlEo9gSTj66lXjRNByvkMK9dEdEGFXRfGjKRi9fo8s0/P3oEk74cAoonl/utiM50E2OPVb/XSu+lWvdW4KtE/Q==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40385,6 +41632,7 @@ "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", "dev": true, + "peer": true, "peerDependencies": { "postcss": "^8.0.0" } @@ -40394,6 +41642,7 @@ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", "dev": true, + "peer": true, "dependencies": { "camelcase-css": "^2.0.1" }, @@ -40413,6 +41662,7 @@ "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.0.3.tgz", "integrity": "sha512-MH4tymWmefdZQ7uVG/4icfLjAQmH6o2NRYyVh2mKoB4RXJp9PjsyhZwhH4ouaCQHvg+qJVj3RzeAR1EQpIlXZA==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40428,6 +41678,7 @@ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, + "peer": true, "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", @@ -40450,6 +41701,7 @@ "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.3.tgz", "integrity": "sha512-P5NcHWYrif0vK8rgOy/T87vg0WRIj3HSknrvp1wzDbiBeoDPVmiVRmkown2eSQdpPveat/MC1ess5uhzZFVnqQ==", "dev": true, + "peer": true, "engines": { "node": "^12 || ^14 || >=16" }, @@ -40462,6 +41714,7 @@ "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", "dev": true, + "peer": true, "engines": { "node": ">=10.0.0" }, @@ -40474,6 +41727,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.0.2" @@ -40490,6 +41744,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", @@ -40508,6 +41763,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40523,6 +41779,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", "dev": true, + "peer": true, "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.0.1", @@ -40540,6 +41797,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.16.6", "cssnano-utils": "^3.0.1", @@ -40557,6 +41815,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.5" }, @@ -40572,6 +41831,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, + "peer": true, "engines": { "node": "^10 || ^12 || >= 14" }, @@ -40584,6 +41844,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, + "peer": true, "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -40601,6 +41862,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.4" }, @@ -40616,6 +41878,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "peer": true, "dependencies": { "icss-utils": "^5.0.0" }, @@ -40631,6 +41894,7 @@ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.6" }, @@ -40650,6 +41914,7 @@ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.2.tgz", "integrity": "sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.8" }, @@ -40665,6 +41930,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", "dev": true, + "peer": true, "dependencies": { "@csstools/normalize.css": "*", "postcss-browser-comments": "^4", @@ -40683,6 +41949,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", "dev": true, + "peer": true, "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -40695,6 +41962,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40710,6 +41978,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40725,6 +41994,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40740,6 +42010,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40755,6 +42026,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40770,6 +42042,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.16.6", "postcss-value-parser": "^4.2.0" @@ -40786,6 +42059,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", "dev": true, + "peer": true, "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" @@ -40802,6 +42076,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40817,6 +42092,7 @@ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", "dev": true, + "peer": true, "dependencies": { "cssnano-utils": "^3.0.1", "postcss-value-parser": "^4.2.0" @@ -40833,6 +42109,7 @@ "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.2.tgz", "integrity": "sha512-odBMVt6PTX7jOE9UNvmnLrFzA9pXS44Jd5shFGGtSHY80QCuJF+14McSy0iavZggRZ9Oj//C9vOKQmexvyEJMg==", "dev": true, + "peer": true, "engines": { "node": "^12 || ^14 || >=16" }, @@ -40845,6 +42122,7 @@ "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", "dev": true, + "peer": true, "peerDependencies": { "postcss": "^8" } @@ -40854,6 +42132,7 @@ "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.3.tgz", "integrity": "sha512-tDQ3m+GYoOar+KoQgj+pwPAvGHAp/Sby6vrFiyrELrMKQJ4AejL0NcS0mm296OKKYA2SRg9ism/hlT/OLhBrdQ==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40869,6 +42148,7 @@ "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz", "integrity": "sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA==", "dev": true, + "peer": true, "dependencies": { "autoprefixer": "^10.4.2", "browserslist": "^4.19.1", @@ -40916,6 +42196,7 @@ "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.0.2.tgz", "integrity": "sha512-CG35J1COUH7OOBgpw5O+0koOLUd5N4vUGKUqSAuIe4GiuLHWU96Pqp+UPC8QITTd12zYAFx76pV7qWT/0Aj/TA==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.8" }, @@ -40931,6 +42212,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0" @@ -40947,6 +42229,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -40962,6 +42245,7 @@ "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", "dev": true, + "peer": true, "peerDependencies": { "postcss": "^8.0.3" } @@ -40971,6 +42255,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", "dev": true, + "peer": true, "dependencies": { "balanced-match": "^1.0.0" }, @@ -40983,6 +42268,7 @@ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", "dev": true, + "peer": true, "dependencies": { "postcss-value-parser": "^4.1.0", "svgo": "^2.7.0" @@ -40999,6 +42285,7 @@ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", "dev": true, + "peer": true, "dependencies": { "postcss-selector-parser": "^6.0.5" }, @@ -41014,6 +42301,7 @@ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, + "peer": true, "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -41023,13 +42311,15 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-scripts/node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, + "peer": true, "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -41043,6 +42333,7 @@ "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "peer": true, "engines": { "node": ">= 4" } @@ -41052,6 +42343,7 @@ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", "dev": true, + "peer": true, "dependencies": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -41086,6 +42378,7 @@ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, + "peer": true, "dependencies": { "xmlchars": "^2.2.0" }, @@ -41098,6 +42391,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -41116,6 +42410,7 @@ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", "dev": true, + "peer": true, "dependencies": { "node-forge": "^1.2.0" }, @@ -41128,6 +42423,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "peer": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -41143,6 +42439,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, + "peer": true, "dependencies": { "randombytes": "^2.1.0" } @@ -41152,6 +42449,7 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "peer": true, "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -41163,6 +42461,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true, + "peer": true, "engines": { "node": ">= 8" } @@ -41172,6 +42471,7 @@ "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", "dev": true, + "peer": true, "dependencies": { "abab": "^2.0.5", "iconv-lite": "^0.6.3", @@ -41193,6 +42493,7 @@ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", "dev": true, + "peer": true, "engines": { "node": ">= 12.13.0" }, @@ -41209,6 +42510,7 @@ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", "dev": true, + "peer": true, "dependencies": { "browserslist": "^4.16.6", "postcss-selector-parser": "^6.0.4" @@ -41225,6 +42527,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -41237,6 +42540,7 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, + "peer": true, "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -41258,6 +42562,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "peer": true, "engines": { "node": ">= 10" } @@ -41267,6 +42572,7 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.17.tgz", "integrity": "sha512-OiHUsmOKQQEg/ocXaLIjk/kOz8EK2jF6iPuc1bQ4NsmhYl7sk70UDsGV02AJvBAAiJhinPCkDR8egT9qY+ulCw==", "dev": true, + "peer": true, "dependencies": { "arg": "^5.0.1", "chalk": "^4.1.2", @@ -41306,33 +42612,17 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "peer": true, "engines": { "node": ">=6" } }, - "node_modules/react-scripts/node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/react-scripts/node_modules/terser-webpack-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, + "peer": true, "dependencies": { "jest-worker": "^27.4.1", "schema-utils": "^3.1.1", @@ -41367,21 +42657,17 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/react-scripts/node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/react-scripts/node_modules/tr46": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, + "peer": true, "dependencies": { "punycode": "^2.1.1" }, @@ -41408,6 +42694,7 @@ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "dev": true, + "peer": true, "bin": { "uuid": "dist/bin/uuid" } @@ -41417,6 +42704,7 @@ "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, + "peer": true, "dependencies": { "xml-name-validator": "^3.0.0" }, @@ -41429,6 +42717,7 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", "dev": true, + "peer": true, "engines": { "node": ">=10.4" } @@ -41438,6 +42727,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", "dev": true, + "peer": true, "dependencies": { "colorette": "^2.0.10", "memfs": "^3.2.2", @@ -41461,6 +42751,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -41477,6 +42768,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -41489,6 +42781,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -41508,6 +42801,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", "dev": true, + "peer": true, "dependencies": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -41559,6 +42853,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -41575,6 +42870,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -41587,6 +42883,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, + "peer": true, "engines": { "node": ">=12" }, @@ -41599,6 +42896,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "peer": true, "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -41618,6 +42916,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "peer": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -41633,6 +42932,7 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, + "peer": true, "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -41647,6 +42947,7 @@ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, + "peer": true, "dependencies": { "iconv-lite": "0.4.24" } @@ -41656,6 +42957,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "peer": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -41667,13 +42969,15 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-scripts/node_modules/whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, + "peer": true, "dependencies": { "lodash": "^4.7.0", "tr46": "^2.1.0", @@ -41687,7 +42991,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/react-select": { "version": "5.4.0", @@ -42092,6 +43397,7 @@ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", "dev": true, + "peer": true, "dependencies": { "minimatch": "3.0.4" }, @@ -42205,9 +43511,9 @@ } }, "node_modules/regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "node_modules/regenerator-transform": { "version": "0.15.1", @@ -42235,7 +43541,8 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true + "dev": true, + "peer": true }, "node_modules/regexp.prototype.flags": { "version": "1.4.3", @@ -42328,15 +43635,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-slug/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/rehype-slug/node_modules/hast-util-has-property": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz", @@ -42346,106 +43644,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/rehype-slug/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/rehype-slug/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rehype-slug/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/rehype-slug/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-slug/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-slug/node_modules/vfile": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz", - "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/rehype-slug/node_modules/vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/rehype-urls": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/rehype-urls/-/rehype-urls-1.1.1.tgz", @@ -42501,115 +43699,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-directive/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-directive/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/remark-directive/node_modules/is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-directive/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-directive/node_modules/unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-directive/node_modules/unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-directive/node_modules/vfile": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", - "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-directive/node_modules/vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-external-links": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/remark-external-links/-/remark-external-links-8.0.0.tgz", @@ -42681,115 +43770,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-frontmatter/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-frontmatter/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/remark-frontmatter/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-frontmatter/node_modules/trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-frontmatter/node_modules/unified": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz", - "integrity": "sha512-v4ky1+6BN9X3pQrOdkFIPWAaeDsHPE1svRDxq7YpTc2plkIqFMwukfqM+l0ewpP9EfwARlt9pPFAeWYhHm8X9w==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-frontmatter/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-frontmatter/node_modules/vfile": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.0.tgz", - "integrity": "sha512-Tj44nY/48OQvarrE4FAjUfrv7GZOYzPbl5OD65HxVKwLJKMPU7zmfV8cCgCnzKWnSfYG2f3pxu+ALqs7j22xQQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-frontmatter/node_modules/vfile-message": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.0.tgz", - "integrity": "sha512-4QJbBk+DkPEhBXq3f260xSaWtjE4gPKOfulzfMFF8ZNwaPZieWsg3iVlcmF04+eebzpcpeXOOFMfrYzJHVYg+g==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-gfm": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-3.0.1.tgz", @@ -42805,115 +43785,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-gfm/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-gfm/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/remark-gfm/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/remark-gfm/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-gfm/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/vfile": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.2.0.tgz", - "integrity": "sha512-ftCpb6pU8Jrzcqku8zE6N3Gi4/RkDhRwEXSWudzZzA2eEOn/cBpsfk9aulCUR+j1raRSAykYQap9u6j6rhUaCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-gfm/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", @@ -42997,6 +43868,48 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/remark-mdx/node_modules/bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-mdx/node_modules/is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } + }, + "node_modules/remark-mdx/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/remark-mdx/node_modules/json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -43018,6 +43931,34 @@ "semver": "bin/semver" } }, + "node_modules/remark-mdx/node_modules/trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/remark-parse": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", @@ -43061,48 +44002,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-rehype/node_modules/bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-rehype/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/remark-rehype/node_modules/is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/remark-rehype/node_modules/mdast-util-definitions": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz", @@ -43164,33 +44063,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-rehype/node_modules/trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/remark-rehype/node_modules/unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "dependencies": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-rehype/node_modules/unist-builder": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz", @@ -43230,46 +44102,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/remark-rehype/node_modules/unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "dependencies": { - "@types/unist": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/vfile": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.2.0.tgz", - "integrity": "sha512-ftCpb6pU8Jrzcqku8zE6N3Gi4/RkDhRwEXSWudzZzA2eEOn/cBpsfk9aulCUR+j1raRSAykYQap9u6j6rhUaCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-rehype/node_modules/vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/remark-slug": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-6.1.0.tgz", @@ -43586,6 +44418,7 @@ "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", "dev": true, + "peer": true, "dependencies": { "adjust-sourcemap-loader": "^4.0.0", "convert-source-map": "^1.7.0", @@ -43614,6 +44447,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "dependencies": { "minimist": "^1.2.5" }, @@ -43629,6 +44463,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, + "peer": true, "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -43643,6 +44478,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -43738,6 +44574,7 @@ "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -43748,51 +44585,16 @@ "rollup": "^2.0.0" } }, - "node_modules/rollup-plugin-terser/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/rollup-plugin-terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, + "peer": true, "dependencies": { "randombytes": "^2.1.0" } }, - "node_modules/rollup-plugin-terser/node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -44252,7 +45054,8 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/sass": { "version": "1.52.3", @@ -44279,7 +45082,8 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/saxes": { "version": "6.0.0", @@ -44335,7 +45139,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true + "dev": true, + "peer": true }, "node_modules/selenium-webdriver": { "version": "4.1.2", @@ -44475,6 +45280,7 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, + "peer": true, "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -44493,6 +45299,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "peer": true, "dependencies": { "ms": "2.0.0" } @@ -44502,6 +45309,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, + "peer": true, "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -44516,19 +45324,22 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "peer": true }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "peer": true }, "node_modules/serve-index/node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/serve-static": { "version": "1.15.0", @@ -44652,7 +45463,8 @@ "version": "1.7.3", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/should": { "version": "13.2.3", @@ -45134,6 +45946,7 @@ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "peer": true, "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -45150,6 +45963,7 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "peer": true, "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -45324,6 +46138,7 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true, + "peer": true, "engines": { "node": ">= 0.6" } @@ -45643,6 +46458,7 @@ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, + "peer": true, "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -45677,6 +46493,7 @@ "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", "dev": true, + "peer": true, "engines": { "node": ">=10" } @@ -46073,32 +46890,6 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "node_modules/stylelint/node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/stylelint/node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/stylelint/node_modules/cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", @@ -46127,18 +46918,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/stylelint/node_modules/import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", @@ -46157,59 +46936,6 @@ "node": ">=0.10.0" } }, - "node_modules/stylelint/node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/stylelint/node_modules/postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -46250,15 +46976,6 @@ "postcss": "^8.3.3" } }, - "node_modules/stylelint/node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/stylelint/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -46268,42 +46985,6 @@ "node": ">=8" } }, - "node_modules/stylelint/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stylelint/node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/stylelint/node_modules/write-file-atomic": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", @@ -46396,6 +47077,7 @@ "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", "dev": true, + "peer": true, "dependencies": { "chalk": "^2.4.1", "coa": "^2.0.2", @@ -46423,6 +47105,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "peer": true, "dependencies": { "sprintf-js": "~1.0.2" } @@ -46432,6 +47115,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "peer": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -46703,6 +47387,7 @@ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, + "peer": true, "engines": { "node": ">=8" } @@ -46712,6 +47397,7 @@ "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dev": true, + "peer": true, "dependencies": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", @@ -46730,6 +47416,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, + "peer": true, "engines": { "node": ">=10" }, @@ -46742,6 +47429,7 @@ "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, + "peer": true, "dependencies": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" @@ -46754,20 +47442,21 @@ } }, "node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" }, "engines": { - "node": ">=6.0.0" + "node": ">=10" } }, "node_modules/terser-webpack-plugin": { @@ -46797,24 +47486,6 @@ "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/terser-webpack-plugin/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/terser-webpack-plugin/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -46857,22 +47528,16 @@ "node": ">=0.10.0" } }, - "node_modules/terser-webpack-plugin/node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "node_modules/terser/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, "bin": { - "terser": "bin/terser" + "acorn": "bin/acorn" }, "engines": { - "node": ">=10" + "node": ">=0.4.0" } }, "node_modules/terser/node_modules/commander": { @@ -46881,15 +47546,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/terser/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -46919,7 +47575,8 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "dev": true + "dev": true, + "peer": true }, "node_modules/throttle-debounce": { "version": "3.0.1", @@ -46973,7 +47630,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/timers-browserify": { "version": "2.0.12", @@ -46997,6 +47655,13 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true, + "peer": true + }, + "node_modules/tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", "dev": true }, "node_modules/tiny-warning": { @@ -47164,13 +47829,12 @@ "dev": true }, "node_modules/trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, - "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/trim-trailing-lines": { @@ -47184,10 +47848,9 @@ } }, "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -47197,7 +47860,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/ts-dedent": { "version": "2.1.1", @@ -47328,21 +47992,21 @@ } }, "node_modules/tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "node_modules/tsconfig-paths/node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "engines": { "node": ">=4" @@ -47559,17 +48223,17 @@ } }, "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", "dependencies": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, "funding": { "type": "opencollective", @@ -47580,7 +48244,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, "funding": [ { "type": "github", @@ -47600,12 +48263,54 @@ } }, "node_modules/unified/node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unified/node_modules/unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "dependencies": { + "@types/unist": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/vfile": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz", + "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==", + "dependencies": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/vfile-message": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.3.tgz", + "integrity": "sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==", + "dependencies": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/union-value": { @@ -47646,6 +48351,7 @@ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "peer": true, "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -47837,7 +48543,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true + "dev": true, + "peer": true }, "node_modules/unset-value": { "version": "1.0.0", @@ -48098,6 +48805,7 @@ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dev": true, + "peer": true, "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.2", @@ -48313,6 +49021,566 @@ "node": ">=4" } }, + "node_modules/vite": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "dev": true, + "dependencies": { + "esbuild": "^0.16.3", + "postcss": "^8.4.20", + "resolve": "^1.22.1", + "rollup": "^3.7.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.5.3.tgz", + "integrity": "sha512-upPESKsQTypC2S7LPjxu9HknOymNSToAAHTYSFHb0at5GKLcN1QGMAR5Hb+7KqZclGMVniXAj7QdhZv+fTx83Q==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" + }, + "engines": { + "node": ">=14.16" + }, + "peerDependencies": { + "eslint": ">=7", + "meow": "^9.0.0", + "optionator": "^0.9.1", + "stylelint": ">=13", + "typescript": "*", + "vite": ">=2.0.0", + "vls": "*", + "vti": "*" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "meow": { + "optional": true + }, + "optionator": { + "optional": true + }, + "stylelint": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vls": { + "optional": true + }, + "vti": { + "optional": true + } + } + }, + "node_modules/vite-plugin-checker/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/vite-plugin-checker/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vite-plugin-checker/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/vite-plugin-checker/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/vite-plugin-checker/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/vite-plugin-checker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-checker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/vite-plugin-svgr": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-2.4.0.tgz", + "integrity": "sha512-q+mJJol6ThvqkkJvvVFEndI4EaKIjSI0I3jNFgSoC9fXAz1M7kYTVUin8fhUsFojFDKZ9VHKtX6NXNaOLpbsHA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.2", + "@svgr/core": "^6.5.1" + }, + "peerDependencies": { + "vite": "^2.6.0 || 3 || 4" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dev": true, + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/vite-plugin-svgr/node_modules/@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "node_modules/vite-plugin-svgr/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vite-plugin-svgr/node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/vite-tsconfig-paths": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.0.3.tgz", + "integrity": "sha512-gRO2Q/tOkV+9kMht5tz90+IaEKvW2zCnvwJV3tp2ruPNZOTM5rF+yXorJT4ggmAMYEaJ3nyXjx5P5jY5FwiZ+A==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^2.0.1" + }, + "peerDependencies": { + "vite": ">2.0.0-0" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "node_modules/vite/node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.0.tgz", + "integrity": "sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -48356,12 +49624,91 @@ "node": ">=0.4.0" } }, + "node_modules/vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "dev": true, + "engines": { + "node": ">=8.0.0 || >=10.0.0" + } + }, + "node_modules/vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "engines": { + "vscode": "^1.52.0" + } + }, + "node_modules/vscode-languageclient/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dev": true, + "dependencies": { + "vscode-languageserver-protocol": "3.16.0" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dev": true, + "dependencies": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", + "dev": true + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, "node_modules/w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", "dev": true, + "peer": true, "dependencies": { "browser-process-hrtime": "^1.0.0" } @@ -48707,6 +50054,7 @@ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "peer": true, "dependencies": { "minimalistic-assert": "^1.0.0" } @@ -48860,6 +50208,7 @@ "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", "dev": true, + "peer": true, "dependencies": { "tapable": "^2.0.0", "webpack-sources": "^2.2.0" @@ -48876,6 +50225,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "peer": true, "engines": { "node": ">=0.10.0" } @@ -48885,6 +50235,7 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "peer": true, "engines": { "node": ">=6" } @@ -48894,6 +50245,7 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", "dev": true, + "peer": true, "dependencies": { "source-list-map": "^2.0.1", "source-map": "^0.6.1" @@ -48902,19 +50254,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -48979,12 +50318,6 @@ "acorn": "^8" } }, - "node_modules/webpack/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/webpack/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -49068,24 +50401,6 @@ "node": ">=6" } }, - "node_modules/webpack/node_modules/terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/webpack/node_modules/terser-webpack-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", @@ -49176,7 +50491,8 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true + "dev": true, + "peer": true }, "node_modules/whatwg-mimetype": { "version": "3.0.0", @@ -49231,6 +50547,41 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "dependencies": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -49252,12 +50603,6 @@ "node": ">=8" } }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -49278,6 +50623,7 @@ "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz", "integrity": "sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==", "dev": true, + "peer": true, "dependencies": { "idb": "^6.1.4", "workbox-core": "6.4.2" @@ -49287,13 +50633,15 @@ "version": "6.1.5", "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/workbox-broadcast-update": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.4.2.tgz", "integrity": "sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==", "dev": true, + "peer": true, "dependencies": { "workbox-core": "6.4.2" } @@ -49303,6 +50651,7 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.4.2.tgz", "integrity": "sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==", "dev": true, + "peer": true, "dependencies": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.11.1", @@ -49352,6 +50701,7 @@ "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.2.tgz", "integrity": "sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==", "dev": true, + "peer": true, "dependencies": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", @@ -49369,6 +50719,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -49385,6 +50736,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "peer": true, "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -49399,13 +50751,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "peer": true }, "node_modules/workbox-build/node_modules/source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, + "peer": true, "dependencies": { "whatwg-url": "^7.0.0" }, @@ -49418,6 +50772,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, + "peer": true, "dependencies": { "punycode": "^2.1.0" } @@ -49427,6 +50782,7 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, + "peer": true, "engines": { "node": ">= 10.0.0" } @@ -49435,13 +50791,15 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/workbox-build/node_modules/whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, + "peer": true, "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -49453,6 +50811,7 @@ "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.4.2.tgz", "integrity": "sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==", "dev": true, + "peer": true, "dependencies": { "workbox-core": "6.4.2" } @@ -49461,13 +50820,15 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.4.2.tgz", "integrity": "sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/workbox-expiration": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.4.2.tgz", "integrity": "sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==", "dev": true, + "peer": true, "dependencies": { "idb": "^6.1.4", "workbox-core": "6.4.2" @@ -49477,13 +50838,15 @@ "version": "6.1.5", "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==", - "dev": true + "dev": true, + "peer": true }, "node_modules/workbox-google-analytics": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.4.2.tgz", "integrity": "sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==", "dev": true, + "peer": true, "dependencies": { "workbox-background-sync": "6.4.2", "workbox-core": "6.4.2", @@ -49496,6 +50859,7 @@ "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.4.2.tgz", "integrity": "sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==", "dev": true, + "peer": true, "dependencies": { "workbox-core": "6.4.2" } @@ -49505,6 +50869,7 @@ "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.4.2.tgz", "integrity": "sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==", "dev": true, + "peer": true, "dependencies": { "workbox-core": "6.4.2", "workbox-routing": "6.4.2", @@ -49516,6 +50881,7 @@ "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.4.2.tgz", "integrity": "sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==", "dev": true, + "peer": true, "dependencies": { "workbox-core": "6.4.2" } @@ -49525,6 +50891,7 @@ "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.4.2.tgz", "integrity": "sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==", "dev": true, + "peer": true, "dependencies": { "workbox-cacheable-response": "6.4.2", "workbox-core": "6.4.2", @@ -49539,6 +50906,7 @@ "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.4.2.tgz", "integrity": "sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==", "dev": true, + "peer": true, "dependencies": { "workbox-core": "6.4.2" } @@ -49548,6 +50916,7 @@ "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.4.2.tgz", "integrity": "sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==", "dev": true, + "peer": true, "dependencies": { "workbox-core": "6.4.2" } @@ -49557,6 +50926,7 @@ "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.4.2.tgz", "integrity": "sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==", "dev": true, + "peer": true, "dependencies": { "workbox-core": "6.4.2", "workbox-routing": "6.4.2" @@ -49566,13 +50936,15 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.4.2.tgz", "integrity": "sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==", - "dev": true + "dev": true, + "peer": true }, "node_modules/workbox-webpack-plugin": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.4.2.tgz", "integrity": "sha512-CiEwM6kaJRkx1cP5xHksn13abTzUqMHiMMlp5Eh/v4wRcedgDTyv6Uo8+Hg9MurRbHDosO5suaPyF9uwVr4/CQ==", "dev": true, + "peer": true, "dependencies": { "fast-json-stable-stringify": "^2.1.0", "pretty-bytes": "^5.4.1", @@ -49593,6 +50965,7 @@ "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.4.2.tgz", "integrity": "sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==", "dev": true, + "peer": true, "dependencies": { "@types/trusted-types": "^2.0.2", "workbox-core": "6.4.2" @@ -50955,6 +52328,7 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.13.tgz", "integrity": "sha512-qmzKVTn46Upvtxv8LQoQ8mTCdUC83AOVQIQm57e9oekLT5cmK9GOMOfcWhe8jMNx4UJXn/UDhVZ/7lGofVNeDQ==", "dev": true, + "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.12.13" } @@ -50990,6 +52364,24 @@ "@babel/plugin-transform-react-jsx": "^7.18.6" } }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, "@babel/plugin-transform-react-pure-annotations": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", @@ -51390,21 +52782,11 @@ } }, "@babel/runtime": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", - "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/runtime-corejs3": { - "version": "7.16.8", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.16.8.tgz", - "integrity": "sha512-3fKhuICS1lMz0plI5ktOE/yEtBRMVxplzRkdn6mJQ197XiY0JnrzYV0+Mxozq3JZ8SBV9Ecurmw1XsGbwOf+Sg==", - "dev": true, + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.7.tgz", + "integrity": "sha512-UF0tvkUtxwAgZ5W/KrkHf0Rn0fdnLDU9ScxBrEVNUprE/MzirjK4MJUX1/BVDv00Sv8cljtukVK1aky++X1SjQ==", "requires": { - "core-js-pure": "^3.20.2", - "regenerator-runtime": "^0.13.4" + "regenerator-runtime": "^0.13.11" } }, "@babel/template": { @@ -51473,71 +52855,6 @@ "dev": true, "optional": true }, - "@craco/craco": { - "version": "7.0.0-alpha.7", - "resolved": "https://registry.npmjs.org/@craco/craco/-/craco-7.0.0-alpha.7.tgz", - "integrity": "sha512-3RU+Ur1GvBQKDBL1JhssSgazc8s3pMAgndyS+95UaXdMTuozpI9h4k4OokQRRjiLmr7i0y39l6fBZvknGj2i1w==", - "dev": true, - "requires": { - "autoprefixer": "^10.4.7", - "cosmiconfig": "^7.0.1", - "cosmiconfig-typescript-loader": "^2.0.2", - "cross-spawn": "^7.0.3", - "lodash": "^4.17.21", - "semver": "^7.3.7", - "webpack-merge": "^5.8.0" - }, - "dependencies": { - "autoprefixer": { - "version": "10.4.7", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.7.tgz", - "integrity": "sha512-ypHju4Y2Oav95SipEcCcI5J7CGPuvz8oat7sUtYj3ClK44bldfvtvcxK6IEK++7rqB7YchDGzweZIBG+SD0ZAA==", - "dev": true, - "requires": { - "browserslist": "^4.20.3", - "caniuse-lite": "^1.0.30001335", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "postcss": { - "version": "8.4.14", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", - "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", - "dev": true, - "peer": true, - "requires": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - } - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, "@cspotcode/source-map-support": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", @@ -51551,7 +52868,8 @@ "version": "12.0.0", "resolved": "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz", "integrity": "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==", - "dev": true + "dev": true, + "peer": true }, "@datadog/browser-core": { "version": "4.21.2", @@ -51721,6 +53039,69 @@ "dev": true, "optional": true }, + "@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "dev": true, + "optional": true + }, "@esbuild/linux-loong64": { "version": "0.15.18", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", @@ -51728,17 +53109,94 @@ "dev": true, "optional": true }, + "@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "dev": true, + "optional": true + }, "@eslint/eslintrc": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.0.5.tgz", - "integrity": "sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.2.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.0.5", @@ -51746,20 +53204,14 @@ }, "dependencies": { "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "requires": { "type-fest": "^0.20.2" } }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -52609,9 +54061,9 @@ "requires": {} }, "@humanwhocodes/config-array": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.3.tgz", - "integrity": "sha512-3xSMlXHh03hCcCmFc0rbKp3Ivt2PFEJnQUJDDMTJQ2wkECZWdq4GePs2ctc5H8zV+cHPaq8k2vU8mrQjA6iHdQ==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.8.tgz", + "integrity": "sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==", "dev": true, "requires": { "@humanwhocodes/object-schema": "^1.2.1", @@ -52619,6 +54071,12 @@ "minimatch": "^3.0.5" } }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -54180,6 +55638,24 @@ "@babel/helper-plugin-utils": "^7.10.4" } }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -54192,6 +55668,26 @@ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } + }, "unist-util-visit": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", @@ -54264,28 +55760,28 @@ } }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, @@ -54547,6 +56043,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", "dev": true, + "peer": true, "requires": { "@babel/helper-module-imports": "^7.10.4", "@rollup/pluginutils": "^3.1.0" @@ -54572,6 +56069,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, + "peer": true, "requires": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", @@ -54585,7 +56083,8 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "dev": true, + "peer": true } } }, @@ -54594,6 +56093,7 @@ "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, + "peer": true, "requires": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" @@ -55347,18 +56847,18 @@ "dev": true }, "@storybook/addon-actions": { - "version": "6.5.8", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.8.tgz", - "integrity": "sha512-9ciR1iWBTzQNBDlq0iQs9+TV7gng+FbQxW5mHNxNvT9SxY1dt02wCPHZeVE/5la61wBXZs/zpEepZA93VzVBDw==", + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.15.tgz", + "integrity": "sha512-cnLzVK1S+EydFDSuvxMmMAxVqNXijBGdV9QTgsu6ys5sOkoiXRETKZmxuN8/ZRbkfc4N+1KAylSCZOOHzBQTBQ==", "dev": true, "requires": { - "@storybook/addons": "6.5.8", - "@storybook/api": "6.5.8", - "@storybook/client-logger": "6.5.8", - "@storybook/components": "6.5.8", - "@storybook/core-events": "6.5.8", + "@storybook/addons": "6.5.15", + "@storybook/api": "6.5.15", + "@storybook/client-logger": "6.5.15", + "@storybook/components": "6.5.15", + "@storybook/core-events": "6.5.15", "@storybook/csf": "0.0.2--canary.4566f4d.1", - "@storybook/theming": "6.5.8", + "@storybook/theming": "6.5.15", "core-js": "^3.8.2", "fast-deep-equal": "^3.1.3", "global": "^4.4.0", @@ -55371,6 +56871,123 @@ "ts-dedent": "^2.0.0", "util-deprecate": "^1.0.2", "uuid-browser": "^3.1.0" + }, + "dependencies": { + "@storybook/addons": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/addons/-/addons-6.5.15.tgz", + "integrity": "sha512-xT31SuSX+kYGyxCNK2nqL7WTxucs3rSmhiCLovJcUjYk+QquV3c2c53Ki7lwwdDbzfXFcNAe0HJ4hoTN4jhn0Q==", + "dev": true, + "requires": { + "@storybook/api": "6.5.15", + "@storybook/channels": "6.5.15", + "@storybook/client-logger": "6.5.15", + "@storybook/core-events": "6.5.15", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.15", + "@storybook/theming": "6.5.15", + "@types/webpack-env": "^1.16.0", + "core-js": "^3.8.2", + "global": "^4.4.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/api": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/api/-/api-6.5.15.tgz", + "integrity": "sha512-BBE0KXKvj1/3jTghbIoWfrcDM0t+xO7EYtWWAXD6XlhGsZVD2Dy82Z52ONyLulMDRpMWl0OYy3h6A1YnFUH25w==", + "dev": true, + "requires": { + "@storybook/channels": "6.5.15", + "@storybook/client-logger": "6.5.15", + "@storybook/core-events": "6.5.15", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/router": "6.5.15", + "@storybook/semver": "^7.3.2", + "@storybook/theming": "6.5.15", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7", + "store2": "^2.12.0", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/channels": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/channels/-/channels-6.5.15.tgz", + "integrity": "sha512-gPpsBgirv2NCXbH4WbYqdkI0JLE96aiVuu7UEWfn9yu071pQ9CLHbhXGD9fSFNrfOkyBBY10ppSE7uCXw3Wexg==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/client-logger": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/client-logger/-/client-logger-6.5.15.tgz", + "integrity": "sha512-0uyxKvodq+FycGv6aUwC1wUR6suXf2+7ywMFAOlYolI4UvNj8NyU/5AfgKT5XnxYAgPmoCiAjOE700TrfHrosw==", + "dev": true, + "requires": { + "core-js": "^3.8.2", + "global": "^4.4.0" + } + }, + "@storybook/components": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-6.5.15.tgz", + "integrity": "sha512-bHTT0Oa3s4g+MBMaLBbX9ofMtb1AW59AzIUNGrfqW1XqJMGuUHMiJ7TSo+i5dRSFpbFygnwMEG9LfHxpR2Z0Dw==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.15", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.15", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7", + "util-deprecate": "^1.0.2" + } + }, + "@storybook/core-events": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/core-events/-/core-events-6.5.15.tgz", + "integrity": "sha512-B1Ba6l5W7MeNclclqMMTMHgYgfdpB5SIhNCQFnzIz8blynzRhNFMdxvbAl6Je5G0S4xydYYd7Lno2kXQebs7HA==", + "dev": true, + "requires": { + "core-js": "^3.8.2" + } + }, + "@storybook/router": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/router/-/router-6.5.15.tgz", + "integrity": "sha512-9t8rI8t7/Krolau29gsdjdbRQ66orONIyP0efp0EukVgv6reNFzb/U14ARrl0uHys6Tl5Xyece9FoakQUdn8Kg==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.15", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "qs": "^6.10.0", + "regenerator-runtime": "^0.13.7" + } + }, + "@storybook/theming": { + "version": "6.5.15", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-6.5.15.tgz", + "integrity": "sha512-pgdW0lVZKKXQ4VhIfLHycMmwFSVOY7vLTKnytag4Y8Yz+aXm0bwDN/QxPntFzDH47F1Rcy2ywNnvty8ooDTvuA==", + "dev": true, + "requires": { + "@storybook/client-logger": "6.5.15", + "core-js": "^3.8.2", + "memoizerific": "^1.11.3", + "regenerator-runtime": "^0.13.7" + } + } } }, "@storybook/addon-backgrounds": { @@ -55471,6 +57088,35 @@ "core-js": "^3.8.2", "regenerator-runtime": "^0.13.7", "ts-dedent": "^2.0.0" + }, + "dependencies": { + "@storybook/addon-actions": { + "version": "6.5.8", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.5.8.tgz", + "integrity": "sha512-9ciR1iWBTzQNBDlq0iQs9+TV7gng+FbQxW5mHNxNvT9SxY1dt02wCPHZeVE/5la61wBXZs/zpEepZA93VzVBDw==", + "dev": true, + "requires": { + "@storybook/addons": "6.5.8", + "@storybook/api": "6.5.8", + "@storybook/client-logger": "6.5.8", + "@storybook/components": "6.5.8", + "@storybook/core-events": "6.5.8", + "@storybook/csf": "0.0.2--canary.4566f4d.1", + "@storybook/theming": "6.5.8", + "core-js": "^3.8.2", + "fast-deep-equal": "^3.1.3", + "global": "^4.4.0", + "lodash": "^4.17.21", + "polished": "^4.2.2", + "prop-types": "^15.7.2", + "react-inspector": "^5.1.0", + "regenerator-runtime": "^0.13.7", + "telejson": "^6.0.8", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2", + "uuid-browser": "^3.1.0" + } + } } }, "@storybook/addon-measure": { @@ -55841,6 +57487,12 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -56169,6 +57821,17 @@ "safe-buffer": "~5.1.0" } }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -56314,12 +57977,6 @@ "integrity": "sha512-j11XSuRuAlft6vLDEX4RvhqC0KxNxx6QIyMXNb0vHHSNPXTPeiy3algESWmOOIzEtiEL0qiowPU3ewW9hHVa7Q==", "dev": true }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, "clean-css": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.4.tgz", @@ -56623,26 +58280,6 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, "terser-webpack-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", @@ -57103,6 +58740,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -57455,6 +59098,17 @@ "has-flag": "^4.0.0" } }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, "terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -58125,6 +59779,25 @@ "has-flag": "^4.0.0" } }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, "terser-webpack-plugin": { "version": "1.4.5", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", @@ -58555,6 +60228,12 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, "enhanced-resolve": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", @@ -58901,6 +60580,17 @@ "has-flag": "^4.0.0" } }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + } + }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", @@ -59039,12 +60729,6 @@ "integrity": "sha512-j11XSuRuAlft6vLDEX4RvhqC0KxNxx6QIyMXNb0vHHSNPXTPeiy3algESWmOOIzEtiEL0qiowPU3ewW9hHVa7Q==", "dev": true }, - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -59442,26 +61126,6 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, "terser-webpack-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", @@ -60224,6 +61888,7 @@ "resolved": "https://registry.npmjs.org/@surma/rollup-plugin-off-main-thread/-/rollup-plugin-off-main-thread-2.2.3.tgz", "integrity": "sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==", "dev": true, + "peer": true, "requires": { "ejs": "^3.1.6", "json5": "^2.2.0", @@ -60236,6 +61901,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "requires": { "minimist": "^1.2.5" } @@ -60246,7 +61912,8 @@ "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "dev": true + "dev": true, + "peer": true }, "@svgr/babel-plugin-remove-jsx-attribute": { "version": "5.4.0", @@ -60264,37 +61931,43 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "dev": true + "dev": true, + "peer": true }, "@svgr/babel-plugin-svg-dynamic-title": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "dev": true + "dev": true, + "peer": true }, "@svgr/babel-plugin-svg-em-dimensions": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "dev": true + "dev": true, + "peer": true }, "@svgr/babel-plugin-transform-react-native-svg": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "dev": true + "dev": true, + "peer": true }, "@svgr/babel-plugin-transform-svg-component": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "dev": true + "dev": true, + "peer": true }, "@svgr/babel-preset": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", "dev": true, + "peer": true, "requires": { "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", @@ -60311,6 +61984,7 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", "dev": true, + "peer": true, "requires": { "@svgr/plugin-jsx": "^5.5.0", "camelcase": "^6.2.0", @@ -60322,6 +61996,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, + "peer": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -60337,6 +62012,7 @@ "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", "dev": true, + "peer": true, "requires": { "@babel/types": "^7.12.6" } @@ -60346,6 +62022,7 @@ "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", "dev": true, + "peer": true, "requires": { "@babel/core": "^7.12.3", "@svgr/babel-preset": "^5.5.0", @@ -60358,6 +62035,7 @@ "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", "dev": true, + "peer": true, "requires": { "cosmiconfig": "^7.0.0", "deepmerge": "^4.2.2", @@ -60369,6 +62047,7 @@ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", "dev": true, + "peer": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -60381,7 +62060,8 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "dev": true, + "peer": true } } }, @@ -60390,6 +62070,7 @@ "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", "dev": true, + "peer": true, "requires": { "@babel/core": "^7.12.3", "@babel/plugin-transform-react-constant-elements": "^7.12.1", @@ -60406,6 +62087,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "requires": { "minimist": "^1.2.5" } @@ -60415,6 +62097,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "dev": true, + "peer": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -60461,12 +62144,6 @@ "color-convert": "^2.0.1" } }, - "aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "dev": true - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -60535,12 +62212,6 @@ "color-convert": "^2.0.1" } }, - "aria-query": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.0.0.tgz", - "integrity": "sha512-V+SM7AbUwJ+EBnB8+DXs0hPZHO0W6pqBcc0dW90OwtVG02PswOu/teuARoLQjdDOH+t9pJgGnW5/Qmouf3gPJg==", - "dev": true - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -60653,7 +62324,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true + "dev": true, + "peer": true }, "@tsconfig/node10": { "version": "1.0.8", @@ -60737,6 +62409,7 @@ "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", "dev": true, + "peer": true, "requires": { "@types/connect": "*", "@types/node": "*" @@ -60747,6 +62420,7 @@ "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dev": true, + "peer": true, "requires": { "@types/node": "*" } @@ -60756,6 +62430,7 @@ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dev": true, + "peer": true, "requires": { "@types/node": "*" } @@ -60765,6 +62440,7 @@ "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dev": true, + "peer": true, "requires": { "@types/express-serve-static-core": "*", "@types/node": "*" @@ -60823,6 +62499,7 @@ "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", "dev": true, + "peer": true, "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.18", @@ -60835,6 +62512,7 @@ "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.28.tgz", "integrity": "sha512-P1BJAEAW3E2DJUlkgq4tOL3RyMunoWXqbSCygWo5ZIWTjUgN1YnaXWW4VWl/oc8vs/XoYibEGBKP0uZyF4AHig==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "@types/qs": "*", @@ -60894,6 +62572,7 @@ "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.8.tgz", "integrity": "sha512-5kPLG5BKpWYkw/LVOGWpiq3nEVqxiN32rTgI53Sk12/xHFQ2rG3ehI9IO+O3W2QoKeyB92dJkoka8SUm6BX1pA==", "dev": true, + "peer": true, "requires": { "@types/node": "*" } @@ -60986,7 +62665,7 @@ "@types/json5": { "version": "0.0.29", "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, "@types/lodash": { @@ -61016,7 +62695,8 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", - "dev": true + "dev": true, + "peer": true }, "@types/minimatch": { "version": "3.0.3", @@ -61094,7 +62774,8 @@ "version": "1.5.4", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", - "dev": true + "dev": true, + "peer": true }, "@types/qs": { "version": "6.9.6", @@ -61115,7 +62796,8 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "dev": true + "dev": true, + "peer": true }, "@types/react": { "version": "17.0.39", @@ -61234,6 +62916,7 @@ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dev": true, + "peer": true, "requires": { "@types/node": "*" } @@ -61242,7 +62925,8 @@ "version": "0.12.1", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.1.tgz", "integrity": "sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==", - "dev": true + "dev": true, + "peer": true }, "@types/sanitize-html": { "version": "2.6.2", @@ -61268,6 +62952,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", "dev": true, + "peer": true, "requires": { "@types/express": "*" } @@ -61277,6 +62962,7 @@ "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", "dev": true, + "peer": true, "requires": { "@types/mime": "^1", "@types/node": "*" @@ -61287,6 +62973,7 @@ "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", "dev": true, + "peer": true, "requires": { "@types/node": "*" } @@ -61339,7 +63026,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==", - "dev": true + "dev": true, + "peer": true }, "@types/uglify-js": { "version": "3.12.0", @@ -61431,6 +63119,7 @@ "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.2.2.tgz", "integrity": "sha512-NOn5eIcgWLOo6qW8AcuLZ7G8PycXu0xTxxkS6Q18VWFxgPUSOwV0pBj2a/4viNZVu25i7RIB7GttdkAIUUXOOg==", "dev": true, + "peer": true, "requires": { "@types/node": "*" } @@ -61775,6 +63464,43 @@ } } }, + "@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "requires": {} + }, + "@vitejs/plugin-react": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.0.1.tgz", + "integrity": "sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ==", + "dev": true, + "requires": { + "@babel/core": "^7.20.7", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.27.0", + "react-refresh": "^0.14.0" + }, + "dependencies": { + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true + } + } + }, "@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", @@ -62129,6 +63855,7 @@ "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", "dev": true, + "peer": true, "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", @@ -62152,6 +63879,7 @@ "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", "dev": true, + "peer": true, "requires": { "loader-utils": "^2.0.0", "regex-parser": "^2.2.11" @@ -62162,6 +63890,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "requires": { "minimist": "^1.2.5" } @@ -62171,6 +63900,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, + "peer": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -62365,7 +64095,8 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", - "dev": true + "dev": true, + "peer": true }, "argparse": { "version": "2.0.1", @@ -62373,13 +64104,45 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "aria-query": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz", - "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz", + "integrity": "sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==", "dev": true, "requires": { - "@babel/runtime": "^7.10.2", - "@babel/runtime-corejs3": "^7.10.2" + "deep-equal": "^2.0.5" + }, + "dependencies": { + "deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } } }, "arr-diff": { @@ -62410,18 +64173,19 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "dev": true + "dev": true, + "peer": true }, "array-includes": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.5.tgz", - "integrity": "sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "requires": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", - "es-abstract": "^1.19.5", - "get-intrinsic": "^1.1.1", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", "is-string": "^1.0.7" } }, @@ -62444,25 +64208,27 @@ "dev": true }, "array.prototype.flat": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz", - "integrity": "sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" } }, "array.prototype.flatmap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz", - "integrity": "sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" } }, "array.prototype.map": { @@ -62592,6 +64358,7 @@ "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", "dev": true, + "peer": true, "requires": { "lodash": "^4.17.14" } @@ -62644,17 +64411,59 @@ } } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "axe-core": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.4.3.tgz", - "integrity": "sha512-32+ub6kkdhhWick/UjvEwRchgoetXqTK14INLqbGm5U2TzBkBNF3nQtLYm8ovxSkQWArjEQvftCKryjZaATu3w==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.2.tgz", + "integrity": "sha512-b1WlTV8+XKLj9gZy2DZXgQiyDp9xkkoe2a6U6UbYccScq2wgH/YwCeI2/Jq2mgo0HzQxqJOjWZBLeA/mqsk5Mg==", "dev": true }, "axobject-query": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", - "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==", - "dev": true + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", + "integrity": "sha512-goKlv8DZrK9hUh975fnHzhNIO4jUnFCfv/dszV5VwUGDFjI6vQ2VwoyjYjYNEbBE8AH87TduWP5uyDR1D+Iteg==", + "dev": true, + "requires": { + "deep-equal": "^2.0.5" + }, + "dependencies": { + "deep-equal": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz", + "integrity": "sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-get-iterator": "^1.1.2", + "get-intrinsic": "^1.1.3", + "is-arguments": "^1.1.1", + "is-array-buffer": "^3.0.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "isarray": "^2.0.5", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "side-channel": "^1.0.4", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.1", + "which-typed-array": "^1.1.9" + } + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + } + } }, "babel-jest": { "version": "29.3.1", @@ -62970,6 +64779,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz", "integrity": "sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==", "dev": true, + "peer": true, "requires": {} }, "babel-plugin-named-exports-order": { @@ -63136,10 +64946,9 @@ "dev": true }, "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "dev": true + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" }, "balanced-match": { "version": "1.0.0", @@ -63210,7 +65019,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", - "dev": true + "dev": true, + "peer": true }, "better-opn": { "version": "2.1.1", @@ -63238,6 +65048,7 @@ "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", "integrity": "sha512-+e/UqUzwmzJamNF50tBV6tZPTORow7gQ96iFow+8b562OdMpEK0BcJEq2OSPEDmAbSMBQ7PKZ87ubFkgxpYWgw==", "dev": true, + "peer": true, "requires": { "bluebird": "^3.5.5", "check-types": "^11.1.1", @@ -63337,6 +65148,7 @@ "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, + "peer": true, "requires": { "array-flatten": "^2.1.0", "deep-equal": "^1.0.1", @@ -63490,7 +65302,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", - "dev": true + "dev": true, + "peer": true }, "browserify-aes": { "version": "1.2.0", @@ -63614,7 +65427,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", - "dev": true + "dev": true, + "peer": true }, "buffer-xor": { "version": "1.0.3", @@ -63626,7 +65440,8 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true + "dev": true, + "peer": true }, "builtin-status-codes": { "version": "3.0.0", @@ -63814,22 +65629,33 @@ "dev": true }, "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, - "optional": true, "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "dependencies": { "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", - "dev": true, - "optional": true + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true } } }, @@ -63843,6 +65669,7 @@ "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -63919,7 +65746,8 @@ "version": "11.1.2", "resolved": "https://registry.npmjs.org/check-types/-/check-types-11.1.2.tgz", "integrity": "sha512-tzWzvgePgLORb9/3a0YenggReLKAIb2owL03H2Xdoe5pKcUyWRSEQ8xfCar8t2SIAuEDwtmx2da1YB52YuHQMQ==", - "dev": true + "dev": true, + "peer": true }, "chokidar": { "version": "3.5.3", @@ -64153,6 +65981,7 @@ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, + "peer": true, "requires": { "@types/q": "^1.5.1", "chalk": "^2.4.1", @@ -64243,7 +66072,8 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.2.tgz", "integrity": "sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==", - "dev": true + "dev": true, + "peer": true }, "commondir": { "version": "1.0.1", @@ -64357,7 +66187,8 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", - "dev": true + "dev": true, + "peer": true }, "console-browserify": { "version": "1.2.0", @@ -64498,31 +66329,6 @@ "yaml": "^1.7.2" } }, - "cosmiconfig-typescript-loader": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-2.0.2.tgz", - "integrity": "sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==", - "dev": true, - "requires": { - "cosmiconfig": "^7", - "ts-node": "^10.8.1" - }, - "dependencies": { - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "dev": true, - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - } - } - }, "cp-file": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz", @@ -64855,7 +66661,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true + "dev": true, + "peer": true }, "css-color-keywords": { "version": "1.0.0", @@ -64911,6 +66718,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, + "peer": true, "requires": { "boolbase": "^1.0.0", "css-what": "^3.2.1", @@ -64922,7 +66730,8 @@ "version": "0.1.1", "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "dev": true + "dev": true, + "peer": true }, "css-to-react-native": { "version": "3.0.0", @@ -64939,6 +66748,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, + "peer": true, "requires": { "mdn-data": "2.0.4", "source-map": "^0.6.1" @@ -64948,7 +66758,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -64961,7 +66772,8 @@ "version": "3.4.2", "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "dev": true + "dev": true, + "peer": true }, "css.escape": { "version": "1.5.1", @@ -64973,7 +66785,8 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-5.1.0.tgz", "integrity": "sha512-/vqjXhv1x9eGkE/zO6o8ZOI7dgdZbLVLUGyVRbPgk6YipXbW87YzUCcO+Jrmi5bwJlAH6oD+MNeZyRgXea1GZw==", - "dev": true + "dev": true, + "peer": true }, "cssesc": { "version": "3.0.0", @@ -64986,6 +66799,7 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, + "peer": true, "requires": { "css-tree": "^1.1.2" }, @@ -64995,6 +66809,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.2.tgz", "integrity": "sha512-wCoWush5Aeo48GLhfHPbmvZs59Z+M7k5+B1xDnXbdWNcEF423DoFdqSWE0PM5aNk5nI5cp1q7ms36zGApY/sKQ==", "dev": true, + "peer": true, "requires": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -65004,13 +66819,15 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "dev": true, + "peer": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -65241,6 +67058,7 @@ "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", "dev": true, + "peer": true, "requires": { "is-arguments": "^1.0.4", "is-date-object": "^1.0.1", @@ -65271,6 +67089,146 @@ "bplist-parser": "^0.1.0", "meow": "^3.1.0", "untildify": "^2.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "optional": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "optional": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "optional": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "optional": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "optional": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "optional": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "optional": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "optional": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "optional": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "optional": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "optional": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "optional": true + } } }, "defaults": { @@ -65343,7 +67301,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", - "dev": true + "dev": true, + "peer": true }, "degenerator": { "version": "3.0.2", @@ -65449,7 +67408,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true + "dev": true, + "peer": true }, "dependency-graph": { "version": "0.11.0", @@ -65539,6 +67499,7 @@ "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "dev": true, + "peer": true, "requires": { "address": "^1.0.1", "debug": "^2.6.0" @@ -65549,6 +67510,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "peer": true, "requires": { "ms": "2.0.0" } @@ -65557,7 +67519,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "peer": true } } }, @@ -65566,6 +67529,7 @@ "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", "dev": true, + "peer": true, "requires": { "acorn-node": "^1.6.1", "defined": "^1.0.0", @@ -65586,7 +67550,8 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", - "dev": true + "dev": true, + "peer": true }, "diff": { "version": "5.1.0", @@ -65631,19 +67596,22 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", - "dev": true + "dev": true, + "peer": true }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", - "dev": true + "dev": true, + "peer": true }, "dns-packet": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, + "peer": true, "requires": { "ip": "^1.1.0", "safe-buffer": "^5.0.1" @@ -65654,6 +67622,7 @@ "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, + "peer": true, "requires": { "buffer-indexof": "^1.0.0" } @@ -65695,6 +67664,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", "dev": true, + "peer": true, "requires": { "domelementtype": "^2.0.1", "entities": "^2.0.0" @@ -65704,7 +67674,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.1.0.tgz", "integrity": "sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w==", - "dev": true + "dev": true, + "peer": true } } }, @@ -65724,7 +67695,8 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "dev": true + "dev": true, + "peer": true }, "domexception": { "version": "4.0.0", @@ -65755,6 +67727,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, + "peer": true, "requires": { "dom-serializer": "0", "domelementtype": "1" @@ -65794,7 +67767,8 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "peer": true }, "duplexify": { "version": "3.7.1", @@ -65851,6 +67825,7 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.7.tgz", "integrity": "sha512-BIar7R6abbUxDA3bfXrO4DSgwo8I+fB5/1zgujl3HLLjwd6+9iOnrT+t3grn2qbk9vOgBubXOFwX2m9axoFaGw==", "dev": true, + "peer": true, "requires": { "jake": "^10.8.5" } @@ -66099,6 +68074,15 @@ "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -66382,34 +68366,39 @@ } }, "eslint": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.7.0.tgz", - "integrity": "sha512-ifHYzkBGrzS2iDU7KjhCAVMGCvF6M3Xfs8X8b37cgrUlDt6bWRTpRh6T/gtSXv1HJ/BUGgmjvNvOEGu85Iif7w==", + "version": "8.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.32.0.tgz", + "integrity": "sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.0.5", - "@humanwhocodes/config-array": "^0.9.2", + "@eslint/eslintrc": "^1.4.1", + "@humanwhocodes/config-array": "^0.11.8", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.0", + "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.2.0", - "espree": "^9.3.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "grapheme-splitter": "^1.0.4", "ignore": "^5.2.0", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-sdsl": "^4.1.4", "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", @@ -66420,8 +68409,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "ansi-styles": { @@ -66465,9 +68453,9 @@ "dev": true }, "eslint-scope": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.0.tgz", - "integrity": "sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", "dev": true, "requires": { "esrecurse": "^4.3.0", @@ -66475,9 +68463,9 @@ } }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true }, "estraverse": { @@ -66486,6 +68474,16 @@ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -66496,9 +68494,9 @@ } }, "globals": { - "version": "13.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.12.0.tgz", - "integrity": "sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg==", + "version": "13.19.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.19.0.tgz", + "integrity": "sha512-dkQ957uSRWHw7CFXLUtUHQI3g3aWApYhfNR2O6jn/907riyTYKVBmxYVROkBcY614FSSeSJh7Xm7SrUWCxvJMQ==", "dev": true, "requires": { "type-fest": "^0.20.2" @@ -66510,6 +68508,33 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -66528,9 +68553,9 @@ } }, "eslint-config-prettier": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.5.0.tgz", - "integrity": "sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.6.0.tgz", + "integrity": "sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==", "dev": true, "requires": {} }, @@ -66568,13 +68593,14 @@ } }, "eslint-import-resolver-node": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", - "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", "dev": true, "requires": { "debug": "^3.2.7", - "resolve": "^1.20.0" + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" }, "dependencies": { "debug": { @@ -66589,13 +68615,12 @@ } }, "eslint-module-utils": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", - "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.7.4.tgz", + "integrity": "sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==", "dev": true, "requires": { - "debug": "^3.2.7", - "find-up": "^2.1.0" + "debug": "^3.2.7" }, "dependencies": { "debug": { @@ -66606,55 +68631,6 @@ "requires": { "ms": "^2.1.1" } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true } } }, @@ -66679,33 +68655,35 @@ } }, "eslint-plugin-import": { - "version": "2.25.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz", - "integrity": "sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==", + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "requires": { - "array-includes": "^3.1.4", - "array.prototype.flat": "^1.2.5", - "debug": "^2.6.9", + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.6", - "eslint-module-utils": "^2.7.2", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", "has": "^1.0.3", - "is-core-module": "^2.8.0", + "is-core-module": "^2.11.0", "is-glob": "^4.0.3", "minimatch": "^3.0.5", - "object.values": "^1.1.5", - "resolve": "^1.20.0", - "tsconfig-paths": "^3.12.0" + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" }, "dependencies": { "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "doctrine": { @@ -66716,12 +68694,6 @@ "requires": { "esutils": "^2.0.2" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -66735,23 +68707,26 @@ } }, "eslint-plugin-jsx-a11y": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.6.1.tgz", - "integrity": "sha512-sXgFVNHiWffBq23uiS/JaP6eVR622DqwB4yTzKvGZGcPq6/yZ3WmOZfuBks/vHWo9GaFOqC2ZK4i6+C35knx7Q==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.7.1.tgz", + "integrity": "sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==", "dev": true, "requires": { - "@babel/runtime": "^7.18.9", - "aria-query": "^4.2.2", - "array-includes": "^3.1.5", + "@babel/runtime": "^7.20.7", + "aria-query": "^5.1.3", + "array-includes": "^3.1.6", + "array.prototype.flatmap": "^1.3.1", "ast-types-flow": "^0.0.7", - "axe-core": "^4.4.3", - "axobject-query": "^2.2.0", + "axe-core": "^4.6.2", + "axobject-query": "^3.1.1", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "has": "^1.0.3", - "jsx-ast-utils": "^3.3.2", - "language-tags": "^1.0.5", + "jsx-ast-utils": "^3.3.3", + "language-tags": "=1.0.5", "minimatch": "^3.0.5", + "object.entries": "^1.1.6", + "object.fromentries": "^2.0.6", "semver": "^6.3.0" }, "dependencies": { @@ -66764,9 +68739,9 @@ } }, "eslint-plugin-prettier": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz", - "integrity": "sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -66878,26 +68853,26 @@ "dev": true }, "espree": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.0.tgz", - "integrity": "sha512-d/5nCsb0JcqsSEeQzFZ8DH1RmxPcglRWh24EFTlUEmCKoehXGdpsx0RkHDubqUI8LSAIKMQp4r9SzQ3n+sm4HQ==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", "dev": true, "requires": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.1.0" + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" }, "dependencies": { "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true }, "eslint-visitor-keys": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.2.0.tgz", - "integrity": "sha512-IOzT0X126zn7ALX0dwFiUQEdsfzrm4+ISsQS8nukaJXwEyYKRSnEIIDULYg1mCtGp7UUXgfGl7BIolXREQK+XQ==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", "dev": true } } @@ -67630,6 +69605,7 @@ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.3.tgz", "integrity": "sha512-LwjCsruLWQULGYKy7TX0OPtrL9kLpojOFKc5VCTxdFTV7w5zbsgqVKfnkKG7Qgjtq50gKfO56hJv88OfcGb70Q==", "dev": true, + "peer": true, "requires": { "minimatch": "^3.0.5" }, @@ -67639,6 +69615,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "peer": true, "requires": { "balanced-match": "^1.0.0" } @@ -67647,6 +69624,7 @@ "version": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, + "peer": true, "requires": { "brace-expansion": "^2.0.1" } @@ -67657,7 +69635,8 @@ "version": "8.0.7", "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "dev": true + "dev": true, + "peer": true }, "fill-range": { "version": "7.0.1", @@ -67825,7 +69804,17 @@ "version": "1.14.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", - "dev": true + "dev": true, + "peer": true + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } }, "for-in": { "version": "1.0.2", @@ -68005,7 +69994,8 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "dev": true + "dev": true, + "peer": true }, "fragment-cache": { "version": "0.2.1", @@ -68288,7 +70278,8 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "dev": true + "dev": true, + "peer": true }, "get-package-type": { "version": "0.1.0", @@ -68507,6 +70498,12 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, + "globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, "gonzales-pe": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", @@ -68516,17 +70513,33 @@ "minimist": "^1.2.5" } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "grapheme-splitter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", + "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==", + "dev": true + }, "gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", "dev": true, + "peer": true, "requires": { "duplexer": "^0.1.2" } @@ -68535,7 +70548,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "dev": true + "dev": true, + "peer": true }, "handlebars": { "version": "4.7.7", @@ -68568,7 +70582,8 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.1.tgz", "integrity": "sha512-WJTeyp0JzGtHcuMsi7rw2VwtkvLa+JyfEKJCFyfcS0+CDkjQ5lHPu7zEhFZP+PDSRrEgXa5Ah0l1MbgbE41XjA==", - "dev": true + "dev": true, + "peer": true }, "has": { "version": "1.0.3", @@ -68875,7 +70890,8 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/hoopy/-/hoopy-0.1.4.tgz", "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", - "dev": true + "dev": true, + "peer": true }, "hosted-git-info": { "version": "2.8.9", @@ -68888,6 +70904,7 @@ "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, + "peer": true, "requires": { "inherits": "^2.0.1", "obuf": "^1.0.0", @@ -68900,6 +70917,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dev": true, + "peer": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -68915,6 +70933,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "peer": true, "requires": { "safe-buffer": "~5.1.0" } @@ -68956,6 +70975,31 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } } } }, @@ -69042,7 +71086,8 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", - "dev": true + "dev": true, + "peer": true }, "http-errors": { "version": "2.0.0", @@ -69075,13 +71120,15 @@ "version": "0.5.5", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz", "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==", - "dev": true + "dev": true, + "peer": true }, "http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, + "peer": true, "requires": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", @@ -69310,6 +71357,7 @@ "resolved": "https://registry.npmjs.org/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz", "integrity": "sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA==", "dev": true, + "peer": true, "requires": { "harmony-reflect": "^1.4.6" } @@ -69521,12 +71569,24 @@ } }, "is-arguments": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", - "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" } }, "is-arrayish": { @@ -69611,10 +71671,13 @@ } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-decimal": { "version": "1.0.4", @@ -69716,7 +71779,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true + "dev": true, + "peer": true }, "is-negative-zero": { "version": "2.0.2", @@ -69742,7 +71806,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true + "dev": true, + "peer": true }, "is-object": { "version": "1.0.2", @@ -69754,13 +71819,21 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "peer": true + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, "is-plain-obj": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "dev": true + "dev": true, + "peer": true }, "is-plain-object": { "version": "2.0.4", @@ -69800,13 +71873,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", - "dev": true + "dev": true, + "peer": true }, "is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "dev": true + "dev": true, + "peer": true }, "is-set": { "version": "2.0.2", @@ -69847,6 +71922,19 @@ "has-symbols": "^1.0.1" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -69860,6 +71948,12 @@ "dev": true, "optional": true }, + "is-weakmap": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz", + "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==", + "dev": true + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -69869,6 +71963,16 @@ "call-bind": "^1.0.2" } }, + "is-weakset": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", @@ -70025,6 +72129,7 @@ "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.5.tgz", "integrity": "sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==", "dev": true, + "peer": true, "requires": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -70037,6 +72142,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -70045,13 +72151,15 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==", - "dev": true + "dev": true, + "peer": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -70062,6 +72170,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -70070,19 +72179,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "peer": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -71286,6 +73398,7 @@ "resolved": "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz", "integrity": "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==", "dev": true, + "peer": true, "requires": { "@jest/environment": "^27.5.1", "@jest/source-map": "^27.5.1", @@ -71311,6 +73424,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -71325,6 +73439,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, + "peer": true, "requires": { "@jest/fake-timers": "^27.5.1", "@jest/types": "^27.5.1", @@ -71337,6 +73452,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", @@ -71351,6 +73467,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dev": true, + "peer": true, "requires": { "@jest/environment": "^27.5.1", "@jest/types": "^27.5.1", @@ -71362,6 +73479,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "dev": true, + "peer": true, "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.2.9", @@ -71373,6 +73491,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dev": true, + "peer": true, "requires": { "@jest/console": "^27.5.1", "@jest/types": "^27.5.1", @@ -71385,6 +73504,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dev": true, + "peer": true, "requires": { "@babel/core": "^7.1.0", "@jest/types": "^27.5.1", @@ -71408,6 +73528,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "peer": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -71421,6 +73542,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, + "peer": true, "requires": { "@sinonjs/commons": "^1.7.0" } @@ -71430,6 +73552,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, + "peer": true, "requires": { "@types/yargs-parser": "*" } @@ -71439,6 +73562,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -71448,6 +73572,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -71457,13 +73582,15 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true + "dev": true, + "peer": true }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -71472,13 +73599,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "expect": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "jest-get-type": "^27.5.1", @@ -71490,13 +73619,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "peer": true }, "jest-each": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "chalk": "^4.0.0", @@ -71510,6 +73641,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", @@ -71531,6 +73663,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.5.1", @@ -71548,6 +73681,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*" @@ -71557,13 +73691,15 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true + "dev": true, + "peer": true }, "jest-runtime": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", "dev": true, + "peer": true, "requires": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -71594,6 +73730,7 @@ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "graceful-fs": "^4.2.9" @@ -71604,6 +73741,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "dev": true, + "peer": true, "requires": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", @@ -71634,6 +73772,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -71648,6 +73787,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -71659,6 +73799,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -71670,6 +73811,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, + "peer": true, "requires": { "lru-cache": "^6.0.0" } @@ -71678,13 +73820,15 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -72034,6 +74178,7 @@ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz", "integrity": "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "chalk": "^4.0.0", @@ -72052,6 +74197,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "peer": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -72065,6 +74211,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, + "peer": true, "requires": { "@types/yargs-parser": "*" } @@ -72074,6 +74221,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -72083,6 +74231,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -72092,13 +74241,15 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true + "dev": true, + "peer": true }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -72107,19 +74258,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "peer": true }, "jest-haste-map": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", @@ -72140,13 +74294,15 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true + "dev": true, + "peer": true }, "jest-serializer": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "graceful-fs": "^4.2.9" @@ -72157,6 +74313,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -72171,6 +74328,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -72182,6 +74340,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -72193,6 +74352,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -73183,6 +75343,7 @@ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz", "integrity": "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "camelcase": "^6.2.0", @@ -73197,6 +75358,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "peer": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -73210,6 +75372,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, + "peer": true, "requires": { "@types/yargs-parser": "*" } @@ -73219,6 +75382,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -73228,6 +75392,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -73238,6 +75403,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -73246,19 +75412,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "peer": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -73403,6 +75572,12 @@ } } }, + "js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "dev": true + }, "js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -73546,8 +75721,7 @@ "json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==" }, "json-schema-ref-parser": { "version": "5.1.3", @@ -74078,7 +76252,8 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", - "dev": true + "dev": true, + "peer": true }, "lodash.merge": { "version": "4.6.2", @@ -74098,11 +76273,18 @@ "integrity": "sha512-5OrRcIVR75M288p4nbI2WLAf3ndw2GD9fyNv3Bc15+WCxJDdZ4lYndSxGd7hnG6PVjiJTeJE2dHEGhIuKGicIQ==", "dev": true }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", + "dev": true + }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", - "dev": true + "dev": true, + "peer": true }, "lodash.throttle": { "version": "4.1.1", @@ -74769,7 +76951,8 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "dev": true + "dev": true, + "peer": true }, "mdurl": { "version": "1.0.1", @@ -74860,117 +77043,60 @@ } }, "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", "dev": true, - "optional": true, "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "optional": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", - "dev": true, - "optional": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "optional": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "optional": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "optional": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "optional": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "lru-cache": "^6.0.0" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "optional": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" } }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dev": true, - "optional": true, "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" + "lru-cache": "^6.0.0" } }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", - "dev": true, - "optional": true, - "requires": { - "get-stdin": "^4.0.1" - } + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true } } }, @@ -75637,6 +77763,7 @@ "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", "dev": true, + "peer": true, "requires": { "schema-utils": "^4.0.0" }, @@ -75646,6 +77773,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -75658,6 +77786,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.3" } @@ -75666,13 +77795,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "peer": true }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -75839,10 +77970,9 @@ "dev": true }, "monaco-editor": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.33.0.tgz", - "integrity": "sha512-VcRWPSLIUEgQJQIE0pVT8FcGBIgFoxz7jtqctE+IiCxWugD0DwgyQBcZBhdSrdMC84eumoqMZsGl2GTreOzwqw==", - "peer": true + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.34.1.tgz", + "integrity": "sha512-FKc80TyiMaruhJKKPz5SpJPIjL+dflGvz4CpuThaPMc94AyN7SeC9HQ8hrvaxX7EyHdJcUY5i4D0gNyJj1vSZQ==" }, "move-concurrently": { "version": "1.0.1", @@ -75884,6 +78014,7 @@ "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, + "peer": true, "requires": { "dns-packet": "^1.3.1", "thunky": "^1.0.2" @@ -75893,7 +78024,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", - "dev": true + "dev": true, + "peer": true }, "nan": { "version": "2.16.0", @@ -76227,7 +78359,8 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true + "dev": true, + "peer": true }, "npm-normalize-package-bin": { "version": "1.0.1", @@ -76261,6 +78394,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, + "peer": true, "requires": { "boolbase": "~1.0.0" } @@ -76412,7 +78546,8 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "dev": true + "dev": true, + "peer": true }, "object-inspect": { "version": "1.12.2", @@ -76421,12 +78556,12 @@ "dev": true }, "object-is": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.4.tgz", - "integrity": "sha512-1ZvAZ4wlF7IyPVOcE1Omikt7UpaFlOQq0HlSti+ZvDH3UiD2brwGMwDbyV43jao2bKJ+4+WdPJHSd7kgzKYVqg==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, @@ -76458,25 +78593,25 @@ } }, "object.entries": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz", - "integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.6.tgz", + "integrity": "sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "object.fromentries": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.5.tgz", - "integrity": "sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.6.tgz", + "integrity": "sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "object.getownpropertydescriptors": { @@ -76510,14 +78645,14 @@ } }, "object.values": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.5.tgz", - "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.1" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "objectorarray": { @@ -76535,7 +78670,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "dev": true + "dev": true, + "peer": true }, "on-finished": { "version": "2.4.1", @@ -77131,7 +79267,8 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "dev": true, + "peer": true }, "picocolors": { "version": "1.0.0", @@ -77158,14 +79295,14 @@ "pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, "optional": true }, "pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, "optional": true, "requires": { @@ -77192,6 +79329,7 @@ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", "dev": true, + "peer": true, "requires": { "find-up": "^3.0.0" }, @@ -77201,6 +79339,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, + "peer": true, "requires": { "locate-path": "^3.0.0" } @@ -77210,6 +79349,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, + "peer": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" @@ -77220,6 +79360,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, + "peer": true, "requires": { "p-limit": "^2.0.0" } @@ -77228,7 +79369,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true + "dev": true, + "peer": true } } }, @@ -77279,6 +79421,7 @@ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.28.tgz", "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", "dev": true, + "peer": true, "requires": { "async": "^2.6.2", "debug": "^3.1.1", @@ -77290,6 +79433,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "peer": true, "requires": { "ms": "^2.1.1" } @@ -77340,6 +79484,7 @@ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.1.tgz", "integrity": "sha512-c/9XYboIbSEUZpiD1UQD0IKiUe8n9WHYV7YFe7X7J+ZwCsEKkUJSFWjS9hBU1RR9THR7jMXst8sxiqP0jjo2mg==", "dev": true, + "peer": true, "requires": { "lilconfig": "^2.0.4", "yaml": "^1.10.2" @@ -77503,7 +79648,8 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", - "dev": true + "dev": true, + "peer": true }, "pretty-error": { "version": "2.1.2", @@ -77574,6 +79720,7 @@ "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", "dev": true, + "peer": true, "requires": { "asap": "~2.0.6" } @@ -77813,7 +79960,8 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "dev": true + "dev": true, + "peer": true }, "qs": { "version": "6.10.3", @@ -77853,22 +80001,24 @@ "dev": true }, "queue-microtask": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.2.tgz", - "integrity": "sha512-dB15eXv3p2jDlbOiNLyMabYg1/sXvppd8DP2J3EOCQ0AkuSXCW2tP7mnVouVLJKgUMY6yP0kcQDVpLCN13h4Xg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true + "dev": true, + "peer": true }, "raf": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", "dev": true, + "peer": true, "requires": { "performance-now": "^2.1.0" } @@ -77978,6 +80128,7 @@ "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-3.0.0.tgz", "integrity": "sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==", "dev": true, + "peer": true, "requires": { "core-js": "^3.19.2", "object-assign": "^4.1.1", @@ -78014,6 +80165,7 @@ "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "^7.16.0", "address": "^1.1.2", @@ -78046,6 +80198,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -78055,6 +80208,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -78065,6 +80219,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -78073,19 +80228,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true + "dev": true, + "peer": true }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "peer": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -78095,19 +80253,22 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "peer": true }, "loader-utils": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", - "dev": true + "dev": true, + "peer": true }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "peer": true, "requires": { "p-locate": "^5.0.0" } @@ -78117,6 +80278,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "peer": true, "requires": { "yocto-queue": "^0.1.0" } @@ -78126,6 +80288,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "peer": true, "requires": { "p-limit": "^3.0.2" } @@ -78135,6 +80298,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -78222,7 +80386,8 @@ "version": "6.0.11", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "dev": true + "dev": true, + "peer": true }, "react-fast-compare": { "version": "2.0.4", @@ -78390,11 +80555,6 @@ "vfile": "^5.0.0" }, "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, "comma-separated-tokens": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.2.tgz", @@ -78405,11 +80565,6 @@ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, "property-information": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.1.1.tgz", @@ -78435,25 +80590,6 @@ "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.1.tgz", "integrity": "sha512-ekwEbFp5aqSPKaqeY1PGrlGQxPNaq+Cnx4+bE2D8sciBQrHpbwoBbawqTN2+6jPs9IdWxxiUcN0K2pkczD3zmw==" }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - }, "unist-util-stringify-position": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", @@ -78582,6 +80718,7 @@ "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz", "integrity": "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==", "dev": true, + "peer": true, "requires": { "@babel/core": "^7.16.0", "@pmmmwh/react-refresh-webpack-plugin": "^0.5.3", @@ -78638,6 +80775,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-27.5.1.tgz", "integrity": "sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -78652,6 +80790,7 @@ "resolved": "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz", "integrity": "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==", "dev": true, + "peer": true, "requires": { "@jest/console": "^27.5.1", "@jest/reporters": "^27.5.1", @@ -78688,6 +80827,7 @@ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz", "integrity": "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==", "dev": true, + "peer": true, "requires": { "@jest/fake-timers": "^27.5.1", "@jest/types": "^27.5.1", @@ -78700,6 +80840,7 @@ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz", "integrity": "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@sinonjs/fake-timers": "^8.0.1", @@ -78714,6 +80855,7 @@ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz", "integrity": "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==", "dev": true, + "peer": true, "requires": { "@jest/environment": "^27.5.1", "@jest/types": "^27.5.1", @@ -78725,6 +80867,7 @@ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz", "integrity": "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==", "dev": true, + "peer": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^27.5.1", @@ -78757,7 +80900,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -78766,6 +80910,7 @@ "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz", "integrity": "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==", "dev": true, + "peer": true, "requires": { "@sinclair/typebox": "^0.24.1" } @@ -78775,6 +80920,7 @@ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz", "integrity": "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==", "dev": true, + "peer": true, "requires": { "callsites": "^3.0.0", "graceful-fs": "^4.2.9", @@ -78785,7 +80931,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -78794,6 +80941,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz", "integrity": "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==", "dev": true, + "peer": true, "requires": { "@jest/console": "^27.5.1", "@jest/types": "^27.5.1", @@ -78806,6 +80954,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz", "integrity": "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==", "dev": true, + "peer": true, "requires": { "@jest/test-result": "^27.5.1", "graceful-fs": "^4.2.9", @@ -78818,6 +80967,7 @@ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz", "integrity": "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==", "dev": true, + "peer": true, "requires": { "@babel/core": "^7.1.0", "@jest/types": "^27.5.1", @@ -78840,7 +80990,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -78849,6 +81000,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz", "integrity": "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==", "dev": true, + "peer": true, "requires": { "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", @@ -78862,6 +81014,7 @@ "resolved": "https://registry.npmjs.org/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.5.4.tgz", "integrity": "sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==", "dev": true, + "peer": true, "requires": { "ansi-html-community": "^0.0.8", "common-path-prefix": "^3.0.0", @@ -78879,6 +81032,7 @@ "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz", "integrity": "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==", "dev": true, + "peer": true, "requires": { "@sinonjs/commons": "^1.7.0" } @@ -78887,13 +81041,15 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "dev": true + "dev": true, + "peer": true }, "@types/yargs": { "version": "16.0.5", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz", "integrity": "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==", "dev": true, + "peer": true, "requires": { "@types/yargs-parser": "*" } @@ -78902,13 +81058,15 @@ "version": "8.7.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true + "dev": true, + "peer": true }, "acorn-globals": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", "dev": true, + "peer": true, "requires": { "acorn": "^7.1.1", "acorn-walk": "^7.1.1" @@ -78918,7 +81076,8 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "dev": true, + "peer": true } } }, @@ -78927,6 +81086,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -78936,6 +81096,7 @@ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz", "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.19.1", "caniuse-lite": "^1.0.30001297", @@ -78950,6 +81111,7 @@ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-27.5.1.tgz", "integrity": "sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==", "dev": true, + "peer": true, "requires": { "@jest/transform": "^27.5.1", "@jest/types": "^27.5.1", @@ -78966,6 +81128,7 @@ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.5.1.tgz", "integrity": "sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==", "dev": true, + "peer": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -78978,6 +81141,7 @@ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-27.5.1.tgz", "integrity": "sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==", "dev": true, + "peer": true, "requires": { "babel-plugin-jest-hoist": "^27.5.1", "babel-preset-current-node-syntax": "^1.0.0" @@ -78988,6 +81152,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "peer": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -78997,13 +81162,15 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true + "dev": true, + "peer": true }, "clean-css": { "version": "5.2.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.2.3.tgz", "integrity": "sha512-qjywD7LvpZJ5+E16lf00GnMVUX5TEVBcKW1/vtGPgAerHwRwE4JP4p1Y40zbLnup2ZfWsd30P2bHdoAKH93XxA==", "dev": true, + "peer": true, "requires": { "source-map": "~0.6.0" }, @@ -79012,7 +81179,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -79021,6 +81189,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "peer": true, "requires": { "color-name": "~1.1.4" } @@ -79029,19 +81198,22 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "peer": true }, "commander": { "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true + "dev": true, + "peer": true }, "cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, + "peer": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -79055,6 +81227,7 @@ "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.2.tgz", "integrity": "sha512-hOb1LFjRR+8ocA071xUSmg5VslJ8NGo/I2qpUpdeAYyBVCgupS5O8SEVo4SxEMYyFBNodBkzG3T1iqW9HCXxew==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.8" } @@ -79064,6 +81237,7 @@ "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.4.tgz", "integrity": "sha512-lpfkqS0fctcmZotJGhnxkIyJWvBXgpyi2wsFd4J8VB7wzyrT6Ch/3Q+FMNJpjK4gu1+GN5khOnpU2ZVKrLbhCw==", "dev": true, + "peer": true, "requires": { "timsort": "^0.3.0" } @@ -79073,6 +81247,7 @@ "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.3.tgz", "integrity": "sha512-0gDYWEKaGacwxCqvQ3Ypg6wGdD1AztbMm5h1JsactG2hP2eiflj808QITmuWBpE7sjSEVrAlZhPTVd/nNMj/hQ==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.8" } @@ -79082,6 +81257,7 @@ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.5.1.tgz", "integrity": "sha512-gEy2w9AnJNnD9Kuo4XAP9VflW/ujKoS9c/syO+uWMlm5igc7LysKzPXaDoR2vroROkSwsTS2tGr1yGGEbZOYZQ==", "dev": true, + "peer": true, "requires": { "icss-utils": "^5.1.0", "postcss": "^8.2.15", @@ -79098,6 +81274,7 @@ "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", "dev": true, + "peer": true, "requires": { "cssnano": "^5.0.6", "jest-worker": "^27.0.2", @@ -79112,6 +81289,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -79124,6 +81302,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.3" } @@ -79133,6 +81312,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -79144,7 +81324,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -79153,6 +81334,7 @@ "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.2.tgz", "integrity": "sha512-gv0KQBEM+q/XdoKyznovq3KW7ocO7k+FhPP+hQR1MenJdu0uPGS6IZa9PzlbqBeS6XcZJNAoqoFxlAUW461CrA==", "dev": true, + "peer": true, "requires": {} }, "css-select": { @@ -79160,6 +81342,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", "dev": true, + "peer": true, "requires": { "boolbase": "^1.0.0", "css-what": "^5.1.0", @@ -79173,6 +81356,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, + "peer": true, "requires": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -79182,7 +81366,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -79190,13 +81375,15 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", - "dev": true + "dev": true, + "peer": true }, "cssnano": { "version": "5.0.16", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.16.tgz", "integrity": "sha512-ryhRI9/B9VFCwPbb1z60LLK5/ldoExi7nwdnJzpkLZkm2/r7j2X3jfY+ZvDVJhC/0fPZlrAguYdHNFg0iglPKQ==", "dev": true, + "peer": true, "requires": { "cssnano-preset-default": "^5.1.11", "lilconfig": "^2.0.3", @@ -79208,6 +81395,7 @@ "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.11.tgz", "integrity": "sha512-ETet5hqHxmzQq2ynXMOQofKuLm7VOjMiOB7E2zdtm/hSeCKlD9fabzIUV4GoPcRyJRHi+4kGf0vsfGYbQ4nmPw==", "dev": true, + "peer": true, "requires": { "css-declaration-sorter": "^6.0.3", "cssnano-utils": "^3.0.1", @@ -79245,19 +81433,22 @@ "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.0.1.tgz", "integrity": "sha512-VNCHL364lh++/ono+S3j9NlUK+d97KNkxI77NlqZU2W3xd2/qmyN61dsa47pTpb55zuU4G4lI7qFjAXZJH1OAQ==", "dev": true, + "peer": true, "requires": {} }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==", - "dev": true + "dev": true, + "peer": true }, "data-urls": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", "dev": true, + "peer": true, "requires": { "abab": "^2.0.3", "whatwg-mimetype": "^2.3.0", @@ -79268,13 +81459,15 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "dev": true + "dev": true, + "peer": true }, "default-gateway": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dev": true, + "peer": true, "requires": { "execa": "^5.0.0" } @@ -79284,6 +81477,7 @@ "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", "dev": true, + "peer": true, "requires": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", @@ -79300,6 +81494,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "dev": true, + "peer": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -79310,13 +81505,15 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", - "dev": true + "dev": true, + "peer": true }, "domexception": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", "dev": true, + "peer": true, "requires": { "webidl-conversions": "^5.0.0" }, @@ -79325,7 +81522,8 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", - "dev": true + "dev": true, + "peer": true } } }, @@ -79334,6 +81532,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, + "peer": true, "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -79344,19 +81543,22 @@ "version": "10.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", - "dev": true + "dev": true, + "peer": true }, "emittery": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz", "integrity": "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==", - "dev": true + "dev": true, + "peer": true }, "eslint-webpack-plugin": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.1.1.tgz", "integrity": "sha512-xSucskTN9tOkfW7so4EaiFIkulWLXwCB/15H917lR6pTv0Zot6/fetFucmENRb7J5whVSFKIvwnrnsa78SG2yg==", "dev": true, + "peer": true, "requires": { "@types/eslint": "^7.28.2", "jest-worker": "^27.3.1", @@ -79370,6 +81572,7 @@ "resolved": "https://registry.npmjs.org/expect/-/expect-27.5.1.tgz", "integrity": "sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "jest-get-type": "^27.5.1", @@ -79382,6 +81585,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, + "peer": true, "requires": { "websocket-driver": ">=0.5.1" } @@ -79391,6 +81595,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "peer": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -79401,6 +81606,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "peer": true, "requires": { "is-glob": "^4.0.3" } @@ -79409,13 +81615,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "peer": true }, "html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", "dev": true, + "peer": true, "requires": { "whatwg-encoding": "^1.0.5" } @@ -79424,13 +81632,15 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==", - "dev": true + "dev": true, + "peer": true }, "html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", "dev": true, + "peer": true, "requires": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -79446,6 +81656,7 @@ "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", "dev": true, + "peer": true, "requires": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -79459,6 +81670,7 @@ "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.2.tgz", "integrity": "sha512-XtmDN5w+vdFTBZaYhdJAbMqn0DP/EhkUaAeo963mojwpKMMbw6nivtFKw07D7DDOH745L5k0VL0P8KRYNEVF/g==", "dev": true, + "peer": true, "requires": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", @@ -79472,6 +81684,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "peer": true, "requires": { "safer-buffer": ">= 2.1.2 < 3.0.0" } @@ -79481,25 +81694,22 @@ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", "dev": true, + "peer": true, "requires": {} }, "ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true + "dev": true, + "peer": true }, "jest": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz", "integrity": "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==", "dev": true, + "peer": true, "requires": { "@jest/core": "^27.5.1", "import-local": "^3.0.2", @@ -79511,6 +81721,7 @@ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-27.5.1.tgz", "integrity": "sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "execa": "^5.0.0", @@ -79522,6 +81733,7 @@ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz", "integrity": "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==", "dev": true, + "peer": true, "requires": { "@jest/environment": "^27.5.1", "@jest/test-result": "^27.5.1", @@ -79549,6 +81761,7 @@ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz", "integrity": "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==", "dev": true, + "peer": true, "requires": { "@jest/core": "^27.5.1", "@jest/test-result": "^27.5.1", @@ -79569,6 +81782,7 @@ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz", "integrity": "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==", "dev": true, + "peer": true, "requires": { "@babel/core": "^7.8.0", "@jest/test-sequencer": "^27.5.1", @@ -79601,6 +81815,7 @@ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz", "integrity": "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==", "dev": true, + "peer": true, "requires": { "detect-newline": "^3.0.0" } @@ -79610,6 +81825,7 @@ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz", "integrity": "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "chalk": "^4.0.0", @@ -79623,6 +81839,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz", "integrity": "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==", "dev": true, + "peer": true, "requires": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -79638,6 +81855,7 @@ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz", "integrity": "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==", "dev": true, + "peer": true, "requires": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -79652,6 +81870,7 @@ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz", "integrity": "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/graceful-fs": "^4.1.2", @@ -79673,6 +81892,7 @@ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-27.5.1.tgz", "integrity": "sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==", "dev": true, + "peer": true, "requires": { "jest-get-type": "^27.5.1", "pretty-format": "^27.5.1" @@ -79683,6 +81903,7 @@ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz", "integrity": "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^27.5.1", @@ -79700,6 +81921,7 @@ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz", "integrity": "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*" @@ -79709,13 +81931,15 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-27.5.1.tgz", "integrity": "sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==", - "dev": true + "dev": true, + "peer": true }, "jest-resolve-dependencies": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz", "integrity": "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "jest-regex-util": "^27.5.1", @@ -79727,6 +81951,7 @@ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz", "integrity": "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==", "dev": true, + "peer": true, "requires": { "@jest/console": "^27.5.1", "@jest/environment": "^27.5.1", @@ -79756,6 +81981,7 @@ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz", "integrity": "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==", "dev": true, + "peer": true, "requires": { "@jest/environment": "^27.5.1", "@jest/fake-timers": "^27.5.1", @@ -79786,6 +82012,7 @@ "resolved": "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz", "integrity": "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "graceful-fs": "^4.2.9" @@ -79796,6 +82023,7 @@ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-27.5.1.tgz", "integrity": "sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==", "dev": true, + "peer": true, "requires": { "@babel/core": "^7.7.2", "@babel/generator": "^7.7.2", @@ -79826,6 +82054,7 @@ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz", "integrity": "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==", "dev": true, + "peer": true, "requires": { "@jest/types": "^27.5.1", "@types/node": "*", @@ -79840,6 +82069,7 @@ "resolved": "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz", "integrity": "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==", "dev": true, + "peer": true, "requires": { "ansi-escapes": "^4.3.1", "chalk": "^4.0.0", @@ -79855,6 +82085,7 @@ "resolved": "https://registry.npmjs.org/@jest/console/-/console-28.1.3.tgz", "integrity": "sha512-QPAkP5EwKdK/bxIr6C1I4Vs0rm2nHiANzj/Z5X2JQkrZo6IqvC4ldZ9K95tF0HdidhA8Bo6egxSzUFPYKcEXLw==", "dev": true, + "peer": true, "requires": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -79868,7 +82099,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "dev": true, + "peer": true } } }, @@ -79877,6 +82109,7 @@ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-28.1.3.tgz", "integrity": "sha512-kZAkxnSE+FqE8YjW8gNuoVkkC9I7S1qmenl8sGcDOLropASP+BkcGKwhXoyqQuGOGeYY0y/ixjrd/iERpEXHNg==", "dev": true, + "peer": true, "requires": { "@jest/console": "^28.1.3", "@jest/types": "^28.1.3", @@ -79889,6 +82122,7 @@ "resolved": "https://registry.npmjs.org/@jest/types/-/types-28.1.3.tgz", "integrity": "sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==", "dev": true, + "peer": true, "requires": { "@jest/schemas": "^28.1.3", "@types/istanbul-lib-coverage": "^2.0.0", @@ -79903,6 +82137,7 @@ "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.19.tgz", "integrity": "sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==", "dev": true, + "peer": true, "requires": { "@types/yargs-parser": "*" } @@ -79911,19 +82146,22 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true + "dev": true, + "peer": true }, "emittery": { "version": "0.10.2", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz", "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==", - "dev": true + "dev": true, + "peer": true }, "jest-message-util": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-28.1.3.tgz", "integrity": "sha512-PFdn9Iewbt575zKPf1286Ht9EPoJmYT7P0kY+RibeYZ2XtOr53pDLEFoTWXbd1h4JiGiWpTBC84fc8xMXQMb7g==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "^7.12.13", "@jest/types": "^28.1.3", @@ -79940,7 +82178,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "dev": true, + "peer": true } } }, @@ -79948,13 +82187,15 @@ "version": "28.0.2", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz", "integrity": "sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==", - "dev": true + "dev": true, + "peer": true }, "jest-util": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-28.1.3.tgz", "integrity": "sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==", "dev": true, + "peer": true, "requires": { "@jest/types": "^28.1.3", "@types/node": "*", @@ -79969,6 +82210,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-28.1.3.tgz", "integrity": "sha512-t4qcqj9hze+jviFPUN3YAtAEeFnr/azITXQEMARf5cMwKY2SMBRnCQTXLixTl20OR6mLh9KLMrgVJgJISym+1g==", "dev": true, + "peer": true, "requires": { "@jest/test-result": "^28.1.3", "@jest/types": "^28.1.3", @@ -79985,6 +82227,7 @@ "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", "dev": true, + "peer": true, "requires": { "char-regex": "^1.0.2", "strip-ansi": "^6.0.0" @@ -79995,6 +82238,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "peer": true, "requires": { "ansi-regex": "^5.0.1" } @@ -80006,6 +82250,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-28.1.3.tgz", "integrity": "sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==", "dev": true, + "peer": true, "requires": { "@jest/schemas": "^28.1.3", "ansi-regex": "^5.0.1", @@ -80017,13 +82262,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true + "dev": true, + "peer": true }, "string-length": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/string-length/-/string-length-5.0.1.tgz", "integrity": "sha512-9Ep08KAMUn0OadnVaBuRdE2l615CQ508kr0XMadjClfYpdCyvrbFp6Taebo8yyxokQ4viUd/xPPUA4FGgUa0ow==", "dev": true, + "peer": true, "requires": { "char-regex": "^2.0.0", "strip-ansi": "^7.0.1" @@ -80033,7 +82280,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-2.0.1.tgz", "integrity": "sha512-oSvEeo6ZUD7NepqAat3RqoucZ5SeqLJgOvVIwkafu6IP3V0pO38s/ypdVUmDDK6qIIHNlYHJAKX9E7R7HoKElw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -80042,6 +82290,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "peer": true, "requires": { "ansi-regex": "^6.0.1" }, @@ -80050,7 +82299,8 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "dev": true, + "peer": true } } } @@ -80061,6 +82311,7 @@ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-27.5.1.tgz", "integrity": "sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==", "dev": true, + "peer": true, "requires": { "@jest/test-result": "^27.5.1", "@jest/types": "^27.5.1", @@ -80076,6 +82327,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "peer": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -80087,6 +82339,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -80098,6 +82351,7 @@ "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", "dev": true, + "peer": true, "requires": { "abab": "^2.0.5", "acorn": "^8.2.4", @@ -80133,6 +82387,7 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", "dev": true, + "peer": true, "requires": {} } } @@ -80141,13 +82396,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "peer": true }, "json5": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "requires": { "minimist": "^1.2.5" } @@ -80157,6 +82414,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, + "peer": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -80168,6 +82426,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "peer": true, "requires": { "p-locate": "^5.0.0" } @@ -80176,19 +82435,22 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "dev": true, + "peer": true }, "node-forge": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.2.1.tgz", "integrity": "sha512-Fcvtbb+zBcZXbTTVwqGA5W+MKBj56UjVRevvchv5XrcyXbmNdesfZL37nlcWOfpgHhgmxApw3tQbTr4CqNmX4w==", - "dev": true + "dev": true, + "peer": true }, "nth-check": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", "dev": true, + "peer": true, "requires": { "boolbase": "^1.0.0" } @@ -80198,6 +82460,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "peer": true, "requires": { "yocto-queue": "^0.1.0" } @@ -80207,6 +82470,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "peer": true, "requires": { "p-limit": "^3.0.2" } @@ -80216,6 +82480,7 @@ "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.1.tgz", "integrity": "sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==", "dev": true, + "peer": true, "requires": { "@types/retry": "^0.12.0", "retry": "^0.13.1" @@ -80226,6 +82491,7 @@ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz", "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==", "dev": true, + "peer": true, "requires": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", @@ -80237,6 +82503,7 @@ "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.0.tgz", "integrity": "sha512-b4g9eagFGq9T5SWX4+USfVyjIb3liPnjhHHRMP7FMB2kFVpYyfEscV0wP3eaXhKlcHKUut8lt5BGoeylWA/dBQ==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.2" } @@ -80246,6 +82513,7 @@ "resolved": "https://registry.npmjs.org/postcss-browser-comments/-/postcss-browser-comments-4.0.0.tgz", "integrity": "sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==", "dev": true, + "peer": true, "requires": {} }, "postcss-calc": { @@ -80253,6 +82521,7 @@ "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.3.tgz", "integrity": "sha512-EGM2EBBWqP57N0E7N7WOLT116PJ39dwHVU01WO4XPPQLJfkL2xVgkMZ+TZvCfapj/uJH07UEfKHQNPHzSw/14Q==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.0.2" @@ -80263,6 +82532,7 @@ "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.1.tgz", "integrity": "sha512-62OBIXCjRXpQZcFOYIXwXBlpAVWrYk8ek1rcjvMING4Q2cf0ipyN9qT+BhHA6HmftGSEnFQu2qgKO3gMscl3Rw==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80272,6 +82542,7 @@ "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.2.tgz", "integrity": "sha512-gyx8RgqSmGVK156NAdKcsfkY3KPGHhKqvHTL3hhveFrBBToguKFzhyiuk3cljH6L4fJ0Kv+JENuPXs1Wij27Zw==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80281,6 +82552,7 @@ "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.0.2.tgz", "integrity": "sha512-SFc3MaocHaQ6k3oZaFwH8io6MdypkUtEy/eXzXEB1vEQlO3S3oDc/FSZA8AsS04Z25RirQhlDlHLh3dn7XewWw==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80290,6 +82562,7 @@ "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.4.tgz", "integrity": "sha512-rYlC5015aNqVQt/B6Cy156g7sH5tRUJGmT9xeagYthtKehetbKx7jHxhyLpulP4bs4vbp8u/B2rac0J7S7qPQg==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", @@ -80302,6 +82575,7 @@ "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.3.tgz", "integrity": "sha512-fVkjHm2T0PSMqXUCIhHNWVGjhB9mHEWX2GboVs7j3iCgr6FpIl9c/IdXy0PHWZSQ9LFTRgmj98amxJE6KOnlsA==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80311,6 +82585,7 @@ "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.0.tgz", "integrity": "sha512-FvO2GzMUaTN0t1fBULDeIvxr5IvbDXcIatt6pnJghc736nqNgsGao5NT+5+WVLAQiTt6Cb3YUms0jiPaXhL//g==", "dev": true, + "peer": true, "requires": {} }, "postcss-custom-properties": { @@ -80318,6 +82593,7 @@ "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.3.tgz", "integrity": "sha512-rtu3otIeY532PnEuuBrIIe+N+pcdbX/7JMZfrcL09wc78YayrHw5E8UkDfvnlOhEUrI4ptCuzXQfj+Or6spbGA==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80327,6 +82603,7 @@ "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.0.tgz", "integrity": "sha512-/1iyBhz/W8jUepjGyu7V1OPcGbc636snN1yXEQCinb6Bwt7KxsiU7/bLQlp8GwAXzCh7cobBU5odNn/2zQWR8Q==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.4" } @@ -80336,6 +82613,7 @@ "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.3.tgz", "integrity": "sha512-qiPm+CNAlgXiMf0J5IbBBEXA9l/Q5HGsNGkL3znIwT2ZFRLGY9U2fTUpa4lqCUXQOxaLimpacHeQC80BD2qbDw==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.8" } @@ -80345,6 +82623,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.2.tgz", "integrity": "sha512-6VQ3pYTsJHEsN2Bic88Aa7J/Brn4Bv8j/rqaFQZkH+pcVkKYwxCIvoMQkykEW7fBjmofdTnQgcivt5CCBJhtrg==", "dev": true, + "peer": true, "requires": {} }, "postcss-discard-duplicates": { @@ -80352,6 +82631,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.2.tgz", "integrity": "sha512-LKY81YjUjc78p6rbXIsnppsaFo8XzCoMZkXVILJU//sK0DgPkPSpuq/cZvHss3EtdKvWNYgWzQL+wiJFtEET4g==", "dev": true, + "peer": true, "requires": {} }, "postcss-discard-empty": { @@ -80359,6 +82639,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.2.tgz", "integrity": "sha512-SxBsbTjlsKUvZLL+dMrdWauuNZU8TBq5IOL/DHa6jBUSXFEwmDqeXRfTIK/FQpPTa8MJMxEHjSV3UbiuyLARPQ==", "dev": true, + "peer": true, "requires": {} }, "postcss-discard-overridden": { @@ -80366,6 +82647,7 @@ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.3.tgz", "integrity": "sha512-yRTXknIZA4k8Yo4FiF1xbsLj/VBxfXEWxJNIrtIy6HC9KQ4xJxcPtoaaskh6QptCGrrcGnhKsTsENTRPZOBu4g==", "dev": true, + "peer": true, "requires": {} }, "postcss-double-position-gradients": { @@ -80373,6 +82655,7 @@ "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.0.4.tgz", "integrity": "sha512-qz+s5vhKJlsHw8HjSs+HVk2QGFdRyC68KGRQGX3i+GcnUjhWhXQEmCXW6siOJkZ1giu0ddPwSO6I6JdVVVPoog==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80382,6 +82665,7 @@ "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.4.tgz", "integrity": "sha512-0ltahRTPtXSIlEZFv7zIvdEib7HN0ZbUQxrxIKn8KbiRyhALo854I/CggU5lyZe6ZBvSTJ6Al2vkZecI2OhneQ==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80391,6 +82675,7 @@ "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-5.0.2.tgz", "integrity": "sha512-18f9voByak7bTktR2QgDveglpn9DTbBWPUzSOe9g0N4WR/2eSt6Vrcbf0hmspvMI6YWGywz6B9f7jzpFNJJgnQ==", "dev": true, + "peer": true, "requires": {} }, "postcss-focus-visible": { @@ -80398,6 +82683,7 @@ "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.3.tgz", "integrity": "sha512-ozOsg+L1U8S+rxSHnJJiET6dNLyADcPHhEarhhtCI9DBLGOPG/2i4ddVoFch9LzrBgb8uDaaRI4nuid2OM82ZA==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.8" } @@ -80407,6 +82693,7 @@ "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.3.tgz", "integrity": "sha512-fk9y2uFS6/Kpp7/A9Hz9Z4rlFQ8+tzgBcQCXAFSrXFGAbKx+4ZZOmmfHuYjCOMegPWoz0pnC6fNzi8j7Xyqp5Q==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.8" } @@ -80416,6 +82703,7 @@ "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", "dev": true, + "peer": true, "requires": {} }, "postcss-gap-properties": { @@ -80423,6 +82711,7 @@ "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.2.tgz", "integrity": "sha512-EaMy/pbxtQnKDsnbEjdqlkCkROTQZzolcLKgIE+3b7EuJfJydH55cZeHfm+MtIezXRqhR80VKgaztO/vHq94Fw==", "dev": true, + "peer": true, "requires": {} }, "postcss-image-set-function": { @@ -80430,6 +82719,7 @@ "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.4.tgz", "integrity": "sha512-BlEo9gSTj66lXjRNByvkMK9dEdEGFXRfGjKRi9fo8s0/P3oEk74cAoonl/utiM50E2OPVb/XSu+lWvdW4KtE/Q==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80439,6 +82729,7 @@ "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", "dev": true, + "peer": true, "requires": {} }, "postcss-js": { @@ -80446,6 +82737,7 @@ "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", "dev": true, + "peer": true, "requires": { "camelcase-css": "^2.0.1" } @@ -80455,6 +82747,7 @@ "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.0.3.tgz", "integrity": "sha512-MH4tymWmefdZQ7uVG/4icfLjAQmH6o2NRYyVh2mKoB4RXJp9PjsyhZwhH4ouaCQHvg+qJVj3RzeAR1EQpIlXZA==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80464,6 +82757,7 @@ "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-6.2.1.tgz", "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", "dev": true, + "peer": true, "requires": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", @@ -80475,6 +82769,7 @@ "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.3.tgz", "integrity": "sha512-P5NcHWYrif0vK8rgOy/T87vg0WRIj3HSknrvp1wzDbiBeoDPVmiVRmkown2eSQdpPveat/MC1ess5uhzZFVnqQ==", "dev": true, + "peer": true, "requires": {} }, "postcss-media-minmax": { @@ -80482,6 +82777,7 @@ "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", "dev": true, + "peer": true, "requires": {} }, "postcss-merge-longhand": { @@ -80489,6 +82785,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.5.tgz", "integrity": "sha512-R2BCPJJ/U2oh1uTWEYn9CcJ7MMcQ1iIbj9wfr2s/zHu5om5MP/ewKdaunpfJqR1WYzqCsgnXuRoVXPAzxdqy8g==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.0.2" @@ -80499,6 +82796,7 @@ "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.5.tgz", "integrity": "sha512-3Oa26/Pb9VOFVksJjFG45SNoe4nhGvJ2Uc6TlRimqF8uhfOCEhVCaJ3rvEat5UFOn2UZqTY5Da8dFgCh3Iq0Ug==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", @@ -80511,6 +82809,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.3.tgz", "integrity": "sha512-bC45rVzEwsLhv/cL1eCjoo2OOjbSk9I7HKFBYnBvtyuIZlf7uMipMATXtA0Fc3jwPo3wuPIW1jRJWKzflMh1sA==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80520,6 +82819,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.5.tgz", "integrity": "sha512-/YjvXs8PepsoiZAIpjstOO4IHKwFAqYNqbA1yVdqklM84tbUUneh6omJxGlRlF3mi6K5Pa067Mg6IwqEnYC8Zg==", "dev": true, + "peer": true, "requires": { "colord": "^2.9.1", "cssnano-utils": "^3.0.1", @@ -80531,6 +82831,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.4.tgz", "integrity": "sha512-Z0vjod9lRZEmEPfEmA2sCfjbfEEFKefMD3RDIQSUfXK4LpCyWkX1CniUgyNvnjJFLDPSxtgKzozhHhPHKoeGkg==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.16.6", "cssnano-utils": "^3.0.1", @@ -80542,6 +82843,7 @@ "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.2.tgz", "integrity": "sha512-gpn1nJDMCf3g32y/7kl+jsdamhiYT+/zmEt57RoT9GmzlixBNRPohI7k8UIHelLABhdLf3MSZhtM33xuH5eQOQ==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.5" } @@ -80551,6 +82853,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", "dev": true, + "peer": true, "requires": {} }, "postcss-modules-local-by-default": { @@ -80558,6 +82861,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, + "peer": true, "requires": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", @@ -80569,6 +82873,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.4" } @@ -80578,6 +82883,7 @@ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, + "peer": true, "requires": { "icss-utils": "^5.0.0" } @@ -80587,6 +82893,7 @@ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.6" } @@ -80596,6 +82903,7 @@ "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.1.2.tgz", "integrity": "sha512-dJGmgmsvpzKoVMtDMQQG/T6FSqs6kDtUDirIfl4KnjMCiY9/ETX8jdKyCd20swSRAbUYkaBKV20pxkzxoOXLqQ==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.8" } @@ -80605,6 +82913,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize/-/postcss-normalize-10.0.1.tgz", "integrity": "sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==", "dev": true, + "peer": true, "requires": { "@csstools/normalize.css": "*", "postcss-browser-comments": "^4", @@ -80616,6 +82925,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.2.tgz", "integrity": "sha512-fEMhYXzO8My+gC009qDc/3bgnFP8Fv1Ic8uw4ec4YTlhIOw63tGPk1YFd7fk9bZUf1DAbkhiL/QPWs9JLqdF2g==", "dev": true, + "peer": true, "requires": {} }, "postcss-normalize-display-values": { @@ -80623,6 +82933,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.2.tgz", "integrity": "sha512-RxXoJPUR0shSjkMMzgEZDjGPrgXUVYyWA/YwQRicb48H15OClPuaDR7tYokLAlGZ2tCSENEN5WxjgxSD5m4cUw==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80632,6 +82943,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.3.tgz", "integrity": "sha512-U+rmhjrNBvIGYqr/1tD4wXPFFMKUbXsYXvlUCzLi0tOCUS6LoeEAnmVXXJY/MEB/1CKZZwBSs2tmzGawcygVBA==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80641,6 +82953,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.3.tgz", "integrity": "sha512-uk1+xYx0AMbA3nLSNhbDrqbf/rx+Iuq5tVad2VNyaxxJzx79oGieJ6D9F6AfOL2GtiIbP7vTYlpYHtG+ERFXTg==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80650,6 +82963,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.3.tgz", "integrity": "sha512-Mf2V4JbIDboNGQhW6xW0YREDiYXoX3WrD3EjKkjvnpAJ6W4qqjLnK/c9aioyVFaWWHVdP5zVRw/9DI5S3oLDFw==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80659,6 +82973,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.2.tgz", "integrity": "sha512-Ao0PP6MoYsRU1LxeVUW740ioknvdIUmfr6uAA3xWlQJ9s69/Tupy8qwhuKG3xWfl+KvLMAP9p2WXF9cwuk/7Bg==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80668,6 +82983,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.3.tgz", "integrity": "sha512-uNC7BmS/7h6to2UWa4RFH8sOTzu2O9dVWPE/F9Vm9GdhONiD/c1kNaCLbmsFHlKWcEx7alNUChQ+jH/QAlqsQw==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.16.6", "postcss-value-parser": "^4.2.0" @@ -80678,6 +82994,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.4.tgz", "integrity": "sha512-cNj3RzK2pgQQyNp7dzq0dqpUpQ/wYtdDZM3DepPmFjCmYIfceuD9VIAcOdvrNetjIU65g1B4uwdP/Krf6AFdXg==", "dev": true, + "peer": true, "requires": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" @@ -80688,6 +83005,7 @@ "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.3.tgz", "integrity": "sha512-333JWRnX655fSoUbufJ10HJop3c8mrpKkCCUnEmgz/Cb/QEtW+/TMZwDAUt4lnwqP6tCCk0x0b58jqvDgiQm/A==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80697,6 +83015,7 @@ "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.4.tgz", "integrity": "sha512-taKtGDZtyYUMVYkg+MuJeBUiTF6cGHZmo/qcW7ibvW79UlyKuSHbo6dpCIiqI+j9oJsXWzP+ovIxoyLDOeQFdw==", "dev": true, + "peer": true, "requires": { "cssnano-utils": "^3.0.1", "postcss-value-parser": "^4.2.0" @@ -80707,6 +83026,7 @@ "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.2.tgz", "integrity": "sha512-odBMVt6PTX7jOE9UNvmnLrFzA9pXS44Jd5shFGGtSHY80QCuJF+14McSy0iavZggRZ9Oj//C9vOKQmexvyEJMg==", "dev": true, + "peer": true, "requires": {} }, "postcss-page-break": { @@ -80714,6 +83034,7 @@ "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", "dev": true, + "peer": true, "requires": {} }, "postcss-place": { @@ -80721,6 +83042,7 @@ "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.3.tgz", "integrity": "sha512-tDQ3m+GYoOar+KoQgj+pwPAvGHAp/Sby6vrFiyrELrMKQJ4AejL0NcS0mm296OKKYA2SRg9ism/hlT/OLhBrdQ==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80730,6 +83052,7 @@ "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.2.3.tgz", "integrity": "sha512-Ok0DhLfwrcNGrBn8sNdy1uZqWRk/9FId0GiQ39W4ILop5GHtjJs8bu1MY9isPwHInpVEPWjb4CEcEaSbBLpfwA==", "dev": true, + "peer": true, "requires": { "autoprefixer": "^10.4.2", "browserslist": "^4.19.1", @@ -80771,6 +83094,7 @@ "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.0.2.tgz", "integrity": "sha512-CG35J1COUH7OOBgpw5O+0koOLUd5N4vUGKUqSAuIe4GiuLHWU96Pqp+UPC8QITTd12zYAFx76pV7qWT/0Aj/TA==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.8" } @@ -80780,6 +83104,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.2.tgz", "integrity": "sha512-v/kbAAQ+S1V5v9TJvbGkV98V2ERPdU6XvMcKMjqAlYiJ2NtsHGlKYLPjWWcXlaTKNxooId7BGxeraK8qXvzKtw==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0" @@ -80790,6 +83115,7 @@ "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.3.tgz", "integrity": "sha512-yDnTUab5i7auHiNwdcL1f+pBnqQFf+7eC4cbC7D8Lc1FkvNZhtpkdad+9U4wDdFb84haupMf0rA/Zc5LcTe/3A==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.2.0" } @@ -80799,6 +83125,7 @@ "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", "dev": true, + "peer": true, "requires": {} }, "postcss-selector-not": { @@ -80806,6 +83133,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-5.0.0.tgz", "integrity": "sha512-/2K3A4TCP9orP4TNS7u3tGdRFVKqz/E6pX3aGnriPG0jU78of8wsUcqE4QAhWEU0d+WnMSF93Ah3F//vUtK+iQ==", "dev": true, + "peer": true, "requires": { "balanced-match": "^1.0.0" } @@ -80815,6 +83143,7 @@ "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.3.tgz", "integrity": "sha512-41XZUA1wNDAZrQ3XgWREL/M2zSw8LJPvb5ZWivljBsUQAGoEKMYm6okHsTjJxKYI4M75RQEH4KYlEM52VwdXVA==", "dev": true, + "peer": true, "requires": { "postcss-value-parser": "^4.1.0", "svgo": "^2.7.0" @@ -80825,6 +83154,7 @@ "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.3.tgz", "integrity": "sha512-V5tX2hadSSn+miVCluuK1IDGy+7jAXSOfRZ2DQ+s/4uQZb/orDYBjH0CHgFrXsRw78p4QTuEFA9kI6C956UnHQ==", "dev": true, + "peer": true, "requires": { "postcss-selector-parser": "^6.0.5" } @@ -80834,6 +83164,7 @@ "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", "dev": true, + "peer": true, "requires": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -80843,13 +83174,15 @@ "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true + "dev": true, + "peer": true }, "renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", "dev": true, + "peer": true, "requires": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -80862,13 +83195,15 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "dev": true + "dev": true, + "peer": true }, "sass-loader": { "version": "12.4.0", "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-12.4.0.tgz", "integrity": "sha512-7xN+8khDIzym1oL9XyS6zP6Ges+Bo2B2xbPrjdMHEYyV3AQYhd/wXeru++3ODHF0zMjYmVadblSKrPrjEkL8mg==", "dev": true, + "peer": true, "requires": { "klona": "^2.0.4", "neo-async": "^2.6.2" @@ -80879,6 +83214,7 @@ "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", "dev": true, + "peer": true, "requires": { "xmlchars": "^2.2.0" } @@ -80888,6 +83224,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -80899,6 +83236,7 @@ "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.0.0.tgz", "integrity": "sha512-cUdFiCbKoa1mZ6osuJs2uDHrs0k0oprsKveFiiaBKCNq3SYyb5gs2HxhQyDNLCmL51ZZThqi4YNDpCK6GOP1iQ==", "dev": true, + "peer": true, "requires": { "node-forge": "^1.2.0" } @@ -80908,6 +83246,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", "dev": true, + "peer": true, "requires": { "lru-cache": "^6.0.0" } @@ -80917,6 +83256,7 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, + "peer": true, "requires": { "randombytes": "^2.1.0" } @@ -80926,6 +83266,7 @@ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, + "peer": true, "requires": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", @@ -80936,13 +83277,15 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true + "dev": true, + "peer": true }, "source-map-loader": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-3.0.1.tgz", "integrity": "sha512-Vp1UsfyPvgujKQzi4pyDiTOnE3E4H+yHvkVRN3c/9PJmQS4CQJExvcDvaX/D+RV+xQben9HJ56jMJS3CgUeWyA==", "dev": true, + "peer": true, "requires": { "abab": "^2.0.5", "iconv-lite": "^0.6.3", @@ -80954,6 +83297,7 @@ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", "dev": true, + "peer": true, "requires": {} }, "stylehacks": { @@ -80961,6 +83305,7 @@ "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.2.tgz", "integrity": "sha512-114zeJdOpTrbQYRD4OU5UWJ99LKUaqCPJTU1HQ/n3q3BwmllFN8kHENaLnOeqVq6AhXrWfxHNZTl33iJ4oy3cQ==", "dev": true, + "peer": true, "requires": { "browserslist": "^4.16.6", "postcss-selector-parser": "^6.0.4" @@ -80971,6 +83316,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -80980,6 +83326,7 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, + "peer": true, "requires": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -80994,7 +83341,8 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -81003,6 +83351,7 @@ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.0.17.tgz", "integrity": "sha512-OiHUsmOKQQEg/ocXaLIjk/kOz8EK2jF6iPuc1bQ4NsmhYl7sk70UDsGV02AJvBAAiJhinPCkDR8egT9qY+ulCw==", "dev": true, + "peer": true, "requires": { "arg": "^5.0.1", "chalk": "^4.1.2", @@ -81030,33 +83379,15 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } + "peer": true }, "terser-webpack-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, + "peer": true, "requires": { "jest-worker": "^27.4.1", "schema-utils": "^3.1.1", @@ -81069,7 +83400,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -81078,6 +83410,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "dev": true, + "peer": true, "requires": { "punycode": "^2.1.1" } @@ -81094,13 +83427,15 @@ "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true + "dev": true, + "peer": true }, "w3c-xmlserializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", "dev": true, + "peer": true, "requires": { "xml-name-validator": "^3.0.0" } @@ -81109,13 +83444,15 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", - "dev": true + "dev": true, + "peer": true }, "webpack-dev-middleware": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.0.tgz", "integrity": "sha512-MouJz+rXAm9B1OTOYaJnn6rtD/lWZPy2ufQCH3BPs8Rloh/Du6Jze4p7AeLYHkVi0giJnYLaSGDC7S+GM9arhg==", "dev": true, + "peer": true, "requires": { "colorette": "^2.0.10", "memfs": "^3.2.2", @@ -81129,6 +83466,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -81141,6 +83479,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.3" } @@ -81150,6 +83489,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -81164,6 +83504,7 @@ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.7.3.tgz", "integrity": "sha512-mlxq2AsIw2ag016nixkzUkdyOE8ST2GTy34uKSABp1c4nhjZvH90D5ZRR+UOLSsG4Z3TFahAi72a3ymRtfRm+Q==", "dev": true, + "peer": true, "requires": { "@types/bonjour": "^3.5.9", "@types/connect-history-api-fallback": "^1.3.5", @@ -81201,6 +83542,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -81213,6 +83555,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.3" } @@ -81221,13 +83564,15 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true + "dev": true, + "peer": true }, "schema-utils": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, + "peer": true, "requires": { "@types/json-schema": "^7.0.9", "ajv": "^8.8.0", @@ -81240,6 +83585,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dev": true, + "peer": true, "requires": { "ansi-regex": "^6.0.1" } @@ -81251,6 +83597,7 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, + "peer": true, "requires": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", @@ -81262,6 +83609,7 @@ "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", "dev": true, + "peer": true, "requires": { "iconv-lite": "0.4.24" }, @@ -81271,6 +83619,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "peer": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -81281,13 +83630,15 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", - "dev": true + "dev": true, + "peer": true }, "whatwg-url": { "version": "8.7.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", "dev": true, + "peer": true, "requires": { "lodash": "^4.7.0", "tr46": "^2.1.0", @@ -81298,7 +83649,8 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -81629,6 +83981,7 @@ "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz", "integrity": "sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==", "dev": true, + "peer": true, "requires": { "minimatch": "^3.0.5" } @@ -81719,9 +84072,9 @@ } }, "regenerator-runtime": { - "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, "regenerator-transform": { "version": "0.15.1", @@ -81746,7 +84099,8 @@ "version": "2.2.11", "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", - "dev": true + "dev": true, + "peer": true }, "regexp.prototype.flags": { "version": "1.4.3", @@ -81816,72 +84170,10 @@ "unist-util-visit": "^4.0.0" }, "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, "hast-util-has-property": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hast-util-has-property/-/hast-util-has-property-2.0.0.tgz", "integrity": "sha512-4Qf++8o5v14us4Muv3HRj+Er6wTNGA/N9uCaZMty4JWvyFKLdhULrv4KE1b65AthsSO9TXSZnjuxS8ecIyhb0w==" - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" - }, - "unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.2.tgz", - "integrity": "sha512-w0PLIugRY3Crkgw89TeMvHCzqCs/zpreR31hl4D92y6SOE07+bfJe+dK5Q2akwS+i/c801kzjoOr9gMcTe6IAA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -81933,70 +84225,6 @@ "mdast-util-directive": "^2.0.0", "micromark-extension-directive": "^2.0.0", "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-plain-obj": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", - "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" - }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" - }, - "unified": { - "version": "10.1.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", - "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.2.tgz", - "integrity": "sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.4.tgz", - "integrity": "sha512-KI+7cnst03KbEyN1+JE504zF5bJBZa+J+CrevLeyIMq0aPU681I2rQ5p4PlnQ6exFtWiUrg26QUdFMnAKR6PIw==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.2.tgz", - "integrity": "sha512-QjSNP6Yxzyycd4SVOtmKKyTsSvClqBPJcd00Z0zuPj3hOIjg0rUPG6DbFGPvUKRgYyaIWLPKpuEclcuvb3H8qA==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } } }, "remark-external-links": { @@ -82050,70 +84278,6 @@ "mdast-util-frontmatter": "^1.0.0", "micromark-extension-frontmatter": "^1.0.0", "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", - "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" - }, - "unified": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.1.tgz", - "integrity": "sha512-v4ky1+6BN9X3pQrOdkFIPWAaeDsHPE1svRDxq7YpTc2plkIqFMwukfqM+l0ewpP9EfwARlt9pPFAeWYhHm8X9w==", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.0.tgz", - "integrity": "sha512-Tj44nY/48OQvarrE4FAjUfrv7GZOYzPbl5OD65HxVKwLJKMPU7zmfV8cCgCnzKWnSfYG2f3pxu+ALqs7j22xQQ==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.0.tgz", - "integrity": "sha512-4QJbBk+DkPEhBXq3f260xSaWtjE4gPKOfulzfMFF8ZNwaPZieWsg3iVlcmF04+eebzpcpeXOOFMfrYzJHVYg+g==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } } }, "remark-gfm": { @@ -82125,70 +84289,6 @@ "mdast-util-gfm": "^2.0.0", "micromark-extension-gfm": "^2.0.0", "unified": "^10.0.0" - }, - "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.2.0.tgz", - "integrity": "sha512-ftCpb6pU8Jrzcqku8zE6N3Gi4/RkDhRwEXSWudzZzA2eEOn/cBpsfk9aulCUR+j1raRSAykYQap9u6j6rhUaCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } - } } }, "remark-mdx": { @@ -82257,6 +84357,24 @@ "@babel/helper-plugin-utils": "^7.10.4" } }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, "json5": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", @@ -82268,6 +84386,26 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + } } } }, @@ -82306,21 +84444,6 @@ "unified": "^10.0.0" }, "dependencies": { - "bail": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", - "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" - }, - "is-plain-obj": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.0.0.tgz", - "integrity": "sha512-NXRbBtUdBioI73y/HmOhogw/U5msYPC9DAtGkJXeFcFWSFZw0mCUsPxk/snTuJHzNKA8kLBK4rH97RMB1BfCXw==" - }, "mdast-util-definitions": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-5.1.0.tgz", @@ -82368,25 +84491,6 @@ "unist-util-visit": "^4.0.0" } }, - "trough": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/trough/-/trough-2.0.2.tgz", - "integrity": "sha512-FnHq5sTMxC0sk957wHDzRnemFnNBvt/gSY99HzK8F7UP5WAbvP70yX5bd7CjEQkN+TjdxwI7g7lJ6podqrG2/w==" - }, - "unified": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.0.tgz", - "integrity": "sha512-4U3ru/BRXYYhKbwXV6lU6bufLikoAavTwev89H5UxY8enDFaAT2VXmIXYNm6hb5oHPng/EXr77PVyDFcptbk5g==", - "requires": { - "@types/unist": "^2.0.0", - "bail": "^2.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^4.0.0", - "trough": "^2.0.0", - "vfile": "^5.0.0" - } - }, "unist-builder": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-3.0.0.tgz", @@ -82409,34 +84513,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-4.0.1.tgz", "integrity": "sha512-mgy/zI9fQ2HlbOtTdr2w9lhVaiFUHWQnZrFF2EUoVOqtAUdzqMtNiD99qA5a1IcjWVR8O6aVYE9u7Z2z1v0SQA==" - }, - "unist-util-stringify-position": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.0.tgz", - "integrity": "sha512-SdfAl8fsDclywZpfMDTVDxA2V7LjtRDTOFd44wUJamgl6OlVngsqWjxvermMYf60elWHbxhuRCZml7AnuXCaSA==", - "requires": { - "@types/unist": "^2.0.0" - } - }, - "vfile": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.2.0.tgz", - "integrity": "sha512-ftCpb6pU8Jrzcqku8zE6N3Gi4/RkDhRwEXSWudzZzA2eEOn/cBpsfk9aulCUR+j1raRSAykYQap9u6j6rhUaCA==", - "requires": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^3.0.0", - "vfile-message": "^3.0.0" - } - }, - "vfile-message": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.0.2.tgz", - "integrity": "sha512-UUjZYIOg9lDRwwiBAuezLIsu9KlXntdxwG+nXnjuQAHvBpcX3x0eN8h+I7TkY5nkCXj+cWVp4ZqebtGBvok8ww==", - "requires": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^3.0.0" - } } } }, @@ -82679,6 +84755,7 @@ "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-4.0.0.tgz", "integrity": "sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==", "dev": true, + "peer": true, "requires": { "adjust-sourcemap-loader": "^4.0.0", "convert-source-map": "^1.7.0", @@ -82692,6 +84769,7 @@ "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", "dev": true, + "peer": true, "requires": { "minimist": "^1.2.5" } @@ -82701,6 +84779,7 @@ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.2.tgz", "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", "dev": true, + "peer": true, "requires": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", @@ -82711,7 +84790,8 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true } } }, @@ -82781,6 +84861,7 @@ "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -82788,38 +84869,15 @@ "terser": "^5.0.0" }, "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "serialize-javascript": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", "dev": true, + "peer": true, "requires": { "randombytes": "^2.1.0" } - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } } } }, @@ -83188,7 +85246,8 @@ "version": "13.0.0", "resolved": "https://registry.npmjs.org/sanitize.css/-/sanitize.css-13.0.0.tgz", "integrity": "sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==", - "dev": true + "dev": true, + "peer": true }, "sass": { "version": "1.52.3", @@ -83211,7 +85270,8 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "dev": true + "dev": true, + "peer": true }, "saxes": { "version": "6.0.0", @@ -83251,7 +85311,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", - "dev": true + "dev": true, + "peer": true }, "selenium-webdriver": { "version": "4.1.2", @@ -83373,6 +85434,7 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, + "peer": true, "requires": { "accepts": "~1.3.4", "batch": "0.6.1", @@ -83388,6 +85450,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "peer": true, "requires": { "ms": "2.0.0" } @@ -83397,6 +85460,7 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, + "peer": true, "requires": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -83408,19 +85472,22 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "peer": true }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "dev": true, + "peer": true }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "dev": true + "dev": true, + "peer": true } } }, @@ -83524,7 +85591,8 @@ "version": "1.7.3", "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.3.tgz", "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", - "dev": true + "dev": true, + "peer": true }, "should": { "version": "13.2.3", @@ -83934,6 +86002,7 @@ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, + "peer": true, "requires": { "debug": "^4.1.0", "handle-thing": "^2.0.0", @@ -83947,6 +86016,7 @@ "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, + "peer": true, "requires": { "debug": "^4.1.0", "detect-node": "^2.0.4", @@ -84098,7 +86168,8 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true + "dev": true, + "peer": true }, "stdopt": { "version": "2.2.0", @@ -84366,6 +86437,7 @@ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", "dev": true, + "peer": true, "requires": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", @@ -84390,7 +86462,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", - "dev": true + "dev": true, + "peer": true }, "strip-eof": { "version": "1.0.0", @@ -84571,23 +86644,6 @@ "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - } - }, "cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", @@ -84607,15 +86663,6 @@ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, "import-lazy": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", @@ -84628,44 +86675,6 @@ "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, - "meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, "postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -84684,39 +86693,12 @@ "dev": true, "requires": {} }, - "quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true - }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true - }, - "type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true - }, "write-file-atomic": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", @@ -84887,6 +86869,7 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", "dev": true, + "peer": true, "requires": { "chalk": "^2.4.1", "coa": "^2.0.2", @@ -84908,6 +86891,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "peer": true, "requires": { "sprintf-js": "~1.0.2" } @@ -84917,6 +86901,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "peer": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -85131,13 +87116,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", - "dev": true + "dev": true, + "peer": true }, "tempy": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dev": true, + "peer": true, "requires": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", @@ -85149,7 +87136,8 @@ "version": "0.16.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", - "dev": true + "dev": true, + "peer": true } } }, @@ -85158,33 +87146,35 @@ "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", "dev": true, + "peer": true, "requires": { "ansi-escapes": "^4.2.1", "supports-hyperlinks": "^2.0.0" } }, "terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "version": "5.16.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", + "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", "dev": true, "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map-support": "~0.5.20" }, "dependencies": { + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "dev": true + }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true } } }, @@ -85205,18 +87195,6 @@ "webpack-sources": "^1.4.3" }, "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", - "dev": true - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -85242,18 +87220,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } } } }, @@ -85283,7 +87249,8 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/throat/-/throat-6.0.2.tgz", "integrity": "sha512-WKexMoJj3vEuK0yFEapj8y64V0A6xcuPuK9Gt1d0R+dzCSJc0lHqQytAbSB4cDAK0dWh4T0E2ETkoLE2WZ41OQ==", - "dev": true + "dev": true, + "peer": true }, "throttle-debounce": { "version": "3.0.1", @@ -85336,7 +87303,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "dev": true + "dev": true, + "peer": true }, "timers-browserify": { "version": "2.0.12", @@ -85357,6 +87325,13 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true, + "peer": true + }, + "tiny-invariant": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", + "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", "dev": true }, "tiny-warning": { @@ -85492,11 +87467,10 @@ "dev": true }, "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true, - "optional": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true }, "trim-trailing-lines": { "version": "1.1.4", @@ -85505,16 +87479,16 @@ "dev": true }, "trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", - "dev": true + "dev": true, + "peer": true }, "ts-dedent": { "version": "2.1.1", @@ -85588,21 +87562,21 @@ "requires": {} }, "tsconfig-paths": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz", - "integrity": "sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", "dev": true, "requires": { "@types/json5": "^0.0.29", "json5": "^1.0.1", - "minimist": "^1.2.0", + "minimist": "^1.2.6", "strip-bom": "^3.0.0" }, "dependencies": { "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true } } @@ -85759,30 +87733,56 @@ "dev": true }, "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dev": true, + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-10.1.2.tgz", + "integrity": "sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==", "requires": { - "bail": "^1.0.0", + "@types/unist": "^2.0.0", + "bail": "^2.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^5.0.0" }, "dependencies": { "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" }, "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + }, + "unist-util-stringify-position": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz", + "integrity": "sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==", + "requires": { + "@types/unist": "^2.0.0" + } + }, + "vfile": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-5.3.6.tgz", + "integrity": "sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==", + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^3.0.0", + "vfile-message": "^3.0.0" + } + }, + "vfile-message": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-3.1.3.tgz", + "integrity": "sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==", + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^3.0.0" + } } } }, @@ -85821,6 +87821,7 @@ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "peer": true, "requires": { "crypto-random-string": "^2.0.0" } @@ -85957,7 +87958,8 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", - "dev": true + "dev": true, + "peer": true }, "unset-value": { "version": "1.0.0", @@ -86159,6 +88161,7 @@ "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", "dev": true, + "peer": true, "requires": { "define-properties": "^1.1.3", "es-abstract": "^1.17.2", @@ -86312,6 +88315,317 @@ "unist-util-stringify-position": "^2.0.0" } }, + "vite": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "dev": true, + "requires": { + "esbuild": "^0.16.3", + "fsevents": "~2.3.2", + "postcss": "^8.4.20", + "resolve": "^1.22.1", + "rollup": "^3.7.0" + }, + "dependencies": { + "@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "dev": true, + "optional": true + }, + "esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "rollup": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.0.tgz", + "integrity": "sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + } + } + }, + "vite-plugin-checker": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.5.3.tgz", + "integrity": "sha512-upPESKsQTypC2S7LPjxu9HknOymNSToAAHTYSFHb0at5GKLcN1QGMAR5Hb+7KqZclGMVniXAj7QdhZv+fTx83Q==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.12.13", + "ansi-escapes": "^4.3.0", + "chalk": "^4.1.1", + "chokidar": "^3.5.1", + "commander": "^8.0.0", + "fast-glob": "^3.2.7", + "lodash.debounce": "^4.0.8", + "lodash.pick": "^4.4.0", + "npm-run-path": "^4.0.1", + "strip-ansi": "^6.0.0", + "tiny-invariant": "^1.1.0", + "vscode-languageclient": "^7.0.0", + "vscode-languageserver": "^7.0.0", + "vscode-languageserver-textdocument": "^1.0.1", + "vscode-uri": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "vite-plugin-svgr": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-2.4.0.tgz", + "integrity": "sha512-q+mJJol6ThvqkkJvvVFEndI4EaKIjSI0I3jNFgSoC9fXAz1M7kYTVUin8fhUsFojFDKZ9VHKtX6NXNaOLpbsHA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^5.0.2", + "@svgr/core": "^6.5.1" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + } + }, + "@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "dev": true, + "requires": {} + }, + "@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "dev": true, + "requires": {} + }, + "@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dev": true, + "requires": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + } + }, + "@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + } + }, + "@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dev": true, + "requires": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + } + }, + "@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dev": true, + "requires": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + } + }, + "@types/estree": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", + "dev": true + }, + "cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", + "dev": true + } + } + }, + "vite-tsconfig-paths": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.0.3.tgz", + "integrity": "sha512-gRO2Q/tOkV+9kMht5tz90+IaEKvW2zCnvwJV3tp2ruPNZOTM5rF+yXorJT4ggmAMYEaJ3nyXjx5P5jY5FwiZ+A==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "globrex": "^0.1.2", + "tsconfck": "^2.0.1" + } + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", @@ -86342,11 +88656,77 @@ } } }, + "vscode-jsonrpc": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", + "dev": true + }, + "vscode-languageclient": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "dev": true, + "requires": { + "minimatch": "^3.0.5", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "vscode-languageserver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", + "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", + "dev": true, + "requires": { + "vscode-languageserver-protocol": "3.16.0" + } + }, + "vscode-languageserver-protocol": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "dev": true, + "requires": { + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" + } + }, + "vscode-languageserver-textdocument": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.8.tgz", + "integrity": "sha512-1bonkGqQs5/fxGT5UchTgjGVnfysL0O8v1AYMBjqTbWQTFn721zaPGDYFkOKtfDgFiSgXM3KwaG3FMGfW4Ed9Q==", + "dev": true + }, + "vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", + "dev": true + }, + "vscode-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.7.tgz", + "integrity": "sha512-eOpPHogvorZRobNqJGhapa0JdwaxpjVvyBp0QIUMRMSf8ZAlqOdEquKuRmw9Qwu0qXtJIWqFtMkmvJjUZmMjVA==", + "dev": true + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", "dev": true, + "peer": true, "requires": { "browser-process-hrtime": "^1.0.0" } @@ -86648,6 +89028,7 @@ "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", "dev": true, + "peer": true, "requires": { "minimalistic-assert": "^1.0.0" } @@ -86724,12 +89105,6 @@ "dev": true, "requires": {} }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -86788,18 +89163,6 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, - "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", - "dev": true, - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - } - }, "terser-webpack-plugin": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", @@ -86883,6 +89246,7 @@ "resolved": "https://registry.npmjs.org/webpack-manifest-plugin/-/webpack-manifest-plugin-4.1.1.tgz", "integrity": "sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==", "dev": true, + "peer": true, "requires": { "tapable": "^2.0.0", "webpack-sources": "^2.2.0" @@ -86892,19 +89256,22 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "dev": true, + "peer": true }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true + "dev": true, + "peer": true }, "webpack-sources": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.3.1.tgz", "integrity": "sha512-y9EI9AO42JjEcrTJFOYmVywVZdKVUfOvDUPsJea5GIr1JOEGFVqwlY2K098fFoIjOkDzHn2AjRvM8dsBZu+gCA==", "dev": true, + "peer": true, "requires": { "source-list-map": "^2.0.1", "source-map": "^0.6.1" @@ -86912,16 +89279,6 @@ } } }, - "webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dev": true, - "requires": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - } - }, "webpack-sources": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", @@ -86997,7 +89354,8 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz", "integrity": "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==", - "dev": true + "dev": true, + "peer": true }, "whatwg-mimetype": { "version": "3.0.0", @@ -87037,6 +89395,32 @@ "is-symbol": "^1.0.3" } }, + "which-collection": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz", + "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==", + "dev": true, + "requires": { + "is-map": "^2.0.1", + "is-set": "^2.0.1", + "is-weakmap": "^2.0.1", + "is-weakset": "^2.0.1" + } + }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -87055,12 +89439,6 @@ "string-width": "^4.0.0" } }, - "wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -87078,6 +89456,7 @@ "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.4.2.tgz", "integrity": "sha512-P7c8uG5X2k+DMICH9xeSA9eUlCOjHHYoB42Rq+RtUpuwBxUOflAXR1zdsMWj81LopE4gjKXlTw7BFd1BDAHo7g==", "dev": true, + "peer": true, "requires": { "idb": "^6.1.4", "workbox-core": "6.4.2" @@ -87087,7 +89466,8 @@ "version": "6.1.5", "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -87096,6 +89476,7 @@ "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.4.2.tgz", "integrity": "sha512-qnBwQyE0+PWFFc/n4ISXINE49m44gbEreJUYt2ldGH3+CNrLmJ1egJOOyUqqu9R4Eb7QrXcmB34ClXG7S37LbA==", "dev": true, + "peer": true, "requires": { "workbox-core": "6.4.2" } @@ -87105,6 +89486,7 @@ "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.4.2.tgz", "integrity": "sha512-WMdYLhDIsuzViOTXDH+tJ1GijkFp5khSYolnxR/11zmfhNDtuo7jof72xPGFy+KRpsz6tug39RhivCj77qqO0w==", "dev": true, + "peer": true, "requires": { "@apideck/better-ajv-errors": "^0.3.1", "@babel/core": "^7.11.1", @@ -87151,6 +89533,7 @@ "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.2.tgz", "integrity": "sha512-JdEazx7qiVqTBzzBl5rolRwl5cmhihjfIcpqRzIZjtT6b18liVmDn/VlWpqW4C/qP2hrFFMLRV1wlex8ZVBPTg==", "dev": true, + "peer": true, "requires": { "json-schema": "^0.4.0", "jsonpointer": "^5.0.0", @@ -87162,6 +89545,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.9.0.tgz", "integrity": "sha512-qOKJyNj/h+OWx7s5DePL6Zu1KeM9jPZhwBqs+7DzP6bGOvqzVCSf0xueYmVuaC/oQ/VtS2zLMLHdQFbkka+XDQ==", "dev": true, + "peer": true, "requires": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -87174,6 +89558,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "peer": true, "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -87185,13 +89570,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "peer": true }, "source-map": { "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dev": true, + "peer": true, "requires": { "whatwg-url": "^7.0.0" } @@ -87201,6 +89588,7 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, + "peer": true, "requires": { "punycode": "^2.1.0" } @@ -87209,19 +89597,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true + "dev": true, + "peer": true }, "webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true + "dev": true, + "peer": true }, "whatwg-url": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dev": true, + "peer": true, "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -87235,6 +89626,7 @@ "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.4.2.tgz", "integrity": "sha512-9FE1W/cKffk1AJzImxgEN0ceWpyz1tqNjZVtA3/LAvYL3AC5SbIkhc7ZCO82WmO9IjTfu8Vut2X/C7ViMSF7TA==", "dev": true, + "peer": true, "requires": { "workbox-core": "6.4.2" } @@ -87243,13 +89635,15 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-core/-/workbox-core-6.4.2.tgz", "integrity": "sha512-1U6cdEYPcajRXiboSlpJx6U7TvhIKbxRRerfepAJu2hniKwJ3DHILjpU/zx3yvzSBCWcNJDoFalf7Vgd7ey/rw==", - "dev": true + "dev": true, + "peer": true }, "workbox-expiration": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-expiration/-/workbox-expiration-6.4.2.tgz", "integrity": "sha512-0hbpBj0tDnW+DZOUmwZqntB/8xrXOgO34i7s00Si/VlFJvvpRKg1leXdHHU8ykoSBd6+F2KDcMP3swoCi5guLw==", "dev": true, + "peer": true, "requires": { "idb": "^6.1.4", "workbox-core": "6.4.2" @@ -87259,7 +89653,8 @@ "version": "6.1.5", "resolved": "https://registry.npmjs.org/idb/-/idb-6.1.5.tgz", "integrity": "sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==", - "dev": true + "dev": true, + "peer": true } } }, @@ -87268,6 +89663,7 @@ "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.4.2.tgz", "integrity": "sha512-u+gxs3jXovPb1oul4CTBOb+T9fS1oZG+ZE6AzS7l40vnyfJV79DaLBvlpEZfXGv3CjMdV1sT/ltdOrKzo7HcGw==", "dev": true, + "peer": true, "requires": { "workbox-background-sync": "6.4.2", "workbox-core": "6.4.2", @@ -87280,6 +89676,7 @@ "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.4.2.tgz", "integrity": "sha512-viyejlCtlKsbJCBHwhSBbWc57MwPXvUrc8P7d+87AxBGPU+JuWkT6nvBANgVgFz6FUhCvRC8aYt+B1helo166g==", "dev": true, + "peer": true, "requires": { "workbox-core": "6.4.2" } @@ -87289,6 +89686,7 @@ "resolved": "https://registry.npmjs.org/workbox-precaching/-/workbox-precaching-6.4.2.tgz", "integrity": "sha512-CZ6uwFN/2wb4noHVlALL7UqPFbLfez/9S2GAzGAb0Sk876ul9ukRKPJJ6gtsxfE2HSTwqwuyNVa6xWyeyJ1XSA==", "dev": true, + "peer": true, "requires": { "workbox-core": "6.4.2", "workbox-routing": "6.4.2", @@ -87300,6 +89698,7 @@ "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.4.2.tgz", "integrity": "sha512-SowF3z69hr3Po/w7+xarWfzxJX/3Fo0uSG72Zg4g5FWWnHpq2zPvgbWerBZIa81zpJVUdYpMa3akJJsv+LaO1Q==", "dev": true, + "peer": true, "requires": { "workbox-core": "6.4.2" } @@ -87309,6 +89708,7 @@ "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.4.2.tgz", "integrity": "sha512-/oVxlZFpAjFVbY+3PoGEXe8qyvtmqMrTdWhbOfbwokNFtUZ/JCtanDKgwDv9x3AebqGAoJRvQNSru0F4nG+gWA==", "dev": true, + "peer": true, "requires": { "workbox-cacheable-response": "6.4.2", "workbox-core": "6.4.2", @@ -87323,6 +89723,7 @@ "resolved": "https://registry.npmjs.org/workbox-routing/-/workbox-routing-6.4.2.tgz", "integrity": "sha512-0ss/n9PAcHjTy4Ad7l2puuod4WtsnRYu9BrmHcu6Dk4PgWeJo1t5VnGufPxNtcuyPGQ3OdnMdlmhMJ57sSrrSw==", "dev": true, + "peer": true, "requires": { "workbox-core": "6.4.2" } @@ -87332,6 +89733,7 @@ "resolved": "https://registry.npmjs.org/workbox-strategies/-/workbox-strategies-6.4.2.tgz", "integrity": "sha512-YXh9E9dZGEO1EiPC3jPe2CbztO5WT8Ruj8wiYZM56XqEJp5YlGTtqRjghV+JovWOqkWdR+amJpV31KPWQUvn1Q==", "dev": true, + "peer": true, "requires": { "workbox-core": "6.4.2" } @@ -87341,6 +89743,7 @@ "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.4.2.tgz", "integrity": "sha512-ROEGlZHGVEgpa5bOZefiJEVsi5PsFjJG9Xd+wnDbApsCO9xq9rYFopF+IRq9tChyYzhBnyk2hJxbQVWphz3sog==", "dev": true, + "peer": true, "requires": { "workbox-core": "6.4.2", "workbox-routing": "6.4.2" @@ -87350,13 +89753,15 @@ "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.4.2.tgz", "integrity": "sha512-A2qdu9TLktfIM5NE/8+yYwfWu+JgDaCkbo5ikrky2c7r9v2X6DcJ+zSLphNHHLwM/0eVk5XVf1mC5HGhYpMhhg==", - "dev": true + "dev": true, + "peer": true }, "workbox-webpack-plugin": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.4.2.tgz", "integrity": "sha512-CiEwM6kaJRkx1cP5xHksn13abTzUqMHiMMlp5Eh/v4wRcedgDTyv6Uo8+Hg9MurRbHDosO5suaPyF9uwVr4/CQ==", "dev": true, + "peer": true, "requires": { "fast-json-stable-stringify": "^2.1.0", "pretty-bytes": "^5.4.1", @@ -87371,6 +89776,7 @@ "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.4.2.tgz", "integrity": "sha512-KVyRKmrJg7iB+uym/B/CnEUEFG9CvnTU1Bq5xpXHbtgD9l+ShDekSl1wYpqw/O0JfeeQVOFb8CiNfvnwWwqnWQ==", "dev": true, + "peer": true, "requires": { "@types/trusted-types": "^2.0.2", "workbox-core": "6.4.2" diff --git a/airbyte-webapp/package.json b/airbyte-webapp/package.json index b5f62ab1726be..674b844bb9578 100644 --- a/airbyte-webapp/package.json +++ b/airbyte-webapp/package.json @@ -1,6 +1,6 @@ { "name": "airbyte-webapp", - "version": "0.40.28", + "version": "0.40.30", "private": true, "engines": { "node": "16.18.1" @@ -8,11 +8,11 @@ "scripts": { "prepare": "cd .. && husky install airbyte-webapp/.husky", "prestart": "npm run generate-client", - "start": "node -r ./scripts/dev-overwrites.js ./node_modules/.bin/craco start", + "start": "node -r ./scripts/dev-overwrites.js ./node_modules/.bin/vite", "prestart:cloud": "npm run generate-client", - "start:cloud": "AB_ENV=${AB_ENV-frontend-dev} node -r ./scripts/environment.js -r ./scripts/dev-overwrites.js ./node_modules/.bin/craco start", + "start:cloud": "AB_ENV=${AB_ENV-frontend-dev} node -r ./scripts/environment.js -r ./scripts/dev-overwrites.js ./node_modules/.bin/vite", "prebuild": "npm run generate-client", - "build": "BUILD_PATH='./build/app' craco build", + "build": "vite build", "pretest": "npm run generate-client", "test": "jest --watch", "test:ci": "jest --watchAll=false --silent", @@ -21,7 +21,7 @@ "storybook": "start-storybook -p 9009 --quiet", "build:storybook": "build-storybook -o 'build/storybook'", "lint": "eslint --ext js,ts,tsx src", - "stylelint": "stylelint \"**/*.{css,scss}\"", + "stylelint": "stylelint 'src/**/*.{css,scss}'", "stylelint-check": "stylelint-config-prettier-scss-check", "license-check": "node ./scripts/license-check.js", "generate-client": "orval", @@ -44,6 +44,7 @@ "@types/segment-analytics": "^0.0.34", "@types/uuid": "^9.0.0", "classnames": "^2.3.1", + "date-fns": "^2.29.3", "dayjs": "^1.11.3", "diff": "^5.1.0", "firebase": "^9.8.2", @@ -51,9 +52,11 @@ "formik": "^2.2.9", "framer-motion": "^6.3.11", "js-yaml": "^4.1.0", + "json-schema": "^0.4.0", "launchdarkly-js-client-sdk": "^2.22.1", "lodash": "^4.17.21", "mdast": "^3.0.0", + "monaco-editor": "^0.34.1", "query-string": "^6.13.1", "react": "^17.0.2", "react-datepicker": "^4.8.0", @@ -83,6 +86,7 @@ "sass": "^1.52.2", "styled-components": "^5.3.5", "typesafe-actions": "^5.1.0", + "unified": "^10.1.2", "unist-util-visit": "^4.1.0", "uuid": "^9.0.0", "yup": "^0.32.11" @@ -93,7 +97,7 @@ "@babel/preset-env": "^7.20.2", "@babel/preset-react": "^7.18.6", "@babel/preset-typescript": "^7.18.6", - "@craco/craco": "^7.0.0-alpha.7", + "@storybook/addon-actions": "^6.5.15", "@storybook/addon-essentials": "^6.5.7", "@storybook/builder-webpack5": "^6.5.7", "@storybook/manager-webpack5": "^6.5.7", @@ -125,14 +129,18 @@ "@types/unist": "^2.0.5", "@typescript-eslint/eslint-plugin": "^5.27.1", "@typescript-eslint/parser": "^5.27.1", + "@vitejs/plugin-basic-ssl": "^1.0.1", + "@vitejs/plugin-react": "^3.0.1", "babel-jest": "^29.3.1", "dotenv": "^16.0.3", - "eslint-config-prettier": "^8.5.0", + "eslint": "^8.32.0", + "eslint-config-prettier": "^8.6.0", "eslint-config-react-app": "^7.0.1", "eslint-plugin-css-modules": "^2.11.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-jest": "^26.5.3", - "eslint-plugin-jsx-a11y": "^6.6.1", - "eslint-plugin-prettier": "^4.0.0", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-unused-imports": "^2.0.0", "express": "^4.18.1", "husky": "^8.0.1", @@ -140,11 +148,11 @@ "jest-environment-jsdom": "^29.3.1", "license-checker": "^25.0.1", "lint-staged": "^12.3.7", - "mini-css-extract-plugin": "^2.6.1", + "meow": "^9.0.0", "node-fetch": "^2.6.7", + "optionator": "^0.9.1", "orval": "^6.11.0-alpha.10", "prettier": "^2.6.2", - "react-scripts": "^5.0.1", "react-select-event": "^5.5.0", "storybook-addon-mock": "^2.4.1", "stylelint": "^14.9.1", @@ -156,7 +164,11 @@ "timezone-mock": "^1.3.4", "tmpl": "^1.0.5", "ts-node": "^10.8.1", - "typescript": "^4.7.3" + "typescript": "^4.7.3", + "vite": "^4.0.4", + "vite-plugin-checker": "^0.5.3", + "vite-plugin-svgr": "^2.4.0", + "vite-tsconfig-paths": "^4.0.3" }, "overrides": { "minimatch": "^3.0.5" diff --git a/airbyte-webapp/packages/stylelint-plugin/index.js b/airbyte-webapp/packages/stylelint-plugin/index.js index a60e83bc6409a..04f1b74b7b221 100644 --- a/airbyte-webapp/packages/stylelint-plugin/index.js +++ b/airbyte-webapp/packages/stylelint-plugin/index.js @@ -3,6 +3,7 @@ const stylelint = require("stylelint"); const rules = { "no-color-variables-in-rgba": require("./no-color-variables-in-rgba"), + "no-use-renaming": require("./no-use-renaming"), }; const rulesPlugins = Object.keys(rules).map((ruleName) => diff --git a/airbyte-webapp/packages/stylelint-plugin/no-use-renaming.js b/airbyte-webapp/packages/stylelint-plugin/no-use-renaming.js new file mode 100644 index 0000000000000..221d59d05562b --- /dev/null +++ b/airbyte-webapp/packages/stylelint-plugin/no-use-renaming.js @@ -0,0 +1,34 @@ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const stylelint = require("stylelint"); +const { ruleMessages } = stylelint.utils; +const ruleName = "airbyte/no-use-renaming"; +const messages = ruleMessages(ruleName, { + rejected: () => `You should not assign @use imports a different name.`, +}); + +module.exports.ruleName = ruleName; +module.exports.messages = messages; + +/** + * This stylelint rule checks a `@use` statement got a new name assigned e.g. `@use "scss/variables" as var` + * and fails if so. + */ +/** @type {import('stylelint').Rule} */ +module.exports = (enabled) => { + return function lint(postcssRoot, postcssResult) { + if (!enabled) { + return; + } + postcssRoot.walkAtRules((rule) => { + if (rule.name === "use" && rule.params.includes(" as ")) { + stylelint.utils.report({ + ruleName, + node: rule, + message: messages.rejected(), + result: postcssResult, + word: `as `, + }); + } + }); + }; +}; diff --git a/airbyte-webapp/packages/vite-plugins/doc-middleware.ts b/airbyte-webapp/packages/vite-plugins/doc-middleware.ts new file mode 100644 index 0000000000000..15ea716b37a0e --- /dev/null +++ b/airbyte-webapp/packages/vite-plugins/doc-middleware.ts @@ -0,0 +1,27 @@ +import type { Connect, Plugin } from "vite"; + +import express from "express"; + +export function docMiddleware(): Plugin { + return { + name: "airbyte/doc-middleware", + configureServer(server) { + // Serve the docs used in the sidebar. During building Gradle will copy those into the docker image + // Relavant gradle task :airbyte-webapp:copyDocs + server.middlewares.use( + "/docs/integrations", + express.static(`${__dirname}/../../../docs/integrations`) as Connect.NextHandleFunction + ); + // workaround for adblockers to serve google ads docs in development + server.middlewares.use( + "/docs/integrations/sources/gglad.md", + express.static(`${__dirname}/../../../docs/integrations/sources/google-ads.md`) as Connect.NextHandleFunction + ); + // Server assets that can be used during. Related gradle task: :airbyte-webapp:copyDocAssets + server.middlewares.use( + "/docs/.gitbook", + express.static(`${__dirname}/../../../docs/.gitbook`) as Connect.NextHandleFunction + ); + }, + }; +} diff --git a/airbyte-webapp/packages/vite-plugins/index.ts b/airbyte-webapp/packages/vite-plugins/index.ts new file mode 100644 index 0000000000000..3a37b33207086 --- /dev/null +++ b/airbyte-webapp/packages/vite-plugins/index.ts @@ -0,0 +1,2 @@ +export { patchReactVirtualized } from "./patch-react-virtualized"; +export { docMiddleware } from "./doc-middleware"; diff --git a/airbyte-webapp/packages/vite-plugins/patch-react-virtualized.ts b/airbyte-webapp/packages/vite-plugins/patch-react-virtualized.ts new file mode 100644 index 0000000000000..76d345c2113a5 --- /dev/null +++ b/airbyte-webapp/packages/vite-plugins/patch-react-virtualized.ts @@ -0,0 +1,29 @@ +import type { Plugin } from "vite"; + +import fs from "fs"; +import path from "path"; + +// Patches the react-virtualized library which is pulled in by react-lazylog to remove +// a broken import in it. See https://github.com/bvaughn/react-virtualized/issues/1632 +const WRONG_CODE = `import { bpfrpt_proptype_WindowScroller } from "../WindowScroller.js";`; +export function patchReactVirtualized(): Plugin { + return { + name: "airbyte/patch-react-virtualized", + // Note: we cannot use the `transform` hook here + // because libraries are pre-bundled in vite directly, + // plugins aren't able to hack that step currently. + // so instead we manually edit the file in node_modules. + // all we need is to find the timing before pre-bundling. + configResolved() { + const file = require + .resolve("react-lazylog/node_modules/react-virtualized") + .replace( + path.join("dist", "commonjs", "index.js"), + path.join("dist", "es", "WindowScroller", "utils", "onScroll.js") + ); + const code = fs.readFileSync(file, "utf-8"); + const modified = code.replace(WRONG_CODE, ""); + fs.writeFileSync(file, modified); + }, + }; +} diff --git a/airbyte-webapp/src/App.tsx b/airbyte-webapp/src/App.tsx index c5343c3504465..afef5ca17b28a 100644 --- a/airbyte-webapp/src/App.tsx +++ b/airbyte-webapp/src/App.tsx @@ -5,6 +5,7 @@ import { ThemeProvider } from "styled-components"; import { ApiErrorBoundary } from "components/common/ApiErrorBoundary"; +import { config } from "config"; import { ApiServices } from "core/ApiServices"; import { I18nProvider } from "core/i18n"; import { ServicesProvider } from "core/servicesProvider"; @@ -18,14 +19,7 @@ import { AnalyticsProvider } from "views/common/AnalyticsProvider"; import { StoreProvider } from "views/common/StoreProvider"; import LoadingPage from "./components/LoadingPage"; -import { - Config, - ConfigServiceProvider, - defaultConfig, - envConfigProvider, - ValueProvider, - windowConfigProvider, -} from "./config"; +import { ConfigServiceProvider } from "./config"; import en from "./locales/en.json"; import { Routing } from "./pages/routes"; import { WorkspaceServiceProvider } from "./services/workspaces/WorkspacesService"; @@ -35,8 +29,6 @@ const StyleProvider: React.FC> = ({ children }) {children} ); -const configProviders: ValueProvider = [envConfigProvider, windowConfigProvider]; - const Services: React.FC> = ({ children }) => ( @@ -69,7 +61,7 @@ const App: React.FC = () => { }> - + diff --git a/airbyte-webapp/src/components/ConnectorBlocks/FormPageContent.module.scss b/airbyte-webapp/src/components/ConnectorBlocks/FormPageContent.module.scss index a3166da8dda78..524972b7ce192 100644 --- a/airbyte-webapp/src/components/ConnectorBlocks/FormPageContent.module.scss +++ b/airbyte-webapp/src/components/ConnectorBlocks/FormPageContent.module.scss @@ -2,7 +2,11 @@ .container { margin: 13px auto 0; - padding-bottom: variables.$spacing-page-bottom; + padding-bottom: variables.$spacing-xl; + + &.cloud { + padding-bottom: variables.$spacing-page-bottom-cloud; + } &:not(.big) { width: 80%; diff --git a/airbyte-webapp/src/components/ConnectorBlocks/FormPageContent.tsx b/airbyte-webapp/src/components/ConnectorBlocks/FormPageContent.tsx index 64af7f776f976..1e1c4a051ec5d 100644 --- a/airbyte-webapp/src/components/ConnectorBlocks/FormPageContent.tsx +++ b/airbyte-webapp/src/components/ConnectorBlocks/FormPageContent.tsx @@ -1,6 +1,8 @@ import classNames from "classnames"; import { PropsWithChildren } from "react"; +import { isCloudApp } from "utils/app"; + import styles from "./FormPageContent.module.scss"; interface FormPageContentProps { @@ -8,7 +10,14 @@ interface FormPageContentProps { } const FormPageContent: React.FC> = ({ big, children }) => ( -
    {children}
    +
    + {children} +
    ); export default FormPageContent; diff --git a/airbyte-webapp/src/components/ConnectorBlocks/TableItemTitle.tsx b/airbyte-webapp/src/components/ConnectorBlocks/TableItemTitle.tsx index 82084d3cb0d9a..8527278982bc8 100644 --- a/airbyte-webapp/src/components/ConnectorBlocks/TableItemTitle.tsx +++ b/airbyte-webapp/src/components/ConnectorBlocks/TableItemTitle.tsx @@ -9,8 +9,8 @@ import { Text } from "components/ui/Text"; import { ReleaseStage } from "core/request/AirbyteClient"; import { getIcon } from "utils/imageUtils"; -import { Button } from "../ui/Button"; import styles from "./TableItemTitle.module.scss"; +import { Button } from "../ui/Button"; interface TableItemTitleProps { type: "source" | "destination"; diff --git a/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx b/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx index 9285818c30ce2..4784443111e43 100644 --- a/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx +++ b/airbyte-webapp/src/components/EntityTable/ConnectionTable.tsx @@ -11,10 +11,10 @@ import { FeatureItem, useFeature } from "hooks/services/Feature"; import { useQuery } from "hooks/useQuery"; import ConnectionSettingsCell from "./components/ConnectionSettingsCell"; -import ConnectorCell from "./components/ConnectorCell"; -import FrequencyCell from "./components/FrequencyCell"; -import LastSyncCell from "./components/LastSyncCell"; -import NameCell from "./components/NameCell"; +import { ConnectionStatusCell } from "./components/ConnectionStatusCell"; +import { ConnectorNameCell } from "./components/ConnectorNameCell"; +import { FrequencyCell } from "./components/FrequencyCell"; +import { LastSyncCell } from "./components/LastSyncCell"; import { StatusCell } from "./components/StatusCell"; import { ITableDataItem, SortOrderEnum } from "./types"; @@ -86,8 +86,13 @@ const ConnectionTable: React.FC = ({ data, entity, onClickRow, onSync }) headerHighlighted: true, accessor: "name", customWidth: 30, + responsive: true, Cell: ({ cell, row }: CellProps) => ( - + ), }, { @@ -104,13 +109,10 @@ const ConnectionTable: React.FC = ({ data, entity, onClickRow, onSync }) ), headerHighlighted: true, accessor: "entityName", + customWidth: 30, + responsive: true, Cell: ({ cell, row }: CellProps) => ( - + ), }, { @@ -124,11 +126,12 @@ const ConnectionTable: React.FC = ({ data, entity, onClickRow, onSync }) ), accessor: "connectorName", + customWidth: 30, + responsive: true, Cell: ({ cell, row }: CellProps) => ( - + ), }, - { Header: , accessor: "scheduleData", diff --git a/airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx b/airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx index ab55ba515206e..aad9fc831f876 100644 --- a/airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx +++ b/airbyte-webapp/src/components/EntityTable/ImplementationTable.tsx @@ -10,9 +10,9 @@ import { useQuery } from "hooks/useQuery"; import AllConnectionsStatusCell from "./components/AllConnectionsStatusCell"; import ConnectEntitiesCell from "./components/ConnectEntitiesCell"; -import ConnectorCell from "./components/ConnectorCell"; -import LastSyncCell from "./components/LastSyncCell"; -import NameCell from "./components/NameCell"; +import { ConnectorNameCell } from "./components/ConnectorNameCell"; +import { EntityNameCell } from "./components/EntityNameCell"; +import { LastSyncCell } from "./components/LastSyncCell"; import styles from "./ImplementationTable.module.scss"; import { EntityTableDataItem, SortOrderEnum } from "./types"; @@ -80,7 +80,7 @@ const ImplementationTable: React.FC = ({ data, entity, onClickRow }) => accessor: "entityName", customWidth: 40, Cell: ({ cell, row }: CellProps) => ( - + ), }, { @@ -95,7 +95,7 @@ const ImplementationTable: React.FC = ({ data, entity, onClickRow }) => ), accessor: "connectorName", Cell: ({ cell, row }: CellProps) => ( - + ), }, { diff --git a/airbyte-webapp/src/components/EntityTable/components/ConnectionStatusCell.module.scss b/airbyte-webapp/src/components/EntityTable/components/ConnectionStatusCell.module.scss new file mode 100644 index 0000000000000..62b219e373204 --- /dev/null +++ b/airbyte-webapp/src/components/EntityTable/components/ConnectionStatusCell.module.scss @@ -0,0 +1,11 @@ +$connector-icon-width: 20px; +$connector-icon-margin: 10px; + +.content { + display: flex; + align-items: center; +} + +.text { + width: calc(100% - #{$connector-icon-width + $connector-icon-margin}); +} diff --git a/airbyte-webapp/src/components/EntityTable/components/NameCell.tsx b/airbyte-webapp/src/components/EntityTable/components/ConnectionStatusCell.tsx similarity index 58% rename from airbyte-webapp/src/components/EntityTable/components/NameCell.tsx rename to airbyte-webapp/src/components/EntityTable/components/ConnectionStatusCell.tsx index f86ce6e1437a0..02338b14c4867 100644 --- a/airbyte-webapp/src/components/EntityTable/components/NameCell.tsx +++ b/airbyte-webapp/src/components/EntityTable/components/ConnectionStatusCell.tsx @@ -1,40 +1,20 @@ import React, { useMemo } from "react"; import { useIntl } from "react-intl"; -import styled from "styled-components"; -import { ConnectorIcon } from "components/common/ConnectorIcon"; import { StatusIcon } from "components/ui/StatusIcon"; import { StatusIconStatus } from "components/ui/StatusIcon/StatusIcon"; +import styles from "./ConnectionStatusCell.module.scss"; +import { EntityNameCell } from "./EntityNameCell"; import { Status } from "../types"; -interface Props { +interface ConnectionStatusCellProps { + status: string | null; value: string; - enabled?: boolean; - status?: string | null; - icon?: boolean; - img?: string; + enabled: boolean; } -const Content = styled.div` - display: flex; - align-items: center; - font-weight: 500; -`; - -const Name = styled.div<{ enabled?: boolean }>` - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 500px; - color: ${({ theme, enabled }) => (!enabled ? theme.greyColor40 : "inherit")}; -`; - -const Image = styled(ConnectorIcon)` - margin-right: 6px; -`; - -const NameCell: React.FC = ({ value, enabled, status, icon, img }) => { +export const ConnectionStatusCell: React.FC = ({ status, value, enabled }) => { const { formatMessage } = useIntl(); const statusIconStatus = useMemo( () => @@ -73,12 +53,9 @@ const NameCell: React.FC = ({ value, enabled, status, icon, img }) => { }); return ( - - {status && } - {icon && } - {value} - +
    + + +
    ); }; - -export default NameCell; diff --git a/airbyte-webapp/src/components/EntityTable/components/ConnectorCell.tsx b/airbyte-webapp/src/components/EntityTable/components/ConnectorCell.tsx deleted file mode 100644 index c9515c835984d..0000000000000 --- a/airbyte-webapp/src/components/EntityTable/components/ConnectorCell.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from "react"; -import styled from "styled-components"; - -import { ConnectorIcon } from "components/common/ConnectorIcon"; - -interface IProps { - value: string; - enabled?: boolean; - img?: string; -} - -const Content = styled.div<{ enabled?: boolean }>` - display: flex; - align-items: center; - color: ${({ theme, enabled }) => (!enabled ? theme.greyColor40 : "inheret")}; - font-weight: 500; -`; - -const Image = styled(ConnectorIcon)` - margin-right: 6px; -`; - -const ConnectorCell: React.FC = ({ value, enabled, img }) => { - return ( - - - {value} - - ); -}; - -export default ConnectorCell; diff --git a/airbyte-webapp/src/components/EntityTable/components/ConnectorNameCell.module.scss b/airbyte-webapp/src/components/EntityTable/components/ConnectorNameCell.module.scss new file mode 100644 index 0000000000000..6d0dbbc11b72b --- /dev/null +++ b/airbyte-webapp/src/components/EntityTable/components/ConnectorNameCell.module.scss @@ -0,0 +1,13 @@ +@use "scss/variables"; + +$status-icon-width: 25px; + +.content { + display: flex; + align-items: center; +} + +.text { + width: calc(100% - #{$status-icon-width}); + margin-left: variables.$spacing-md; +} diff --git a/airbyte-webapp/src/components/EntityTable/components/ConnectorNameCell.tsx b/airbyte-webapp/src/components/EntityTable/components/ConnectorNameCell.tsx new file mode 100644 index 0000000000000..c8ecffe918d91 --- /dev/null +++ b/airbyte-webapp/src/components/EntityTable/components/ConnectorNameCell.tsx @@ -0,0 +1,21 @@ +import React from "react"; + +import { ConnectorIcon } from "components/common/ConnectorIcon"; + +import styles from "./ConnectorNameCell.module.scss"; +import { EntityNameCell } from "./EntityNameCell"; + +interface ConnectorNameCellProps { + enabled: boolean; + value: string; + icon: string | undefined; +} + +export const ConnectorNameCell: React.FC = ({ value, enabled, icon }) => { + return ( +
    + + +
    + ); +}; diff --git a/airbyte-webapp/src/components/EntityTable/components/EntityNameCell.module.scss b/airbyte-webapp/src/components/EntityTable/components/EntityNameCell.module.scss new file mode 100644 index 0000000000000..f54b4281cdff1 --- /dev/null +++ b/airbyte-webapp/src/components/EntityTable/components/EntityNameCell.module.scss @@ -0,0 +1,14 @@ +@use "scss/variables"; +@use "scss/colors"; + +.text { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + font-weight: 500; + color: colors.$grey; + + &.enabled { + color: colors.$dark-blue; + } +} diff --git a/airbyte-webapp/src/components/EntityTable/components/EntityNameCell.tsx b/airbyte-webapp/src/components/EntityTable/components/EntityNameCell.tsx new file mode 100644 index 0000000000000..99c73743f0f05 --- /dev/null +++ b/airbyte-webapp/src/components/EntityTable/components/EntityNameCell.tsx @@ -0,0 +1,20 @@ +import classNames from "classnames"; +import React from "react"; + +import { Text } from "components/ui/Text"; + +import styles from "./EntityNameCell.module.scss"; + +interface EntityNameCellProps { + value: string; + enabled: boolean; + className?: string; +} + +export const EntityNameCell: React.FC = ({ value, enabled, className }) => { + return ( + + {value} + + ); +}; diff --git a/airbyte-webapp/src/components/EntityTable/components/FrequencyCell.module.scss b/airbyte-webapp/src/components/EntityTable/components/FrequencyCell.module.scss new file mode 100644 index 0000000000000..d46751de19282 --- /dev/null +++ b/airbyte-webapp/src/components/EntityTable/components/FrequencyCell.module.scss @@ -0,0 +1,10 @@ +@use "scss/variables"; +@use "scss/colors"; + +.text { + color: colors.$grey; + + &.enabled { + color: colors.$dark-blue; + } +} diff --git a/airbyte-webapp/src/components/EntityTable/components/FrequencyCell.tsx b/airbyte-webapp/src/components/EntityTable/components/FrequencyCell.tsx index 4d5ed76615025..3a9e18f431cc3 100644 --- a/airbyte-webapp/src/components/EntityTable/components/FrequencyCell.tsx +++ b/airbyte-webapp/src/components/EntityTable/components/FrequencyCell.tsx @@ -1,36 +1,34 @@ +import classNames from "classnames"; import React from "react"; import { FormattedMessage } from "react-intl"; -import styled from "styled-components"; + +import { Text } from "components/ui/Text"; import { ConnectionScheduleData, ConnectionScheduleType } from "core/request/AirbyteClient"; +import styles from "./FrequencyCell.module.scss"; + interface FrequencyCellProps { value: ConnectionScheduleData; enabled?: boolean; scheduleType?: ConnectionScheduleType; } -const Content = styled.div<{ enabled?: boolean }>` - color: ${({ theme, enabled }) => (!enabled ? theme.greyColor40 : "inherit")}; -`; - -const FrequencyCell: React.FC = ({ value, enabled, scheduleType }) => { +export const FrequencyCell: React.FC = ({ value, enabled, scheduleType }) => { if (scheduleType === ConnectionScheduleType.cron || scheduleType === ConnectionScheduleType.manual) { return ( - + - + ); } return ( - + - + ); }; - -export default FrequencyCell; diff --git a/airbyte-webapp/src/components/EntityTable/components/LastSyncCell.module.scss b/airbyte-webapp/src/components/EntityTable/components/LastSyncCell.module.scss new file mode 100644 index 0000000000000..d46751de19282 --- /dev/null +++ b/airbyte-webapp/src/components/EntityTable/components/LastSyncCell.module.scss @@ -0,0 +1,10 @@ +@use "scss/variables"; +@use "scss/colors"; + +.text { + color: colors.$grey; + + &.enabled { + color: colors.$dark-blue; + } +} diff --git a/airbyte-webapp/src/components/EntityTable/components/LastSyncCell.tsx b/airbyte-webapp/src/components/EntityTable/components/LastSyncCell.tsx index 1bb2f5c26713a..3dac28390a86a 100644 --- a/airbyte-webapp/src/components/EntityTable/components/LastSyncCell.tsx +++ b/airbyte-webapp/src/components/EntityTable/components/LastSyncCell.tsx @@ -1,26 +1,24 @@ +import classNames from "classnames"; import React from "react"; import { FormattedRelativeTime } from "react-intl"; -import styled from "styled-components"; -const Content = styled.div<{ enabled?: boolean }>` - color: ${({ theme, enabled }) => (!enabled ? theme.greyColor40 : "inherit")}; -`; +import { Text } from "components/ui/Text"; -interface IProps { +import styles from "./LastSyncCell.module.scss"; + +interface LastSyncCellProps { timeInSecond: number; enabled?: boolean; } -const LastSyncCell: React.FC = ({ timeInSecond, enabled }) => { - if (!timeInSecond) { - return null; - } - +export const LastSyncCell: React.FC = ({ timeInSecond, enabled }) => { return ( - - - + <> + {timeInSecond ? ( + + + + ) : null} + ); }; - -export default LastSyncCell; diff --git a/airbyte-webapp/src/components/Indicator/Indicator.module.scss b/airbyte-webapp/src/components/Indicator/Indicator.module.scss new file mode 100644 index 0000000000000..5ecd4ae36e4db --- /dev/null +++ b/airbyte-webapp/src/components/Indicator/Indicator.module.scss @@ -0,0 +1,12 @@ +@use "scss/colors"; + +.indicator { + height: 10px; + width: 10px; + border-radius: 50%; + background: colors.$red; +} + +.hidden { + background-color: transparent; +} diff --git a/airbyte-webapp/src/components/Indicator/Indicator.tsx b/airbyte-webapp/src/components/Indicator/Indicator.tsx index 7332a0017d736..6b684037f417f 100644 --- a/airbyte-webapp/src/components/Indicator/Indicator.tsx +++ b/airbyte-webapp/src/components/Indicator/Indicator.tsx @@ -1,8 +1,15 @@ -import styled from "styled-components"; +import classNames from "classnames"; -export const Indicator = styled.div` - height: 10px; - width: 10px; - border-radius: 50%; - background: ${({ theme }) => theme.dangerColor}; -`; +import styles from "./Indicator.module.scss"; + +export interface IndicatorProps { + /** + * Set to true to render an invisible indicator so reserve the space in the UI + */ + hidden?: boolean; + className?: string; +} + +export const Indicator: React.FC = ({ hidden, className }) => ( +