├── .docker-cache └── .keep ├── .dockerignore ├── .github ├── ISSUE_TEMPLATE │ └── request-new-connector-form.yaml ├── actions │ ├── deploy │ │ └── action.yaml │ └── setup │ │ └── action.yaml ├── pull_request_template.md └── workflows │ ├── ci.yaml │ ├── estuary-cdk.yaml │ └── python.yaml ├── .gitignore ├── .vscode ├── launch.json └── settings.json ├── LICENSE ├── LICENSE-APACHE ├── LICENSE-BSL ├── LICENSE-MIT ├── README.md ├── base-image ├── Dockerfile └── VERSION ├── build-local.sh ├── config_schema_guidelines.md ├── connector-variant.Dockerfile ├── docs ├── README.md ├── feature_flags.md ├── inbound_networking.md └── materialize │ └── README.md ├── estuary-cdk ├── README.md ├── common.Dockerfile ├── estuary_cdk │ ├── __init__.py │ ├── buffer_ordered.py │ ├── capture │ │ ├── __init__.py │ │ ├── base_capture_connector.py │ │ ├── common.py │ │ ├── connector_status.py │ │ ├── request.py │ │ ├── response.py │ │ └── task.py │ ├── cron.py │ ├── emitted_changes_cache.py │ ├── flow.py │ ├── http.py │ ├── incremental_json_processor.py │ ├── logger.py │ ├── py.typed │ ├── pydantic_polyfill.py │ ├── requests_session_send_patch.py │ ├── shim_airbyte_cdk.py │ └── utils.py ├── importing_airbyte_source_connectors.md ├── poetry.lock ├── pyproject.toml └── tests │ ├── __init__.py │ ├── test_airbyte_cdk.py │ ├── test_buffer_ordered.py │ ├── test_cron_regex.py │ ├── test_emitted_changes_cache.py │ └── test_incremental_json_processor.py ├── fetch-flow.sh ├── filesink ├── filesink.go ├── filesink_test.go ├── format.go └── store.go ├── filesource ├── filesource.go ├── filesource_test.go ├── state.go └── state_test.go ├── go.mod ├── go.sum ├── go ├── auth │ └── google │ │ ├── .snapshots │ │ └── TestConfigSchema │ │ ├── config.go │ │ ├── config_test.go │ │ └── spec.go ├── blob │ ├── azure.go │ ├── bucket.go │ ├── bucket_test.go │ ├── gcs.go │ └── s3.go ├── common │ └── feature_flags.go ├── connector-errors │ └── errors.go ├── dbt │ └── trigger.go ├── encrow │ ├── encrow.go │ └── encrow_test.go ├── network-tunnel │ ├── interface.go │ └── network_tunnel.go ├── protocols │ └── materialize │ │ ├── .snapshots │ │ └── TestStreamLifecycle │ │ ├── lifecycle.go │ │ ├── op_future.go │ │ ├── testdata │ │ ├── .gitignore │ │ ├── flow.yaml │ │ └── materialization.proto │ │ └── transactor.go ├── schedule │ ├── schedule.go │ ├── schedule_test.go │ └── timezone.go └── schema-gen │ ├── .snapshots │ ├── TestGenerateSchema │ └── TestOneOfSchema │ ├── generate.go │ ├── generate_test.go │ ├── one_of.go │ └── one_of_test.go ├── materialize-azure-blob-parquet ├── .snapshots │ └── TestSpec ├── Dockerfile ├── VERSION ├── main.go └── main_test.go ├── materialize-azure-fabric-warehouse ├── .snapshots │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── Dockerfile ├── VERSION ├── client.go ├── driver.go ├── driver_test.go ├── main.go ├── reserved_words.go ├── sqlgen.go ├── sqlgen_test.go ├── staged_file.go └── transactor.go ├── materialize-bigquery ├── .snapshots │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── bigquery.go ├── bigquery_test.go ├── binding.go ├── client.go ├── cmd │ └── connector │ │ └── main.go ├── query.go ├── reserved_words.go ├── sqlgen.go ├── sqlgen_test.go ├── staged_file.go └── transactor.go ├── materialize-boilerplate ├── .snapshots │ ├── TestApply │ ├── TestScheduleConfigSchema │ └── TestValidate ├── apply.go ├── apply_test.go ├── boilerplate.go ├── info_schema.go ├── info_schema_test.go ├── logging.go ├── logging_test.go ├── materializer.go ├── schedule_config.go ├── schedule_config_test.go ├── ser_policy.go ├── staged_files.go ├── stream-encode │ ├── .snapshots │ │ ├── TestCsvEncoder-with_headers │ │ ├── TestCsvEncoder-without_headers │ │ ├── TestJsonEncoder │ │ ├── TestParquetEncoder-dictionary_encoding_disabled │ │ ├── TestParquetEncoder-optional_values │ │ ├── TestParquetEncoder-required_values │ │ └── TestParquetEncoder-small_row_groups │ ├── counting_write_closer.go │ ├── csv.go │ ├── csv_test.go │ ├── json.go │ ├── json_test.go │ ├── parquet.go │ ├── parquet_schema.go │ ├── parquet_test.go │ └── test_support.go ├── test_support.go ├── testdata │ ├── apply │ │ ├── _base-collection.flow.yaml │ │ ├── add-new-binding.flow.yaml │ │ ├── add-new-required.flow.yaml │ │ ├── base.flow.yaml │ │ ├── generated_specs │ │ │ ├── add-new-binding.flow.proto │ │ │ ├── add-new-required.flow.proto │ │ │ ├── base.flow.proto │ │ │ ├── make-nullable.flow.proto │ │ │ ├── remove-required.flow.proto │ │ │ └── replace-original-binding.flow.proto │ │ ├── make-nullable.flow.yaml │ │ ├── remove-required.flow.yaml │ │ └── replace-original-binding.flow.yaml │ ├── generate-spec-proto.sh │ ├── validate │ │ ├── alternate-root.flow.yaml │ │ ├── ambiguous-fields-incompatible.flow.yaml │ │ ├── ambiguous-fields.flow.yaml │ │ ├── ambiguous-key.flow.yaml │ │ ├── base.flow.yaml │ │ ├── fewer-fields.flow.yaml │ │ ├── generated_specs │ │ │ ├── alternate-root.flow.proto │ │ │ ├── ambiguous-fields-incompatible.flow.proto │ │ │ ├── ambiguous-fields.flow.proto │ │ │ ├── ambiguous-key.flow.proto │ │ │ ├── base.flow.proto │ │ │ ├── fewer-fields.flow.proto │ │ │ ├── incompatible-changes.flow.proto │ │ │ ├── increment-backfill.flow.proto │ │ │ ├── key-subset.flow.proto │ │ │ ├── long-fields.flow.proto │ │ │ └── nullable-key.flow.proto │ │ ├── incompatible-changes.flow.yaml │ │ ├── increment-backfill.flow.yaml │ │ ├── key-subset.flow.yaml │ │ ├── long-fields.flow.yaml │ │ └── nullable-key.flow.yaml │ └── validate_apply_test_cases │ │ ├── add-and-remove-many.flow.yaml │ │ ├── add-single-optional.flow.yaml │ │ ├── base.flow.yaml │ │ ├── big-schema-changed.flow.yaml │ │ ├── big-schema-nullable.flow.yaml │ │ ├── big-schema.flow.yaml │ │ ├── challenging-fields.flow.yaml │ │ ├── generated_specs │ │ ├── add-and-remove-many.flow.proto │ │ ├── add-single-optional.flow.proto │ │ ├── base.flow.proto │ │ ├── big-schema-changed.flow.proto │ │ ├── big-schema-nullable.flow.proto │ │ ├── big-schema.flow.proto │ │ ├── challenging-fields.flow.proto │ │ ├── remove-single-optional.flow.proto │ │ └── remove-single-required.flow.proto │ │ ├── remove-single-optional.flow.yaml │ │ └── remove-single-required.flow.yaml ├── transactions_stream.go ├── type_mapping.go ├── validate.go └── validate_test.go ├── materialize-cratedb ├── .snapshots │ ├── TestConfigURI-Basic │ ├── TestConfigURI-IncorrectSSL │ ├── TestConfigURI-RequireSSL │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── CHANGELOG.md ├── Dockerfile ├── VARIANTS ├── VERSION ├── client.go ├── config_test.go ├── docker-compose.yaml ├── driver.go ├── driver_test.go ├── reserved_words.go ├── sqlgen.go └── sqlgen_test.go ├── materialize-databricks ├── .snapshots │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── Dockerfile ├── VERSION ├── client.go ├── config.go ├── config_test.go ├── driver.go ├── driver_test.go ├── logger.go ├── reserved_words.go ├── sqlgen.go ├── sqlgen_test.go └── staged_file.go ├── materialize-dynamodb ├── .snapshots │ ├── TestSpec │ ├── TestValidate │ └── TestValidateAndApply ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── apply.go ├── docker-compose.yaml ├── driver.go ├── driver_test.go ├── main.go ├── transactor.go └── type_mapping.go ├── materialize-elasticsearch ├── .snapshots │ ├── TestDriverSpec │ ├── TestValidate │ └── TestValidateAndApply ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── apply.go ├── client.go ├── docker-compose.yaml ├── driver.go ├── driver_test.go ├── transactor.go ├── type_mapping.go └── type_mapping_test.go ├── materialize-firebolt ├── .snapshots │ └── TestDriverSpec ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── config.go ├── config_test.go ├── driver.go ├── schemalate │ └── run.go ├── spec.go └── transactor.go ├── materialize-gcs-csv ├── .snapshots │ └── TestSpec ├── Dockerfile ├── VERSION ├── main.go └── main_test.go ├── materialize-gcs-parquet ├── .snapshots │ └── TestSpec ├── Dockerfile ├── VERSION ├── main.go └── main_test.go ├── materialize-google-pubsub ├── .snapshots │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── cmd │ └── connector │ │ └── main.go ├── driver.go ├── driver_test.go └── transactor.go ├── materialize-google-sheets ├── .snapshots │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── driver_test.go ├── main.go ├── transactor.go ├── util.go └── util_test.go ├── materialize-iceberg ├── .snapshots │ ├── TestComputeSchemas │ ├── TestSpec │ ├── TestTemplates │ ├── TestValidateAndApply │ └── TestValidateAndApplyLowercaseColumnNames ├── Dockerfile ├── VERSION ├── catalog │ └── catalog.go ├── cmd │ ├── connector │ │ └── main.go │ └── iceberg_helper │ │ └── main.go ├── config.go ├── driver.go ├── driver_test.go ├── emr.go ├── merge_bounds.go ├── python │ ├── common.py │ ├── exec.py │ ├── load.py │ ├── merge.py │ ├── poetry.lock │ ├── pyproject.toml │ └── python.go ├── sqlgen.go ├── sqlgen_test.go ├── staged_file.go ├── transactor.go ├── type_mapping.go └── type_mapping_test.go ├── materialize-kafka ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── VERSION ├── docker-compose.yaml ├── src │ ├── apply.rs │ ├── binding_info.rs │ ├── configuration.rs │ ├── lib.rs │ ├── main.rs │ ├── transactor.rs │ └── validate.rs └── tests │ ├── fixture.json │ ├── snapshots │ ├── test__materialization.snap │ └── test__spec.snap │ ├── test.flow.yaml │ └── test.rs ├── materialize-mongodb ├── .snapshots │ └── TestSpecification ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VARIANTS ├── VERSION ├── apply.go ├── config.go ├── config_test.go ├── docker-compose.yaml ├── driver.go ├── sample.key └── transactor.go ├── materialize-motherduck ├── .snapshots │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── client.go ├── config.go ├── driver.go ├── driver_test.go ├── main.go ├── reserved_words.go ├── sqlgen.go ├── sqlgen_test.go └── staged_file.go ├── materialize-mysql ├── .snapshots │ ├── TestApplyChanges │ ├── TestConfigURI-Basic │ ├── TestConfigURI-IncorrectSSL │ ├── TestConfigURI-RequireSSL │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ ├── TestValidateAndApplyMigrations │ └── TestValidateAndApplyMigrationsMariaDB ├── CHANGELOG.md ├── Dockerfile ├── VARIANTS ├── VERSION ├── client.go ├── config_test.go ├── docker-compose.yaml ├── driver.go ├── driver_test.go ├── infile.go ├── reserved_words.go ├── sqlgen.go ├── sqlgen_test.go └── testdata │ ├── apply-changes.flow.yaml │ └── generated_specs │ └── apply-changes.flow.proto ├── materialize-pinecone ├── .snapshots │ └── TestSpecification ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── client │ └── client.go ├── driver.go ├── driver_test.go └── transactor.go ├── materialize-postgres ├── .snapshots │ ├── TestConfigURI-Basic │ ├── TestConfigURI-IncorrectSSL │ ├── TestConfigURI-RequireSSL │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── CHANGELOG.md ├── Dockerfile ├── VARIANTS ├── VERSION ├── client.go ├── config_test.go ├── docker-compose.yaml ├── driver.go ├── driver_test.go ├── reserved_words.go ├── sqlgen.go └── sqlgen_test.go ├── materialize-redshift ├── .snapshots │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── client.go ├── driver.go ├── driver_test.go ├── load_error_info.go ├── main.go ├── reserved_words.go ├── sqlgen.go ├── sqlgen_test.go └── staged_file.go ├── materialize-s3-csv ├── .snapshots │ └── TestSpec ├── Dockerfile ├── VERSION ├── main.go └── main_test.go ├── materialize-s3-iceberg ├── .snapshots │ ├── TestSpec │ └── TestValidateAndApply ├── Dockerfile ├── VERSION ├── catalog.go ├── docker-compose.yaml ├── driver.go ├── driver_test.go ├── iceberg-ctl │ ├── iceberg_ctl │ │ ├── __main__.py │ │ └── models.py │ ├── poetry.lock │ └── pyproject.toml ├── icebergctl.go ├── transactor.go └── type_mapping.go ├── materialize-s3-parquet ├── .snapshots │ └── TestSpec ├── Dockerfile ├── VERSION ├── main.go └── main_test.go ├── materialize-slack ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── auth.go ├── main.go └── slack.go ├── materialize-snowflake ├── .snapshots │ ├── TestConfigURI-Optional_Parameters │ ├── TestConfigURI-User_&_Password_Authentication │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestStreamDatatypes-BOOLEAN │ ├── TestStreamDatatypes-DATE │ ├── TestStreamDatatypes-FLOAT │ ├── TestStreamDatatypes-INTEGER │ ├── TestStreamDatatypes-TEXT │ ├── TestStreamDatatypes-TIMESTAMP_LTZ │ ├── TestStreamDatatypes-TIMESTAMP_NTZ │ ├── TestStreamDatatypes-TIMESTAMP_TZ │ ├── TestStreamDatatypes-VARIANT │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── bdec.go ├── bdec_test.go ├── client.go ├── config.go ├── config_test.go ├── pipe.go ├── reserved_words.go ├── snowflake.go ├── snowflake_test.go ├── sqlgen.go ├── sqlgen_test.go ├── staged_file.go ├── stream.go ├── stream_http.go └── stream_test.go ├── materialize-sql ├── .snapshots │ ├── TestFencingCases-covered_child │ ├── TestFencingCases-exact_match │ ├── TestFencingCases-split_from_parent │ ├── TestFencingCases-straddle │ ├── TestTableTemplate │ └── TestValidateMigrations ├── apply.go ├── dialect.go ├── driver.go ├── element_converter.go ├── element_converter_test.go ├── endpoint.go ├── meta_tables.go ├── migration_mapping.go ├── std_sql.go ├── table_mapping.go ├── templating.go ├── templating_test.go ├── test_support.go ├── testdata │ ├── flow.yaml │ ├── generated_specs │ │ └── flow.proto │ └── validate │ │ ├── base.flow.yaml │ │ ├── generated_specs │ │ ├── base.flow.proto │ │ └── migratable-changes.flow.proto │ │ └── migratable-changes.flow.yaml ├── type_mapping.go └── validate_test.go ├── materialize-sqlite ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── init.sh ├── reserved_words.go ├── sqlgen.go └── sqlite.go ├── materialize-sqlserver ├── .snapshots │ ├── TestApplyChanges │ ├── TestConfigURI-Basic │ ├── TestConfigURI-IncorrectSSL │ ├── TestConfigURI-RequireSSL │ ├── TestSQLGeneration │ ├── TestSpecification │ ├── TestValidateAndApply │ └── TestValidateAndApplyMigrations ├── CHANGELOG.md ├── Dockerfile ├── VARIANTS ├── VERSION ├── client.go ├── collation.go ├── collation_test.go ├── config_test.go ├── docker-compose.yaml ├── driver.go ├── driver_test.go ├── fence.go ├── reserved_words.go ├── sqlgen.go ├── sqlgen_test.go └── testdata │ ├── apply-changes.flow.yaml │ └── generated_specs │ └── apply-changes.flow.proto ├── materialize-starburst ├── .snapshots │ ├── TestSQLGeneration │ ├── TestSpecification │ └── TestValidateAndApply ├── Dockerfile ├── VERSION ├── client.go ├── parquet_data_converter.go ├── parquet_data_converter_test.go ├── parquet_file_processor.go ├── parquet_file_processor_test.go ├── reserved_words.go ├── s3_util.go ├── sqlgen.go ├── sqlgen_test.go ├── starburst.go ├── starburst_test.go └── testdata │ ├── flow.yaml │ └── spec.json ├── materialize-webhook ├── CHANGELOG.md ├── Dockerfile ├── VERSION └── driver.go ├── poetry.toml ├── python ├── Dockerfile ├── README.md ├── activate.sh ├── flow_sdk │ ├── __init__.py │ ├── capture │ │ ├── __init__.py │ │ ├── request.py │ │ └── response.py │ ├── derive │ │ ├── __init__.py │ │ ├── request.py │ │ └── response.py │ ├── flow.py │ ├── logger.py │ ├── shim_airbyte_cdk.py │ └── shim_singer_sdk.py ├── poetry.lock ├── pull_upstream.sh ├── py.typed └── pyproject.toml ├── scripts ├── bulk-config-editor.sh ├── bulk-config-editor │ ├── editing.go │ └── main.go ├── bulk-publish.sh ├── bulk-publish │ └── main.go ├── feature-flag-automation.sh ├── list-tasks.sh └── list-tasks │ └── main.go ├── source-airtable ├── VERSION ├── acmeCo │ ├── flow.yaml │ └── test_base │ │ ├── flow.yaml │ │ ├── pizzas │ │ └── flow.yaml │ │ └── soups │ │ └── flow.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_airtable │ ├── __init__.py │ ├── __main__.py │ ├── auth.py │ ├── schema_helpers.py │ ├── source.py │ ├── spec.json │ └── streams.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── conftest.py │ ├── expected_schema_for_sample_table.json │ ├── sample_table_with_formulas.json │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_helpers.py │ ├── test_snapshots.py │ ├── test_source.py │ └── test_streams.py ├── source-alpaca ├── .snapshots │ ├── TestCaptureMultipleBindings │ ├── TestDiscover │ ├── TestLargeCapture │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── driver.go ├── driver_test.go ├── main.go ├── main_test.go ├── pull.go └── worker.go ├── source-asana ├── VERSION ├── acmeCo │ ├── flow.yaml │ ├── projects.schema.yaml │ ├── stories.schema.yaml │ └── tasks.schema.yaml ├── connector_config.yaml ├── poetry.lock ├── pyproject.toml ├── source_asana │ ├── __init__.py │ ├── __main__.py │ ├── oauth.py │ ├── schemas │ │ ├── attachments.json │ │ ├── attachments_compact.json │ │ ├── custom_fields.json │ │ ├── events.json │ │ ├── organization_exports.json │ │ ├── portfolios.json │ │ ├── portfolios_compact.json │ │ ├── portfolios_memberships.json │ │ ├── projects.json │ │ ├── sections.json │ │ ├── sections_compact.json │ │ ├── stories.json │ │ ├── stories_compact.json │ │ ├── tags.json │ │ ├── tasks.json │ │ ├── team_memberships.json │ │ ├── teams.json │ │ ├── users.json │ │ └── workspaces.json │ ├── source.py │ ├── spec.json │ └── streams.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── conftest.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_import_schemas.py │ ├── test_oauth.py │ └── test_snapshots.py ├── source-azure-blob-storage ├── .snapshots │ └── TestAzureBlobStore_getConfigSchema ├── Dockerfile ├── VERSION ├── main.go └── main_test.go ├── source-bigquery-batch ├── .snapshots │ ├── TestBinaryTypes-Capture │ ├── TestBinaryTypes-Discovery │ ├── TestCaptureFromView-Capture │ ├── TestCaptureFromView-DiscoveryWithViews │ ├── TestCaptureFromView-DiscoveryWithoutViews │ ├── TestCaptureWithDatetimeCursor-Capture │ ├── TestCaptureWithDatetimeCursor-Discovery │ ├── TestCaptureWithEmptyPoll-Capture │ ├── TestCaptureWithEmptyPoll-Discovery │ ├── TestCaptureWithModifications-Capture │ ├── TestCaptureWithModifications-Discovery │ ├── TestCaptureWithNullCursor-Capture1 │ ├── TestCaptureWithNullCursor-Capture2 │ ├── TestCaptureWithNullCursor-Discovery │ ├── TestCaptureWithTwoColumnCursor-Capture │ ├── TestCaptureWithTwoColumnCursor-Discovery │ ├── TestCaptureWithUpdatedAtCursor-Capture │ ├── TestCaptureWithUpdatedAtCursor-Discovery │ ├── TestCompositeTypes-Capture │ ├── TestCompositeTypes-Discovery │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFeatureFlagKeylessRowID-Disabled-Capture │ ├── TestFeatureFlagKeylessRowID-Disabled-Discovery │ ├── TestFeatureFlagKeylessRowID-Enabled-Capture │ ├── TestFeatureFlagKeylessRowID-Enabled-Discovery │ ├── TestFullRefresh-Capture1 │ ├── TestFullRefresh-Capture2 │ ├── TestFullRefresh-Discovery │ ├── TestIntegerTypes-Capture │ ├── TestIntegerTypes-Discovery │ ├── TestJSONType-Capture │ ├── TestJSONType-Discovery │ ├── TestKeylessCapture-Capture │ ├── TestKeylessCapture-Discovery │ ├── TestKeylessFullRefreshCapture-Capture │ ├── TestKeylessFullRefreshCapture-Discovery │ ├── TestNumericTypes-Capture │ ├── TestNumericTypes-Discovery │ ├── TestQueryTemplate-FirstNoCursor │ ├── TestQueryTemplate-FirstOneCursor │ ├── TestQueryTemplate-FirstThreeCursor │ ├── TestQueryTemplate-FirstTwoCursor │ ├── TestQueryTemplate-SubsequentNoCursor │ ├── TestQueryTemplate-SubsequentOneCursor │ ├── TestQueryTemplate-SubsequentThreeCursor │ ├── TestQueryTemplate-SubsequentTwoCursor │ ├── TestQueryTemplateOverride-Capture │ ├── TestQueryTemplateOverride-Discovery │ ├── TestSimpleCapture-Capture │ ├── TestSimpleCapture-Discovery │ ├── TestSpec │ ├── TestStringTypes-Capture │ ├── TestStringTypes-Discovery │ ├── TestTemporalTypes-Capture │ └── TestTemporalTypes-Discovery ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── discovery.go ├── driver.go ├── main.go └── main_test.go ├── source-boilerplate ├── boilerplate.go └── testing │ └── testing.go ├── source-braintree-native ├── VERSION ├── acmeCo │ ├── add_ons.schema.yaml │ ├── credit_card_verifications.schema.yaml │ ├── customers.schema.yaml │ ├── discounts.schema.yaml │ ├── disputes.schema.yaml │ ├── flow.yaml │ ├── merchant_accounts.schema.yaml │ ├── plans.schema.yaml │ ├── subscriptions.schema.yaml │ └── transactions.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_braintree_native │ ├── __init__.py │ ├── __main__.py │ ├── api │ │ ├── __init__.py │ │ ├── common.py │ │ ├── disputes.py │ │ ├── merchant_accounts.py │ │ ├── non_paginated_snapshot_resource.py │ │ ├── searchable_incremental_resource.py │ │ └── transactions.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-brevo ├── VERSION ├── poetry.lock ├── pyproject.toml ├── source_brevo │ ├── __init__.py │ ├── __main__.py │ ├── manifest.yaml │ └── source.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-chargebee-native ├── acmeCo │ ├── addons.schema.yaml │ ├── comments.schema.yaml │ ├── contacts.schema.yaml │ ├── coupons.schema.yaml │ ├── credit_notes.schema.yaml │ ├── customers.schema.yaml │ ├── events.schema.yaml │ ├── flow.yaml │ ├── gifts.schema.yaml │ ├── hosted_pages.schema.yaml │ ├── invoices.schema.yaml │ ├── orders.schema.yaml │ ├── payment_sources.schema.yaml │ ├── plans.schema.yaml │ ├── promotional_credits.schema.yaml │ ├── site_migration_details.schema.yaml │ ├── subscriptions.schema.yaml │ ├── subscriptions_with_scheduled_changes.schema.yaml │ ├── transactions.schema.yaml │ ├── unbilled_charges.schema.yaml │ └── virtual_bank_accounts.schema.yaml ├── poetry.lock ├── pyproject.toml ├── source_chargebee_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ └── snapshots__spec__stdout.json │ └── test_snapshots.py ├── source-criteo ├── VERSION ├── __main__.py ├── acmeCo │ ├── flow.yaml │ └── source-criteo.MyReport.config.yaml ├── connector_config.yaml ├── poetry.lock ├── pyproject.toml ├── source_criteo │ ├── .flake8 │ ├── .github │ │ ├── dependabot.yml │ │ └── workflows │ │ │ ├── constraints.txt │ │ │ └── test.yml │ ├── .gitignore │ ├── .pre-commit-config.yaml │ ├── .secrets │ │ └── .gitignore │ ├── README.md │ ├── meltano.yml │ ├── noxfile.py │ ├── poetry.lock │ ├── pyproject.toml │ └── tap_criteo │ │ ├── __init__.py │ │ ├── auth.py │ │ ├── client.py │ │ ├── schemas │ │ ├── ad_set.json │ │ ├── advertiser.json │ │ ├── audience.json │ │ ├── campaign.json │ │ ├── empty.json │ │ └── v2020.07 │ │ │ ├── audience.json │ │ │ ├── campaign.json │ │ │ ├── category.json │ │ │ └── empty.json │ │ ├── streams │ │ ├── __init__.py │ │ ├── reports.py │ │ ├── v202007.py │ │ ├── v202104.py │ │ └── v202107.py │ │ └── tap.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-dropbox ├── .snapshots │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── main.go ├── main_test.go ├── oauth2.go └── tests │ └── parser_spec.json ├── source-dynamodb ├── .snapshots │ ├── TestCapture │ ├── TestCaptureDataTypes │ ├── TestCaptureOperations │ ├── TestDiscovery-additional_table_without_stream_enabled │ ├── TestDiscovery-multiple_tables_with_various_types │ ├── TestDiscovery-single_table_with_a_partition_key │ ├── TestKeyAttributeWrapperRoundTrip │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── backfill.go ├── backfill_test.go ├── capture.go ├── discovery.go ├── discovery_test.go ├── docker-compose.yaml ├── driver.go ├── driver_test.go ├── main.go ├── main_test.go ├── pull.go ├── shard_tree.go ├── shard_tree_test.go ├── stream.go └── test_util.go ├── source-facebook-marketing ├── VERSION ├── acmeCo │ ├── activities.schema.yaml │ ├── ad_account.schema.yaml │ ├── ad_creatives.schema.yaml │ ├── ad_sets.schema.yaml │ ├── ads.schema.yaml │ ├── ads_insights.schema.yaml │ ├── ads_insights_action_type.schema.yaml │ ├── ads_insights_age_and_gender.schema.yaml │ ├── ads_insights_country.schema.yaml │ ├── ads_insights_dma.schema.yaml │ ├── ads_insights_platform_and_device.schema.yaml │ ├── ads_insights_region.schema.yaml │ ├── campaigns.schema.yaml │ ├── custom_conversions.schema.yaml │ ├── customads_insights_publisher_platform.schema.yaml │ ├── flow.yaml │ ├── images.schema.yaml │ └── videos.schema.yaml ├── connector_config.yaml ├── poetry.lock ├── pyproject.toml ├── source_facebook_marketing │ ├── README.md │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── schemas │ │ ├── activities.json │ │ ├── ad_account.json │ │ ├── ad_creatives.json │ │ ├── ad_sets.json │ │ ├── ads.json │ │ ├── ads_insights.json │ │ ├── ads_insights_action_breakdowns.json │ │ ├── ads_insights_breakdowns.json │ │ ├── campaigns.json │ │ ├── custom_conversions.json │ │ ├── images.json │ │ ├── shared │ │ │ ├── ads_action_stats.json │ │ │ ├── ads_histogram_stats.json │ │ │ ├── ads_image_crops.json │ │ │ ├── geo_locations.json │ │ │ └── targeting.json │ │ └── videos.json │ ├── source.py │ ├── spec.py │ ├── streams │ │ ├── __init__.py │ │ ├── async_job.py │ │ ├── async_job_manager.py │ │ ├── base_insight_streams.py │ │ ├── base_streams.py │ │ ├── common.py │ │ ├── patches.py │ │ └── streams.py │ └── utils.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-firestore ├── .snapshots │ ├── TestAddedBindingSameGroup-one │ ├── TestAddedBindingSameGroup-two │ ├── TestBindingDeletion-one │ ├── TestBindingDeletion-three │ ├── TestBindingDeletion-two │ ├── TestDeletions-one │ ├── TestDeletions-two │ ├── TestDiscovery │ ├── TestDocumentReferences-backfill │ ├── TestDocumentReferences-replication │ ├── TestInitResourceStates │ ├── TestManySmallWrites-one │ ├── TestManySmallWrites-two │ ├── TestMassiveBackfill │ ├── TestMultipleWatches-one │ ├── TestMultipleWatches-two │ ├── TestNestedCollections-init │ ├── TestNestedCollections-repl │ ├── TestRestartCursorUpdates-init │ ├── TestRestartCursorUpdates-repl │ ├── TestRestartCursorUpdates-restart │ ├── TestSimpleCapture-one │ ├── TestSimpleCapture-two │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── datasynth_test.go ├── discovery.go ├── helpers.go ├── main.go ├── main_test.go ├── pull.go └── validate.go ├── source-front ├── VERSION ├── acmeCo │ ├── channels.schema.yaml │ ├── contacts.schema.yaml │ ├── conversations.schema.yaml │ ├── events.schema.yaml │ ├── flow.yaml │ ├── inboxes.schema.yaml │ ├── tags.schema.yaml │ ├── teammates.schema.yaml │ └── teams.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_front │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-gainsight-nxt ├── acmeCo │ ├── activity_timelines.schema.yaml │ ├── call_to_actions.schema.yaml │ ├── companies.schema.yaml │ ├── cs_tasks.schema.yaml │ ├── da_picklist.schema.yaml │ ├── flow.yaml │ ├── success_plans.schema.yaml │ └── users.schema.yaml ├── poetry.lock ├── pyproject.toml ├── source_gainsight_nxt │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ └── snapshots__spec__stdout.json │ └── test_snapshots.py ├── source-gcs ├── CHANGELOG.md ├── Dockerfile ├── VERSION └── main.go ├── source-genesys ├── VERSION ├── poetry.lock ├── pyproject.toml ├── source_genesys │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-gladly ├── acmeCo │ ├── AgentAvailabilityEvents.schema.yaml │ ├── AgentStatusEvents.schema.yaml │ ├── ContactEvents.schema.yaml │ ├── ConversationEvents.schema.yaml │ ├── CustomerEvents.schema.yaml │ ├── PaymentRequestEvents.schema.yaml │ ├── TaskEvents.schema.yaml │ └── flow.yaml ├── poetry.lock ├── pyproject.toml ├── source_gladly │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__stdout.json │ └── snapshots__spec__stdout.json │ └── test_snapshots.py ├── source-google-ads ├── VERSION ├── acmeCo │ ├── account_performance_report.schema.yaml │ ├── accounts.schema.yaml │ ├── ad_group_ad_report.schema.yaml │ ├── ad_group_ads.schema.yaml │ ├── ad_groups.schema.yaml │ ├── campaigns.schema.yaml │ ├── click_view.schema.yaml │ ├── display_keyword_performance_report.schema.yaml │ ├── display_topics_performance_report.schema.yaml │ ├── flow.yaml │ ├── geographic_report.schema.yaml │ ├── keyword_report.schema.yaml │ ├── shopping_performance_report.schema.yaml │ └── user_location_report.schema.yaml ├── connector_config.yaml ├── poetry.lock ├── pyproject.toml ├── source_google_ads │ ├── __init__.py │ ├── __main__.py │ ├── custom_query_stream.py │ ├── google_ads.py │ ├── models.py │ ├── schemas │ │ ├── account_performance_report.json │ │ ├── accounts.json │ │ ├── ad_group_ad_labels.json │ │ ├── ad_group_ad_report.json │ │ ├── ad_group_ads.json │ │ ├── ad_group_labels.json │ │ ├── ad_groups.json │ │ ├── campaign_labels.json │ │ ├── campaigns.json │ │ ├── click_view.json │ │ ├── display_keyword_performance_report.json │ │ ├── display_topics_performance_report.json │ │ ├── geographic_report.json │ │ ├── keyword_report.json │ │ ├── service_accounts.json │ │ ├── shopping_performance_report.json │ │ └── user_location_report.json │ ├── source.py │ ├── spec.json │ ├── streams.py │ └── utils.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── common.py │ ├── conftest.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_custom_query.py │ ├── test_google_ads.py │ ├── test_models.py │ ├── test_snapshots.py │ ├── test_source.py │ ├── test_streams.py │ └── test_utils.py ├── source-google-analytics-data-api-native ├── VERSION ├── acmeCo │ ├── daily_active_users.schema.yaml │ ├── devices.schema.yaml │ ├── flow.yaml │ ├── four_weekly_active_users.schema.yaml │ ├── locations.schema.yaml │ ├── my_custom_report_with_a_filter.schema.yaml │ ├── pages.schema.yaml │ ├── traffic_sources.schema.yaml │ ├── website_overview.schema.yaml │ └── weekly_active_users.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_google_analytics_data_api_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── default_reports.py │ ├── models.py │ ├── resources.py │ └── utils.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-google-drive ├── CHANGELOG.md ├── Dockerfile ├── VERSION └── main.go ├── source-google-pubsub ├── .snapshots │ └── TestSpecification ├── Dockerfile ├── VERSION ├── discovery.go ├── driver.go ├── driver_test.go ├── emitter.go ├── emitter_test.go └── main.go ├── source-google-sheets-native ├── acmeCo │ ├── OtherThings.schema.yaml │ ├── VariousTypes.schema.yaml │ └── flow.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_google_sheets_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__stdout.json │ ├── snapshots__discover__stdout.json │ └── snapshots__spec__stdout.json │ └── test_snapshots.py ├── source-hello-world ├── .snapshots │ └── TestCapture ├── Dockerfile ├── VERSION ├── main.go └── main_test.go ├── source-http-file ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── http_file_test.go └── main.go ├── source-http-ingest ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── README.md ├── VARIANTS ├── VERSION ├── src │ ├── lib.rs │ ├── main.rs │ ├── server.rs │ ├── snapshots │ │ ├── source_http_ingest__server__test__openapi_spec_generation.snap │ │ ├── source_http_ingest__test__discover_backwards_compatibility.snap │ │ ├── source_http_ingest__test__discover_with_paths.snap │ │ ├── source_http_ingest__test__endpoint_config_schema.snap │ │ └── source_http_ingest__test__resource_config_schema.snap │ └── transactor.rs └── tests │ ├── snapshots │ └── test__discover.snap │ └── test.rs ├── source-hubspot-native ├── acmeCo │ ├── companies.schema.yaml │ ├── contacts.schema.yaml │ ├── deal_pipelines.schema.yaml │ ├── deals.schema.yaml │ ├── email_events.schema.yaml │ ├── engagements.schema.yaml │ ├── flow.yaml │ ├── line_items.schema.yaml │ ├── owners.schema.yaml │ ├── products.schema.yaml │ ├── properties.schema.yaml │ └── tickets.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_hubspot_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__stdout.json │ ├── snapshots__discover__stdout.json │ └── snapshots__spec__stdout.json │ └── test_snapshots.py ├── source-hubspot ├── VERSION ├── acmeCo │ ├── campaigns.schema.yaml │ ├── companies.schema.yaml │ ├── contact_lists.schema.yaml │ ├── contacts.schema.yaml │ ├── deal_pipelines.schema.yaml │ ├── deals.schema.yaml │ ├── deals_archived.schema.yaml │ ├── email_events.schema.yaml │ ├── engagements.schema.yaml │ ├── engagements_calls.schema.yaml │ ├── engagements_emails.schema.yaml │ ├── engagements_meetings.schema.yaml │ ├── engagements_notes.schema.yaml │ ├── engagements_tasks.schema.yaml │ ├── flow.yaml │ ├── forms.schema.yaml │ ├── line_items.schema.yaml │ ├── marketing_emails.schema.yaml │ ├── owners.schema.yaml │ ├── products.schema.yaml │ ├── property_history.schema.yaml │ ├── subscription_changes.schema.yaml │ ├── ticket_pipelines.schema.yaml │ ├── tickets.schema.yaml │ └── workflows.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_hubspot │ ├── __init__.py │ ├── __main__.py │ ├── constants.py │ ├── errors.py │ ├── helpers.py │ ├── schemas │ │ ├── campaigns.json │ │ ├── companies.json │ │ ├── contact_lists.json │ │ ├── contacts.json │ │ ├── contacts_list_memberships.json │ │ ├── deal_pipelines.json │ │ ├── deals.json │ │ ├── deals_archived.json │ │ ├── email_events.json │ │ ├── email_subscriptions.json │ │ ├── engagements.json │ │ ├── engagements_calls.json │ │ ├── engagements_emails.json │ │ ├── engagements_meetings.json │ │ ├── engagements_notes.json │ │ ├── engagements_tasks.json │ │ ├── feedback_submissions.json │ │ ├── form_submissions.json │ │ ├── forms.json │ │ ├── goals.json │ │ ├── line_items.json │ │ ├── marketing_emails.json │ │ ├── owners.json │ │ ├── products.json │ │ ├── property_history.json │ │ ├── subscription_changes.json │ │ ├── ticket_pipelines.json │ │ ├── tickets.json │ │ └── workflows.json │ ├── source.py │ ├── spec.yaml │ └── streams.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── conftest.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_field_type_converting.py │ ├── test_snapshots.py │ ├── test_source.py │ ├── test_split_properties.py │ ├── test_streams.py │ └── utils.py ├── source-impact-native ├── acmeCo │ ├── ActionInquiries.schema.yaml │ ├── Actions.schema.yaml │ ├── Ads.schema.yaml │ ├── BlockRedirectRules.schema.yaml │ ├── Campaigns.schema.yaml │ ├── Catalogs.schema.yaml │ ├── Contracts.schema.yaml │ ├── Deals.schema.yaml │ ├── ExceptionLists.schema.yaml │ ├── Invoices.schema.yaml │ ├── Jobs.schema.yaml │ ├── MediaPartnerGroups.schema.yaml │ ├── Notes.schema.yaml │ ├── PhoneNumbers.schema.yaml │ ├── PromoCodes.schema.yaml │ ├── Reports.schema.yaml │ ├── Tasks.schema.yaml │ ├── TrackingValueRequests.schema.yaml │ ├── UniqueUrls.schema.yaml │ └── flow.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_impact_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__stdout.json │ └── snapshots__spec__stdout.json │ └── test_snapshots.py ├── source-intercom-native ├── VERSION ├── acmeCo │ ├── admins.schema.yaml │ ├── companies.schema.yaml │ ├── company_attributes.schema.yaml │ ├── company_segments.schema.yaml │ ├── contact_attributes.schema.yaml │ ├── contacts.schema.yaml │ ├── conversation_parts.schema.yaml │ ├── conversations.schema.yaml │ ├── flow.yaml │ ├── segments.schema.yaml │ ├── tags.schema.yaml │ ├── teams.schema.yaml │ └── tickets.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_intercom_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-iterable ├── acmeCo │ ├── campaigns.schema.yaml │ ├── custom_event.schema.yaml │ ├── email_bounce.schema.yaml │ ├── email_click.schema.yaml │ ├── email_complaint.schema.yaml │ ├── email_open.schema.yaml │ ├── email_send.schema.yaml │ ├── email_send_skip.schema.yaml │ ├── email_subscribe.schema.yaml │ ├── email_unsubscribe.schema.yaml │ ├── events.schema.yaml │ ├── flow.yaml │ ├── hosted_unsubscribe_click.schema.yaml │ ├── in_app_click.schema.yaml │ ├── in_app_close.schema.yaml │ ├── in_app_delete.schema.yaml │ ├── in_app_delivery.schema.yaml │ ├── in_app_open.schema.yaml │ ├── in_app_send.schema.yaml │ ├── in_app_send_skip.schema.yaml │ ├── inbox_message_impression.schema.yaml │ ├── inbox_session.schema.yaml │ ├── purchase.schema.yaml │ ├── push_bounce.schema.yaml │ ├── push_open.schema.yaml │ ├── push_send.schema.yaml │ ├── push_send_skip.schema.yaml │ ├── push_uninstall.schema.yaml │ ├── sms_bounce.schema.yaml │ ├── sms_click.schema.yaml │ ├── sms_received.schema.yaml │ ├── sms_send.schema.yaml │ ├── sms_send_skip.schema.yaml │ ├── sms_usage_info.schema.yaml │ ├── templates.schema.yaml │ ├── users.schema.yaml │ ├── web_push_click.schema.yaml │ ├── web_push_send.schema.yaml │ └── web_push_send_skip.schema.yaml ├── config.yaml ├── main.py ├── poetry.lock ├── pyproject.toml ├── sample_files │ └── sample_config.json ├── source_iterable │ ├── __init__.py │ ├── __main__.py │ ├── run.py │ ├── schemas │ │ ├── campaigns.json │ │ ├── campaigns_metrics.json │ │ ├── channels.json │ │ ├── email_bounce.json │ │ ├── email_click.json │ │ ├── email_complaint.json │ │ ├── email_open.json │ │ ├── email_send.json │ │ ├── email_send_skip.json │ │ ├── email_subscribe.json │ │ ├── email_unsubscribe.json │ │ ├── events.json │ │ ├── list_users.json │ │ ├── lists.json │ │ ├── message_types.json │ │ ├── metadata.json │ │ ├── templates.json │ │ └── users.json │ ├── slice_generators.py │ ├── source.py │ ├── spec.json │ ├── streams.py │ └── utils.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-iterate ├── VERSION ├── acmeCo │ ├── flow.yaml │ ├── survey_responses.schema.yaml │ └── surveys.schema.yaml ├── poetry.lock ├── pyproject.toml ├── source_iterate │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-jira-legacy ├── acmeCo │ ├── flow.yaml │ ├── groups.schema.yaml │ ├── issue_link_types.schema.yaml │ ├── issue_properties.schema.yaml │ ├── users.schema.yaml │ └── users_groups_detailed.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_jira_legacy │ ├── __init__.py │ ├── __main__.py │ ├── config_migrations.py │ ├── run.py │ ├── schemas │ │ ├── application_roles.json │ │ ├── audit_records.json │ │ ├── avatars.json │ │ ├── board_issues.json │ │ ├── boards.json │ │ ├── dashboards.json │ │ ├── dynamic_modules.json │ │ ├── filter_sharing.json │ │ ├── filters.json │ │ ├── groups.json │ │ ├── issue_comment_properties.json │ │ ├── issue_comments.json │ │ ├── issue_custom_field_contexts.json │ │ ├── issue_custom_field_options.json │ │ ├── issue_custom_field_options_apps.json │ │ ├── issue_field_configurations.json │ │ ├── issue_fields.json │ │ ├── issue_link_types.json │ │ ├── issue_navigator_settings.json │ │ ├── issue_notification_schemes.json │ │ ├── issue_priorities.json │ │ ├── issue_properties.json │ │ ├── issue_remote_links.json │ │ ├── issue_resolutions.json │ │ ├── issue_security_schemes.json │ │ ├── issue_transitions.json │ │ ├── issue_type_properties.json │ │ ├── issue_type_schemes.json │ │ ├── issue_type_screen_schemes.json │ │ ├── issue_types.json │ │ ├── issue_votes.json │ │ ├── issue_watchers.json │ │ ├── issue_worklogs.json │ │ ├── issues.json │ │ ├── jira_settings.json │ │ ├── jql.json │ │ ├── labels.json │ │ ├── permission_schemes.json │ │ ├── permissions.json │ │ ├── project_avatars.json │ │ ├── project_categories.json │ │ ├── project_components.json │ │ ├── project_email.json │ │ ├── project_permission_schemes.json │ │ ├── project_roles.json │ │ ├── project_types.json │ │ ├── project_versions.json │ │ ├── projects.json │ │ ├── pull_requests.json │ │ ├── screen_schemes.json │ │ ├── screen_tab_fields.json │ │ ├── screen_tabs.json │ │ ├── screens.json │ │ ├── server_info.json │ │ ├── sprint_issues.json │ │ ├── sprints.json │ │ ├── time_tracking.json │ │ ├── users.json │ │ ├── users_groups_detailed.json │ │ ├── webhooks.json │ │ ├── workflow_scheme_drafts.json │ │ ├── workflow_scheme_project_associations.json │ │ ├── workflow_schemes.json │ │ ├── workflow_status_categories.json │ │ ├── workflow_statuses.json │ │ ├── workflow_transition_properties.json │ │ ├── workflow_transition_rules.json │ │ └── workflows.json │ ├── source.py │ ├── spec.json │ ├── streams.py │ ├── type_transfromer.py │ └── utils.py ├── test.flow.yaml ├── tests │ ├── __init__.py │ ├── snapshots │ │ ├── snapshots__discover__capture.stdout.json │ │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py └── unit_tests │ ├── __init__.py │ ├── conftest.py │ ├── responses │ ├── application_role.json │ ├── avatars.json │ ├── board.json │ ├── board_issues.json │ ├── dashboard.json │ ├── filter.json │ ├── filter_sharing.json │ ├── groups.json │ ├── issue_comments.json │ ├── issue_custom_field_contexts.json │ ├── issue_custom_field_options.json │ ├── issue_fields.json │ ├── issue_notification_schemas.json │ ├── issue_properties.json │ ├── issue_property_keys.json │ ├── issue_remote_links.json │ ├── issue_resolutions.json │ ├── issue_security_schemes.json │ ├── issue_type.json │ ├── issue_votes.json │ ├── issue_watchers.json │ ├── issue_worklogs.json │ ├── issues.json │ ├── issues_field_configurations.json │ ├── issues_link_types.json │ ├── issues_navigator_settings.json │ ├── jira_settings.json │ ├── labels.json │ ├── permissions.json │ ├── project_components.json │ ├── project_email.json │ ├── project_permissions.json │ ├── projects.json │ ├── projects_avatars.json │ ├── projects_categories.json │ ├── projects_versions.json │ ├── screen_tabs.json │ ├── screens.json │ ├── sprint_issues.json │ ├── sprints.json │ ├── time_tracking.json │ ├── users.json │ ├── users_groups_detailed.json │ ├── workflow_schemas.json │ ├── workflow_status_categories.json │ ├── workflow_statuses.json │ └── workflows.json │ ├── test_date_time_transformer.py │ ├── test_migrations │ ├── test_config.json │ └── test_config_migrations.py │ ├── test_pagination.py │ ├── test_source.py │ ├── test_streams.py │ └── test_utils.py ├── source-jira-native ├── VERSION ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_jira_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_is_within_fallback_window.py │ └── test_snapshots.py ├── source-kafka ├── .dockerignore ├── CHANGELOG.md ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── README.md ├── VERSION ├── docker-compose.yaml ├── src │ ├── configuration.rs │ ├── discover.rs │ ├── lib.rs │ ├── main.rs │ ├── msk_oauthbearer.rs │ ├── pull.rs │ ├── schema_registry.rs │ └── snapshots │ │ ├── source_kafka__discover__tests__avro record with scalar compound key.snap │ │ ├── source_kafka__discover__tests__nested avro record with scalars.snap │ │ ├── source_kafka__discover__tests__nested json object.snap │ │ ├── source_kafka__discover__tests__no key.snap │ │ ├── source_kafka__discover__tests__single non-scalar avro key.snap │ │ ├── source_kafka__discover__tests__single nullable scalar avro key.snap │ │ ├── source_kafka__discover__tests__single nullable scalar json key.snap │ │ ├── source_kafka__discover__tests__single scalar avro key.snap │ │ ├── source_kafka__discover__tests__single scalar json key.snap │ │ └── source_kafka__pull__tests__avro_to_json.snap └── tests │ ├── acmeCo │ └── flow.yaml │ ├── snapshots │ ├── test__capture.snap │ ├── test__capture_resume.snap │ ├── test__discover.snap │ └── test__spec.snap │ ├── test.flow.yaml │ └── test.rs ├── source-kinesis ├── .snapshots │ ├── TestCapture │ ├── TestCaptureParsing │ ├── TestDiscover │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── capture.go ├── capture_test.go ├── connection.go ├── discovery.go ├── docker-compose.yaml ├── main.go ├── main_test.go └── shard_tracker.go ├── source-klaviyo ├── acmeCo │ └── flow.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_klaviyo │ ├── __init__.py │ ├── __main__.py │ ├── availability_strategy.py │ ├── exceptions.py │ ├── run.py │ ├── schemas │ │ ├── campaigns.json │ │ ├── email_templates.json │ │ ├── events.json │ │ ├── flows.json │ │ ├── global_exclusions.json │ │ ├── lists.json │ │ ├── metrics.json │ │ └── profiles.json │ ├── source.py │ ├── spec.json │ └── streams.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_snapshots.py │ ├── test_source.py │ └── test_streams.py ├── source-linkedin-ads-v2 ├── acmeCo │ ├── account_users.schema.yaml │ ├── campaign_groups.schema.yaml │ ├── campaigns.schema.yaml │ └── flow.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_linkedin_ads_v2 │ ├── __init__.py │ ├── __main__.py │ ├── analytics_streams.py │ ├── run.py │ ├── schemas │ │ ├── account_users.json │ │ ├── accounts.json │ │ ├── ad_analytics.json │ │ ├── campaign_groups.json │ │ ├── campaigns.json │ │ ├── conversions.json │ │ └── creatives.json │ ├── source.py │ ├── spec.json │ ├── streams.py │ └── utils.py ├── test.flow.yaml ├── tests │ ├── __init__.py │ ├── snapshots │ │ ├── snapshots__discover__capture.stdout.json │ │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py └── unit_tests │ ├── __init__.py │ ├── conftest.py │ ├── output_slices.json │ ├── responses │ └── ad_member_country_analytics │ │ ├── response_1.json │ │ ├── response_2.json │ │ └── response_3.json │ ├── test_analytics_streams.py │ ├── test_source.py │ └── utils_tests │ ├── samples │ └── test_data_for_tranform.py │ ├── test_make_slice.py │ └── test_transform_data.py ├── source-linkedin-pages ├── acmeCo │ ├── flow.yaml │ ├── follower_statistics.schema.yaml │ ├── organization_lookup.schema.yaml │ └── share_statistics.schema.yaml ├── connector_config.yaml ├── poetry.lock ├── pyproject.toml ├── source_linkedin_pages │ ├── __init__.py │ ├── __main__.py │ ├── schemas │ │ ├── follower_statistics.json │ │ ├── organization_lookup.json │ │ ├── share_statistics.json │ │ └── total_follower_count.json │ ├── source.py │ ├── spec.json │ └── utils.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── discover.stdout.json │ └── spec.stdout.json │ └── test_snapshots.py ├── source-looker ├── VERSION ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_looker │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-mixpanel-native ├── acmeCo │ ├── annotations.schema.yaml │ ├── cohort_members.schema.yaml │ ├── cohorts.schema.yaml │ ├── engage.schema.yaml │ ├── export.schema.yaml │ ├── flow.yaml │ ├── funnels.schema.yaml │ └── revenue.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_mixpanel_native │ ├── __init__.py │ ├── __main__.py │ ├── property_transformation.py │ ├── schemas │ │ ├── annotations.json │ │ ├── cohort_members.json │ │ ├── cohorts.json │ │ ├── engage.json │ │ ├── export.json │ │ ├── funnels.json │ │ └── revenue.json │ ├── source.py │ ├── spec.json │ ├── streams │ │ ├── __init__.py │ │ ├── annotations.py │ │ ├── base.py │ │ ├── cohort_members.py │ │ ├── cohorts.py │ │ ├── engage.py │ │ ├── export.py │ │ ├── funnels.py │ │ └── revenue.py │ ├── testing.py │ └── utils.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-monday ├── acmeCo │ ├── boards.schema.yaml │ ├── flow.yaml │ ├── items.schema.yaml │ ├── tags.schema.yaml │ ├── teams.schema.yaml │ └── users.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_monday │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── graphql.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__stdout.json │ ├── snapshots__discover__stdout.json │ └── snapshots__spec__stdout.json │ └── test_snapshots.py ├── source-mongodb ├── .snapshots │ ├── TestBatchIncrementalResumption │ ├── TestCapture │ ├── TestCaptureBatchSnapshotResumption │ ├── TestCaptureExclusiveCollectionFilter │ ├── TestCaptureSplitLargeDocuments │ ├── TestCaptureStressChangeStreamCorrectness │ ├── TestDiscover │ ├── TestDiscoverAllDatabases │ ├── TestDiscoverBatchCollections │ ├── TestDiscoverMultipleDatabases │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VARIANTS ├── VERSION ├── backfill.go ├── change_stream.go ├── change_stream_test.go ├── config_test.go ├── coordinator.go ├── coordinator_test.go ├── discovery.go ├── discovery_test.go ├── docker-compose-init.sh ├── docker-compose.yaml ├── global-bundle.pem ├── main.go ├── main_test.go ├── pull.go ├── pull_test.go ├── sample.key └── test_util.go ├── source-mysql-batch ├── .snapshots │ ├── TestAsyncCapture-Capture │ ├── TestAsyncCapture-Discovery │ ├── TestBinaryTypes-Capture │ ├── TestBinaryTypes-Discovery │ ├── TestCaptureFromView-Capture │ ├── TestCaptureFromView-DiscoveryWithViews │ ├── TestCaptureFromView-DiscoveryWithoutViews │ ├── TestCaptureWithEmptyPoll-Capture │ ├── TestCaptureWithEmptyPoll-Discovery │ ├── TestCaptureWithModifications-Capture │ ├── TestCaptureWithModifications-Discovery │ ├── TestCaptureWithNullCursor-Capture │ ├── TestCaptureWithNullCursor-Discovery │ ├── TestCaptureWithTwoColumnCursor-Capture │ ├── TestCaptureWithTwoColumnCursor-Discovery │ ├── TestCaptureWithUpdatedAtCursor-Capture │ ├── TestCaptureWithUpdatedAtCursor-Discovery │ ├── TestDateAndTimeTypes-Capture │ ├── TestDateAndTimeTypes-Discovery │ ├── TestEnumAndSetTypes-Capture │ ├── TestEnumAndSetTypes-Discovery │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFeatureFlagKeylessRowID-Disabled-Capture │ ├── TestFeatureFlagKeylessRowID-Disabled-Discovery │ ├── TestFeatureFlagKeylessRowID-Enabled-Capture │ ├── TestFeatureFlagKeylessRowID-Enabled-Discovery │ ├── TestFullRefresh-Capture │ ├── TestFullRefresh-Discovery │ ├── TestIntegerTypes-Capture │ ├── TestIntegerTypes-Discovery │ ├── TestJSONType-Capture │ ├── TestJSONType-Discovery │ ├── TestKeylessCapture-Capture │ ├── TestKeylessCapture-Discovery │ ├── TestKeylessFullRefreshCapture-Capture │ ├── TestKeylessFullRefreshCapture-Discovery │ ├── TestNumericTypes-Capture │ ├── TestNumericTypes-Discovery │ ├── TestQueryPlaceholderExpansion │ ├── TestQueryTemplate-FirstNoCursor │ ├── TestQueryTemplate-FirstOneCursor │ ├── TestQueryTemplate-FirstThreeCursor │ ├── TestQueryTemplate-FirstTwoCursor │ ├── TestQueryTemplate-SubsequentNoCursor │ ├── TestQueryTemplate-SubsequentOneCursor │ ├── TestQueryTemplate-SubsequentThreeCursor │ ├── TestQueryTemplate-SubsequentTwoCursor │ ├── TestQueryTemplateOverride-Capture │ ├── TestQueryTemplateOverride-Discovery │ ├── TestSimpleCapture-Capture │ ├── TestSimpleCapture-Discovery │ ├── TestSpatialTypes-Capture │ ├── TestSpatialTypes-Discovery │ ├── TestSpec │ ├── TestStringTypes-Capture │ └── TestStringTypes-Discovery ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VARIANTS ├── VERSION ├── discovery.go ├── docker-compose.yaml ├── docker-initdb.sh ├── driver.go ├── main.go └── main_test.go ├── source-mysql ├── .snapshots │ ├── TestAddBinaryColumn │ ├── TestAddLegacyTextColumn │ ├── TestAlterTable_AddColumnBasic-at_end │ ├── TestAlterTable_AddColumnBasic-at_end_restart │ ├── TestAlterTable_AddColumnBasic-at_first │ ├── TestAlterTable_AddColumnBasic-at_first_restart │ ├── TestAlterTable_AddColumnBasic-at_middle │ ├── TestAlterTable_AddColumnBasic-at_middle_restart │ ├── TestAlterTable_AddColumnBasic-init │ ├── TestAlterTable_AddColumnSetEnum-enum-init │ ├── TestAlterTable_AddColumnSetEnum-enum-restart │ ├── TestAlterTable_AddColumnSetEnum-enum-stream │ ├── TestAlterTable_AddColumnSetEnum-set-init │ ├── TestAlterTable_AddColumnSetEnum-set-restart │ ├── TestAlterTable_AddColumnSetEnum-set-stream │ ├── TestAlterTable_AddEnumColumn-discover1 │ ├── TestAlterTable_AddEnumColumn-discover2 │ ├── TestAlterTable_AddEnumColumn-init │ ├── TestAlterTable_AddEnumColumn-modified │ ├── TestAlterTable_AddEnumColumn-rebackfilled │ ├── TestAlterTable_AddUnsignedColumn-discover1 │ ├── TestAlterTable_AddUnsignedColumn-discover2 │ ├── TestAlterTable_AddUnsignedColumn-init │ ├── TestAlterTable_AddUnsignedColumn-modified │ ├── TestAlterTable_AddUnsignedColumn-rebackfilled │ ├── TestAlterTable_ChangeColumn-capture1 │ ├── TestAlterTable_ChangeColumn-capture2 │ ├── TestAlterTable_ChangeColumn-capture3 │ ├── TestAlterTable_ChangeColumn-init │ ├── TestAlterTable_DropColumn-init │ ├── TestAlterTable_DropColumn-restart │ ├── TestAlterTable_DropColumn-stream │ ├── TestAlterTable_ModifyColumn-capture1 │ ├── TestAlterTable_ModifyColumn-capture2 │ ├── TestAlterTable_ModifyColumn-capture3 │ ├── TestAlterTable_ModifyColumn-capture4 │ ├── TestAlterTable_ModifyColumn-init │ ├── TestAlterTable_MultipleAlterations-altered │ ├── TestAlterTable_MultipleAlterations-init │ ├── TestAlterTable_RenameColumn-capture1 │ ├── TestAlterTable_RenameColumn-capture2 │ ├── TestAlterTable_RenameColumn-init │ ├── TestAlterTable_RenameColumnCaseInsensitive-discover │ ├── TestAlterTable_RenameColumnCaseInsensitive-init │ ├── TestAlterTable_RenameColumnCaseInsensitive-renamed │ ├── TestBackfillLegacyTextKey │ ├── TestBackfillModes │ ├── TestComplexDataset-init │ ├── TestComplexDataset-restart1 │ ├── TestComplexDataset-restart2 │ ├── TestCursorResume │ ├── TestDateNormalization │ ├── TestDatetimeNormalization │ ├── TestDatetimeNormalization-replication │ ├── TestDroppedAndRecreatedTable │ ├── TestEmptyBlobs-Capture │ ├── TestEmptyBlobs-Discovery │ ├── TestEnumDecodingFix-backfill │ ├── TestEnumDecodingFix-discovery │ ├── TestEnumDecodingFix-replication1 │ ├── TestEnumDecodingFix-replication2 │ ├── TestEnumEmptyString-backfill │ ├── TestEnumEmptyString-discovery │ ├── TestEnumEmptyString-replication │ ├── TestEnumPrimaryKey │ ├── TestEnumPrimaryKey-discovery │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFeatureFlagTinyintAsBool-Default-Capture │ ├── TestFeatureFlagTinyintAsBool-Default-Discovery │ ├── TestFeatureFlagTinyintAsBool-Disabled-Capture │ ├── TestFeatureFlagTinyintAsBool-Disabled-Discovery │ ├── TestFeatureFlagTinyintAsBool-Enabled-Capture │ ├── TestFeatureFlagTinyintAsBool-Enabled-Discovery │ ├── TestGeneric-CatalogPrimaryKey-capture1 │ ├── TestGeneric-CatalogPrimaryKey-capture2 │ ├── TestGeneric-CatalogPrimaryKeyOverride-capture1 │ ├── TestGeneric-CatalogPrimaryKeyOverride-capture2 │ ├── TestGeneric-DuplicatedScanKey │ ├── TestGeneric-EmptyTable-init │ ├── TestGeneric-EmptyTable-main │ ├── TestGeneric-IgnoredStreams-capture1 │ ├── TestGeneric-IgnoredStreams-capture2 │ ├── TestGeneric-KeylessCapture-Backfill │ ├── TestGeneric-KeylessCapture-Replication │ ├── TestGeneric-KeylessDiscovery │ ├── TestGeneric-MissingTable │ ├── TestGeneric-MultipleStreams-capture1 │ ├── TestGeneric-MultipleStreams-capture2 │ ├── TestGeneric-MultipleStreams-capture3 │ ├── TestGeneric-MultipleStreams-capture4 │ ├── TestGeneric-MultipleStreams-capture5 │ ├── TestGeneric-ReplicationDeletes-init │ ├── TestGeneric-ReplicationDeletes-main │ ├── TestGeneric-ReplicationInserts-init │ ├── TestGeneric-ReplicationInserts-main │ ├── TestGeneric-ReplicationOnly-backfill │ ├── TestGeneric-ReplicationOnly-replication │ ├── TestGeneric-ReplicationUpdates-init │ ├── TestGeneric-ReplicationUpdates-main │ ├── TestGeneric-SimpleCapture │ ├── TestGeneric-SimpleDiscovery │ ├── TestGeneric-SpecResponse │ ├── TestGeneric-StressCorrectness │ ├── TestMariaDBTypeUUID-capture │ ├── TestMariaDBTypeUUID-discovery │ ├── TestMariaDBTypeUUID-scankey │ ├── TestNonCommitFinalQuery │ ├── TestPartialRowImages-delete │ ├── TestPartialRowImages-init │ ├── TestPartialRowImages-main │ ├── TestPartitionedTable-Capture │ ├── TestPartitionedTable-Capture-Replication │ ├── TestPartitionedTable-Discovery │ ├── TestPrerequisites-captureAB │ ├── TestPrerequisites-captureABC-fails │ ├── TestPrerequisites-validateAB │ ├── TestPrerequisites-validateABC-fails │ ├── TestPrimaryKeyUpdate │ ├── TestPrimaryKeyUpdateOfOnlyChangesBinding │ ├── TestScanKeyDatetimes │ ├── TestScanKeyTypes-BigInt │ ├── TestScanKeyTypes-Binary │ ├── TestScanKeyTypes-Bool │ ├── TestScanKeyTypes-Char │ ├── TestScanKeyTypes-Decimal │ ├── TestScanKeyTypes-Double │ ├── TestScanKeyTypes-Integer │ ├── TestScanKeyTypes-Numeric │ ├── TestScanKeyTypes-Real │ ├── TestScanKeyTypes-SmallInt │ ├── TestScanKeyTypes-TinyInt │ ├── TestScanKeyTypes-VarBinary │ ├── TestScanKeyTypes-VarChar │ ├── TestSecondaryIndexDiscovery-index_and_fk │ ├── TestSecondaryIndexDiscovery-index_only │ ├── TestSecondaryIndexDiscovery-nonunique_index │ ├── TestSecondaryIndexDiscovery-nothing │ ├── TestSecondaryIndexDiscovery-nullable_index │ ├── TestSecondaryIndexDiscovery-pk_and_index │ ├── TestSkipBackfills-init │ ├── TestSkipBackfills-main │ ├── TestTableNamesIdenticalUnderCapitalization-Capture │ ├── TestTableNamesIdenticalUnderCapitalization-Discover │ ├── TestTrickyColumnNames-backfill │ ├── TestTrickyColumnNames-discover │ ├── TestTrickyColumnNames-replication │ ├── TestTrickyTableNames-Capture │ ├── TestTrickyTableNames-Capture-Replication │ ├── TestTrickyTableNames-Discover │ ├── TestUnicodeText-binary │ ├── TestUnicodeText-latin1_swedish_ci │ ├── TestUnicodeText-ucs2_general_ci │ ├── TestUnicodeText-utf8mb3_general_ci │ ├── TestUnicodeText-utf8mb4_0900_ai_ci │ ├── TestUnicodeText-utf8mb4_general_ci │ ├── TestUnsignedIntegers-backfill │ ├── TestUnsignedIntegers-discovery │ └── TestUnsignedIntegers-replication ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VARIANTS ├── VERSION ├── backfill.go ├── capture_test.go ├── database.go ├── datatype_test.go ├── discovery.go ├── discovery_test.go ├── docker-compose.yaml ├── docker-entrypoint-initdb.d │ └── init-user-db.sh ├── main.go ├── main_test.go ├── prerequisites.go ├── prerequisites_test.go ├── replication.go ├── replication_test.go └── testdata │ └── statepop.csv ├── source-notion ├── VERSION ├── acmeCo │ ├── blocks.schema.yaml │ ├── comments.schema.yaml │ ├── databases.schema.yaml │ ├── flow.yaml │ ├── pages.schema.yaml │ └── users.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_notion │ ├── __init__.py │ ├── __main__.py │ ├── run.py │ ├── schemas │ │ ├── blocks.json │ │ ├── comments.json │ │ ├── databases.json │ │ ├── pages.json │ │ ├── shared │ │ │ ├── child.json │ │ │ ├── date.json │ │ │ ├── emoji.json │ │ │ ├── file.json │ │ │ ├── heading.json │ │ │ ├── icon.json │ │ │ ├── options.json │ │ │ ├── parent.json │ │ │ ├── rich_text.json │ │ │ ├── text_element.json │ │ │ ├── title.json │ │ │ └── user.json │ │ └── users.json │ ├── source.py │ ├── spec.json │ ├── streams.py │ └── utils.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_incremental_streams.py │ ├── test_snapshots.py │ ├── test_source.py │ └── test_streams.py ├── source-oracle-batch ├── .snapshots │ ├── TestBasicCapture-Capture │ ├── TestBasicCapture-Discovery │ ├── TestBasicDatatypes-Capture │ ├── TestBasicDatatypes-Discovery │ ├── TestDecimals │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFloatNaNs-Capture │ ├── TestFloatNaNs-Discovery │ ├── TestKeyDiscovery │ ├── TestSchemaFilter-FilteredIn │ ├── TestSchemaFilter-FilteredOut │ ├── TestSchemaFilter-Unfiltered │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── config.pdb.yaml ├── discovery.go ├── driver.go ├── main.go └── main_test.go ├── source-oracle ├── .snapshots │ ├── TestAllTypes-backfill │ ├── TestAllTypes-discover │ ├── TestAllTypes-replication │ ├── TestCapitalizedTables-Capture │ ├── TestCapitalizedTables-Capture-Replication │ ├── TestCapitalizedTables-Discover │ ├── TestCaptureCapitalization │ ├── TestConfigURI-Basic │ ├── TestCrossSCNTransactions │ ├── TestCursorResume │ ├── TestGeneric-CatalogPrimaryKey-capture1 │ ├── TestGeneric-CatalogPrimaryKey-capture2 │ ├── TestGeneric-CatalogPrimaryKeyOverride-capture1 │ ├── TestGeneric-CatalogPrimaryKeyOverride-capture2 │ ├── TestGeneric-DuplicatedScanKey │ ├── TestGeneric-EmptyTable-init │ ├── TestGeneric-EmptyTable-main │ ├── TestGeneric-IgnoredStreams-capture1 │ ├── TestGeneric-IgnoredStreams-capture2 │ ├── TestGeneric-KeylessCapture-Backfill │ ├── TestGeneric-KeylessCapture-Replication │ ├── TestGeneric-KeylessDiscovery │ ├── TestGeneric-MissingTable │ ├── TestGeneric-MultipleStreams-capture1 │ ├── TestGeneric-MultipleStreams-capture2 │ ├── TestGeneric-MultipleStreams-capture3 │ ├── TestGeneric-MultipleStreams-capture4 │ ├── TestGeneric-MultipleStreams-capture5 │ ├── TestGeneric-ReplicationDeletes-init │ ├── TestGeneric-ReplicationDeletes-main │ ├── TestGeneric-ReplicationInserts-init │ ├── TestGeneric-ReplicationInserts-main │ ├── TestGeneric-ReplicationOnly-backfill │ ├── TestGeneric-ReplicationOnly-replication │ ├── TestGeneric-ReplicationUpdates-init │ ├── TestGeneric-ReplicationUpdates-main │ ├── TestGeneric-SimpleCapture │ ├── TestGeneric-SimpleDiscovery │ ├── TestGeneric-SpecResponse │ ├── TestIntegerKey-backfill │ ├── TestIntegerKey-discover │ ├── TestIntegerKey-replication │ ├── TestLongStrings-backfill │ ├── TestLongStrings-replication │ ├── TestNullValues-backfill │ ├── TestNullValues-discover │ ├── TestNullValues-replication │ ├── TestSchemaChangesExtract-delete │ ├── TestSchemaChangesExtract-init │ ├── TestSchemaChangesExtract-insert-after │ ├── TestSchemaChangesExtract-insert-before │ ├── TestSchemaChangesExtract-update │ ├── TestSchemaChangesOnline-init │ ├── TestSchemaChangesOnline-main │ ├── TestSchemaChangesSmart-init │ ├── TestSchemaChangesSmart-insert-after │ ├── TestSchemaChangesSmart-insert-before │ ├── TestSchemaChangesSmart-update │ ├── TestSchemaChangesSmartMultiple │ ├── TestSkipBackfills-init │ ├── TestSkipBackfills-main │ ├── TestStringKey-backfill │ ├── TestStringKey-discover │ ├── TestStringKey-replication │ ├── TestTrickyColumnNames-backfill │ ├── TestTrickyColumnNames-discover │ ├── TestTrickyColumnNames-replication │ ├── TestTruncatedTables-capture1 │ ├── TestTruncatedTables-capture2 │ ├── TestTruncatedTables-init │ ├── TestUnsupportedTypes-backfill │ ├── TestUnsupportedTypes-discover │ └── TestUnsupportedTypes-replication ├── Dockerfile ├── VERSION ├── backfill.go ├── capture_test.go ├── config.pdb.yaml ├── decode.go ├── discovery.go ├── docker-compose.yaml ├── main.go ├── main_test.go ├── prerequisites.go ├── replication.go ├── replication_test.go ├── reserved_words.go └── testdata │ └── statepop.csv ├── source-outreach ├── VERSION ├── acmeCo │ ├── accounts.schema.yaml │ ├── call_dispositions.schema.yaml │ ├── call_purposes.schema.yaml │ ├── calls.schema.yaml │ ├── email_addresses.schema.yaml │ ├── events.schema.yaml │ ├── flow.yaml │ ├── mailboxes.schema.yaml │ ├── mailings.schema.yaml │ ├── opportunities.schema.yaml │ ├── opportunity_stages.schema.yaml │ ├── prospects.schema.yaml │ ├── stages.schema.yaml │ ├── tasks.schema.yaml │ ├── teams.schema.yaml │ ├── templates.schema.yaml │ └── users.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_outreach │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-pendo ├── VERSION ├── poetry.lock ├── pyproject.toml ├── source_pendo │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-pokemon ├── poetry.lock ├── pyproject.toml ├── source_pokemon │ ├── __init__.py │ ├── __main__.py │ ├── pokemon_list.py │ ├── schemas │ │ └── pokemon.json │ ├── source.py │ └── spec.yaml └── test.flow.yaml ├── source-postgres-batch ├── .snapshots │ ├── TestArrayTypes-Capture │ ├── TestArrayTypes-Discovery │ ├── TestAsyncCapture-Capture │ ├── TestAsyncCapture-Discovery │ ├── TestBinaryTypes-Capture │ ├── TestBinaryTypes-Discovery │ ├── TestCaptureFromView-Capture │ ├── TestCaptureFromView-DiscoveryWithViews │ ├── TestCaptureFromView-DiscoveryWithoutViews │ ├── TestCaptureWithEmptyPoll-Capture │ ├── TestCaptureWithEmptyPoll-Discovery │ ├── TestCaptureWithTwoColumnCursor-Capture │ ├── TestCaptureWithTwoColumnCursor-Discovery │ ├── TestCaptureWithUpdatedAtCursor-Capture │ ├── TestCaptureWithUpdatedAtCursor-Discovery │ ├── TestDateAndTimeTypes-Capture │ ├── TestDateAndTimeTypes-Discovery │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFeatureFlagKeylessRowID-Disabled-Capture │ ├── TestFeatureFlagKeylessRowID-Disabled-Discovery │ ├── TestFeatureFlagKeylessRowID-Enabled-Capture │ ├── TestFeatureFlagKeylessRowID-Enabled-Discovery │ ├── TestFullRefresh-Capture │ ├── TestFullRefresh-Discovery │ ├── TestGeometricTypes-Capture │ ├── TestGeometricTypes-Discovery │ ├── TestIntegerTypes-Capture │ ├── TestIntegerTypes-Discovery │ ├── TestJSONTypes-Capture │ ├── TestJSONTypes-Discovery │ ├── TestKeyDiscovery │ ├── TestKeylessCapture-Capture │ ├── TestKeylessCapture-Discovery │ ├── TestKeylessFullRefreshCapture-Capture │ ├── TestKeylessFullRefreshCapture-Discovery │ ├── TestModificationsAndDeletions-Capture │ ├── TestModificationsAndDeletions-Discovery │ ├── TestNetworkTypes-Capture │ ├── TestNetworkTypes-Discovery │ ├── TestNumericTypes-Capture │ ├── TestNumericTypes-Discovery │ ├── TestQueryTemplates-MultiCursorFirstQuery │ ├── TestQueryTemplates-MultiCursorSubsequentQuery │ ├── TestQueryTemplates-SingleCursorFirstQuery │ ├── TestQueryTemplates-SingleCursorSubsequentQuery │ ├── TestQueryTemplates-XMinFirstQuery │ ├── TestQueryTemplates-XMinSubsequentQuery │ ├── TestSchemaFilter-FilteredIn │ ├── TestSchemaFilter-FilteredOut │ ├── TestSchemaFilter-Unfiltered │ ├── TestSimpleCapture-Capture │ ├── TestSimpleCapture-Discovery │ ├── TestSpec │ ├── TestStringTypes-Capture │ ├── TestStringTypes-Discovery │ ├── TestUUIDType-Capture │ ├── TestUUIDType-Discovery │ ├── TestXMLType-Capture │ └── TestXMLType-Discovery ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── discovery.go ├── docker-compose.yaml ├── docker-initdb.sh ├── driver.go ├── main.go └── main_test.go ├── source-postgres ├── .snapshots │ ├── TestBackfillQueryGeneration │ ├── TestCIText-Capture │ ├── TestCIText-Discovery │ ├── TestCapitalizedTables-Capture │ ├── TestCapitalizedTables-Capture-Replication │ ├── TestCapitalizedTables-Discover │ ├── TestCaptureAfterSlotDropped-capture1 │ ├── TestCaptureAfterSlotDropped-capture2 │ ├── TestCaptureAfterSlotDropped-capture3 │ ├── TestCaptureAfterSlotDropped-capture4 │ ├── TestCaptureCapitalization │ ├── TestCaptureDomainJSONB-capture1 │ ├── TestCaptureDomainJSONB-capture2 │ ├── TestCaptureOversizedFields │ ├── TestCaptureOversizedFields-Replication │ ├── TestComplexDataset-init │ ├── TestComplexDataset-restart1 │ ├── TestComplexDataset-restart2 │ ├── TestConfigURI-Basic │ ├── TestConfigURI-IncorrectSSL │ ├── TestConfigURI-RequireSSL │ ├── TestCursorResume │ ├── TestDiscoveryCapitalization │ ├── TestDiscoveryComplex │ ├── TestDiscoveryExcludesSystemSchemas │ ├── TestDiscoveryWithoutPermissions │ ├── TestDroppedAndRecreatedTable │ ├── TestEnumScanKey │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFeatureFlagFlattenArrays-Disabled-Capture │ ├── TestFeatureFlagFlattenArrays-Disabled-Discovery │ ├── TestFeatureFlagFlattenArrays-Enabled-Capture │ ├── TestFeatureFlagFlattenArrays-Enabled-Discovery │ ├── TestFloatKeyDiscovery │ ├── TestFloatKeyDiscovery-capture │ ├── TestGeneratedColumn-capture │ ├── TestGeneratedColumn-discovery │ ├── TestGeneric-CatalogPrimaryKey-capture1 │ ├── TestGeneric-CatalogPrimaryKey-capture2 │ ├── TestGeneric-CatalogPrimaryKeyOverride-capture1 │ ├── TestGeneric-CatalogPrimaryKeyOverride-capture2 │ ├── TestGeneric-DuplicatedScanKey │ ├── TestGeneric-EmptyTable-init │ ├── TestGeneric-EmptyTable-main │ ├── TestGeneric-IgnoredStreams-capture1 │ ├── TestGeneric-IgnoredStreams-capture2 │ ├── TestGeneric-KeylessCapture-Backfill │ ├── TestGeneric-KeylessCapture-Replication │ ├── TestGeneric-KeylessDiscovery │ ├── TestGeneric-MissingTable │ ├── TestGeneric-MultipleStreams-capture1 │ ├── TestGeneric-MultipleStreams-capture2 │ ├── TestGeneric-MultipleStreams-capture3 │ ├── TestGeneric-MultipleStreams-capture4 │ ├── TestGeneric-MultipleStreams-capture5 │ ├── TestGeneric-ReplicationDeletes-init │ ├── TestGeneric-ReplicationDeletes-main │ ├── TestGeneric-ReplicationInserts-init │ ├── TestGeneric-ReplicationInserts-main │ ├── TestGeneric-ReplicationOnly-backfill │ ├── TestGeneric-ReplicationOnly-replication │ ├── TestGeneric-ReplicationUpdates-init │ ├── TestGeneric-ReplicationUpdates-main │ ├── TestGeneric-SimpleCapture │ ├── TestGeneric-SimpleDiscovery │ ├── TestGeneric-SpecResponse │ ├── TestGeneric-StressCorrectness │ ├── TestKeylessBackfillQueryGeneration │ ├── TestLongYearTimestamps │ ├── TestMultidimensionalArrays-Capture │ ├── TestMultidimensionalArrays-Discovery │ ├── TestPartitionedTableDiscovery │ ├── TestPrerequisites-captureAB │ ├── TestPrerequisites-captureABC-fails │ ├── TestPrerequisites-validateAB │ ├── TestPrerequisites-validateABC-fails │ ├── TestPrimaryKeyUpdate │ ├── TestReplicaIdentity-init │ ├── TestReplicaIdentity-main │ ├── TestScanKeyTimestamps │ ├── TestScanKeyTypes-BigInt │ ├── TestScanKeyTypes-BigSerial │ ├── TestScanKeyTypes-Bool │ ├── TestScanKeyTypes-Char │ ├── TestScanKeyTypes-Decimal │ ├── TestScanKeyTypes-Double │ ├── TestScanKeyTypes-Integer │ ├── TestScanKeyTypes-MAC6 │ ├── TestScanKeyTypes-MAC8 │ ├── TestScanKeyTypes-Numeric │ ├── TestScanKeyTypes-OID │ ├── TestScanKeyTypes-Real │ ├── TestScanKeyTypes-Serial │ ├── TestScanKeyTypes-SmallInt │ ├── TestScanKeyTypes-SmallSerial │ ├── TestScanKeyTypes-Text │ ├── TestScanKeyTypes-UUID │ ├── TestScanKeyTypes-VarChar │ ├── TestSecondaryIndexDiscovery-index_only │ ├── TestSecondaryIndexDiscovery-nonunique_index │ ├── TestSecondaryIndexDiscovery-nothing │ ├── TestSecondaryIndexDiscovery-nullable_index │ ├── TestSecondaryIndexDiscovery-pk_and_index │ ├── TestSkipBackfills-init │ ├── TestSkipBackfills-main │ ├── TestSpecialTemporalValues │ ├── TestToastColumns-ident-default │ ├── TestToastColumns-ident-full │ ├── TestToastColumns-init │ ├── TestTrickyColumnNames-backfill │ ├── TestTrickyColumnNames-discover │ ├── TestTrickyColumnNames-replication │ ├── TestTruncatedTables-capture1 │ ├── TestTruncatedTables-capture2 │ ├── TestTruncatedTables-init │ ├── TestUserTypes-Domain-Capture │ ├── TestUserTypes-Domain-Capture-Replication │ ├── TestUserTypes-Domain-Discovery │ ├── TestUserTypes-Enum-Capture │ ├── TestUserTypes-Enum-Capture-Replication │ ├── TestUserTypes-Enum-Discovery │ ├── TestUserTypes-Range-Capture │ ├── TestUserTypes-Range-Capture-Replication │ ├── TestUserTypes-Range-Discovery │ ├── TestUserTypes-Tuple-Capture │ ├── TestUserTypes-Tuple-Capture-Replication │ ├── TestUserTypes-Tuple-Discovery │ └── TestXMINBackfill ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VARIANTS ├── VERSION ├── backfill.go ├── backfill_test.go ├── capture_test.go ├── database.go ├── datatype_test.go ├── datatypes.go ├── discovery.go ├── discovery_test.go ├── docker-compose.yaml ├── docker-entrypoint-initdb.d │ └── init-user-db.sh ├── fdbutils.go ├── fdbutils_test.go ├── main.go ├── main_test.go ├── prerequisites.go ├── prerequisites_test.go ├── replication.go └── testdata │ └── statepop.csv ├── source-recharge ├── poetry.lock ├── pyproject.toml ├── sample_files │ ├── sample_config.json │ └── sample_state.json ├── source_recharge │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── run.py │ ├── schemas │ │ ├── addresses.json │ │ ├── charges.json │ │ ├── collections.json │ │ ├── customers.json │ │ ├── discounts.json │ │ ├── metafields.json │ │ ├── onetimes.json │ │ ├── orders.json │ │ ├── products.json │ │ ├── shop.json │ │ └── subscriptions.json │ ├── source.py │ └── spec.json ├── test.flow.yaml └── tests │ ├── snapshots │ ├── source_recharge_tests_test_snapshot__discover__capture.stdout.json │ └── source_recharge_tests_test_snapshot__spec__capture.stdout.json │ ├── test_api.py │ ├── test_snapshot.py │ └── test_source.py ├── source-redshift-batch ├── .snapshots │ ├── TestBasicCapture-Capture │ ├── TestBasicCapture-Discovery │ ├── TestBasicDatatypes-Capture │ ├── TestBasicDatatypes-Discovery │ ├── TestCaptureFromView-Capture │ ├── TestCaptureFromView-DiscoveryWithViews │ ├── TestCaptureFromView-DiscoveryWithoutViews │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFeatureFlagKeylessRowID-Disabled-Capture │ ├── TestFeatureFlagKeylessRowID-Disabled-Discovery │ ├── TestFeatureFlagKeylessRowID-Enabled-Capture │ ├── TestFeatureFlagKeylessRowID-Enabled-Discovery │ ├── TestFeatureFlagUseSchemaInference-Discovery │ ├── TestFloatNaNs-Capture │ ├── TestFloatNaNs-Discovery │ ├── TestKeyDiscovery │ ├── TestKeylessCapture-Capture │ ├── TestKeylessCapture-Discovery │ ├── TestKeylessDiscovery │ ├── TestKeylessFullRefreshCapture-Capture │ ├── TestKeylessFullRefreshCapture-Discovery │ ├── TestQueryTemplate-FirstNoCursor │ ├── TestQueryTemplate-FirstOneCursor │ ├── TestQueryTemplate-FirstThreeCursor │ ├── TestQueryTemplate-FirstTwoCursor │ ├── TestQueryTemplate-SubsequentNoCursor │ ├── TestQueryTemplate-SubsequentOneCursor │ ├── TestQueryTemplate-SubsequentThreeCursor │ ├── TestQueryTemplate-SubsequentTwoCursor │ ├── TestQueryTemplateOverride-Capture │ ├── TestQueryTemplateOverride-Discovery │ ├── TestSchemaFilter-FilteredIn │ ├── TestSchemaFilter-FilteredOut │ ├── TestSchemaFilter-Unfiltered │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── configs │ ├── cloud-capture.yaml │ ├── cloud-setup.yaml │ ├── local-capture.yaml │ └── local-setup.yaml ├── discovery.go ├── docker-compose.yaml ├── docker-initdb.sh ├── driver.go ├── main.go └── main_test.go ├── source-s3 ├── .gitignore ├── CHANGELOG.md ├── Dockerfile ├── VERSION └── main.go ├── source-sage-intacct ├── poetry.lock ├── pyproject.toml ├── source_sage_intacct │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ ├── resources.py │ └── sage.py └── tests │ ├── __init__.py │ ├── snapshots │ ├── xml_requests__xml_requests_api_session_request_txt_api_session_request_args0__api_session_request.txt │ ├── xml_requests__xml_requests_get_all_records_request_txt_get_all_records_request_args6__get_all_records_request.txt │ ├── xml_requests__xml_requests_get_all_records_request_txt_get_all_records_request_args7__get_all_records_request.txt │ ├── xml_requests__xml_requests_get_all_records_request_txt_get_all_records_request_args8__get_all_records_request.txt │ ├── xml_requests__xml_requests_get_records_at_request_txt_get_records_at_request_args5__get_records_at_request.txt │ ├── xml_requests__xml_requests_get_records_at_request_txt_get_records_at_request_args6__get_records_at_request.txt │ ├── xml_requests__xml_requests_get_records_since_request_txt_get_records_since_request_args4__get_records_since_request.txt │ ├── xml_requests__xml_requests_get_user_by_id_request_txt_get_user_by_id_request_args2__get_user_by_id_request.txt │ ├── xml_requests__xml_requests_object_definition_request_txt_object_definition_request_args3__object_definition_request.txt │ └── xml_requests__xml_requests_user_datetime_prefs_request_txt_user_datetime_prefs_request_args1__user_datetime_prefs_request.txt │ ├── test_api.py │ └── test_xml_requests.py ├── source-salesforce-native ├── VERSION ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_salesforce_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── bulk_job_manager.py │ ├── models.py │ ├── resources.py │ ├── rest_query_manager.py │ ├── shared.py │ └── supported_standard_objects.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-sftp ├── .snapshots │ ├── TestListing-non-recursive │ ├── TestListing-recursive │ ├── TestListing-recursive_otherDir │ ├── TestListing-recursive_startAt_root-sub │ ├── TestListing-recursive_startAt_root-sub-y.csv │ ├── TestListing-recursive_startAt_z │ └── TestSpec ├── CHANGELOG.md ├── Dockerfile ├── VERSION ├── docker-compose.yaml ├── main.go ├── main_test.go └── tests │ └── parser_spec.json ├── source-shopify-native ├── VERSION ├── acmeCo │ ├── abandoned_checkouts.schema.yaml │ ├── custom_collection_metafields.schema.yaml │ ├── custom_collections.schema.yaml │ ├── customer_metafields.schema.yaml │ ├── customers.schema.yaml │ ├── flow.yaml │ ├── fulfillment_orders.schema.yaml │ ├── fulfillments.schema.yaml │ ├── inventory_items.schema.yaml │ ├── inventory_levels.schema.yaml │ ├── location_metafields.schema.yaml │ ├── locations.schema.yaml │ ├── order_agreements.schema.yaml │ ├── order_metafields.schema.yaml │ ├── order_refunds.schema.yaml │ ├── order_risks.schema.yaml │ ├── order_transactions.schema.yaml │ ├── orders.schema.yaml │ ├── product_media.schema.yaml │ ├── product_metafields.schema.yaml │ ├── product_variants.schema.yaml │ ├── products.schema.yaml │ ├── smart_collection_metafields.schema.yaml │ └── smart_collections.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_shopify_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── graphql │ │ ├── README.md │ │ ├── __init__.py │ │ ├── abandoned_checkouts.py │ │ ├── bulk_job_manager.py │ │ ├── collections │ │ │ ├── __init__.py │ │ │ ├── collections.py │ │ │ └── metafields.py │ │ ├── common.py │ │ ├── customers │ │ │ ├── __init__.py │ │ │ ├── customers.py │ │ │ └── metafields.py │ │ ├── inventory │ │ │ ├── __init__.py │ │ │ ├── inventory_items.py │ │ │ └── inventory_levels.py │ │ ├── locations │ │ │ ├── __init__.py │ │ │ ├── locations.py │ │ │ └── metafields.py │ │ ├── metafields.py │ │ ├── orders │ │ │ ├── __init__.py │ │ │ ├── agreements.py │ │ │ ├── fulfillment_orders.py │ │ │ ├── fulfillments.py │ │ │ ├── metafields.py │ │ │ ├── orders.py │ │ │ ├── refunds.py │ │ │ ├── risks.py │ │ │ └── transactions.py │ │ └── products │ │ │ ├── __init__.py │ │ │ ├── media.py │ │ │ ├── metafields.py │ │ │ ├── products.py │ │ │ └── variants.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-shopify ├── VERSION ├── __main__.py ├── acmeCo │ ├── configs │ │ ├── source-shopify.resource.0.config.yaml │ │ ├── source-shopify.resource.1.config.yaml │ │ ├── source-shopify.resource.2.config.yaml │ │ ├── source-shopify.resource.3.config.yaml │ │ ├── source-shopify.resource.4.config.yaml │ │ ├── source-shopify.resource.5.config.yaml │ │ └── source-shopify.resource.6.config.yaml │ ├── custom_collections.schema.yaml │ ├── customers.schema.yaml │ ├── flow.yaml │ ├── inventory_items.schema.yaml │ ├── locations.schema.yaml │ ├── metafields.schema.yaml │ ├── order_risks.schema.yaml │ ├── orders.schema.yaml │ ├── price_rules.schema.yaml │ ├── products.schema.yaml │ ├── refunds.schema.yaml │ ├── transactions.schema.yaml │ └── users.schema.yaml ├── connector_config.yaml ├── poetry.lock ├── pyproject.toml ├── source-shopify.resource.0.config.yaml ├── source-shopify.resource.1.config.yaml ├── source-shopify.resource.10.config.yaml ├── source-shopify.resource.11.config.yaml ├── source-shopify.resource.12.config.yaml ├── source-shopify.resource.13.config.yaml ├── source-shopify.resource.14.config.yaml ├── source-shopify.resource.2.config.yaml ├── source-shopify.resource.3.config.yaml ├── source-shopify.resource.4.config.yaml ├── source-shopify.resource.5.config.yaml ├── source-shopify.resource.6.config.yaml ├── source-shopify.resource.7.config.yaml ├── source-shopify.resource.8.config.yaml ├── source-shopify.resource.9.config.yaml ├── source_shopify │ ├── .github │ │ └── workflows │ │ │ └── ci_workflow.yml │ ├── .gitignore │ ├── .project │ ├── .pydevproject │ ├── .secrets │ │ └── .gitignore │ ├── LICENSE │ ├── README.md │ ├── meltano.yml │ ├── mypy.ini │ ├── output │ │ └── .gitignore │ ├── poetry.lock │ ├── pyproject.toml │ ├── tap_shopify │ │ ├── __init__.py │ │ ├── auth.py │ │ ├── client.py │ │ ├── schemas │ │ │ ├── abandoned_checkout.json │ │ │ ├── carrier_service.json │ │ │ ├── collect.json │ │ │ ├── custom_collection.json │ │ │ ├── customer.json │ │ │ ├── discount_code.json │ │ │ ├── inventory_item.json │ │ │ ├── inventory_level.json │ │ │ ├── location.json │ │ │ ├── metafield.json │ │ │ ├── order.json │ │ │ ├── price_rule.json │ │ │ ├── product.json │ │ │ ├── refund.json │ │ │ ├── risk.json │ │ │ ├── transaction.json │ │ │ └── user.json │ │ ├── streams.py │ │ └── tap.py │ └── tox.ini ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-snowflake ├── .snapshots │ ├── TestAddingAndRemovingBindings │ ├── TestBasicDatatypes-discover │ ├── TestBasicDatatypes-init │ ├── TestBasicDatatypes-main │ ├── TestDiscoveryMultiplePrimaryKeys │ ├── TestDiscoveryWithPrimaryKey │ ├── TestDiscoveryWithoutPrimaryKey │ ├── TestDynamicTable-discovery │ ├── TestDynamicTable-initial │ ├── TestDynamicTable-subsequent │ ├── TestLargeCapture │ ├── TestLongTableNames-init │ ├── TestLongTableNames-main │ ├── TestSimpleCapture-init │ ├── TestSimpleCapture-main │ ├── TestSpec │ ├── TestTimestampDatatypes-capture │ ├── TestTimestampDatatypes-discover │ ├── TestVariantDatatypes-capture │ └── TestVariantDatatypes-discover ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── capture.go ├── capture_test.go ├── database.go ├── discovery.go ├── discovery_test.go ├── main.go ├── main_test.go └── prerequisites.go ├── source-sqlserver-batch ├── .snapshots │ ├── TestAsyncCapture-Capture │ ├── TestAsyncCapture-Discovery │ ├── TestBinaryTypes-Capture │ ├── TestBinaryTypes-Discovery │ ├── TestCaptureFromView-Capture │ ├── TestCaptureFromView-DiscoveryWithViews │ ├── TestCaptureFromView-DiscoveryWithoutViews │ ├── TestCaptureWithEmptyPoll-Capture │ ├── TestCaptureWithEmptyPoll-Discovery │ ├── TestCaptureWithTwoColumnCursor-Capture │ ├── TestCaptureWithTwoColumnCursor-Discovery │ ├── TestCaptureWithUpdatedAtCursor-Capture │ ├── TestCaptureWithUpdatedAtCursor-Discovery │ ├── TestDateAndTimeTypes-Capture │ ├── TestDateAndTimeTypes-Discovery │ ├── TestDatetimeLocation-Chicago │ ├── TestDatetimeLocation-ExplicitNegativeOffset │ ├── TestDatetimeLocation-ExplicitPositiveOffset │ ├── TestDatetimeLocation-Tokyo │ ├── TestDatetimeLocation-UTC │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFullRefresh-Capture │ ├── TestFullRefresh-Discovery │ ├── TestIntegerTypes-Capture │ ├── TestIntegerTypes-Discovery │ ├── TestKeyDiscovery │ ├── TestKeylessCapture-Capture │ ├── TestKeylessCapture-Discovery │ ├── TestKeylessFullRefreshCapture-Capture │ ├── TestKeylessFullRefreshCapture-Discovery │ ├── TestModificationsAndDeletions-Capture │ ├── TestModificationsAndDeletions-Discovery │ ├── TestNumericTypes-Capture │ ├── TestNumericTypes-Discovery │ ├── TestQueryTemplates-MultiCursorFirstQuery │ ├── TestQueryTemplates-MultiCursorSubsequentQuery │ ├── TestQueryTemplates-SingleCursorFirstQuery │ ├── TestQueryTemplates-SingleCursorSubsequentQuery │ ├── TestSchemaFilter-FilteredIn │ ├── TestSchemaFilter-FilteredOut │ ├── TestSchemaFilter-Unfiltered │ ├── TestSimpleCapture-Capture │ ├── TestSimpleCapture-Discovery │ ├── TestSpec │ ├── TestStringTypes-Capture │ ├── TestStringTypes-Discovery │ ├── TestUUIDType-Capture │ ├── TestUUIDType-Discovery │ ├── TestXMLType-Capture │ └── TestXMLType-Discovery ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VERSION ├── discovery.go ├── docker-compose.yaml ├── docker-initdb.sh ├── driver.go ├── main.go └── main_test.go ├── source-sqlserver ├── .snapshots │ ├── TestAlterationAddColumn-Automatic │ ├── TestAlterationAddColumn-Manual │ ├── TestAlterationAddColumn-Off │ ├── TestBitNotNullDeletion │ ├── TestCaptureInstanceCleanup-WithDBO │ ├── TestCaptureInstanceCleanup-WithoutDBO │ ├── TestCaptureWithCompoundTextAndIntegerKey │ ├── TestCollatedCapture-Char │ ├── TestCollatedCapture-NChar │ ├── TestCollatedCapture-NVarChar │ ├── TestCollatedCapture-VarChar │ ├── TestColumnNameQuoting │ ├── TestComputedColumn-capture │ ├── TestComputedColumn-discovery │ ├── TestComputedPrimaryKey-capture │ ├── TestComputedPrimaryKey-discovery │ ├── TestDeletedTextColumn-init │ ├── TestDeletedTextColumn-main │ ├── TestDiscoveryIrrelevantConstraints │ ├── TestDroppedAndRecreatedTable │ ├── TestFeatureFlagEmitSourcedSchemas-Default │ ├── TestFeatureFlagEmitSourcedSchemas-Disabled │ ├── TestFeatureFlagEmitSourcedSchemas-Enabled │ ├── TestFilegroupAndRole │ ├── TestGeneric-CatalogPrimaryKey-capture1 │ ├── TestGeneric-CatalogPrimaryKey-capture2 │ ├── TestGeneric-CatalogPrimaryKeyOverride-capture1 │ ├── TestGeneric-CatalogPrimaryKeyOverride-capture2 │ ├── TestGeneric-DuplicatedScanKey │ ├── TestGeneric-EmptyTable-init │ ├── TestGeneric-EmptyTable-main │ ├── TestGeneric-IgnoredStreams-capture1 │ ├── TestGeneric-IgnoredStreams-capture2 │ ├── TestGeneric-KeylessCapture-Backfill │ ├── TestGeneric-KeylessCapture-Replication │ ├── TestGeneric-KeylessDiscovery │ ├── TestGeneric-MissingTable │ ├── TestGeneric-MultipleStreams-capture1 │ ├── TestGeneric-MultipleStreams-capture2 │ ├── TestGeneric-MultipleStreams-capture3 │ ├── TestGeneric-MultipleStreams-capture4 │ ├── TestGeneric-MultipleStreams-capture5 │ ├── TestGeneric-ReplicationDeletes-init │ ├── TestGeneric-ReplicationDeletes-main │ ├── TestGeneric-ReplicationInserts-init │ ├── TestGeneric-ReplicationInserts-main │ ├── TestGeneric-ReplicationOnly-backfill │ ├── TestGeneric-ReplicationOnly-replication │ ├── TestGeneric-ReplicationUpdates-init │ ├── TestGeneric-ReplicationUpdates-main │ ├── TestGeneric-SimpleCapture │ ├── TestGeneric-SimpleDiscovery │ ├── TestGeneric-SpecResponse │ ├── TestGeneric-StressCorrectness │ ├── TestIndexIncludedDiscovery │ ├── TestManyTables-capture1 │ ├── TestManyTables-capture2 │ ├── TestManyTables-init │ ├── TestOversizedFields │ ├── TestPrerequisites-captureAB │ ├── TestPrerequisites-captureABC-fails │ ├── TestPrerequisites-validateAB │ ├── TestPrerequisites-validateABC-fails │ ├── TestPrimaryKeyUpdate │ ├── TestScanKeyTypes-DateTime │ ├── TestScanKeyTypes-DateTimeOffset │ ├── TestScanKeyTypes-Decimal │ ├── TestScanKeyTypes-Integer │ ├── TestScanKeyTypes-Numeric │ ├── TestScanKeyTypes-UniqueIdentifier │ ├── TestSecondaryIndexDiscovery-index_only │ ├── TestSecondaryIndexDiscovery-nonunique_index │ ├── TestSecondaryIndexDiscovery-nothing │ ├── TestSecondaryIndexDiscovery-nullable_index │ ├── TestSecondaryIndexDiscovery-pk_and_index │ ├── TestTextCollation │ ├── TestUUIDCaptureOrder │ └── TestVarcharKeyDiscovery ├── CHANGELOG.md ├── Dockerfile ├── README.md ├── VARIANTS ├── VERSION ├── backfill.go ├── collation.go ├── collation_test.go ├── datatypes.go ├── datatypes_test.go ├── discovery.go ├── discovery_test.go ├── docker-compose.yaml ├── docker-initdb.sh ├── main.go ├── main_test.go ├── prerequisites.go ├── prerequisites_test.go ├── replication.go ├── testdata │ └── statepop.csv └── watermarks.go ├── source-stripe-native ├── acmeCo │ ├── Accounts.schema.yaml │ ├── ApplicationFees.schema.yaml │ ├── ApplicationFeesRefunds.schema.yaml │ ├── BalanceTransactions.schema.yaml │ ├── BankAccounts.schema.yaml │ ├── Cards.schema.yaml │ ├── Charges.schema.yaml │ ├── CheckoutSessions.schema.yaml │ ├── CheckoutSessionsLine.schema.yaml │ ├── Coupons.schema.yaml │ ├── CreditNotes.schema.yaml │ ├── CreditNotesLines.schema.yaml │ ├── CustomerBalanceTransaction.schema.yaml │ ├── Customers.schema.yaml │ ├── Disputes.schema.yaml │ ├── EarlyFraudWarning.schema.yaml │ ├── Events.schema.yaml │ ├── ExternalAccountCards.schema.yaml │ ├── ExternalBankAccount.schema.yaml │ ├── Files.schema.yaml │ ├── FilesLink.schema.yaml │ ├── InvoiceItems.schema.yaml │ ├── InvoiceLineItems.schema.yaml │ ├── Invoices.schema.yaml │ ├── PaymentIntents.schema.yaml │ ├── PaymentMethods.schema.yaml │ ├── Payouts.schema.yaml │ ├── Persons.schema.yaml │ ├── Plans.schema.yaml │ ├── Products.schema.yaml │ ├── PromotionCode.schema.yaml │ ├── Refunds.schema.yaml │ ├── Reviews.schema.yaml │ ├── SetupAttempts.schema.yaml │ ├── SetupIntents.schema.yaml │ ├── SubscriptionItems.schema.yaml │ ├── SubscriptionSchedule.schema.yaml │ ├── Subscriptions.schema.yaml │ ├── TopUps.schema.yaml │ ├── TransferReversals.schema.yaml │ ├── Transfers.schema.yaml │ ├── UsageRecords.schema.yaml │ └── flow.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_stripe_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__stdout.json │ ├── snapshots__discover__stdout.json │ └── snapshots__spec__stdout.json │ └── test_snapshots.py ├── source-test ├── CHANGELOG.md ├── Dockerfile ├── VERSION └── main.go ├── source-twilio ├── VERSION ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_twilio │ ├── __init__.py │ ├── __main__.py │ ├── auth.py │ ├── run.py │ ├── schemas │ │ ├── accounts.json │ │ ├── addresses.json │ │ ├── alerts.json │ │ ├── applications.json │ │ ├── available_phone_number_countries.json │ │ ├── available_phone_numbers_local.json │ │ ├── available_phone_numbers_mobile.json │ │ ├── available_phone_numbers_toll_free.json │ │ ├── calls.json │ │ ├── conference_participants.json │ │ ├── conferences.json │ │ ├── conversation_messages.json │ │ ├── conversation_participants.json │ │ ├── conversations.json │ │ ├── dependent_phone_numbers.json │ │ ├── executions.json │ │ ├── flows.json │ │ ├── incoming_phone_numbers.json │ │ ├── keys.json │ │ ├── message_media.json │ │ ├── messages.json │ │ ├── outgoing_caller_ids.json │ │ ├── queues.json │ │ ├── recordings.json │ │ ├── roles.json │ │ ├── services.json │ │ ├── step.json │ │ ├── transcriptions.json │ │ ├── trunks.json │ │ ├── usage_records.json │ │ ├── usage_triggers.json │ │ ├── user_conversations.json │ │ ├── users.json │ │ └── verify_services.json │ ├── source.py │ ├── spec.json │ └── streams.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_snapshots.py │ ├── test_source.py │ └── test_streams.py ├── source-yahoo-finance ├── __main__.py ├── poetry.lock ├── pyproject.toml ├── source-investing.resource.0.config.yaml └── test.flow.yaml ├── source-zendesk-support-native ├── VERSION ├── acmeCo │ ├── account_attributes.schema.yaml │ ├── articles.schema.yaml │ ├── audit_logs.schema.yaml │ ├── automations.schema.yaml │ ├── brands.schema.yaml │ ├── custom_roles.schema.yaml │ ├── flow.yaml │ ├── group_memberships.schema.yaml │ ├── groups.schema.yaml │ ├── macros.schema.yaml │ ├── organization_memberships.schema.yaml │ ├── organizations.schema.yaml │ ├── post_comment_votes.schema.yaml │ ├── post_comments.schema.yaml │ ├── post_votes.schema.yaml │ ├── posts.schema.yaml │ ├── satisfaction_ratings.schema.yaml │ ├── schedules.schema.yaml │ ├── sla_policies.schema.yaml │ ├── tags.schema.yaml │ ├── ticket_activities.schema.yaml │ ├── ticket_audits.schema.yaml │ ├── ticket_comments.schema.yaml │ ├── ticket_fields.schema.yaml │ ├── ticket_forms.schema.yaml │ ├── ticket_metric_events.schema.yaml │ ├── ticket_metrics.schema.yaml │ ├── ticket_metrics_events.schema.yaml │ ├── ticket_skips.schema.yaml │ ├── tickets.schema.yaml │ ├── topics.schema.yaml │ └── users.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_zendesk_support_native │ ├── __init__.py │ ├── __main__.py │ ├── api.py │ ├── models.py │ └── resources.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ └── test_snapshots.py ├── source-zendesk-support ├── VERSION ├── acmeCo │ ├── attribute_definitions.schema.yaml │ ├── audit_logs.schema.yaml │ ├── brands.schema.yaml │ ├── custom_roles.schema.yaml │ ├── flow.yaml │ ├── macros.schema.yaml │ ├── organization_memberships.schema.yaml │ ├── organizations.schema.yaml │ ├── post_comment_votes.schema.yaml │ ├── post_comments.schema.yaml │ ├── post_votes.schema.yaml │ ├── posts.schema.yaml │ ├── satisfaction_ratings.schema.yaml │ ├── schedules.schema.yaml │ ├── sla_policies.schema.yaml │ ├── ticket_audits.schema.yaml │ ├── ticket_comments.schema.yaml │ ├── ticket_fields.schema.yaml │ ├── ticket_forms.schema.yaml │ ├── ticket_metrics.schema.yaml │ ├── ticket_skips.schema.yaml │ ├── tickets.schema.yaml │ └── users.schema.yaml ├── config.yaml ├── poetry.lock ├── pyproject.toml ├── source_zendesk_support │ ├── ZendeskSupportAvailabilityStrategy.py │ ├── __init__.py │ ├── __main__.py │ ├── schemas │ │ ├── account_attributes.json │ │ ├── attribute_definitions.json │ │ ├── audit_logs.json │ │ ├── brands.json │ │ ├── custom_roles.json │ │ ├── group_memberships.json │ │ ├── groups.json │ │ ├── macros.json │ │ ├── organization_memberships.json │ │ ├── organizations.json │ │ ├── post_comment_votes.json │ │ ├── post_comments.json │ │ ├── post_votes.json │ │ ├── posts.json │ │ ├── satisfaction_ratings.json │ │ ├── schedules.json │ │ ├── shared │ │ │ ├── attachments.json │ │ │ ├── metadata.json │ │ │ ├── via.json │ │ │ ├── via_channel.json │ │ │ └── votes.json │ │ ├── sla_policies.json │ │ ├── tags.json │ │ ├── ticket_audits.json │ │ ├── ticket_comments.json │ │ ├── ticket_fields.json │ │ ├── ticket_forms.json │ │ ├── ticket_metric_events.json │ │ ├── ticket_metrics.json │ │ ├── ticket_skips.json │ │ ├── tickets.json │ │ └── users.json │ ├── source.py │ ├── spec.json │ └── streams.py ├── test.flow.yaml └── tests │ ├── __init__.py │ ├── data.py │ ├── snapshots │ ├── snapshots__capture__capture.stdout.json │ ├── snapshots__discover__capture.stdout.json │ └── snapshots__spec__capture.stdout.json │ ├── test_backoff_on_rate_limit.py │ ├── test_futures.py │ ├── test_snapshots.py │ ├── unit_test.py │ └── utils.py ├── sqlcapture ├── capture.go ├── discovery.go ├── discovery_test.go ├── interface.go ├── main.go ├── tests │ ├── datatypes.go │ ├── helpers.go │ ├── interface.go │ └── tests.go └── tuples.go ├── tests ├── README.md ├── files │ ├── a.csv.zip │ ├── b.csv │ ├── c.csv.gz │ └── d.jsonl ├── materialize │ ├── empty.fixture.json │ ├── empty.flow.json.template │ ├── fixture.json │ ├── flow.json.template │ ├── materialize-azure-fabric-warehouse │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch-data.go │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-bigquery │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch-data.go │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-cratedb │ │ ├── cleanup.sh │ │ ├── fetch.sh │ │ └── setup.sh │ ├── materialize-databricks │ │ ├── checks.sh │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch-data.go │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-dynamodb │ │ ├── cleanup.sh │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-elasticsearch │ │ ├── cleanup.sh │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-firebolt │ │ ├── checks.sh │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch-data.go │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-google-sheets │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch.sh │ │ ├── setup.sh │ │ ├── sheet-helper.go │ │ └── snapshot.json │ ├── materialize-iceberg │ │ ├── checks.sh │ │ ├── cleanup.sh │ │ ├── config.glue.yaml │ │ ├── config.rest.yaml │ │ ├── config.s3tables.yaml │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-kafka │ │ ├── cleanup.sh │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-mongodb │ │ ├── cleanup.sh │ │ ├── expected │ │ │ ├── duplicated-keys-delta.jsonl │ │ │ ├── duplicated-keys-standard.jsonl │ │ │ └── simple.jsonl │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-motherduck │ │ ├── cleanup.sh │ │ ├── config.gcs.yaml │ │ ├── config.s3.yaml │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-mysql │ │ ├── checks.sh │ │ ├── cleanup.sh │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-pinecone │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch-data.go │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-postgres │ │ ├── cleanup.sh │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-redshift │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch-data.go │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-s3-iceberg │ │ ├── checks.sh │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-s3-parquet │ │ ├── cleanup.sh │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-snowflake │ │ ├── checks.sh │ │ ├── cleanup.sh │ │ ├── config.yaml │ │ ├── fetch-data.go │ │ ├── fetch.sh │ │ ├── setup.sh │ │ └── snapshot.json │ ├── materialize-sqlserver │ │ ├── cleanup.sh │ │ ├── fetch.sh │ │ ├── query.go │ │ ├── setup.sh │ │ └── snapshot.json │ └── run.sh ├── run.sh ├── source-dynamodb │ ├── cleanup.sh │ ├── data.jsonl │ ├── expected.txt │ └── setup.sh ├── source-gcs │ ├── cleanup.sh │ ├── expected.txt │ └── setup.sh ├── source-kafka │ ├── cleanup.sh │ ├── expected.txt │ └── setup.sh ├── source-kinesis │ ├── cleanup.sh │ ├── expected.txt │ └── setup.sh ├── source-mysql │ ├── cleanup.sh │ ├── expected.txt │ └── setup.sh ├── source-postgres │ ├── cleanup.sh │ ├── expected.txt │ └── setup.sh ├── source-s3 │ ├── cleanup.sh │ ├── config.json.template │ ├── config.yaml.template │ ├── expected.txt │ └── setup.sh ├── source-sftp │ ├── cleanup.sh │ ├── expected.txt │ ├── setup.sh │ └── wait_for_server.go ├── source-sqlserver │ ├── cleanup.sh │ ├── expected.txt │ └── setup.sh └── template.flow.yaml └── testsupport └── build_catalog.go /.docker-cache/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/.docker-cache/.keep -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "[python]": { 3 | "editor.defaultFormatter": "ms-python.black-formatter" 4 | }, 5 | "files.exclude": { 6 | "**/*.pyc": {"when": "$(basename).py"}, 7 | "**/.mypy_cache": true, 8 | "**/.pytest_cache": true, 9 | "**/__pycache__": true, 10 | }, 11 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This repository uses different licenses for different directories. 2 | 3 | Individual connector directories may represent "forks" of open-source connectors, 4 | and each such directory will include an individual `origin.json` file 5 | as well as any accompanying LICENSE files. 6 | 7 | Where not otherwise noted, all works in this repository are available under the BSL license in LICENSE-BSL. 8 | Given written consent from the Estuary team, the Apache 2.0 license AND MIT LICENSE in LICENSE-APACHE AND LICENSE-MIT 9 | may be used. 10 | -------------------------------------------------------------------------------- /base-image/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /connector-variant.Dockerfile: -------------------------------------------------------------------------------- 1 | # This dockerfile is a simple extension of a BASE_CONNECTOR dockerfile to allow for building a 2 | # variant of that base connector with an alternate documentation URL specified via the DOCS_URL 3 | # build argument. The connector must support optionally reading the DOCS_URL environment variable 4 | # for its spec response. 5 | 6 | ARG BASE_CONNECTOR 7 | FROM --platform=linux/amd64 ${BASE_CONNECTOR} 8 | ARG DOCS_URL 9 | ENV DOCS_URL="${DOCS_URL}" 10 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # D O C S 2 | 3 | This is documentation related to connectors. 4 | 5 | - [Materializations](materialize/README.md) 6 | - [Inbound networking](inbound_networking.md) 7 | 8 | -------------------------------------------------------------------------------- /estuary-cdk/estuary_cdk/capture/__init__.py: -------------------------------------------------------------------------------- 1 | from .task import Request, Response, Task 2 | from .base_capture_connector import BaseCaptureConnector 3 | 4 | __all__ = [ 5 | "Request", 6 | "Response", 7 | "Task", 8 | "BaseCaptureConnector", 9 | ] 10 | -------------------------------------------------------------------------------- /estuary-cdk/estuary_cdk/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/estuary-cdk/estuary_cdk/py.typed -------------------------------------------------------------------------------- /estuary-cdk/estuary_cdk/requests_session_send_patch.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | # Airbyte's CDK does not set a timeout for HTTP requests, so we patch it to always have a timeout. 4 | 5 | DEFAULT_TIMEOUT = 60 * 60 * 2 # 2 hours 6 | 7 | lib_send = requests.Session.send 8 | 9 | def send(*args, **kwargs): 10 | if kwargs.get("timeout", None) is None: 11 | kwargs["timeout"] = DEFAULT_TIMEOUT 12 | 13 | return lib_send(*args, **kwargs) 14 | 15 | setattr(requests.Session, "send", send) 16 | -------------------------------------------------------------------------------- /estuary-cdk/estuary_cdk/utils.py: -------------------------------------------------------------------------------- 1 | from collections.abc import Mapping 2 | from typing import Any 3 | 4 | def sort_dict(obj: Any) -> Any: 5 | if isinstance(obj, Mapping): 6 | return {k: sort_dict(v) for k, v in sorted(obj.items())} 7 | if isinstance(obj, list): 8 | return [sort_dict(item) for item in obj] 9 | return obj 10 | -------------------------------------------------------------------------------- /estuary-cdk/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/estuary-cdk/tests/__init__.py -------------------------------------------------------------------------------- /estuary-cdk/tests/test_airbyte_cdk.py: -------------------------------------------------------------------------------- 1 | from estuary_cdk.shim_airbyte_cdk import transform_airbyte_key 2 | 3 | def test_transform_airbyte_key(): 4 | assert transform_airbyte_key("pizza") == ["pizza"] 5 | assert transform_airbyte_key("piz/za") == ["piz~1za"] 6 | assert transform_airbyte_key(["piz/za"]) == ["piz~1za"] 7 | assert transform_airbyte_key(["piz/za", "par~ty"]) == ["piz~1za", "par~0ty"] 8 | assert transform_airbyte_key([["pizza", "che/ese"], "potato"]) == [ 9 | "pizza/che~1ese", "potato" 10 | ] 11 | -------------------------------------------------------------------------------- /fetch-flow.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Fetches the latest binary release of Flow and writes the binaries to the `flow-bin/` directory. 4 | # The release name is read from the `FLOW_RELEASE` env variable, but it defaults to "dev". 5 | 6 | FLOW_RELEASE="${FLOW_RELEASE:-dev}" 7 | mkdir -p flow-bin 8 | rm -f flow-bin/* 9 | cd flow-bin && curl -L --proto '=https' --tlsv1.2 -sSf "https://github.com/estuary/flow/releases/download/${FLOW_RELEASE}/flow-x86-linux.tar.gz" | tar -zx 10 | -------------------------------------------------------------------------------- /filesource/filesource_test.go: -------------------------------------------------------------------------------- 1 | package filesource 2 | 3 | import ( 4 | "testing" 5 | 6 | "github.com/stretchr/testify/require" 7 | ) 8 | 9 | func TestPathParts(t *testing.T) { 10 | var bucket, key = PathToParts("foo/bar/baz") 11 | require.Equal(t, bucket, "foo") 12 | require.Equal(t, key, "bar/baz") 13 | 14 | require.Equal(t, "foo/bar/baz/", PartsToPath("foo", "bar/baz/")) 15 | } 16 | -------------------------------------------------------------------------------- /go/protocols/materialize/testdata/.gitignore: -------------------------------------------------------------------------------- 1 | temp.db -------------------------------------------------------------------------------- /go/protocols/materialize/testdata/materialization.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/go/protocols/materialize/testdata/materialization.proto -------------------------------------------------------------------------------- /materialize-azure-blob-parquet/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /materialize-azure-fabric-warehouse/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-azure-fabric-warehouse/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import boilerplate "github.com/estuary/connectors/materialize-boilerplate" 4 | 5 | func main() { 6 | boilerplate.RunMain(newDriver()) 7 | } 8 | -------------------------------------------------------------------------------- /materialize-bigquery/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-bigquery 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-bigquery/VERSION: -------------------------------------------------------------------------------- 1 | v3 2 | -------------------------------------------------------------------------------- /materialize-bigquery/cmd/connector/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | connector "github.com/estuary/connectors/materialize-bigquery" 5 | boilerplate "github.com/estuary/connectors/materialize-boilerplate" 6 | ) 7 | 8 | func main() { 9 | boilerplate.RunMain(connector.Driver()) 10 | } 11 | -------------------------------------------------------------------------------- /materialize-boilerplate/schedule_config_test.go: -------------------------------------------------------------------------------- 1 | package boilerplate 2 | 3 | import ( 4 | "encoding/json" 5 | "testing" 6 | 7 | "github.com/bradleyjkemp/cupaloy" 8 | schemagen "github.com/estuary/connectors/go/schema-gen" 9 | "github.com/stretchr/testify/require" 10 | ) 11 | 12 | func TestScheduleConfigSchema(t *testing.T) { 13 | schema := schemagen.GenerateSchema("ScheduleConfig", ScheduleConfig{}) 14 | formatted, err := json.MarshalIndent(schema, "", " ") 15 | require.NoError(t, err) 16 | cupaloy.SnapshotT(t, formatted) 17 | } 18 | -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/_base-collection.flow.yaml: -------------------------------------------------------------------------------- 1 | collections: 2 | key/value: 3 | schema: 4 | type: object 5 | properties: 6 | key: { type: string } 7 | requiredVal1: { type: string } 8 | optionalVal1: { type: integer } 9 | requiredVal2: { type: string } 10 | optionalVal2: { type: integer } 11 | required: [key, requiredVal1, requiredVal2] 12 | key: [/key] 13 | -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/base.flow.yaml: -------------------------------------------------------------------------------- 1 | import: 2 | - _base-collection.flow.yaml 3 | 4 | materializations: 5 | test/sqlite: 6 | endpoint: 7 | connector: 8 | image: ghcr.io/estuary/materialize-sqlite:dev 9 | config: {} 10 | bindings: 11 | - source: key/value 12 | resource: { table: key_value } 13 | fields: 14 | recommended: false 15 | include: 16 | key: {} 17 | requiredVal1: {} 18 | optionalVal1: {} 19 | -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/generated_specs/add-new-binding.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/apply/generated_specs/add-new-binding.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/generated_specs/add-new-required.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/apply/generated_specs/add-new-required.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/generated_specs/base.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/apply/generated_specs/base.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/generated_specs/make-nullable.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/apply/generated_specs/make-nullable.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/generated_specs/remove-required.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/apply/generated_specs/remove-required.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/generated_specs/replace-original-binding.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/apply/generated_specs/replace-original-binding.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/apply/remove-required.flow.yaml: -------------------------------------------------------------------------------- 1 | import: 2 | - _base-collection.flow.yaml 3 | 4 | materializations: 5 | test/sqlite: 6 | endpoint: 7 | connector: 8 | image: ghcr.io/estuary/materialize-sqlite:dev 9 | config: {} 10 | bindings: 11 | - source: key/value 12 | resource: { table: key_value } 13 | fields: 14 | recommended: false 15 | include: 16 | key: {} 17 | optionalVal1: {} 18 | -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/alternate-root.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/alternate-root.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/ambiguous-fields-incompatible.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/ambiguous-fields-incompatible.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/ambiguous-fields.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/ambiguous-fields.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/ambiguous-key.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/ambiguous-key.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/base.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/base.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/fewer-fields.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/fewer-fields.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/incompatible-changes.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/incompatible-changes.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/increment-backfill.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/increment-backfill.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/key-subset.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/key-subset.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/long-fields.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/long-fields.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate/generated_specs/nullable-key.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate/generated_specs/nullable-key.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/add-and-remove-many.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/add-and-remove-many.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/add-single-optional.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/add-single-optional.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/base.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/base.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/big-schema-changed.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/big-schema-changed.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/big-schema-nullable.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/big-schema-nullable.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/big-schema.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/big-schema.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/challenging-fields.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/challenging-fields.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/remove-single-optional.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/remove-single-optional.flow.proto -------------------------------------------------------------------------------- /materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/remove-single-required.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-boilerplate/testdata/validate_apply_test_cases/generated_specs/remove-single-required.flow.proto -------------------------------------------------------------------------------- /materialize-cratedb/.snapshots/TestConfigURI-Basic: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-cratedb/.snapshots/TestConfigURI-IncorrectSSL: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb?sslmode=whoops-this-isnt-right 2 | invalid 'sslmode' configuration: unknown setting "whoops-this-isnt-right" 3 | -------------------------------------------------------------------------------- /materialize-cratedb/.snapshots/TestConfigURI-RequireSSL: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb?sslmode=verify-full 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-cratedb/CHANGELOG.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-cratedb/CHANGELOG.md -------------------------------------------------------------------------------- /materialize-cratedb/VARIANTS: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-cratedb/VARIANTS -------------------------------------------------------------------------------- /materialize-cratedb/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /materialize-cratedb/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | services: 2 | cratedb: 3 | image: crate:latest 4 | ports: 5 | - "4200:4200" 6 | - "5432:5432" 7 | networks: 8 | - flow-test 9 | environment: 10 | - CRATE_HEAP_SIZE=1g 11 | networks: 12 | flow-test: 13 | name: flow-test 14 | external: true -------------------------------------------------------------------------------- /materialize-databricks/VERSION: -------------------------------------------------------------------------------- 1 | v3 2 | -------------------------------------------------------------------------------- /materialize-databricks/reserved_words.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | // https://docs.databricks.com/en/sql/language-manual/sql-ref-reserved-words.html 4 | var DATABRICKS_RESERVED_WORDS = []string{ 5 | "anti", 6 | "cross", 7 | "except", 8 | "full", 9 | "inner", 10 | "intersect", 11 | "join", 12 | "lateral", 13 | "left", 14 | "minus", 15 | "natural", 16 | "on", 17 | "right", 18 | "semi", 19 | "union", 20 | "using", 21 | "null", 22 | "default", 23 | "true", 24 | "false", 25 | "lateral", 26 | } 27 | 28 | -------------------------------------------------------------------------------- /materialize-dynamodb/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-dynamodb 2 | 3 | ## v1, 2023-08-25 4 | 5 | - Beginning of changelog. 6 | -------------------------------------------------------------------------------- /materialize-dynamodb/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-dynamodb/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '3.7' 2 | 3 | services: 4 | db: 5 | image: "amazon/dynamodb-local:latest" 6 | command: "-jar DynamoDBLocal.jar -sharedDb" 7 | ports: 8 | - "8000:8000" 9 | networks: 10 | - flow-test 11 | 12 | networks: 13 | flow-test: 14 | name: flow-test 15 | external: true 16 | -------------------------------------------------------------------------------- /materialize-dynamodb/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | boilerplate "github.com/estuary/connectors/materialize-boilerplate" 5 | ) 6 | 7 | func main() { 8 | boilerplate.RunMain(driver{}) 9 | } 10 | -------------------------------------------------------------------------------- /materialize-elasticsearch/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-elasticsearch 2 | 3 | ## v3, 2023-08-21 4 | - Create index mappings based on field selection. 5 | - Move "number of replicas" configuration for new indices to an advanced, optional, endpoint-level configuration. 6 | - Make "number of shards" resource configuration optional. 7 | 8 | ## v2, 2023-04-24 9 | - Use dynamic runtime mappings. 10 | - Allow authentication using API keys. 11 | 12 | ## v1, 2022-07-27 13 | - Beginning of changelog. 14 | -------------------------------------------------------------------------------- /materialize-elasticsearch/VERSION: -------------------------------------------------------------------------------- 1 | v3 2 | -------------------------------------------------------------------------------- /materialize-firebolt/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-firebolt 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-firebolt/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-gcs-csv/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /materialize-gcs-parquet/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /materialize-google-pubsub/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-google-pubsub 2 | 3 | -------------------------------------------------------------------------------- /materialize-google-pubsub/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-google-pubsub/cmd/connector/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "os" 5 | 6 | boilerplate "github.com/estuary/connectors/materialize-boilerplate" 7 | connector "github.com/estuary/connectors/materialize-google-pubsub" 8 | "github.com/sirupsen/logrus" 9 | ) 10 | 11 | func main() { 12 | logrus.SetOutput(os.Stderr) 13 | logrus.SetLevel(logrus.InfoLevel) 14 | boilerplate.RunMain(connector.Driver()) 15 | } 16 | -------------------------------------------------------------------------------- /materialize-google-sheets/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-google-sheets 2 | 3 | ## v2, 2022-09-16 4 | 5 | - Add OAuth 2.0 authentication option. 6 | 7 | ## v1, 2022-07-27 8 | 9 | - Beginning of changelog. 10 | -------------------------------------------------------------------------------- /materialize-google-sheets/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /materialize-iceberg/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /materialize-iceberg/cmd/connector/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | boilerplate "github.com/estuary/connectors/materialize-boilerplate" 5 | connector "github.com/estuary/connectors/materialize-iceberg" 6 | ) 7 | 8 | func main() { 9 | boilerplate.RunMain(new(connector.Driver)) 10 | } 11 | -------------------------------------------------------------------------------- /materialize-iceberg/python/exec.py: -------------------------------------------------------------------------------- 1 | from common import ( 2 | common_args, 3 | get_spark_session, 4 | run_with_status, 5 | ) 6 | 7 | args = common_args() 8 | spark = get_spark_session(args) 9 | 10 | 11 | def run(input): 12 | query = input["query"] 13 | 14 | try: 15 | spark.sql(query) 16 | except Exception as e: 17 | raise RuntimeError( 18 | f"Running exec query failed:\n{query}\nOriginal Error:\n{str(e)}" 19 | ) from e 20 | 21 | 22 | run_with_status(args, run) 23 | -------------------------------------------------------------------------------- /materialize-iceberg/python/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "materialize-iceberg" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Will Baker "] 6 | package-mode = false 7 | 8 | [tool.poetry.dependencies] 9 | python = "^3.12" 10 | pyspark = "^3.5.4" 11 | botocore = "^1.37.0" 12 | boto3 = "^1.37.2" 13 | 14 | 15 | [build-system] 16 | requires = ["poetry-core"] 17 | build-backend = "poetry.core.masonry.api" 18 | -------------------------------------------------------------------------------- /materialize-kafka/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-mongodb/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-mongodb 2 | 3 | ## v1, 2023-03-01 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-mongodb/README.md: -------------------------------------------------------------------------------- 1 | materialize-mongodb 2 | ==================== 3 | 4 | Flow Materialization for [MongoDB](https://mongodb.com). 5 | -------------------------------------------------------------------------------- /materialize-mongodb/VARIANTS: -------------------------------------------------------------------------------- 1 | materialize-cosmosdb-mongodb -------------------------------------------------------------------------------- /materialize-mongodb/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-motherduck/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-motherduck 2 | 3 | ## v1, 2023-10-31 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-motherduck/VERSION: -------------------------------------------------------------------------------- 1 | v4 2 | -------------------------------------------------------------------------------- /materialize-motherduck/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import boilerplate "github.com/estuary/connectors/materialize-boilerplate" 4 | 5 | func main() { 6 | boilerplate.RunMain(newDuckDriver()) 7 | } 8 | -------------------------------------------------------------------------------- /materialize-mysql/.snapshots/TestConfigURI-Basic: -------------------------------------------------------------------------------- 1 | will:secret1234@tcp(example.com:3306)/somedb 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-mysql/.snapshots/TestConfigURI-IncorrectSSL: -------------------------------------------------------------------------------- 1 | will:secret1234@tcp(example.com:3306)/somedb 2 | invalid 'sslmode' configuration: unknown setting "whoops-this-isnt-right" 3 | -------------------------------------------------------------------------------- /materialize-mysql/.snapshots/TestConfigURI-RequireSSL: -------------------------------------------------------------------------------- 1 | will:secret1234@tcp(example.com:3306)/somedb?tls=preferred 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-mysql/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-mysql 2 | 3 | ## v1, 2023-08-01 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-mysql/VARIANTS: -------------------------------------------------------------------------------- 1 | materialize-amazon-aurora-mysql 2 | materialize-mariadb 3 | materialize-mysql-heatwave 4 | materialize-google-cloud-sql-mysql 5 | materialize-amazon-rds-mysql 6 | materialize-amazon-rds-mariadb -------------------------------------------------------------------------------- /materialize-mysql/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /materialize-mysql/testdata/apply-changes.flow.yaml: -------------------------------------------------------------------------------- 1 | collections: 2 | key/value: 3 | schema: 4 | type: object 5 | properties: 6 | key: { type: string } 7 | required: [key] 8 | key: [/key] 9 | 10 | materializations: 11 | test/sqlite: 12 | endpoint: 13 | connector: 14 | image: ghcr.io/estuary/materialize-sqlite:dev 15 | config: {} 16 | bindings: 17 | - source: key/value 18 | resource: { table: key_value } 19 | fields: 20 | recommended: true 21 | -------------------------------------------------------------------------------- /materialize-mysql/testdata/generated_specs/apply-changes.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-mysql/testdata/generated_specs/apply-changes.flow.proto -------------------------------------------------------------------------------- /materialize-pinecone/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-pinecone 2 | 3 | ## v1, 2023-05-23 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-pinecone/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-postgres/.snapshots/TestConfigURI-Basic: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-postgres/.snapshots/TestConfigURI-IncorrectSSL: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb?sslmode=whoops-this-isnt-right 2 | invalid 'sslmode' configuration: unknown setting "whoops-this-isnt-right" 3 | -------------------------------------------------------------------------------- /materialize-postgres/.snapshots/TestConfigURI-RequireSSL: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb?sslmode=verify-full 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-postgres/VARIANTS: -------------------------------------------------------------------------------- 1 | materialize-timescaledb 2 | materialize-alloydb 3 | materialize-amazon-aurora-postgres 4 | materialize-google-cloud-sql-postgres 5 | materialize-amazon-rds-postgres -------------------------------------------------------------------------------- /materialize-postgres/VERSION: -------------------------------------------------------------------------------- 1 | v5 2 | -------------------------------------------------------------------------------- /materialize-redshift/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-redshift 2 | 3 | ## v1, 2023-03-10 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-redshift/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /materialize-redshift/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import boilerplate "github.com/estuary/connectors/materialize-boilerplate" 4 | 5 | func main() { 6 | boilerplate.RunMain(newRedshiftDriver()) 7 | } 8 | -------------------------------------------------------------------------------- /materialize-s3-csv/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /materialize-s3-iceberg/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /materialize-s3-parquet/VERSION: -------------------------------------------------------------------------------- 1 | v3 -------------------------------------------------------------------------------- /materialize-slack/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-slack 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-slack/README.md: -------------------------------------------------------------------------------- 1 | Flow Slack Materialization Connector 2 | ==================================== 3 | 4 | This is a Flow materialization connector which sends messages to 5 | Slack channels. -------------------------------------------------------------------------------- /materialize-slack/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-snowflake/.snapshots/TestConfigURI-Optional_Parameters: -------------------------------------------------------------------------------- 1 | alex:mysecret@orgname-accountname.snowflakecomputing.com:443?GO_QUERY_RESULT_FORMAT=json&MULTI_STATEMENT_COUNT=0&account=myaccount&application=mytenant_EstuaryFlow&client_session_keep_alive=true&database=mydb&role=myrole&schema=myschema&warehouse=mywarehouse 2 | -------------------------------------------------------------------------------- /materialize-snowflake/.snapshots/TestConfigURI-User_&_Password_Authentication: -------------------------------------------------------------------------------- 1 | will:some%2Bcomplex%2Fpassword@orgname-accountname.snowflakecomputing.com:443?GO_QUERY_RESULT_FORMAT=json&MULTI_STATEMENT_COUNT=0&application=mytenant_EstuaryFlow&client_session_keep_alive=true&database=mydb&schema=myschema 2 | -------------------------------------------------------------------------------- /materialize-snowflake/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-snowflake 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-snowflake/VERSION: -------------------------------------------------------------------------------- 1 | v4 2 | -------------------------------------------------------------------------------- /materialize-sql/testdata/generated_specs/flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-sql/testdata/generated_specs/flow.proto -------------------------------------------------------------------------------- /materialize-sql/testdata/validate/generated_specs/base.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-sql/testdata/validate/generated_specs/base.flow.proto -------------------------------------------------------------------------------- /materialize-sql/testdata/validate/generated_specs/migratable-changes.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-sql/testdata/validate/generated_specs/migratable-changes.flow.proto -------------------------------------------------------------------------------- /materialize-sqlite/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-sqlite 2 | 3 | ## v1, 2023-03-10 4 | 5 | - Beginning of changelog. 6 | -------------------------------------------------------------------------------- /materialize-sqlite/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /materialize-sqlite/init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | datasette serve --host 0.0.0.0 --immutable /tmp/sqlite.db &>/dev/null & disown; 4 | 5 | exec "$@" 6 | -------------------------------------------------------------------------------- /materialize-sqlserver/.snapshots/TestConfigURI-Basic: -------------------------------------------------------------------------------- 1 | sqlserver://will:secret1234@example.com:1433?TrustServerCertificate=true&app+name=Flow+Materialization+Connector&database=somedb&encrypt=true 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-sqlserver/.snapshots/TestConfigURI-IncorrectSSL: -------------------------------------------------------------------------------- 1 | sqlserver://will:secret1234@example.com:1433?TrustServerCertificate=true&app+name=Flow+CDC+Connector&database=somedb&encrypt=true 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-sqlserver/.snapshots/TestConfigURI-RequireSSL: -------------------------------------------------------------------------------- 1 | sqlserver://will:secret1234@example.com:1433?TrustServerCertificate=true&app+name=Flow+CDC+Connector&database=somedb&encrypt=true 2 | config valid 3 | -------------------------------------------------------------------------------- /materialize-sqlserver/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-sqlserver 2 | 3 | ## v1, 2023-09-01 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-sqlserver/VARIANTS: -------------------------------------------------------------------------------- 1 | materialize-google-cloud-sql-sqlserver 2 | materialize-azure-sqlserver 3 | materialize-amazon-rds-sqlserver -------------------------------------------------------------------------------- /materialize-sqlserver/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /materialize-sqlserver/testdata/apply-changes.flow.yaml: -------------------------------------------------------------------------------- 1 | collections: 2 | key/value: 3 | schema: 4 | type: object 5 | properties: 6 | key: { type: string } 7 | required: [key] 8 | key: [/key] 9 | 10 | materializations: 11 | test/sqlite: 12 | endpoint: 13 | connector: 14 | image: ghcr.io/estuary/materialize-sqlite:dev 15 | config: {} 16 | bindings: 17 | - source: key/value 18 | resource: { table: key_value } 19 | fields: 20 | recommended: true 21 | -------------------------------------------------------------------------------- /materialize-sqlserver/testdata/generated_specs/apply-changes.flow.proto: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/materialize-sqlserver/testdata/generated_specs/apply-changes.flow.proto -------------------------------------------------------------------------------- /materialize-starburst/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /materialize-webhook/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # materialize-webhook 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /materialize-webhook/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /poetry.toml: -------------------------------------------------------------------------------- 1 | [virtualenvs] 2 | # This configures Poetry to create virtual environments inside each 3 | # module (i.e connector), instead of creating one that you have to constantly 4 | # recreate and switch between. 5 | in-project = true 6 | -------------------------------------------------------------------------------- /python/activate.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | set -x 7 | 8 | ROOTDIR="$(git rev-parse --show-toplevel)" 9 | CONNECTOR=$1 10 | 11 | poetry --directory ${ROOTDIR}/${CONNECTOR} install --no-root 12 | poetry --directory ${ROOTDIR}/${CONNECTOR} shell -------------------------------------------------------------------------------- /python/flow_sdk/derive/response.py: -------------------------------------------------------------------------------- 1 | from .. import flow 2 | import typing as t 3 | 4 | class ValidatedTransform(t.TypedDict): 5 | readOnly: bool 6 | 7 | class Validated(t.TypedDict): 8 | transforms: t.List[ValidatedTransform] 9 | generatedFiles: dict[str, str] 10 | 11 | class Opened(t.TypedDict): 12 | pass 13 | 14 | class Published(t.TypedDict): 15 | doc: dict 16 | 17 | class Flushed(t.TypedDict): 18 | pass 19 | 20 | class StartedCommit(t.TypedDict): 21 | state: flow.ConnectorState -------------------------------------------------------------------------------- /python/py.typed: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/python/py.typed -------------------------------------------------------------------------------- /scripts/bulk-config-editor.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | TMP="$(mktemp -d)" 4 | DIR="$(dirname $0)" 5 | NAME="$(basename $0 .sh)" 6 | trap "rm -rf '$TMP'" EXIT 7 | go build -C "$DIR/$NAME" -o "$TMP/$NAME" . 8 | "$TMP/$NAME" $@ 9 | -------------------------------------------------------------------------------- /scripts/bulk-publish.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | TMP="$(mktemp -d)" 4 | DIR="$(dirname $0)" 5 | NAME="$(basename $0 .sh)" 6 | trap "rm -rf '$TMP'" EXIT 7 | go build -C "$DIR/$NAME" -o "$TMP/$NAME" . 8 | "$TMP/$NAME" $@ 9 | -------------------------------------------------------------------------------- /scripts/list-tasks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | TMP="$(mktemp -d)" 4 | DIR="$(dirname $0)" 5 | NAME="$(basename $0 .sh)" 6 | trap "rm -rf '$TMP'" EXIT 7 | go build -C "$DIR/$NAME" -o "$TMP/$NAME" . 8 | "$TMP/$NAME" $@ 9 | -------------------------------------------------------------------------------- /source-airtable/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-airtable/acmeCo/flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | import: 3 | - test_base/flow.yaml 4 | -------------------------------------------------------------------------------- /source-airtable/acmeCo/test_base/flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | import: 3 | - pizzas/flow.yaml 4 | - soups/flow.yaml 5 | -------------------------------------------------------------------------------- /source-airtable/source_airtable/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2021 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | from .source import SourceAirtable 7 | 8 | __all__ = ["SourceAirtable"] 9 | -------------------------------------------------------------------------------- /source-airtable/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-airtable/tests/__init__.py -------------------------------------------------------------------------------- /source-alpaca/.snapshots/TestLargeCapture: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Collection "acmeCo/test/trades": 228905 Documents 3 | # ================================ 4 | Checksum: 964cc712661bab9ddb51fae85cd841cc55405ec46db8cd7b476887c130752af6 5 | # ================================ 6 | # Final State Checkpoint 7 | # ================================ 8 | {"bindingStateV1":{"trades":"2022-12-17T00:00:00Z"}} 9 | 10 | -------------------------------------------------------------------------------- /source-alpaca/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## v1, 2022-12-21 2 | - Beginning of changelog. 3 | -------------------------------------------------------------------------------- /source-alpaca/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-asana/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-asana/source_asana/schemas/attachments_compact.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": ["object"], 3 | "required": ["gid"], 4 | "properties": { 5 | "gid": { 6 | "type": "string" 7 | }, 8 | "resource_type": { 9 | "type": ["null", "string"] 10 | }, 11 | "name": { 12 | "type": ["null", "string"] 13 | }, 14 | "resource_subtype": { 15 | "type": ["null", "string"] 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /source-asana/source_asana/schemas/portfolios_compact.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": ["object"], 3 | "required": ["gid"], 4 | "properties": { 5 | "gid": { 6 | "type": "string" 7 | }, 8 | "resource_type": { 9 | "type": ["null", "string"] 10 | }, 11 | "name": { 12 | "type": ["null", "string"] 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /source-asana/source_asana/schemas/sections_compact.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": ["object"], 3 | "required": ["gid"], 4 | "properties": { 5 | "gid": { 6 | "type": "string" 7 | }, 8 | "resource_type": { 9 | "type": ["null", "string"] 10 | }, 11 | "name": { 12 | "type": ["null", "string"] 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /source-asana/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-asana/tests/__init__.py -------------------------------------------------------------------------------- /source-azure-blob-storage/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-bigquery-batch/.snapshots/TestQueryTemplate-FirstNoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `testdata`.`foobar`; 2 | -------------------------------------------------------------------------------- /source-bigquery-batch/.snapshots/TestQueryTemplate-FirstOneCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `testdata`.`foobar` 2 | ORDER BY `ka`; 3 | -------------------------------------------------------------------------------- /source-bigquery-batch/.snapshots/TestQueryTemplate-FirstThreeCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `testdata`.`foobar` 2 | ORDER BY `ka`, `kb`, `kc`; 3 | -------------------------------------------------------------------------------- /source-bigquery-batch/.snapshots/TestQueryTemplate-FirstTwoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `testdata`.`foobar` 2 | ORDER BY `ka`, `kb`; 3 | -------------------------------------------------------------------------------- /source-bigquery-batch/.snapshots/TestQueryTemplate-SubsequentNoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `testdata`.`foobar`; 2 | -------------------------------------------------------------------------------- /source-bigquery-batch/.snapshots/TestQueryTemplate-SubsequentOneCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `testdata`.`foobar` WHERE (`ka` > @p0) 2 | ORDER BY `ka`; 3 | -------------------------------------------------------------------------------- /source-bigquery-batch/.snapshots/TestQueryTemplate-SubsequentThreeCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `testdata`.`foobar` WHERE (`ka` > @p0) OR (`ka` = @p0 AND `kb` > @p1) OR (`ka` = @p0 AND `kb` = @p1 AND `kc` > @p2) 2 | ORDER BY `ka`, `kb`, `kc`; 3 | -------------------------------------------------------------------------------- /source-bigquery-batch/.snapshots/TestQueryTemplate-SubsequentTwoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `testdata`.`foobar` WHERE (`ka` > @p0) OR (`ka` = @p0 AND `kb` > @p1) 2 | ORDER BY `ka`, `kb`; 3 | -------------------------------------------------------------------------------- /source-bigquery-batch/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-bigquery-batch 2 | 3 | ## v1, 2023-11-13 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-bigquery-batch/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-braintree-native/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-braintree-native/source_braintree_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_braintree_native 3 | 4 | asyncio.run(source_braintree_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-braintree-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-braintree-native/tests/__init__.py -------------------------------------------------------------------------------- /source-brevo/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-brevo/source_brevo/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2024 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | from .source import SourceBrevo 7 | 8 | __all__ = ["SourceBrevo"] 9 | -------------------------------------------------------------------------------- /source-brevo/source_brevo/__main__.py: -------------------------------------------------------------------------------- 1 | import estuary_cdk.pydantic_polyfill # Must be first. 2 | import estuary_cdk.requests_session_send_patch # Must be second. 3 | 4 | import asyncio 5 | 6 | from estuary_cdk import flow, shim_airbyte_cdk 7 | 8 | from source_brevo import SourceBrevo 9 | 10 | asyncio.run( 11 | shim_airbyte_cdk.CaptureShim( 12 | delegate=SourceBrevo(), 13 | oauth2=None, 14 | schema_inference=True, 15 | ).serve() 16 | ) -------------------------------------------------------------------------------- /source-brevo/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-brevo/tests/__init__.py -------------------------------------------------------------------------------- /source-chargebee-native/source_chargebee_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_chargebee_native 3 | 4 | asyncio.run(source_chargebee_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-chargebee-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-chargebee-native/tests/__init__.py -------------------------------------------------------------------------------- /source-criteo/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-criteo/__main__.py: -------------------------------------------------------------------------------- 1 | from flow_sdk import shim_singer_sdk 2 | from tap_criteo.tap import TapCriteo 3 | 4 | shim_singer_sdk.CaptureShim( 5 | config_schema=TapCriteo.config_jsonschema, 6 | delegate_factory=TapCriteo, 7 | ).main() -------------------------------------------------------------------------------- /source-criteo/source_criteo/.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | max-line-length = 88 3 | docstring-convention = google 4 | per-file-ignores = 5 | tests/*:DAR 6 | -------------------------------------------------------------------------------- /source-criteo/source_criteo/.github/workflows/constraints.txt: -------------------------------------------------------------------------------- 1 | nox==2022.11.21 2 | nox-poetry==1.0.2 3 | pip==23.1 4 | poetry==1.4.2 5 | -------------------------------------------------------------------------------- /source-criteo/source_criteo/.secrets/.gitignore: -------------------------------------------------------------------------------- 1 | # IMPORTANT! This folder is hidden from git - if you need to store config files or other secrets, 2 | # make sure those are never staged for commit into your git repo. You can store them here or another 3 | # secure location. 4 | 5 | * 6 | !.gitignore 7 | -------------------------------------------------------------------------------- /source-criteo/source_criteo/tap_criteo/__init__.py: -------------------------------------------------------------------------------- 1 | """Singer tap for the Criteo API.""" 2 | -------------------------------------------------------------------------------- /source-criteo/source_criteo/tap_criteo/schemas/empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "properties": {} 5 | } 6 | -------------------------------------------------------------------------------- /source-criteo/source_criteo/tap_criteo/schemas/v2020.07/empty.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-04/schema", 3 | "type": "object", 4 | "properties": {} 5 | } 6 | -------------------------------------------------------------------------------- /source-criteo/source_criteo/tap_criteo/streams/__init__.py: -------------------------------------------------------------------------------- 1 | """Streams for tap-criteo.""" 2 | -------------------------------------------------------------------------------- /source-criteo/source_criteo/tap_criteo/streams/v202107.py: -------------------------------------------------------------------------------- 1 | """Stream type classes for Criteo version 2021.07.""" 2 | 3 | from pathlib import Path 4 | 5 | from tap_criteo.client import CriteoSearchStream 6 | 7 | SCHEMAS_DIR = Path(__file__).parent.parent / "./schemas" 8 | 9 | 10 | class CampaignsStream(CriteoSearchStream): 11 | """Campaigns stream.""" 12 | 13 | name = "campaigns" 14 | path = "/preview/marketing-solutions/campaigns/search" 15 | schema_filepath = SCHEMAS_DIR / "campaign.json" 16 | -------------------------------------------------------------------------------- /source-criteo/test.flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | import: 3 | - acmeCo/flow.yaml 4 | captures: 5 | acmeCo/source-criteo: 6 | endpoint: 7 | local: 8 | command: 9 | - python 10 | - "-m" 11 | - source-criteo 12 | config: connector_config.yaml 13 | env: 14 | LOG_LEVEL: debug 15 | bindings: 16 | - resource: acmeCo/source-criteo.MyReport.config.yaml 17 | target: acmeCo/MyReport 18 | -------------------------------------------------------------------------------- /source-criteo/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-criteo/tests/__init__.py -------------------------------------------------------------------------------- /source-dropbox/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-dropbox 2 | 3 | ## v1, 2024-07-24 4 | 5 | - Beginning of changelog. 6 | -------------------------------------------------------------------------------- /source-dropbox/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-dropbox/main_test.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "os" 6 | "testing" 7 | 8 | "github.com/bradleyjkemp/cupaloy" 9 | "github.com/stretchr/testify/require" 10 | ) 11 | 12 | func TestSpec(t *testing.T) { 13 | parserSpec, err := os.ReadFile("tests/parser_spec.json") 14 | require.NoError(t, err) 15 | 16 | formatted, err := json.MarshalIndent(configSchema(json.RawMessage(parserSpec)), "", " ") 17 | require.NoError(t, err) 18 | cupaloy.SnapshotT(t, string(formatted)) 19 | } 20 | -------------------------------------------------------------------------------- /source-dynamodb/.snapshots/TestKeyAttributeWrapperRoundTrip: -------------------------------------------------------------------------------- 1 | { 2 | "binary": { 3 | "attrType": "B", 4 | "value": "AQID" 5 | }, 6 | "decimal": { 7 | "attrType": "N", 8 | "value": "123.45" 9 | }, 10 | "integer": { 11 | "attrType": "N", 12 | "value": "123" 13 | }, 14 | "string": { 15 | "attrType": "S", 16 | "value": "stringValue" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /source-dynamodb/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-dynamodb 2 | 3 | ## v1, 2023-08-03 4 | 5 | - Beginning of changelog. 6 | -------------------------------------------------------------------------------- /source-dynamodb/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-dynamodb/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '3.7' 2 | 3 | services: 4 | db: 5 | image: "amazon/dynamodb-local:2.1.0" 6 | command: "-jar DynamoDBLocal.jar -sharedDb" 7 | ports: 8 | - "8000:8000" 9 | networks: 10 | - flow-test 11 | 12 | networks: 13 | flow-test: 14 | name: flow-test 15 | external: true 16 | -------------------------------------------------------------------------------- /source-facebook-marketing/VERSION: -------------------------------------------------------------------------------- 1 | v4 -------------------------------------------------------------------------------- /source-facebook-marketing/source_facebook_marketing/schemas/shared/ads_histogram_stats.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": ["null", "array"], 3 | "items": { 4 | "type": ["null", "object"], 5 | "properties": { 6 | "action_type": { 7 | "type": ["null", "string"] 8 | }, 9 | "value": { 10 | "type": ["null", "array"], 11 | "items": { 12 | "type": ["null", "integer"] 13 | } 14 | } 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /source-facebook-marketing/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-facebook-marketing/tests/__init__.py -------------------------------------------------------------------------------- /source-firestore/.snapshots/TestBindingDeletion-two: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | {"bindingStateV1":{"flow_source_tests%2F%2A%2Fother":{"Backfill":{"Completed":true,"Cursor":"","MTime":"","StartAfter":""},"ReadTime":""}}} 5 | 6 | -------------------------------------------------------------------------------- /source-firestore/VERSION: -------------------------------------------------------------------------------- 1 | v3 2 | -------------------------------------------------------------------------------- /source-front/VERSION: -------------------------------------------------------------------------------- 1 | v3 2 | -------------------------------------------------------------------------------- /source-front/source_front/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_front 3 | 4 | asyncio.run(source_front.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-front/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-front/tests/__init__.py -------------------------------------------------------------------------------- /source-gainsight-nxt/source_gainsight_nxt/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_gainsight_nxt 3 | 4 | asyncio.run(source_gainsight_nxt.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-gainsight-nxt/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-gainsight-nxt/tests/__init__.py -------------------------------------------------------------------------------- /source-gcs/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-gcs 2 | 3 | ## v2, 2022-09-23 4 | 5 | - Changed "ascendingKeys" to be an advanced configuration option. 6 | 7 | ## v1, 2022-07-27 8 | 9 | - Beginning of changelog. 10 | -------------------------------------------------------------------------------- /source-gcs/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /source-genesys/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-genesys/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "source_genesys" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Alex Bair "] 6 | 7 | [tool.poetry.dependencies] 8 | estuary-cdk = {path="../estuary-cdk", develop = true} 9 | pydantic = "^2" 10 | python = "^3.12" 11 | 12 | [tool.poetry.group.dev.dependencies] 13 | debugpy = "^1.8.0" 14 | mypy = "^1.8.0" 15 | pytest = "^7.4.3" 16 | pytest-insta = "^0.3.0" 17 | 18 | [build-system] 19 | requires = ["poetry-core"] 20 | build-backend = "poetry.core.masonry.api" 21 | -------------------------------------------------------------------------------- /source-genesys/source_genesys/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_genesys 3 | 4 | asyncio.run(source_genesys.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-genesys/test.flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | captures: 3 | acmeCo/source-genesys: 4 | endpoint: 5 | local: 6 | command: 7 | - python 8 | - "-m" 9 | - source_genesys 10 | config: 11 | genesys_cloud_domain: mypurecloud.com 12 | start_date: "2024-11-11T00:00:00Z" 13 | credentials: 14 | client_id: my_client_id 15 | client_secret: my_client_secret 16 | credentials_title: OAuth Credentials 17 | bindings: [] 18 | -------------------------------------------------------------------------------- /source-genesys/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-genesys/tests/__init__.py -------------------------------------------------------------------------------- /source-gladly/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "source_gladly" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Will Baker "] 6 | 7 | [tool.poetry.dependencies] 8 | estuary-cdk = {path="../estuary-cdk", develop = true} 9 | pydantic = "^2" 10 | python = "^3.11" 11 | 12 | [tool.poetry.group.dev.dependencies] 13 | debugpy = "^1.8.0" 14 | mypy = "^1.8.0" 15 | pytest = "^7.4.3" 16 | pytest-insta = "^0.3.0" 17 | 18 | [build-system] 19 | requires = ["poetry-core"] 20 | build-backend = "poetry.core.masonry.api" -------------------------------------------------------------------------------- /source-gladly/source_gladly/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_gladly 3 | 4 | asyncio.run(source_gladly.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-gladly/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-gladly/tests/__init__.py -------------------------------------------------------------------------------- /source-google-ads/VERSION: -------------------------------------------------------------------------------- 1 | v2 -------------------------------------------------------------------------------- /source-google-ads/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-google-ads/tests/__init__.py -------------------------------------------------------------------------------- /source-google-analytics-data-api-native/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-google-analytics-data-api-native/source_google_analytics_data_api_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_google_analytics_data_api_native 3 | 4 | asyncio.run(source_google_analytics_data_api_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-google-analytics-data-api-native/source_google_analytics_data_api_native/utils.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | 3 | 4 | DATETIME_STRING_FORMAT = "%Y-%m-%dT%H:%M:%S%z" 5 | DATE_STRING_FORMAT = "%Y-%m-%d" 6 | 7 | 8 | def dt_to_str(dt: datetime) -> str: 9 | return dt.strftime(DATETIME_STRING_FORMAT) 10 | 11 | 12 | def dt_to_date_str(dt: datetime) -> str: 13 | return dt.strftime(DATE_STRING_FORMAT) 14 | 15 | 16 | def str_to_dt(string: str) -> datetime: 17 | return datetime.fromisoformat(string) 18 | -------------------------------------------------------------------------------- /source-google-analytics-data-api-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-google-analytics-data-api-native/tests/__init__.py -------------------------------------------------------------------------------- /source-google-drive/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-google-drive 2 | 3 | ## v1, 2023-08-03 4 | 5 | - Beginning of changelog. 6 | -------------------------------------------------------------------------------- /source-google-drive/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-google-pubsub/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-google-sheets-native/acmeCo/flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | collections: 3 | acmeCo/OtherThings: 4 | schema: OtherThings.schema.yaml 5 | key: 6 | - /_meta/row_id 7 | acmeCo/VariousTypes: 8 | schema: VariousTypes.schema.yaml 9 | key: 10 | - /_meta/row_id 11 | -------------------------------------------------------------------------------- /source-google-sheets-native/source_google_sheets_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_google_sheets_native 3 | 4 | asyncio.run(source_google_sheets_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-google-sheets-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-google-sheets-native/tests/__init__.py -------------------------------------------------------------------------------- /source-hello-world/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /source-http-file/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-http-file 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-http-file/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-http-ingest/VARIANTS: -------------------------------------------------------------------------------- 1 | source-datadog-ingest 2 | source-intercom-ingest 3 | source-jira-ingest -------------------------------------------------------------------------------- /source-http-ingest/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-hubspot-native/source_hubspot_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_hubspot_native 3 | 4 | asyncio.run(source_hubspot_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-hubspot-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-hubspot-native/tests/__init__.py -------------------------------------------------------------------------------- /source-hubspot/VERSION: -------------------------------------------------------------------------------- 1 | v5 -------------------------------------------------------------------------------- /source-hubspot/source_hubspot/__init__.py: -------------------------------------------------------------------------------- 1 | from .source import SourceHubspot 2 | 3 | __all__ = ["SourceHubspot"] 4 | -------------------------------------------------------------------------------- /source-hubspot/source_hubspot/constants.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | OAUTH_CREDENTIALS = "OAuth Credentials" 6 | PRIVATE_APP_CREDENTIALS = "Private App Credentials" 7 | -------------------------------------------------------------------------------- /source-hubspot/source_hubspot/schemas/line_items.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": ["object"], 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "createdAt": { 9 | "type": ["null", "string"], 10 | "format": "date-time" 11 | }, 12 | "updatedAt": { 13 | "type": ["null", "string"], 14 | "format": "date-time" 15 | }, 16 | "archived": { 17 | "type": ["null", "boolean"] 18 | } 19 | }, 20 | "required": ["id"] 21 | } 22 | -------------------------------------------------------------------------------- /source-hubspot/source_hubspot/schemas/products.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": ["object"], 4 | "properties": { 5 | "id": { 6 | "type": "string" 7 | }, 8 | "createdAt": { 9 | "type": ["null", "string"], 10 | "format": "date-time" 11 | }, 12 | "updatedAt": { 13 | "type": ["null", "string"], 14 | "format": "date-time" 15 | }, 16 | "archived": { 17 | "type": ["null", "boolean"] 18 | } 19 | }, 20 | "required": ["id"] 21 | } 22 | -------------------------------------------------------------------------------- /source-hubspot/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-hubspot/tests/__init__.py -------------------------------------------------------------------------------- /source-impact-native/config.yaml: -------------------------------------------------------------------------------- 1 | credentials: 2 | username: "John Doe" 3 | password: "NotARealPassword" 4 | api_catalog: "Brand" -------------------------------------------------------------------------------- /source-impact-native/source_impact_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_impact_native 3 | 4 | asyncio.run(source_impact_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-impact-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-impact-native/tests/__init__.py -------------------------------------------------------------------------------- /source-intercom-native/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-intercom-native/source_intercom_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_intercom_native 3 | 4 | asyncio.run(source_intercom_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-intercom-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-intercom-native/tests/__init__.py -------------------------------------------------------------------------------- /source-iterable/main.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | from source_iterable.run import run 6 | 7 | if __name__ == "__main__": 8 | run() 9 | -------------------------------------------------------------------------------- /source-iterable/sample_files/sample_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "api_key": "", 3 | "start_date": "2021-04-01T00:00:00Z" 4 | } 5 | -------------------------------------------------------------------------------- /source-iterable/source_iterable/__init__.py: -------------------------------------------------------------------------------- 1 | from .source import SourceIterable 2 | 3 | __all__ = ["SourceIterable"] 4 | -------------------------------------------------------------------------------- /source-iterable/source_iterable/__main__.py: -------------------------------------------------------------------------------- 1 | import estuary_cdk.pydantic_polyfill # Must be first. 2 | import estuary_cdk.requests_session_send_patch # Must be second. 3 | 4 | import asyncio 5 | import urllib 6 | from estuary_cdk import shim_airbyte_cdk, flow 7 | from source_iterable import SourceIterable 8 | 9 | 10 | asyncio.run( 11 | shim_airbyte_cdk.CaptureShim( 12 | delegate=SourceIterable(), 13 | oauth2=None, 14 | schema_inference=True 15 | ).serve() 16 | ) -------------------------------------------------------------------------------- /source-iterable/source_iterable/run.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | import sys 7 | 8 | from airbyte_cdk.entrypoint import launch 9 | from source_iterable import SourceIterable 10 | 11 | 12 | def run(): 13 | source = SourceIterable() 14 | launch(source, sys.argv[1:]) 15 | -------------------------------------------------------------------------------- /source-iterable/source_iterable/schemas/campaigns_metrics.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties":{ 3 | "data": { 4 | "properties":{ 5 | "id":{ 6 | "type":["null", "integer"] 7 | } 8 | }, 9 | "type":"object" 10 | }, 11 | "id":{ 12 | "type":"integer" 13 | } 14 | }, 15 | "required": ["id"], 16 | "type": "object" 17 | } -------------------------------------------------------------------------------- /source-iterable/source_iterable/schemas/channels.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": { 3 | "id": { 4 | "type": "integer" 5 | }, 6 | "name": { 7 | "type": ["null", "string"] 8 | }, 9 | "channelType": { 10 | "type": ["null", "string"] 11 | }, 12 | "messageMedium": { 13 | "type": ["null", "string"] 14 | } 15 | }, 16 | "required": ["id"], 17 | "type": "object" 18 | } 19 | -------------------------------------------------------------------------------- /source-iterable/source_iterable/schemas/list_users.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": { 3 | "email": { 4 | "type": "string" 5 | }, 6 | "listId": { 7 | "type": "integer" 8 | } 9 | }, 10 | "required": ["listId"], 11 | "type": "object" 12 | } 13 | -------------------------------------------------------------------------------- /source-iterable/source_iterable/schemas/lists.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": { 3 | "id": { 4 | "type": ["integer"] 5 | }, 6 | "name": { 7 | "type": ["null", "string"] 8 | }, 9 | "createdAt": { 10 | "type": ["null", "integer"] 11 | }, 12 | "listType": { 13 | "type": ["null", "string"] 14 | } 15 | }, 16 | "required": ["id"], 17 | "type": "object" 18 | } 19 | -------------------------------------------------------------------------------- /source-iterable/source_iterable/schemas/message_types.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": { 3 | "id": { 4 | "type": "integer" 5 | }, 6 | "name": { 7 | "type": ["null", "string"] 8 | }, 9 | "channelId": { 10 | "type": ["null", "number"] 11 | } 12 | }, 13 | "required": ["id"], 14 | "type": "object" 15 | } 16 | -------------------------------------------------------------------------------- /source-iterable/source_iterable/schemas/metadata.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": { 3 | "name": { 4 | "type": "string" 5 | } 6 | }, 7 | "type": "object" 8 | } 9 | -------------------------------------------------------------------------------- /source-iterable/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-iterable/tests/__init__.py -------------------------------------------------------------------------------- /source-iterate/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-iterate/acmeCo/flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | collections: 3 | acmeCo/survey_responses: 4 | schema: survey_responses.schema.yaml 5 | key: 6 | - /_meta/row_id 7 | acmeCo/surveys: 8 | schema: surveys.schema.yaml 9 | key: 10 | - /_meta/row_id 11 | -------------------------------------------------------------------------------- /source-iterate/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | version = "0.1.0" 3 | name = "source_iterate" 4 | description = "" 5 | authors = [ "Alex Bair "] 6 | 7 | [tool.poetry.dependencies] 8 | estuary-cdk = {path="../estuary-cdk", develop = true} 9 | python = "^3.11" 10 | pydantic = "^2" 11 | 12 | [tool.poetry.group.dev.dependencies] 13 | debugpy = "^1.8.0" 14 | mypy = "^1.8.0" 15 | pytest = "^7.4.3" 16 | pytest-insta = "^0.3.0" 17 | 18 | [build-system] 19 | requires = ["poetry-core"] 20 | build-backend = "poetry.core.masonry.api" 21 | -------------------------------------------------------------------------------- /source-iterate/source_iterate/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_iterate 3 | 4 | asyncio.run(source_iterate.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-iterate/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-iterate/tests/__init__.py -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/__init__.py: -------------------------------------------------------------------------------- 1 | from .source import SourceJira 2 | 3 | __all__ = ["SourceJira"] 4 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/__main__.py: -------------------------------------------------------------------------------- 1 | import estuary_cdk.pydantic_polyfill # Must be first. 2 | import estuary_cdk.requests_session_send_patch # Must be second. 3 | 4 | import asyncio 5 | import urllib 6 | from estuary_cdk import shim_airbyte_cdk, flow 7 | from source_jira_legacy import SourceJira 8 | 9 | 10 | 11 | asyncio.run( 12 | shim_airbyte_cdk.CaptureShim( 13 | delegate=SourceJira(), 14 | oauth2=None, 15 | schema_inference=True, 16 | ).serve() 17 | ) 18 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/run.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | import sys 7 | 8 | from airbyte_cdk.entrypoint import launch 9 | from source_jira import SourceJira 10 | 11 | 12 | def run(): 13 | source = SourceJira() 14 | launch(source, sys.argv[1:]) 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/application_roles.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["key"], 5 | "properties": { 6 | "key": { 7 | "description": "The key identifier of the application role.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of an application role." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/avatars.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the avatar.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "List of system avatars." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/board_issues.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The unique identifier of the issue", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true 12 | } 13 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/boards.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "Unique identifier of the board.", 8 | "type": "integer" 9 | } 10 | }, 11 | "additionalProperties": true 12 | } 13 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/dashboards.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the dashboard.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of a dashboard." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/filter_sharing.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "type": "integer", 8 | "description": "The unique identifier of the share permission.", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "Details of a share permission for the filter." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/filters.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "type": "string", 8 | "description": "The unique identifier for the filter.", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "Details of a filter." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_comments.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the comment.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_custom_field_contexts.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "description": "The details of a custom field context.", 5 | "required": ["id"], 6 | "properties": { 7 | "id": { 8 | "description": "The ID of the context.", 9 | "type": "string" 10 | } 11 | }, 12 | "additionalProperties": true 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_custom_field_options.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "description": "Details of the custom field options for a context.", 5 | "required": ["id"], 6 | "properties": { 7 | "id": { 8 | "description": "The ID of the custom field option.", 9 | "type": "string" 10 | } 11 | }, 12 | "additionalProperties": true 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_field_configurations.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the field configuration.", 8 | "type": "integer" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of a field configuration." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_fields.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the field.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details about a field." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_link_types.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the issue link type. Used as the type of issue link in `issueLink` resource. Required on create when `name` isn't provided. Otherwise, read only.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "A list of issue link type beans." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_navigator_settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["value"], 5 | "properties": { 6 | "value": { 7 | "description": "The actual value/data associated with the label in the issue navigator column.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of an issue navigator column item." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_notification_schemes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the notification scheme.", 8 | "type": "integer" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details about a notification scheme." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_priorities.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the issue priority.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "An issue priority." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_remote_links.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the link.", 8 | "type": "integer" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of an issue remote link." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_resolutions.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the issue resolution.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of an issue resolution." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_security_schemes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the issue security scheme.", 8 | "type": "integer", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "List of security schemes." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_type_schemes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The unique identifier for the issue type scheme.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of an issue type scheme." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_type_screen_schemes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the issue type screen scheme.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of an issue type screen scheme." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_types.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "description": "Details about an issue type.", 5 | "required": ["id"], 6 | "properties": { 7 | "id": { 8 | "description": "The ID of the issue type.", 9 | "type": "string", 10 | "readOnly": true 11 | } 12 | }, 13 | "additionalProperties": true 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_votes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["self"], 5 | "properties": { 6 | "self": { 7 | "description": "The URL of these issue vote details.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "The details of votes on an issue." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_watchers.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["self"], 5 | "properties": { 6 | "self": { 7 | "description": "The URL of these issue watcher details.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "The details of watchers on an issue." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issue_worklogs.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the worklog record.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "Details of a worklog." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/issues.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The unique ID of the issue.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/jira_settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The unique ID of the application property. The ID is the same as the key.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details of an application property." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/labels.json: -------------------------------------------------------------------------------- 1 | { "$schema": "http://json-schema.org/draft-07/schema#", 2 | "type": "object", 3 | "required": ["label"], 4 | "properties": { 5 | "label": { 6 | "description": "The label associated with the issue in Jira.", 7 | "type": "string" 8 | } 9 | }, 10 | "additionalProperties": true 11 | } 12 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/permission_schemes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the permission scheme.", 8 | "type": "integer", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "List of all permission schemes." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/permissions.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["key"], 5 | "properties": { 6 | "key": { 7 | "description": "Unique key identifier for the permission", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details about permissions." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/project_avatars.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the avatar.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "List of project avatars." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/project_categories.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the project category.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "A project category." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/project_components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The unique identifier for the component.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "Details about a project component." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/project_email.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["projectId"], 5 | "properties": { 6 | "projectId": { 7 | "description": "The unique identifier for the project.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "A project's sender email address." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/project_permission_schemes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the issue level security item.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details about a security scheme." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/project_roles.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "description": "Project Roles", 6 | "properties": { 7 | "id": { 8 | "description": "The ID of the project role.", 9 | "type": "integer" 10 | } 11 | }, 12 | "additionalProperties": true 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/project_types.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["key"], 5 | "properties": { 6 | "key": { 7 | "description": "The key of the project type.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "Details about a project type." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/project_versions.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The unique ID of the version.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "readOnly": true 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/projects.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the project.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details about a project." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/pull_requests.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "Unique identifier for the pull request", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true 12 | } 13 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/screen_schemes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the screen scheme.", 8 | "type": "integer" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "A screen scheme." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/screen_tab_fields.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the screen tab field.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "A screen tab field." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/screen_tabs.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "required": ["id"], 4 | "type": "object", 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the screen tab.", 8 | "type": "integer", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "A screen tab." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/screens.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the screen.", 8 | "type": "integer", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/sprint_issues.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "ID of the issue", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true 12 | } 13 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/sprints.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The unique identifier for the sprint.", 8 | "type": "integer" 9 | } 10 | }, 11 | "additionalProperties": true 12 | } 13 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/time_tracking.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "required": ["key"], 4 | "type": "object", 5 | "properties": { 6 | "key": { 7 | "description": "The key associated with the time tracking provider.", 8 | "type": "string" 9 | } 10 | }, 11 | "additionalProperties": true, 12 | "description": "Details about the time tracking provider." 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/workflow_scheme_drafts.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the workflow scheme.", 8 | "type": "integer", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "Details about a workflow scheme." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/workflow_schemes.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the workflow scheme.", 8 | "type": "integer", 9 | "readOnly": true 10 | } 11 | }, 12 | "readOnly": true, 13 | "additionalProperties": true 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/workflow_status_categories.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the status category.", 8 | "type": "integer", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "A status category." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/workflow_statuses.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "description": "The ID of the status.", 8 | "type": "string", 9 | "readOnly": true 10 | } 11 | }, 12 | "additionalProperties": true, 13 | "description": "A status." 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/source_jira_legacy/schemas/workflows.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["entity_id"], 5 | "properties": { 6 | "entity_id": { 7 | "type": "string" 8 | } 9 | }, 10 | "readOnly": true, 11 | "additionalProperties": true 12 | } 13 | -------------------------------------------------------------------------------- /source-jira-legacy/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-jira-legacy/tests/__init__.py -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/groups.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | { 4 | "name": "Test group 17", 5 | "groupId": "test1" 6 | }, 7 | { 8 | "name": "Test group 17", 9 | "groupId": "test2" 10 | }, 11 | { 12 | "name": "Test group 17", 13 | "groupId": "test3" 14 | }, 15 | { 16 | "name": "Test group 17", 17 | "groupId": "test4" 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/issue_custom_field_options.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | { 4 | "id": "10016", 5 | "value": "To Do", 6 | "disabled": false, 7 | "fieldId": "customfield_10012", 8 | "contextId": "10112" 9 | } 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/issue_watchers.json: -------------------------------------------------------------------------------- 1 | { 2 | "self": "https://your-domain.atlassian.net/rest/api/3/issue/EX-1/watchers", 3 | "isWatching": false, 4 | "watchCount": 1, 5 | "watchers": [ 6 | { 7 | "self": "https://your-domain.atlassian.net/rest/api/3/user?accountId=5b10a2844c20165700ede21g", 8 | "accountId": "5b10a2844c20165700ede21g", 9 | "displayName": "Mia Krystof", 10 | "active": false 11 | } 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/issues_field_configurations.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | { 4 | "id": 10000, 5 | "name": "Default Field Configuration", 6 | "description": "The default field configuration", 7 | "isDefault": true 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/issues_navigator_settings.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "label": "Issue Type", 4 | "value": "issuetype" 5 | }, 6 | { 7 | "label": "Key", 8 | "value": "issuekey" 9 | }, 10 | { 11 | "label": "Summary", 12 | "value": "summary" 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/labels.json: -------------------------------------------------------------------------------- 1 | { 2 | "maxResults": 2, 3 | "startAt": 0, 4 | "total": 100, 5 | "isLast": false, 6 | "values": ["performance", "security"] 7 | } 8 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/permissions.json: -------------------------------------------------------------------------------- 1 | { 2 | "permissions": { 3 | "BULK_CHANGE": { 4 | "key": "BULK_CHANGE", 5 | "name": "Bulk Change", 6 | "type": "GLOBAL", 7 | "description": "Ability to modify a collection of issues at once. For example, resolve multiple issues in one step." 8 | } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/project_email.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "emailAddress": "jira@airbyteio.atlassian.net", 4 | "projectId": "10000" 5 | }, 6 | { 7 | "emailAddress": "jira@airbyteio.atlassian.net", 8 | "projectId": "10016" 9 | } 10 | ] 11 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/projects_categories.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10000", 4 | "id": "10000", 5 | "description": "Category 1", 6 | "name": "Category 1" 7 | }, 8 | { 9 | "self": "https://airbyteio.atlassian.net/rest/api/3/projectCategory/10001", 10 | "id": "10001", 11 | "description": "Category 2", 12 | "name": "Category 2" 13 | } 14 | ] 15 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/screen_tabs.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 10000, 4 | "name": "Field Tab" 5 | }, 6 | { 7 | "id": 10001, 8 | "name": "Field Tab" 9 | } 10 | ] 11 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/screens.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | { 4 | "id": 1, 5 | "name": "Default Screen", 6 | "description": "Allows to update all system fields." 7 | }, 8 | { 9 | "id": 2, 10 | "name": "Workflow Screen", 11 | "description": "This screen is used in the workflow and enables you to assign issues" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/sprints.json: -------------------------------------------------------------------------------- 1 | { 2 | "values": [ 3 | { 4 | "id": 2, 5 | "self": "https://airbyteio.atlassian.net/rest/agile/1.0/sprint/2", 6 | "state": "active", 7 | "name": "IT Sprint 1", 8 | "startDate": "2022-05-17T11:25:59.072Z", 9 | "endDate": "2022-05-31T11:25:00.000Z", 10 | "originBoardId": 1, 11 | "goal": "Deliver results" 12 | } 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/time_tracking.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "key": "JIRA", 4 | "name": "JIRA provided time tracking" 5 | } 6 | ] 7 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/responses/workflow_status_categories.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/1", 4 | "id": 1, 5 | "key": "undefined", 6 | "colorName": "medium-gray", 7 | "name": "No Category" 8 | }, 9 | { 10 | "self": "https://airbyteio.atlassian.net/rest/api/3/statuscategory/2", 11 | "id": 2, 12 | "key": "new", 13 | "colorName": "blue-gray", 14 | "name": "To Do" 15 | } 16 | ] 17 | -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/test_migrations/test_config.json: -------------------------------------------------------------------------------- 1 | {"api_token": "invalid_token", "domain": "invaliddomain.atlassian.net", "email": "no-reply@domain.com", "start_date": "2023-01-01T00:00:00Z", "projects": ["IT1", "IT1", "IT1"], "expand_issue_changelog": true, "render_fields": true, "expand_issue_transition": false} -------------------------------------------------------------------------------- /source-jira-legacy/unit_tests/test_utils.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | from source_jira_legacy.utils import safe_max 6 | 7 | 8 | def test_safe_max_arg1_none(): 9 | assert safe_max(None, 1) == 1 10 | 11 | 12 | def test_safe_max_arg2_none(): 13 | assert safe_max(1, None) == 1 14 | 15 | 16 | def test_safe_max_both_args(): 17 | assert safe_max(1, 2) == 2 18 | -------------------------------------------------------------------------------- /source-jira-native/VERSION: -------------------------------------------------------------------------------- 1 | v3 2 | -------------------------------------------------------------------------------- /source-jira-native/source_jira_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_jira_native 3 | 4 | asyncio.run(source_jira_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-jira-native/test.flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | captures: 3 | acmeCo/source-jira-native: 4 | endpoint: 5 | local: 6 | command: 7 | - python 8 | - "-m" 9 | - source_jira_native 10 | config: config.yaml 11 | bindings: [] 12 | -------------------------------------------------------------------------------- /source-jira-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-jira-native/tests/__init__.py -------------------------------------------------------------------------------- /source-kafka/.dockerignore: -------------------------------------------------------------------------------- 1 | target 2 | -------------------------------------------------------------------------------- /source-kafka/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-kafka 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-kafka/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-kinesis/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-kinesis 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-kinesis/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | from .source import SourceKlaviyo 6 | 7 | __all__ = ["SourceKlaviyo"] 8 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/__main__.py: -------------------------------------------------------------------------------- 1 | import estuary_cdk.pydantic_polyfill # Must be first. 2 | import estuary_cdk.requests_session_send_patch # Must be second. 3 | 4 | import asyncio 5 | import urllib 6 | from estuary_cdk import shim_airbyte_cdk, flow 7 | from source_klaviyo import SourceKlaviyo 8 | 9 | 10 | asyncio.run( 11 | shim_airbyte_cdk.CaptureShim( 12 | delegate=SourceKlaviyo(), 13 | oauth2=None, 14 | schema_inference=True, 15 | ).serve() 16 | ) -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/exceptions.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 2 | 3 | 4 | class KlaviyoBackoffError(Exception): 5 | """An exception which is raised when 'retry-after' time is longer than 'max_time' specified""" 6 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/run.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | import sys 7 | 8 | from airbyte_cdk.entrypoint import launch 9 | from source_klaviyo import SourceKlaviyo 10 | 11 | 12 | def run(): 13 | source = SourceKlaviyo() 14 | launch(source, sys.argv[1:]) 15 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/schemas/campaigns.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { "type": "string" } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/schemas/email_templates.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { "type": "string" } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/schemas/events.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { "type": "string" } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/schemas/flows.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { "type": "string" } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/schemas/global_exclusions.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { "type": "string" } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/schemas/lists.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { "type": "string" } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/schemas/metrics.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { "type": "string" } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /source-klaviyo/source_klaviyo/schemas/profiles.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { "type": "string" } 8 | }} 9 | -------------------------------------------------------------------------------- /source-klaviyo/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-klaviyo/tests/__init__.py -------------------------------------------------------------------------------- /source-linkedin-ads-v2/source_linkedin_ads_v2/run.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | import sys 7 | 8 | from airbyte_cdk.entrypoint import launch 9 | from source_linkedin_ads_v2 import SourceLinkedinAds 10 | 11 | 12 | def run(): 13 | source = SourceLinkedinAds() 14 | launch(source, sys.argv[1:]) 15 | -------------------------------------------------------------------------------- /source-linkedin-ads-v2/source_linkedin_ads_v2/schemas/account_users.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "title": "AccountUsers", 5 | "required":["account"], 6 | "additionalProperties": true, 7 | "properties": { 8 | "account": { 9 | "description": "The account associated with the user", 10 | "type": "string" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /source-linkedin-ads-v2/source_linkedin_ads_v2/schemas/accounts.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "title": "Accounts", 5 | "required": ["id"], 6 | "additionalProperties": true, 7 | "properties": { 8 | "id": { 9 | "description": "The unique identifier for the account.", 10 | "type": "integer" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /source-linkedin-ads-v2/source_linkedin_ads_v2/schemas/campaign_groups.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "title": "Campaign Groups", 5 | "required": ["id"], 6 | "additionalProperties": true, 7 | "properties": { 8 | "id": { 9 | "description": "Unique identifier for the campaign group.", 10 | "type": "integer" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /source-linkedin-ads-v2/source_linkedin_ads_v2/schemas/conversions.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "title": "Conversions", 5 | "required": ["id"], 6 | "properties": { 7 | "id": { 8 | "description": "Unique identifier for the conversion.", 9 | "type": "integer" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /source-linkedin-ads-v2/source_linkedin_ads_v2/schemas/creatives.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "title": "Creatives", 5 | "required": ["id"], 6 | "additionalProperties": true, 7 | "properties": { 8 | "id": { 9 | "description": "The unique identifier of the creative.", 10 | "type": "string" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /source-linkedin-ads-v2/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-linkedin-ads-v2/tests/__init__.py -------------------------------------------------------------------------------- /source-linkedin-ads-v2/unit_tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-linkedin-ads-v2/unit_tests/__init__.py -------------------------------------------------------------------------------- /source-linkedin-ads-v2/unit_tests/conftest.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 2 | 3 | import os 4 | 5 | os.environ["REQUEST_CACHE_PATH"] = "REQUEST_CACHE_PATH" 6 | -------------------------------------------------------------------------------- /source-linkedin-pages/source_linkedin_pages/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2021 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | from .source import SourceLinkedinPages 7 | 8 | __all__ = ["SourceLinkedinPages"] 9 | -------------------------------------------------------------------------------- /source-linkedin-pages/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-linkedin-pages/tests/__init__.py -------------------------------------------------------------------------------- /source-looker/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-looker/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | version = "0.1.0" 3 | name = "source_looker" 4 | description = "" 5 | authors = [ "Alex Bair "] 6 | 7 | [tool.poetry.dependencies] 8 | estuary-cdk = {path="../estuary-cdk", develop = true} 9 | python = "^3.11" 10 | pydantic = "^2" 11 | 12 | [tool.poetry.group.dev.dependencies] 13 | debugpy = "^1.8.0" 14 | mypy = "^1.8.0" 15 | pytest = "^7.4.3" 16 | pytest-insta = "^0.3.0" 17 | 18 | [build-system] 19 | requires = ["poetry-core"] 20 | build-backend = "poetry.core.masonry.api" 21 | -------------------------------------------------------------------------------- /source-looker/source_looker/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_looker 3 | 4 | asyncio.run(source_looker.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-looker/test.flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | captures: 3 | acmeCo/source-looker: 4 | endpoint: 5 | local: 6 | command: 7 | - python 8 | - "-m" 9 | - source_looker 10 | config: config.yaml 11 | bindings: [] 12 | -------------------------------------------------------------------------------- /source-looker/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-looker/tests/__init__.py -------------------------------------------------------------------------------- /source-mixpanel-native/config.yaml: -------------------------------------------------------------------------------- 1 | attribution_window: 5 2 | credentials: 3 | secret: "a" 4 | username: "a" 5 | project_id: 1 6 | date_window_size: 120 7 | project_timezone: US/Pacific 8 | region: US 9 | select_properties_by_default: true 10 | start_date: "2024-01-01T00:00:00Z" -------------------------------------------------------------------------------- /source-mixpanel-native/source_mixpanel_native/__main__.py: -------------------------------------------------------------------------------- 1 | import estuary_cdk.pydantic_polyfill # Must be first. 2 | import estuary_cdk.requests_session_send_patch # Must be second. 3 | 4 | import asyncio 5 | import urllib 6 | from estuary_cdk import shim_airbyte_cdk, flow 7 | from source_mixpanel_native import SourceMixpanel 8 | 9 | 10 | asyncio.run( 11 | shim_airbyte_cdk.CaptureShim( 12 | delegate=SourceMixpanel(), 13 | oauth2=None, 14 | schema_inference=True, 15 | ).serve() 16 | ) -------------------------------------------------------------------------------- /source-mixpanel-native/source_mixpanel_native/schemas/cohorts.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "required": ["id"], 6 | "properties": { 7 | "id": { 8 | "description": "The unique identifier of the cohort data.", 9 | "type": "integer" 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /source-mixpanel-native/source_mixpanel_native/schemas/engage.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["distinct_id"], 5 | "properties": { 6 | "distinct_id": { 7 | "description": "The unique identifier for the user.", 8 | "type": "string" 9 | }, 10 | "id": { 11 | "description": "The unique ID associated with the user.", 12 | "type": "string" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /source-mixpanel-native/source_mixpanel_native/schemas/funnels.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["date", "funnel_id"], 5 | "properties": { 6 | "funnel_id": { 7 | "description": "Unique identifier for the funnel.", 8 | "type": "integer" 9 | }, 10 | "date": { 11 | "description": "Date field for the funnel data.", 12 | "type": "string" 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /source-mixpanel-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-mixpanel-native/tests/__init__.py -------------------------------------------------------------------------------- /source-monday/acmeCo/flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | collections: 3 | acmeCo/boards: 4 | schema: boards.schema.yaml 5 | key: 6 | - /id 7 | acmeCo/items: 8 | schema: items.schema.yaml 9 | key: 10 | - /id 11 | acmeCo/tags: 12 | schema: tags.schema.yaml 13 | key: 14 | - /_meta/row_id 15 | acmeCo/teams: 16 | schema: teams.schema.yaml 17 | key: 18 | - /_meta/row_id 19 | acmeCo/users: 20 | schema: users.schema.yaml 21 | key: 22 | - /_meta/row_id 23 | -------------------------------------------------------------------------------- /source-monday/source_monday/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | 3 | import source_monday 4 | 5 | asyncio.run(source_monday.Connector().serve()) 6 | -------------------------------------------------------------------------------- /source-monday/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-monday/tests/__init__.py -------------------------------------------------------------------------------- /source-mongodb/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-mongodb 2 | 3 | ## v2, 2024-04-10 4 | - Support for incremental backfills. This version is backward compatible with v1 captures that have 5 | completed their backfills, but will error if upgrading a v1 capture with a backfill that is still 6 | in progress. 7 | 8 | ## v1, 2023-02-14 9 | - Beginning of changelog. 10 | -------------------------------------------------------------------------------- /source-mongodb/VARIANTS: -------------------------------------------------------------------------------- 1 | source-cosmosdb-mongodb 2 | source-amazon-documentdb -------------------------------------------------------------------------------- /source-mongodb/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /source-mongodb/docker-compose-init.sh: -------------------------------------------------------------------------------- 1 | function mongosh() { 2 | echo "$@" | docker exec -i source-mongodb-db-1 mongosh -u flow -p flow admin 3 | } 4 | 5 | mongosh 'rs.initiate()' 6 | sleep 3 7 | mongosh 'cfg = rs.conf(); cfg.members[0].host="localhost:27017"; rs.reconfig(cfg);' 8 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryPlaceholderExpansion: -------------------------------------------------------------------------------- 1 | Query: SELECT * FROM "test"."foobar" WHERE (ka > ?) OR (ka = ? AND kb > ?) OR (ka = ? AND kb = ? AND kc > ?) OR (x > ?) OR (y > ?); 2 | 3 | --- 4 | Argument 0: 1 5 | Argument 1: 1 6 | Argument 2: "two" 7 | Argument 3: 1 8 | Argument 4: "two" 9 | Argument 5: 3 10 | Argument 6: "xval" 11 | Argument 7: "yval" 12 | 13 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryTemplate-FirstNoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `test`.`foobar`; 2 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryTemplate-FirstOneCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `test`.`foobar` ORDER BY `ka`; 2 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryTemplate-FirstThreeCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `test`.`foobar` ORDER BY `ka`, `kb`, `kc`; 2 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryTemplate-FirstTwoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `test`.`foobar` ORDER BY `ka`, `kb`; 2 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryTemplate-SubsequentNoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `test`.`foobar`; 2 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryTemplate-SubsequentOneCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `test`.`foobar` WHERE (`ka` > @flow_cursor_value[0]) ORDER BY `ka`; 2 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryTemplate-SubsequentThreeCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `test`.`foobar` WHERE (`ka` > @flow_cursor_value[0]) OR (`ka` = @flow_cursor_value[0] AND `kb` > @flow_cursor_value[1]) OR (`ka` = @flow_cursor_value[0] AND `kb` = @flow_cursor_value[1] AND `kc` > @flow_cursor_value[2]) ORDER BY `ka`, `kb`, `kc`; 2 | -------------------------------------------------------------------------------- /source-mysql-batch/.snapshots/TestQueryTemplate-SubsequentTwoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM `test`.`foobar` WHERE (`ka` > @flow_cursor_value[0]) OR (`ka` = @flow_cursor_value[0] AND `kb` > @flow_cursor_value[1]) ORDER BY `ka`, `kb`; 2 | -------------------------------------------------------------------------------- /source-mysql-batch/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-mysql-batch 2 | 3 | ## v1, 2023-09-28 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-mysql-batch/VARIANTS: -------------------------------------------------------------------------------- 1 | source-singlestore-batch -------------------------------------------------------------------------------- /source-mysql-batch/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-mysql-batch/docker-initdb.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | echo "=======================================" 5 | echo "Initializing Database for Flow Captures" 6 | echo "=======================================" 7 | 8 | mysql --user="root" --password="secret1234" --database="mysql" <<-EOSQL 9 | CREATE USER IF NOT EXISTS flow_capture IDENTIFIED BY 'secret1234'; 10 | CREATE DATABASE IF NOT EXISTS test; 11 | GRANT SELECT ON *.* TO 'flow_capture'; 12 | EOSQL 13 | -------------------------------------------------------------------------------- /source-mysql/.snapshots/TestGeneric-MissingTable: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | 5 | # ================================ 6 | # Captures Terminated With Errors 7 | # ================================ 8 | the capture cannot run due to the following error(s): 9 | - user "flow_capture" cannot read from table "test.generic_missingtable_27607177" 10 | 11 | -------------------------------------------------------------------------------- /source-mysql/.snapshots/TestPrerequisites-captureABC-fails: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | 5 | # ================================ 6 | # Captures Terminated With Errors 7 | # ================================ 8 | the capture cannot run due to the following error(s): 9 | - user "flow_capture" cannot read from table "test.prerequisites_39889097" 10 | 11 | -------------------------------------------------------------------------------- /source-mysql/.snapshots/TestPrerequisites-validateAB: -------------------------------------------------------------------------------- 1 | no error 2 | -------------------------------------------------------------------------------- /source-mysql/.snapshots/TestPrerequisites-validateABC-fails: -------------------------------------------------------------------------------- 1 | the capture cannot run due to the following error(s): 2 | - user "flow_capture" cannot read from table "test.prerequisites_39889097" 3 | -------------------------------------------------------------------------------- /source-mysql/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-mysql 2 | 3 | ## v2, 2022-10-17 4 | - Use new network-tunnel 5 | 6 | ## v1, 2022-07-27 7 | - Beginning of changelog. 8 | -------------------------------------------------------------------------------- /source-mysql/VARIANTS: -------------------------------------------------------------------------------- 1 | source-mariadb 2 | source-amazon-aurora-mysql 3 | source-google-cloud-sql-mysql 4 | source-amazon-rds-mysql 5 | source-amazon-rds-mariadb -------------------------------------------------------------------------------- /source-mysql/VERSION: -------------------------------------------------------------------------------- 1 | v3 2 | -------------------------------------------------------------------------------- /source-notion/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /source-notion/acmeCo/flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | collections: 3 | acmeCo/blocks: 4 | schema: blocks.schema.yaml 5 | key: 6 | - /id 7 | acmeCo/comments: 8 | schema: comments.schema.yaml 9 | key: 10 | - /id 11 | acmeCo/databases: 12 | schema: databases.schema.yaml 13 | key: 14 | - /id 15 | acmeCo/pages: 16 | schema: pages.schema.yaml 17 | key: 18 | - /id 19 | acmeCo/users: 20 | schema: users.schema.yaml 21 | key: 22 | - /id 23 | -------------------------------------------------------------------------------- /source-notion/source_notion/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2021 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | from .source import SourceNotion 7 | 8 | __all__ = ["SourceNotion"] 9 | -------------------------------------------------------------------------------- /source-notion/source_notion/run.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | import sys 7 | 8 | from airbyte_cdk.entrypoint import launch 9 | from source_notion import SourceNotion 10 | 11 | 12 | def run(): 13 | source = SourceNotion() 14 | launch(source, sys.argv[1:]) 15 | -------------------------------------------------------------------------------- /source-notion/source_notion/schemas/shared/child.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "properties": { 6 | "title": { "type": "string" } 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /source-notion/source_notion/schemas/shared/date.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": ["null", "object"], 4 | "additionalProperties": true, 5 | "properties": { 6 | "start": { "type": ["null", "string"] }, 7 | "end": { "type": ["null", "string"] }, 8 | "time_zone": { "type": ["null", "string"] } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /source-notion/source_notion/schemas/shared/emoji.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": ["null", "object"], 4 | "additionalProperties": true, 5 | "properties": { 6 | "type": { 7 | "type": "string" 8 | }, 9 | "emoji": { 10 | "type": "string" 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /source-notion/source_notion/schemas/shared/heading.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": ["null", "object"], 4 | "additionalProperties": true, 5 | "properties": { 6 | "color": { "type": "string" }, 7 | "rich_text": { "type": "array", "items": { "$ref": "rich_text.json" } }, 8 | "is_toggleable": { "type": "boolean" } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /source-notion/source_notion/schemas/shared/icon.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "anyOf": [{ "$ref": "file.json" }, { "$ref": "emoji.json" }] 4 | } 5 | -------------------------------------------------------------------------------- /source-notion/source_notion/schemas/shared/text_element.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "additionalProperties": true, 5 | "properties": { 6 | "color": { "type": "string" }, 7 | "rich_text": { "type": "array", "items": { "$ref": "rich_text.json" } }, 8 | "children": { "type": "array", "items": { "type": "object" } } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /source-notion/source_notion/schemas/users.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "$ref": "user.json" 4 | } 5 | -------------------------------------------------------------------------------- /source-notion/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-notion/tests/__init__.py -------------------------------------------------------------------------------- /source-oracle-batch/.snapshots/TestSchemaFilter-FilteredOut: -------------------------------------------------------------------------------- 1 | (no bindings) 2 | -------------------------------------------------------------------------------- /source-oracle-batch/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-oracle-batch 2 | 3 | ## v1, 2025-02-13 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-oracle-batch/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-oracle/.snapshots/TestConfigURI-Basic: -------------------------------------------------------------------------------- 1 | oracle://will:secret1234@example.com:1521/somedb?PREFETCH_ROWS=1 2 | config valid 3 | -------------------------------------------------------------------------------- /source-oracle/.snapshots/TestGeneric-EmptyTable-init: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | {"bindingStateV1":{"C%23%23FLOW_TEST_LOGMINER%2FT91431165":{"backfilled":0,"key_columns":["ID"],"mode":"Active"}},"cursor":{"PendingTransactions":{},"SCN":111111111"}} 5 | 6 | -------------------------------------------------------------------------------- /source-oracle/.snapshots/TestGeneric-MultipleStreams-capture3: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | {"bindingStateV1":{"C%23%23FLOW_TEST_LOGMINER%2FT14930049":{"backfilled":3,"key_columns":["ID"],"mode":"Active"},"C%23%23FLOW_TEST_LOGMINER%2FT26016615":{"backfilled":0,"mode":"Ignore"},"C%23%23FLOW_TEST_LOGMINER%2FT30084965":{"backfilled":3,"key_columns":["ID"],"mode":"Active"}},"cursor":{"PendingTransactions":{},"SCN":111111111"}} 5 | 6 | -------------------------------------------------------------------------------- /source-oracle/.snapshots/TestGeneric-ReplicationOnly-backfill: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | {"bindingStateV1":{"C%23%23FLOW_TEST_LOGMINER%2FT34322067":{"backfilled":0,"mode":"Active"}},"cursor":{"PendingTransactions":{},"SCN":111111111"}} 5 | 6 | -------------------------------------------------------------------------------- /source-oracle/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-outreach/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-outreach/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | version = "0.1.0" 3 | name = "source_outreach" 4 | description = "" 5 | authors = [ "Alex Bair "] 6 | 7 | [tool.poetry.dependencies] 8 | estuary-cdk = {path="../estuary-cdk", develop = true} 9 | python = "^3.11" 10 | pydantic = "^2" 11 | 12 | [tool.poetry.group.dev.dependencies] 13 | debugpy = "^1.8.0" 14 | mypy = "^1.8.0" 15 | pytest = "^7.4.3" 16 | pytest-insta = "^0.3.0" 17 | 18 | [build-system] 19 | requires = ["poetry-core"] 20 | build-backend = "poetry.core.masonry.api" -------------------------------------------------------------------------------- /source-outreach/source_outreach/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_outreach 3 | 4 | asyncio.run(source_outreach.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-outreach/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-outreach/tests/__init__.py -------------------------------------------------------------------------------- /source-pendo/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /source-pendo/source_pendo/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_pendo 3 | 4 | asyncio.run(source_pendo.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-pendo/test.flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | captures: 3 | acmeCo/source-pendo: 4 | endpoint: 5 | local: 6 | command: 7 | - python 8 | - "-m" 9 | - source_pendo 10 | config: 11 | startDate: "2024-08-27T00:00:00Z" 12 | credentials: 13 | access_token: notarealapikey 14 | credentials_title: Private App Credentials 15 | bindings: [] 16 | -------------------------------------------------------------------------------- /source-pendo/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-pendo/tests/__init__.py -------------------------------------------------------------------------------- /source-pokemon/pyproject.toml: -------------------------------------------------------------------------------- 1 | [tool.poetry] 2 | name = "source_pokemon" 3 | version = "0.1.0" 4 | description = "" 5 | authors = ["Johnny Graettinger "] 6 | 7 | [tool.poetry.dependencies] 8 | airbyte-cdk = "^0.52" 9 | estuary-cdk = {path="../estuary-cdk", develop = true} 10 | python = "^3.11" 11 | types-requests = "^2.31" 12 | 13 | [build-system] 14 | requires = ["poetry-core"] 15 | build-backend = "poetry.core.masonry.api" 16 | -------------------------------------------------------------------------------- /source-pokemon/source_pokemon/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | from .source import SourcePokemon 3 | 4 | __all__ = ["SourcePokemon"] 5 | -------------------------------------------------------------------------------- /source-pokemon/source_pokemon/__main__.py: -------------------------------------------------------------------------------- 1 | import estuary_cdk.pydantic_polyfill # Must be first. 2 | 3 | import asyncio 4 | from estuary_cdk import shim_airbyte_cdk 5 | from .source import SourcePokemon 6 | 7 | asyncio.run( 8 | shim_airbyte_cdk.CaptureShim( 9 | delegate=SourcePokemon(), 10 | oauth2=None, 11 | schema_inference=True, 12 | ).serve() 13 | ) 14 | -------------------------------------------------------------------------------- /source-pokemon/source_pokemon/pokemon_list.py: -------------------------------------------------------------------------------- 1 | """ 2 | pokemon_list.py includes a list of all known pokemon for config validation in source.py. 3 | """ 4 | 5 | POKEMON_LIST = [ 6 | "bulbasaur", 7 | "charizard", 8 | "wartortle", 9 | "pikachu", 10 | "crobat", 11 | ] -------------------------------------------------------------------------------- /source-pokemon/source_pokemon/schemas/pokemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "object", 3 | "x-infer-schema": true 4 | } -------------------------------------------------------------------------------- /source-pokemon/source_pokemon/spec.yaml: -------------------------------------------------------------------------------- 1 | documentationUrl: https://docs.airbyte.com/integrations/sources/pokeapi 2 | connectionSpecification: 3 | $schema: http://json-schema.org/draft-07/schema# 4 | title: Pokeapi Spec 5 | type: object 6 | required: 7 | - pokemon_name 8 | properties: 9 | pokemon_name: 10 | type: string 11 | description: Pokemon requested from the API. 12 | pattern: ^[a-z0-9_\-]+$ 13 | examples: 14 | - ditto 15 | - luxray 16 | - snorlax -------------------------------------------------------------------------------- /source-postgres-batch/.snapshots/TestQueryTemplates-MultiCursorFirstQuery: -------------------------------------------------------------------------------- 1 | SELECT * FROM "test"."foobar" ORDER BY "major", "minor"; 2 | 3 | -------------------------------------------------------------------------------- /source-postgres-batch/.snapshots/TestQueryTemplates-MultiCursorSubsequentQuery: -------------------------------------------------------------------------------- 1 | SELECT * FROM "test"."foobar" WHERE ("major" > $1) OR ("major" = $1 AND "minor" > $2) ORDER BY "major", "minor"; 2 | 3 | -------------------------------------------------------------------------------- /source-postgres-batch/.snapshots/TestQueryTemplates-SingleCursorFirstQuery: -------------------------------------------------------------------------------- 1 | SELECT * FROM "test"."foobar" ORDER BY "updated_at"; 2 | 3 | -------------------------------------------------------------------------------- /source-postgres-batch/.snapshots/TestQueryTemplates-SingleCursorSubsequentQuery: -------------------------------------------------------------------------------- 1 | SELECT * FROM "test"."foobar" WHERE ("updated_at" > $1) ORDER BY "updated_at"; 2 | 3 | -------------------------------------------------------------------------------- /source-postgres-batch/.snapshots/TestQueryTemplates-XMinFirstQuery: -------------------------------------------------------------------------------- 1 | SELECT xmin AS txid, * FROM "test"."foobar" ORDER BY xmin::text::bigint; 2 | -------------------------------------------------------------------------------- /source-postgres-batch/.snapshots/TestQueryTemplates-XMinSubsequentQuery: -------------------------------------------------------------------------------- 1 | SELECT xmin AS txid, * FROM "test"."foobar" 2 | WHERE (((xmin::text::bigint - $1::bigint)<<32)>>32) > 0 AND xmin::text::bigint >= 3 3 | ORDER BY (((xmin::text::bigint - $1::bigint)<<32)>>32); 4 | -------------------------------------------------------------------------------- /source-postgres-batch/.snapshots/TestSchemaFilter-FilteredOut: -------------------------------------------------------------------------------- 1 | (no bindings) 2 | -------------------------------------------------------------------------------- /source-postgres-batch/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-postgres-batch 2 | 3 | ## v1, 2023-07-31 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-postgres-batch/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestConfigURI-Basic: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb?application_name=estuary_flow 2 | config valid 3 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestConfigURI-IncorrectSSL: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb?application_name=estuary_flow&sslmode=whoops-this-isnt-right 2 | invalid 'sslmode' configuration: unknown setting "whoops-this-isnt-right" 3 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestConfigURI-RequireSSL: -------------------------------------------------------------------------------- 1 | postgres://will:secret1234@example.com:5432/somedb?application_name=estuary_flow&sslmode=verify-full 2 | config valid 3 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestDiscoveryExcludesSystemSchemas: -------------------------------------------------------------------------------- 1 | (no output) 2 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestGeneric-MissingTable: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | 5 | # ================================ 6 | # Captures Terminated With Errors 7 | # ================================ 8 | the capture cannot run due to the following error(s): 9 | - user "flow_capture" cannot read from table "test.generic_missingtable_27607177" 10 | 11 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestGeneric-StressCorrectness: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Invariant Violations 3 | # ================================ 4 | no invariant violations observed 5 | 6 | # ================================ 7 | # Final State Checkpoint 8 | # ================================ 9 | {"bindingStateV1":{"test%2Fgeneric_stresscorrectness_51314288":{"backfilled":999,"key_columns":["id"],"mode":"Active"}},"cursor":"0/1111111"} 10 | 11 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestKeylessBackfillQueryGeneration: -------------------------------------------------------------------------------- 1 | --- no_xid_filtering --- 2 | SELECT ctid, * FROM "public"."users" WHERE ctid > $1 LIMIT 100; 3 | 4 | --- with_xid_filtering --- 5 | SELECT ctid, xmin::text AS xmin, * FROM "public"."users" WHERE ctid > $1 AND ((RANDOM() < 0.001) OR ((xmin::text::bigint >= 3) AND ((((xmin::text::bigint - 12345::bigint)<<32)>>32) >= 0) AND ((((txid_snapshot_xmax(txid_current_snapshot()) - xmin::text::bigint)<<32)>>32) >= 0))) LIMIT 100; 6 | 7 | 8 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestPrerequisites-captureABC-fails: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | 5 | # ================================ 6 | # Captures Terminated With Errors 7 | # ================================ 8 | the capture cannot run due to the following error(s): 9 | - user "flow_capture" cannot read from table "test.prerequisites_35527129" 10 | 11 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestPrerequisites-validateAB: -------------------------------------------------------------------------------- 1 | no error 2 | -------------------------------------------------------------------------------- /source-postgres/.snapshots/TestPrerequisites-validateABC-fails: -------------------------------------------------------------------------------- 1 | the capture cannot run due to the following error(s): 2 | - user "flow_capture" cannot read from table "test.prerequisites_35527129" 3 | -------------------------------------------------------------------------------- /source-postgres/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-postgres 2 | 3 | ## v2, 2022-10-17 4 | - Use new network-tunnel 5 | 6 | ## v1, 2022-07-27 7 | - Beginning of changelog. 8 | -------------------------------------------------------------------------------- /source-postgres/VARIANTS: -------------------------------------------------------------------------------- 1 | source-alloydb 2 | source-amazon-aurora-postgres 3 | source-google-cloud-sql-postgres 4 | source-amazon-rds-postgres 5 | source-supabase-postgres 6 | source-neon-postgres 7 | -------------------------------------------------------------------------------- /source-postgres/VERSION: -------------------------------------------------------------------------------- 1 | v3 2 | -------------------------------------------------------------------------------- /source-recharge/sample_files/sample_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "access_token": "", 3 | "start_date": "2021-05-01T00:00:00Z" 4 | } 5 | -------------------------------------------------------------------------------- /source-recharge/source_recharge/__init__.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | from .source import SourceRecharge 7 | 8 | __all__ = ["SourceRecharge"] 9 | -------------------------------------------------------------------------------- /source-recharge/source_recharge/__main__.py: -------------------------------------------------------------------------------- 1 | import estuary_cdk.pydantic_polyfill # Must be first. 2 | import estuary_cdk.requests_session_send_patch # Must be second. 3 | 4 | import asyncio 5 | import urllib 6 | from estuary_cdk import shim_airbyte_cdk, flow 7 | from source_recharge import SourceRecharge 8 | 9 | 10 | asyncio.run( 11 | shim_airbyte_cdk.CaptureShim( 12 | delegate=SourceRecharge(), 13 | oauth2=None, 14 | schema_inference=False, 15 | ).serve() 16 | ) -------------------------------------------------------------------------------- /source-recharge/source_recharge/run.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | import sys 7 | 8 | from airbyte_cdk.entrypoint import launch 9 | from source_recharge import SourceRecharge 10 | 11 | 12 | def run(): 13 | source = SourceRecharge() 14 | launch(source, sys.argv[1:]) 15 | -------------------------------------------------------------------------------- /source-recharge/source_recharge/schemas/collections.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json-schema.org/draft-07/schema#", 3 | "type": "object", 4 | "required": ["id"], 5 | "properties": { 6 | "id": { 7 | "type": ["integer"] 8 | }, 9 | "name": { 10 | "type": ["null", "string"] 11 | }, 12 | "created_at": { 13 | "type": ["null", "string"], 14 | "format": "date-time" 15 | }, 16 | "updated_at": { 17 | "type": ["null", "string"], 18 | "format": "date-time" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /source-recharge/test.flow.yaml: -------------------------------------------------------------------------------- 1 | captures: 2 | acmeCo/source-recharge: 3 | endpoint: 4 | local: 5 | command: 6 | - python 7 | - "-m" 8 | - source_recharge 9 | config: 10 | access_token: sk_2x2_248826b763dbb494b939e4360bab8524adf00092655a25cd556d4c886e4fa573 11 | start_date: "2020-01-01T00:00:00Z" 12 | use_orders_deprecated_api: true 13 | bindings: [] 14 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestQueryTemplate-FirstNoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM "testdata"."foobar"; 2 | 3 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestQueryTemplate-FirstOneCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM "testdata"."foobar" ORDER BY `ka`; 2 | 3 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestQueryTemplate-FirstThreeCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM "testdata"."foobar" ORDER BY `ka`, `kb`, `kc`; 2 | 3 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestQueryTemplate-FirstTwoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM "testdata"."foobar" ORDER BY `ka`, `kb`; 2 | 3 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestQueryTemplate-SubsequentNoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM "testdata"."foobar"; 2 | 3 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestQueryTemplate-SubsequentOneCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM "testdata"."foobar" WHERE (`ka` > $1) ORDER BY `ka`; 2 | 3 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestQueryTemplate-SubsequentThreeCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM "testdata"."foobar" WHERE (`ka` > $1) OR (`ka` = $1 AND `kb` > $2) OR (`ka` = $1 AND `kb` = $2 AND `kc` > $3) ORDER BY `ka`, `kb`, `kc`; 2 | 3 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestQueryTemplate-SubsequentTwoCursor: -------------------------------------------------------------------------------- 1 | SELECT * FROM "testdata"."foobar" WHERE (`ka` > $1) OR (`ka` = $1 AND `kb` > $2) ORDER BY `ka`, `kb`; 2 | 3 | -------------------------------------------------------------------------------- /source-redshift-batch/.snapshots/TestSchemaFilter-FilteredOut: -------------------------------------------------------------------------------- 1 | (no bindings) 2 | -------------------------------------------------------------------------------- /source-redshift-batch/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-redshift-batch 2 | 3 | ## v1, 2024-02-26 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-redshift-batch/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-s3/.gitignore: -------------------------------------------------------------------------------- 1 | /source-s3 2 | -------------------------------------------------------------------------------- /source-s3/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-s3 2 | 3 | ## v2, 2022-09-23 4 | 5 | - Changed "ascendingKeys" & "endpoint" to be advanced configuration options. 6 | 7 | ## v1, 2022-07-27 8 | 9 | - Beginning of changelog. 10 | -------------------------------------------------------------------------------- /source-s3/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /source-sage-intacct/source_sage_intacct/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_sage_intacct 3 | 4 | asyncio.run(source_sage_intacct.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-sage-intacct/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-sage-intacct/tests/__init__.py -------------------------------------------------------------------------------- /source-salesforce-native/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-salesforce-native/source_salesforce_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_salesforce_native 3 | 4 | asyncio.run(source_salesforce_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-salesforce-native/test.flow.yaml: -------------------------------------------------------------------------------- 1 | --- 2 | captures: 3 | acmeCo/source-salesforce-native: 4 | endpoint: 5 | local: 6 | command: 7 | - python 8 | - "-m" 9 | - source_salesforce_native 10 | config: config.yaml 11 | bindings: [] 12 | -------------------------------------------------------------------------------- /source-salesforce-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-salesforce-native/tests/__init__.py -------------------------------------------------------------------------------- /source-sftp/.snapshots/TestListing-recursive_otherDir: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /source-sftp/.snapshots/TestListing-recursive_startAt_root-sub-y.csv: -------------------------------------------------------------------------------- 1 | { 2 | "Path": "root/sub/y.csv", 3 | "IsPrefix": false, 4 | "ContentSum": "", 5 | "Size": 18, 6 | "ContentType": "", 7 | "ContentEncoding": "", 8 | "ModTime": "2017-07-14T02:40:00Z", 9 | "Extra": null 10 | } 11 | { 12 | "Path": "root/sub/z.csv", 13 | "IsPrefix": false, 14 | "ContentSum": "", 15 | "Size": 18, 16 | "ContentType": "", 17 | "ContentEncoding": "", 18 | "ModTime": "2017-07-14T02:40:00Z", 19 | "Extra": null 20 | } 21 | 22 | -------------------------------------------------------------------------------- /source-sftp/.snapshots/TestListing-recursive_startAt_z: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /source-sftp/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-sftp 2 | 3 | ## v1, 2023-05-11 4 | 5 | - Beginning of changelog. 6 | -------------------------------------------------------------------------------- /source-sftp/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-shopify-native/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_shopify_native 3 | 4 | asyncio.run(source_shopify_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/collections/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-shopify-native/source_shopify_native/graphql/collections/__init__.py -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/customers/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-shopify-native/source_shopify_native/graphql/customers/__init__.py -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/customers/metafields.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from ..metafields import MetafieldsResource 3 | 4 | 5 | class CustomerMetafields(MetafieldsResource): 6 | PARENT_ID_KEY = "gid://shopify/Customer/" 7 | 8 | @staticmethod 9 | def build_query(start: datetime, end: datetime) -> str: 10 | return CustomerMetafields.build_query_with_fragment( 11 | "customers", 12 | "UPDATED_AT", 13 | start, 14 | end, 15 | ) 16 | -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/inventory/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-shopify-native/source_shopify_native/graphql/inventory/__init__.py -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/locations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-shopify-native/source_shopify_native/graphql/locations/__init__.py -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/locations/metafields.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from ..metafields import MetafieldsResource 3 | 4 | 5 | class LocationMetafields(MetafieldsResource): 6 | PARENT_ID_KEY = "gid://shopify/Location/" 7 | 8 | @staticmethod 9 | def build_query(start: datetime, end: datetime) -> str: 10 | return LocationMetafields.build_query_with_fragment( 11 | "locations", 12 | None, 13 | start, 14 | end, 15 | ) 16 | -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/orders/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-shopify-native/source_shopify_native/graphql/orders/__init__.py -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/orders/metafields.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from ..metafields import MetafieldsResource 3 | 4 | 5 | class OrderMetafields(MetafieldsResource): 6 | PARENT_ID_KEY = "gid://shopify/Order/" 7 | 8 | @staticmethod 9 | def build_query(start: datetime, end: datetime) -> str: 10 | return OrderMetafields.build_query_with_fragment( 11 | "orders", 12 | "UPDATED_AT", 13 | start, 14 | end, 15 | ) 16 | -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/products/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-shopify-native/source_shopify_native/graphql/products/__init__.py -------------------------------------------------------------------------------- /source-shopify-native/source_shopify_native/graphql/products/metafields.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from ..metafields import MetafieldsResource 3 | 4 | 5 | class ProductMetafields(MetafieldsResource): 6 | PARENT_ID_KEY = "gid://shopify/Product/" 7 | 8 | @staticmethod 9 | def build_query(start: datetime, end: datetime) -> str: 10 | return ProductMetafields.build_query_with_fragment( 11 | "products", 12 | "UPDATED_AT", 13 | start, 14 | end, 15 | ) 16 | -------------------------------------------------------------------------------- /source-shopify-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-shopify-native/tests/__init__.py -------------------------------------------------------------------------------- /source-shopify/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-shopify/source_shopify/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | tap-shopify 4 | 5 | 6 | 7 | 8 | 9 | org.python.pydev.PyDevBuilder 10 | 11 | 12 | 13 | 14 | 15 | org.python.pydev.pythonNature 16 | 17 | 18 | -------------------------------------------------------------------------------- /source-shopify/source_shopify/.pydevproject: -------------------------------------------------------------------------------- 1 | 2 | 3 | Default 4 | python interpreter 5 | 6 | -------------------------------------------------------------------------------- /source-shopify/source_shopify/.secrets/.gitignore: -------------------------------------------------------------------------------- 1 | # IMPORTANT! This folder is hidden from git - if you need to store config files or other secrets, 2 | # make sure those are never staged for commit into your git repo. You can store them here or another 3 | # secure location. 4 | # 5 | # Note: This may be redundant with the global .gitignore for, and is provided 6 | # for redundancy. If the `.secrets` folder is not needed, you may delete it 7 | # from the project. 8 | 9 | * 10 | !.gitignore 11 | -------------------------------------------------------------------------------- /source-shopify/source_shopify/mypy.ini: -------------------------------------------------------------------------------- 1 | [mypy] 2 | python_version = 3.9 3 | warn_unused_configs = True 4 | 5 | [mypy-backoff.*] 6 | ignore_missing_imports = True 7 | -------------------------------------------------------------------------------- /source-shopify/source_shopify/output/.gitignore: -------------------------------------------------------------------------------- 1 | # This directory is used as a target by target-jsonl, so ignore all files 2 | 3 | * 4 | !.gitignore 5 | -------------------------------------------------------------------------------- /source-shopify/source_shopify/tap_shopify/__init__.py: -------------------------------------------------------------------------------- 1 | """Default init.""" 2 | -------------------------------------------------------------------------------- /source-shopify/source_shopify/tap_shopify/auth.py: -------------------------------------------------------------------------------- 1 | """tap_shopify Authentication.""" 2 | 3 | from singer_sdk.authenticators import APIKeyAuthenticator, SingletonMeta 4 | 5 | 6 | # The SingletonMeta metaclass makes the streams reuse the same authenticator instance. 7 | class tap_shopifyAuthenticator(APIKeyAuthenticator, metaclass=SingletonMeta): 8 | """Authenticator class for tap_shopify.""" 9 | -------------------------------------------------------------------------------- /source-shopify/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-shopify/tests/__init__.py -------------------------------------------------------------------------------- /source-snowflake/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-snowflake 2 | 3 | ## v1, 2024-01-19 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-snowflake/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-sqlserver-batch/.snapshots/TestQueryTemplates-MultiCursorFirstQuery: -------------------------------------------------------------------------------- 1 | SELECT * FROM [test].[foobar] ORDER BY [major], [minor]; 2 | 3 | -------------------------------------------------------------------------------- /source-sqlserver-batch/.snapshots/TestQueryTemplates-MultiCursorSubsequentQuery: -------------------------------------------------------------------------------- 1 | SELECT * FROM [test].[foobar] WHERE ([major] > @p1) OR ([major] = @p1 AND [minor] > @p2) ORDER BY [major], [minor]; 2 | 3 | -------------------------------------------------------------------------------- /source-sqlserver-batch/.snapshots/TestQueryTemplates-SingleCursorFirstQuery: -------------------------------------------------------------------------------- 1 | SELECT * FROM [test].[foobar] ORDER BY [updated_at]; 2 | 3 | -------------------------------------------------------------------------------- /source-sqlserver-batch/.snapshots/TestQueryTemplates-SingleCursorSubsequentQuery: -------------------------------------------------------------------------------- 1 | SELECT * FROM [test].[foobar] WHERE ([updated_at] > @p1) ORDER BY [updated_at]; 2 | 3 | -------------------------------------------------------------------------------- /source-sqlserver-batch/.snapshots/TestSchemaFilter-FilteredOut: -------------------------------------------------------------------------------- 1 | (no bindings) 2 | -------------------------------------------------------------------------------- /source-sqlserver-batch/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-sqlserver-batch 2 | 3 | ## v1, 2025-02-26 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-sqlserver-batch/VERSION: -------------------------------------------------------------------------------- 1 | v1 -------------------------------------------------------------------------------- /source-sqlserver/.snapshots/TestCaptureInstanceCleanup-WithoutDBO: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | 5 | # ================================ 6 | # Captures Terminated With Errors 7 | # ================================ 8 | the capture cannot run due to the following error(s): 9 | - user "flow_capture" does not have the "db_owner" role which is required for automatic change table cleanup 10 | 11 | # Capture Instance Contained 40 Rows At Finish 12 | -------------------------------------------------------------------------------- /source-sqlserver/.snapshots/TestGeneric-MissingTable: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | 5 | # ================================ 6 | # Captures Terminated With Errors 7 | # ================================ 8 | the capture cannot run due to the following error(s): 9 | - table "dbo.test_generic_missingtable_27607177" has no capture instances and user "flow_capture" cannot create one 10 | 11 | -------------------------------------------------------------------------------- /source-sqlserver/.snapshots/TestGeneric-StressCorrectness: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Invariant Violations 3 | # ================================ 4 | no invariant violations observed 5 | 6 | # ================================ 7 | # Final State Checkpoint 8 | # ================================ 9 | {"bindingStateV1":{"dbo%2Ftest_Generic_StressCorrectness_51314288":{"backfilled":999,"key_columns":["id"],"mode":"Active"}},"cursor":"AAAAAAAAAAAAAA=="} 10 | 11 | -------------------------------------------------------------------------------- /source-sqlserver/.snapshots/TestPrerequisites-captureABC-fails: -------------------------------------------------------------------------------- 1 | # ================================ 2 | # Final State Checkpoint 3 | # ================================ 4 | 5 | # ================================ 6 | # Captures Terminated With Errors 7 | # ================================ 8 | the capture cannot run due to the following error(s): 9 | - table "dbo.test_prerequisites_33352647" has no capture instances and user "flow_capture" cannot create one 10 | 11 | -------------------------------------------------------------------------------- /source-sqlserver/.snapshots/TestPrerequisites-validateAB: -------------------------------------------------------------------------------- 1 | no error 2 | -------------------------------------------------------------------------------- /source-sqlserver/.snapshots/TestPrerequisites-validateABC-fails: -------------------------------------------------------------------------------- 1 | the capture cannot run due to the following error(s): 2 | - table "dbo.test_prerequisites_33352647" has no capture instances and user "flow_capture" cannot create one 3 | -------------------------------------------------------------------------------- /source-sqlserver/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-sqlserver 2 | 3 | ## v0, 2023-01-05 4 | 5 | - Beginning of changelog and start of connector implementation work. -------------------------------------------------------------------------------- /source-sqlserver/VARIANTS: -------------------------------------------------------------------------------- 1 | source-azure-sqlserver 2 | source-google-cloud-sql-sqlserver 3 | source-amazon-rds-sqlserver -------------------------------------------------------------------------------- /source-sqlserver/VERSION: -------------------------------------------------------------------------------- 1 | v0 -------------------------------------------------------------------------------- /source-stripe-native/source_stripe_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_stripe_native 3 | 4 | asyncio.run(source_stripe_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-stripe-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-stripe-native/tests/__init__.py -------------------------------------------------------------------------------- /source-test/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # source-test 2 | 3 | ## v1, 2022-07-27 4 | - Beginning of changelog. 5 | -------------------------------------------------------------------------------- /source-test/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-twilio/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /source-twilio/source_twilio/__main__.py: -------------------------------------------------------------------------------- 1 | import estuary_cdk.pydantic_polyfill # Must be first. 2 | import estuary_cdk.requests_session_send_patch # Must be second. 3 | 4 | import asyncio 5 | import urllib 6 | from estuary_cdk import shim_airbyte_cdk, flow 7 | from source_twilio import SourceTwilio 8 | 9 | asyncio.run( 10 | shim_airbyte_cdk.CaptureShim( 11 | delegate=SourceTwilio(), 12 | oauth2=None, 13 | schema_inference=False, 14 | ).serve() 15 | ) 16 | -------------------------------------------------------------------------------- /source-twilio/source_twilio/run.py: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) 2023 Airbyte, Inc., all rights reserved. 3 | # 4 | 5 | 6 | import sys 7 | 8 | from airbyte_cdk.entrypoint import launch 9 | from source_twilio import SourceTwilio 10 | 11 | 12 | def run(): 13 | source = SourceTwilio() 14 | launch(source, sys.argv[1:]) 15 | -------------------------------------------------------------------------------- /source-twilio/source_twilio/schemas/keys.json: -------------------------------------------------------------------------------- 1 | { 2 | "properties": { 3 | "date_created": { 4 | "format": "date-time", 5 | "type": ["null", "string"] 6 | }, 7 | "date_updated": { 8 | "format": "date-time", 9 | "type": ["null", "string"] 10 | }, 11 | "friendly_name": { 12 | "type": ["null", "string"] 13 | }, 14 | "sid": { 15 | "type": "string" 16 | } 17 | }, 18 | "type": "object", 19 | "required": ["sid"], 20 | "additionalProperties": true 21 | } 22 | -------------------------------------------------------------------------------- /source-twilio/test.flow.yaml: -------------------------------------------------------------------------------- 1 | captures: 2 | acmeCo/source-twilio: 3 | autoDiscover: 4 | addNewBindings: true 5 | evolveIncompatibleCollections: true 6 | endpoint: 7 | local: 8 | command: 9 | - python 10 | - "-m" 11 | - source_twilio 12 | config: config.yaml 13 | bindings: [] 14 | -------------------------------------------------------------------------------- /source-twilio/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-twilio/tests/__init__.py -------------------------------------------------------------------------------- /source-yahoo-finance/__main__.py: -------------------------------------------------------------------------------- 1 | from flow_sdk import shim_singer_sdk 2 | from tap_investing.tap import TapInvesting 3 | 4 | shim_singer_sdk.CaptureShim( 5 | config_schema=TapInvesting.config_jsonschema, 6 | delegate_factory=TapInvesting, 7 | ).main() -------------------------------------------------------------------------------- /source-zendesk-support-native/VERSION: -------------------------------------------------------------------------------- 1 | v1 2 | -------------------------------------------------------------------------------- /source-zendesk-support-native/source_zendesk_support_native/__main__.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import source_zendesk_support_native 3 | 4 | asyncio.run(source_zendesk_support_native.Connector().serve()) 5 | -------------------------------------------------------------------------------- /source-zendesk-support-native/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-zendesk-support-native/tests/__init__.py -------------------------------------------------------------------------------- /source-zendesk-support/VERSION: -------------------------------------------------------------------------------- 1 | v2 2 | -------------------------------------------------------------------------------- /source-zendesk-support/source_zendesk_support/schemas/post_comment_votes.json: -------------------------------------------------------------------------------- 1 | { "$ref": "votes.json" } 2 | -------------------------------------------------------------------------------- /source-zendesk-support/source_zendesk_support/schemas/post_votes.json: -------------------------------------------------------------------------------- 1 | { "$ref": "votes.json" } 2 | -------------------------------------------------------------------------------- /source-zendesk-support/source_zendesk_support/schemas/tags.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": ["object"], 3 | "required": [ 4 | "name" 5 | ], 6 | "properties": { 7 | "count": { 8 | "type": ["null", "integer"] 9 | }, 10 | "name": { 11 | "type": "string" 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /source-zendesk-support/tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/source-zendesk-support/tests/__init__.py -------------------------------------------------------------------------------- /tests/files/a.csv.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/tests/files/a.csv.zip -------------------------------------------------------------------------------- /tests/files/b.csv: -------------------------------------------------------------------------------- 1 | id,canary 2 | 11,"amputation's" 3 | 12,"armament's" 4 | 13,"splatters" 5 | 14,"strengthen" 6 | 15,"Kringle's" 7 | 16,"grosbeak's" 8 | 17,"pieced" 9 | 18,"roaches" 10 | 19,"devilish" 11 | 20,"glucose's" 12 | -------------------------------------------------------------------------------- /tests/files/c.csv.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/tests/files/c.csv.gz -------------------------------------------------------------------------------- /tests/materialize/empty.fixture.json: -------------------------------------------------------------------------------- 1 | [] 2 | -------------------------------------------------------------------------------- /tests/materialize/empty.flow.json.template: -------------------------------------------------------------------------------- 1 | { 2 | "materializations": { 3 | "tests/${CONNECTOR}/materialize": { 4 | "endpoint": { 5 | "connector": { 6 | "image": "${CONNECTOR_IMAGE}", 7 | "config": ${CONNECTOR_CONFIG} 8 | } 9 | }, 10 | "bindings": [] 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /tests/materialize/materialize-bigquery/fetch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | function exportToJsonl() { 8 | go run ${TEST_DIR}/materialize-bigquery/fetch-data.go "$1" | jq -sc "{ \"table\": \"$1\", rows: . }" 9 | } 10 | 11 | exportToJsonl "simple" 12 | exportToJsonl "duplicate_keys" 13 | exportToJsonl "multiple_types" 14 | exportToJsonl "formatted_strings" 15 | exportToJsonl "unsigned_bigint" 16 | exportToJsonl "deletions" 17 | exportToJsonl "string_escaped_key" 18 | -------------------------------------------------------------------------------- /tests/materialize/materialize-cratedb/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -o errexit 3 | set -o pipefail 4 | set -o nounset 5 | ## Nothing to do because deleting the materialization also cleans up its tables. 6 | docker compose --file ./materialize-cratedb/docker-compose.yaml down || true -------------------------------------------------------------------------------- /tests/materialize/materialize-cratedb/fetch.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/estuary/connectors/60eb124d7924c6f07079bd34a0b6850c2d3759d5/tests/materialize/materialize-cratedb/fetch.sh -------------------------------------------------------------------------------- /tests/materialize/materialize-databricks/checks.sh: -------------------------------------------------------------------------------- 1 | # cleanup the snapshot by replacing uuids with a placeholder so that the test is reproducible 2 | SED_CMD="sed" 3 | if [ "$(uname -s)" = "Darwin" ]; then 4 | SED_CMD="gsed" 5 | fi 6 | $SED_CMD -i'' 's/.\{36\}\.json//g' ${SNAPSHOT} 7 | -------------------------------------------------------------------------------- /tests/materialize/materialize-dynamodb/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | docker compose -f materialize-dynamodb/docker-compose.yaml down -v 6 | -------------------------------------------------------------------------------- /tests/materialize/materialize-dynamodb/fetch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | function scanTable() { 8 | aws dynamodb --endpoint-url "$DYNAMODB_LOCAL_ENDPOINT" scan --table-name "$1" | 9 | jq "{ _table: \"$1\", rows: .Items }" 10 | } 11 | 12 | scanTable "simple" 13 | scanTable "duplicated-keys-standard" 14 | scanTable "multiple-types" 15 | scanTable "formatted-strings" 16 | -------------------------------------------------------------------------------- /tests/materialize/materialize-elasticsearch/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker compose -f materialize-elasticsearch/docker-compose.yaml down -v 5 | -------------------------------------------------------------------------------- /tests/materialize/materialize-firebolt/checks.sh: -------------------------------------------------------------------------------- 1 | # cleanup the snapshot by replacing s3 paths and bucket with a placeholder so that the test is reproducible 2 | SED_CMD="sed" 3 | if [ "$(uname -s)" = "Darwin" ]; then 4 | SED_CMD="gsed" 5 | fi 6 | 7 | $SED_CMD -i'' 's/"Bucket": "[^"]*"/"Bucket": ""/g' ${SNAPSHOT} 8 | $SED_CMD -i'' 's/"[^"]*\.json"/""/g' ${SNAPSHOT} 9 | $SED_CMD -i'' "s/'[^']*\.json'/''/g" ${SNAPSHOT} 10 | -------------------------------------------------------------------------------- /tests/materialize/materialize-firebolt/fetch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | function exportToJsonl() { 8 | go run "${TEST_DIR}"/materialize-firebolt/fetch-data.go "$1" | jq "{ "_table": \"$1\", rows: map(del(.flow_document)) }" 9 | } 10 | 11 | exportToJsonl "simple" 12 | exportToJsonl "duplicate_keys_standard" 13 | exportToJsonl "formatted_strings" 14 | exportToJsonl "long_string" 15 | exportToJsonl "deletions" 16 | -------------------------------------------------------------------------------- /tests/materialize/materialize-google-sheets/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | export SHEET_NAME=any 8 | export SHEET_COMMAND=cleanup 9 | 10 | go run ${TEST_DIR}/materialize-google-sheets/sheet-helper.go 11 | -------------------------------------------------------------------------------- /tests/materialize/materialize-google-sheets/fetch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | function exportToJsonl() { 8 | export SHEET_NAME="$1" 9 | export SHEET_COMMAND=fetch 10 | 11 | go run ${TEST_DIR}/materialize-google-sheets/sheet-helper.go 12 | } 13 | 14 | exportToJsonl "Simple" 15 | exportToJsonl "duplicate_keys" 16 | exportToJsonl "Multiple Types" 17 | -------------------------------------------------------------------------------- /tests/materialize/materialize-iceberg/checks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SED_CMD="sed" 4 | if [ "$(uname -s)" = "Darwin" ]; then 5 | SED_CMD="gsed" 6 | fi 7 | $SED_CMD -i'' -E 's|(/)[0-9a-fA-F-]{36}/[0-9a-fA-F-]{36}(\.)|\1/\2|g' ${SNAPSHOT} 8 | $SED_CMD -i'' "s|_${TABLE_SUFFIX}||g" ${SNAPSHOT} 9 | -------------------------------------------------------------------------------- /tests/materialize/materialize-iceberg/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | function purge() { 4 | ${ICEBERG_HELPER_CMD} --force purge ${NAMESPACE}."$1"_${TABLE_SUFFIX} 5 | } 6 | 7 | purge "simple" 8 | purge "duplicate_keys_standard" 9 | purge "multiple_types" 10 | purge "formatted_strings" 11 | purge "deletions" 12 | purge "binary_key" 13 | purge "string_escaped_key" 14 | -------------------------------------------------------------------------------- /tests/materialize/materialize-kafka/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | docker compose -f materialize-kafka/docker-compose.yaml down -v 6 | -------------------------------------------------------------------------------- /tests/materialize/materialize-kafka/fetch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | docker run --tty --rm --network flow-test \ 8 | edenhill/kcat:1.7.1 \ 9 | -b materialize-kafka-db-1.flow-test:9092 \ 10 | -t simple \ 11 | -o beginning \ 12 | -J \ 13 | -q \ 14 | -e | jq 'del(.ts)' | jq -s 'sort_by(.key)' 15 | -------------------------------------------------------------------------------- /tests/materialize/materialize-mongodb/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | docker compose --file ./materialize-mongodb/docker-compose.yaml down || true 8 | -------------------------------------------------------------------------------- /tests/materialize/materialize-mongodb/expected/duplicated-keys-standard.jsonl: -------------------------------------------------------------------------------- 1 | {"_id":"(1)","id":{"$numberInt":"1"},"int":{"$numberInt":"14"},"str":"str 6"} 2 | {"_id":"(2)","id":{"$numberInt":"2"},"int":{"$numberInt":"18"},"str":"str 7"} 3 | {"_id":"(3)","id":{"$numberInt":"3"},"int":{"$numberInt":"22"},"str":"str 8"} 4 | {"_id":"(4)","id":{"$numberInt":"4"},"int":{"$numberInt":"26"},"str":"str 9"} 5 | {"_id":"(5)","id":{"$numberInt":"5"},"int":{"$numberInt":"30"},"str":"str 10"} 6 | -------------------------------------------------------------------------------- /tests/materialize/materialize-mysql/checks.sh: -------------------------------------------------------------------------------- 1 | # check that the varchar column has been resized 2 | 3 | new_length=$(query "select character_maximum_length as c from information_schema.columns where table_name='long-string' and column_name='id';" | jq -c '.rows[0].c | values') 4 | 5 | if [[ "$new_length" != "257" ]]; then 6 | echo "id column of long-string table did not have expected length of 257, instead it had $new_length" 7 | exit 1 8 | fi 9 | -------------------------------------------------------------------------------- /tests/materialize/materialize-mysql/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | docker compose --file ./materialize-mysql/docker-compose.yaml down -v || true 8 | -------------------------------------------------------------------------------- /tests/materialize/materialize-pinecone/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | function clearNamespace() { 6 | go run ${TEST_DIR}/materialize-pinecone/fetch-data.go --clear-namespace "$1" 7 | } 8 | 9 | clearNamespace "simple" 10 | clearNamespace "duplicated-keys" 11 | clearNamespace "multiple-types" 12 | -------------------------------------------------------------------------------- /tests/materialize/materialize-pinecone/fetch.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | function exportToJsonl() { 8 | go run ${TEST_DIR}/materialize-pinecone/fetch-data.go "$1" 9 | } 10 | 11 | exportToJsonl "simple" 12 | exportToJsonl "duplicated-keys" 13 | exportToJsonl "multiple-types" 14 | -------------------------------------------------------------------------------- /tests/materialize/materialize-postgres/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | # Nothing to do because deleting the materialization also cleans up its tables. 8 | 9 | docker compose --file ./materialize-postgres/docker-compose.yaml down || true 10 | docker volume rm materialize-postgres_postgres_data || true -------------------------------------------------------------------------------- /tests/materialize/materialize-s3-iceberg/checks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | SED_CMD="sed" 4 | if [ "$(uname -s)" = "Darwin" ]; then 5 | SED_CMD="gsed" 6 | fi 7 | 8 | # File keys are represented in the connector state as random UUIDs and will be 9 | # replaced with a placeholder to make the test reproducable. 10 | $SED_CMD -i'' 's/[0-9a-f]\{8\}-[0-9a-f]\{4\}-[0-9a-f]\{4\}-[0-9a-f]\{4\}-[0-9a-f]\{12\}.parquet/.parquet/g' ${SNAPSHOT} 11 | -------------------------------------------------------------------------------- /tests/materialize/materialize-s3-iceberg/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | docker compose -f materialize-s3-iceberg/docker-compose.yaml down -v 8 | aws s3 rm $S3_DATA_URI --recursive 9 | -------------------------------------------------------------------------------- /tests/materialize/materialize-s3-parquet/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | docker rm -f "${LOCALSTACK_CONTAINER_NAME}" -------------------------------------------------------------------------------- /tests/materialize/materialize-snowflake/checks.sh: -------------------------------------------------------------------------------- 1 | # cleanup the snapshot by replacing uuids with a placeholder so that the test is reproducible 2 | SED_CMD="sed" 3 | if [ "$(uname -s)" = "Darwin" ]; then 4 | SED_CMD="gsed" 5 | fi 6 | $SED_CMD -i'' 's/@flow_v1\/.\{36\}//g' ${SNAPSHOT} 7 | $SED_CMD -i'' 's/"Path": ".*"/"Path": ""/g' ${SNAPSHOT} 8 | $SED_CMD -i'' 's/"PipeStartTime": ".\{1,\}"/"PipeStartTime": ""/g' ${SNAPSHOT} 9 | -------------------------------------------------------------------------------- /tests/materialize/materialize-sqlserver/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit 4 | set -o pipefail 5 | set -o nounset 6 | 7 | docker compose --file ./materialize-sqlserver/docker-compose.yaml down -v || true 8 | -------------------------------------------------------------------------------- /tests/source-dynamodb/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | docker compose -f source-dynamodb/docker-compose.yaml down -v 6 | -------------------------------------------------------------------------------- /tests/source-dynamodb/expected.txt: -------------------------------------------------------------------------------- 1 | id|canary 2 | 1|amputation's 3 | 10|glucose's 4 | 2|armament's 5 | 3|splatters 6 | 4|strengthen 7 | 5|Kringle's 8 | 6|grosbeak's 9 | 7|pieced 10 | 8|roaches 11 | 9|devilish 12 | -------------------------------------------------------------------------------- /tests/source-gcs/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | if [[ -n "$TEST_STREAM" ]]; then 6 | echo "deleting bucket $TEST_STREAM" 7 | gsutil rm -r "gs://$TEST_STREAM" 8 | echo "successfully deleted bucket" 9 | fi 10 | -------------------------------------------------------------------------------- /tests/source-kafka/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | docker compose -f source-kafka/docker-compose.yaml down -v 5 | -------------------------------------------------------------------------------- /tests/source-kinesis/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -e 2 | 3 | docker compose -f source-kinesis/docker-compose.yaml down -v 4 | -------------------------------------------------------------------------------- /tests/source-mysql/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Undoing database test setup" 4 | 5 | function sql { 6 | echo "mysql> " $@ 7 | echo "$@" | docker exec -i \ 8 | source-mysql-db-1 \ 9 | mysql $MYSQL_DATABASE \ 10 | --user=$MYSQL_USER \ 11 | --port=$MYSQL_PORT \ 12 | --host=$MYSQL_HOST \ 13 | --password=$MYSQL_PASSWORD \ 14 | --local-infile=1 15 | } 16 | 17 | sql "DROP TABLE IF EXISTS test.${TEST_STREAM};" 18 | -------------------------------------------------------------------------------- /tests/source-mysql/expected.txt: -------------------------------------------------------------------------------- 1 | id|canary 2 | 11|amputation's 3 | 12|armament's 4 | 13|splatters 5 | 14|strengthen 6 | 15|Kringle's 7 | 16|grosbeak's 8 | 17|pieced 9 | 18|roaches 10 | 19|devilish 11 | 20|glucose's 12 | -------------------------------------------------------------------------------- /tests/source-postgres/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Cleanup, cleanup!" 4 | 5 | function sql { 6 | echo "psql> " $@ 7 | 8 | docker exec \ 9 | -e PGUSER=$PGUSER \ 10 | -e PGPASSWORD=$PGPASSWORD \ 11 | -e PGDATABASE=$PGDATABASE \ 12 | source-postgres-db-1 \ 13 | psql -c "$@" 14 | } 15 | 16 | sql "DROP TABLE IF EXISTS ${TEST_STREAM};" 17 | -------------------------------------------------------------------------------- /tests/source-postgres/expected.txt: -------------------------------------------------------------------------------- 1 | id|canary 2 | 11|amputation's 3 | 12|armament's 4 | 13|splatters 5 | 14|strengthen 6 | 15|Kringle's 7 | 16|grosbeak's 8 | 17|pieced 9 | 18|roaches 10 | 19|devilish 11 | 20|glucose's 12 | -------------------------------------------------------------------------------- /tests/source-s3/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | docker stop "${LOCALSTACK_CONTAINER_NAME}" 6 | -------------------------------------------------------------------------------- /tests/source-s3/config.json.template: -------------------------------------------------------------------------------- 1 | { 2 | "awsAccessKeyId": "${AWS_ACCESS_KEY_ID}", 3 | "awsSecretAccessKey": "${AWS_SECRET_ACCESS_KEY}", 4 | "region": "${AWS_DEFAULT_REGION}", 5 | "bucket": "${TEST_S3_BUCKET}", 6 | "endpoint": "${TEST_S3_ENDPOINT}" 7 | } 8 | -------------------------------------------------------------------------------- /tests/source-s3/config.yaml.template: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /tests/source-sftp/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -e 4 | 5 | docker compose -f source-sftp/docker-compose.yaml down -v 6 | -------------------------------------------------------------------------------- /tests/source-sqlserver/cleanup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Undoing database test setup" 4 | 5 | function sql { 6 | echo "sql> " $@ 7 | echo -e "$@\nGO\n" | docker exec -i \ 8 | ${CONTAINER_NAME} \ 9 | /opt/mssql-tools18/bin/sqlcmd -C \ 10 | -U ${SQLSERVER_USER} \ 11 | -P ${SQLSERVER_PASSWORD} 12 | } 13 | 14 | sql "DROP TABLE IF EXISTS test.${TEST_STREAM};" 15 | -------------------------------------------------------------------------------- /tests/source-sqlserver/expected.txt: -------------------------------------------------------------------------------- 1 | id|canary 2 | 11|amputation's 3 | 12|armament's 4 | 13|splatters 5 | 14|strengthen 6 | 15|Kringle's 7 | 16|grosbeak's 8 | 17|pieced 9 | 18|roaches 10 | 19|devilish 11 | 20|glucose's 12 | --------------------------------------------------------------------------------