feat(CE): add mysql source and destination connectors#1032
feat(CE): add mysql source and destination connectors#1032dataengineergaurav wants to merge 5 commits into
Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds MySQL source and destination connectors (clients), configuration specs and metadata, registers the connectors in the integration loader and rollout, and updates the integrations gem version to 0.38.0 with comprehensive RSpec test suites. ChangesMySQL Connectors
Estimated code review effort🎯 4 (Complex) | ⏱️ ~50 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Implements MySQL connector supporting both source (read/discover/check_connection) and destination (write/discover/check_connection) operations. - Source connector: Sequel mysql2 adapter with limit/offset support - Destination connector: QueryBuilder-based SQL generation with db.run writes - Full test coverage: 9 source tests, 6 destination tests (all passing) - Registered in rollout.rb ENABLED_SOURCES and ENABLED_DESTINATIONS - Version bumped to 0.35.1 Closes Multiwoven#10
617fdfb to
e9bdeb3
Compare
There was a problem hiding this comment.
Actionable comments posted: 7
🧹 Nitpick comments (1)
integrations/spec/multiwoven/integrations/source/mysql/client_spec.rb (1)
92-109: ⚡ Quick winAssert that the SQL was actually batched in this example.
This test only toggles
limitandoffset; becausefetchis stubbed without inspecting its argument, it still passes ifbatched_queryis never applied. Please assert the query sent to Sequel contains the batch clause, or stubbatched_querydirectly.One way to make the expectation meaningful
- allow(sequel_client).to receive(:fetch).and_return(dataset) + expect(sequel_client) + .to receive(:fetch) + .with(a_string_matching(/LIMIT\s+100\s+OFFSET\s+1/i)) + .and_return(dataset)🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@integrations/spec/multiwoven/integrations/source/mysql/client_spec.rb` around lines 92 - 109, The test currently stubs sequel_client.fetch without verifying the SQL, so update it to assert the batched query is used: either set an expectation on sequel_client to receive(:fetch).with(a_string_including("LIMIT 100").and(a_string_including("OFFSET 1"))) when client.read(s_config) is called, or instead stub client.batched_query to return a known SQL string and assert fetch is called with that string; reference the test's s_config, client.read, client.batched_query, sequel_client.fetch and the limit/offset values (100/1) when making the assertion.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@integrations/lib/multiwoven/integrations/destination/mysql/client.rb`:
- Around line 7-13: The Sequel Database opened by create_connection is never
closed causing pooled connections to accumulate; for check_connection (and
likewise discover and write) assign the result of create_connection to a local
variable (e.g. db = create_connection(connection_config)) and wrap the work in a
begin/rescue/ensure block where the ensure calls db.disconnect (or db.disconnect
if method name differs in your Sequel version) if db is present, preserving
existing rescue behavior for errors; update discover and write the same way so
every created DB is always disconnected in an ensure.
- Around line 17-20: The SQL in discover builds query by interpolating
connection_config[:database] into query (query variable in discover), which
allows injection; change this to use a parameterized/bound query or properly
escape the schema value instead of direct interpolation: remove
"#{connection_config[:database]}" from the query string and pass
connection_config[:database] as a bound parameter when executing the query (or
use the client/driver escape method if prepared statements aren’t available),
updating the call that executes query to supply the parameter so discovery only
queries the intended schema.
- Around line 48-62: The code is leaking full generated SQL via logger.debug and
log_request_response (see Multiwoven::Integrations::Core::QueryBuilder.perform
output and its use in logger.debug, log_request_response, and the exception
handling). Remove the raw query text from all logs and messages: stop
interpolating or passing the `query` string to logger.debug,
`log_request_response`, and `handle_exception` payloads; instead log
non-sensitive metadata such as `action`, `table_name`, `primary_key`, and
`sync_config.sync_id/sync_run_id`, or a deterministic fingerprint/hash of the
query if you need correlation, and ensure errors only include the safe metadata
and error message (no PII-containing SQL).
In `@integrations/lib/multiwoven/integrations/source/mysql/client.rb`:
- Around line 7-13: The Sequel::Database handles created (via create_connection)
in methods like check_connection (and the similar discover/read paths) are never
disconnected; wrap the connection allocation so the returned Sequel::Database is
disconnected after use (use an ensure block or a block-yielding helper) and call
db.disconnect (or db.disconnect_all) on the Sequel::Database instance; locate
create_connection and callers such as check_connection and ensure any
early-return/rescue paths also call disconnect to avoid leaking sockets/pools.
- Around line 75-88: The group_by_table method is incorrectly keying result by
index causing one entry per column; change it to key by table_name (use
table_name as the unique key), initialize result[table_name] when missing, set
result[table_name][:tablename] = table_name, and push each column_data into
result[table_name][:columns] (rather than replacing with a single-element array)
so all columns for the same table are aggregated under one entry; update
references to result[index] -> result[table_name] and ensure is_nullable
handling and column_data remain unchanged.
- Around line 17-19: The discovery SQL currently interpolates
connection_config[:database] into query (variable query) which allows SQL
injection; change to a parameterized query instead: build the SQL with a
placeholder and pass connection_config[:database] as a bound parameter to
query_execution (or use Sequel's bound variable API) after creating the
connection with create_connection, so query_execution receives the SQL and the
database name as a parameter rather than embedding connection_config[:database]
directly; update any callers of query_execution if necessary to accept bound
parameters.
In `@integrations/spec/multiwoven/integrations/destination/mysql/client_spec.rb`:
- Around line 82-85: The spec currently stubs Sequel#fetch with
and_return(dataset) so the block passed by client.discover is never executed;
change the stub for sequel_client.fetch to yield rows to the block (e.g., yield
dataset or an array/row object) so the block path inside discover is exercised
and the mapping of result rows is validated — update the stub on
sequel_client.fetch used before calling
client.discover(sync_config_json[:destination][:connection_specification]) to
use a block-yielding stub (reference: Sequel#fetch, discover, sequel_client,
dataset).
---
Nitpick comments:
In `@integrations/spec/multiwoven/integrations/source/mysql/client_spec.rb`:
- Around line 92-109: The test currently stubs sequel_client.fetch without
verifying the SQL, so update it to assert the batched query is used: either set
an expectation on sequel_client to
receive(:fetch).with(a_string_including("LIMIT
100").and(a_string_including("OFFSET 1"))) when client.read(s_config) is called,
or instead stub client.batched_query to return a known SQL string and assert
fetch is called with that string; reference the test's s_config, client.read,
client.batched_query, sequel_client.fetch and the limit/offset values (100/1)
when making the assertion.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 5c4563f7-1b6b-405c-b976-9ebf402a792a
⛔ Files ignored due to path filters (2)
integrations/lib/multiwoven/integrations/destination/mysql/icon.svgis excluded by!**/*.svgintegrations/lib/multiwoven/integrations/source/mysql/icon.svgis excluded by!**/*.svg
📒 Files selected for processing (10)
integrations/lib/multiwoven/integrations.rbintegrations/lib/multiwoven/integrations/destination/mysql/client.rbintegrations/lib/multiwoven/integrations/destination/mysql/config/meta.jsonintegrations/lib/multiwoven/integrations/destination/mysql/config/spec.jsonintegrations/lib/multiwoven/integrations/rollout.rbintegrations/lib/multiwoven/integrations/source/mysql/client.rbintegrations/lib/multiwoven/integrations/source/mysql/config/meta.jsonintegrations/lib/multiwoven/integrations/source/mysql/config/spec.jsonintegrations/spec/multiwoven/integrations/destination/mysql/client_spec.rbintegrations/spec/multiwoven/integrations/source/mysql/client_spec.rb
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@integrations/spec/multiwoven/integrations/source/mysql/client_spec.rb`:
- Around line 129-149: The test for client.discover only asserts one column and
not that multiple columns from the same table are aggregated; update the spec to
validate all mocked columns/streams: call
client.discover(sync_config[:source][:connection_specification]) and then assert
message.catalog.streams length and that the stream for "test_table" includes
properties for "col1", "col2", and "col3" (or alternatively change the
integration contract to expect one stream per column and assert accordingly).
Focus assertions around the produced catalog/streams from client.discover and
ensure behavior aligns with the implementation in group_by_table (which sets
result[index][:columns] = [column_data]) so the test verifies whether columns
are aggregated into a single stream or emitted as multiple streams.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 95aad96a-6720-48a7-b523-9e069ac86496
⛔ Files ignored due to path filters (2)
integrations/lib/multiwoven/integrations/destination/mysql/icon.svgis excluded by!**/*.svgintegrations/lib/multiwoven/integrations/source/mysql/icon.svgis excluded by!**/*.svg
📒 Files selected for processing (10)
integrations/lib/multiwoven/integrations.rbintegrations/lib/multiwoven/integrations/destination/mysql/client.rbintegrations/lib/multiwoven/integrations/destination/mysql/config/meta.jsonintegrations/lib/multiwoven/integrations/destination/mysql/config/spec.jsonintegrations/lib/multiwoven/integrations/rollout.rbintegrations/lib/multiwoven/integrations/source/mysql/client.rbintegrations/lib/multiwoven/integrations/source/mysql/config/meta.jsonintegrations/lib/multiwoven/integrations/source/mysql/config/spec.jsonintegrations/spec/multiwoven/integrations/destination/mysql/client_spec.rbintegrations/spec/multiwoven/integrations/source/mysql/client_spec.rb
✅ Files skipped from review due to trivial changes (2)
- integrations/lib/multiwoven/integrations/destination/mysql/config/spec.json
- integrations/lib/multiwoven/integrations/rollout.rb
🚧 Files skipped from review as they are similar to previous changes (7)
- integrations/lib/multiwoven/integrations/source/mysql/config/spec.json
- integrations/lib/multiwoven/integrations/source/mysql/config/meta.json
- integrations/lib/multiwoven/integrations/destination/mysql/config/meta.json
- integrations/lib/multiwoven/integrations.rb
- integrations/spec/multiwoven/integrations/destination/mysql/client_spec.rb
- integrations/lib/multiwoven/integrations/destination/mysql/client.rb
- integrations/lib/multiwoven/integrations/source/mysql/client.rb
- Fix group_by_table to key by table_name instead of array index - Source spec: verify SQL contains LIMIT/OFFSET in batched read test - Destination spec: yield fetch block to exercise discover path
| module Multiwoven | ||
| module Integrations | ||
| VERSION = "0.35.0" | ||
| VERSION = "0.35.1" |
There was a problem hiding this comment.
@dataengineergaurav Raise to 0.38.0. We have some other connector PRs that need to be merged before this one
|
@dataengineergaurav Can you post a video of a demo sync for both Source and Destination. Show the creation of the connector and model for source then do a sync. Preferably a sync where the MySQL Source Connector is upserting data to a different Destination from the MySQL. Same thing when doing the MySQL Destination Connector. Show the Destination has received the data as verification of success. |
- Disconnect Sequel connections via db&.disconnect in ensure blocks (check_connection, discover, read, write) - Parameterize discover query with ? placeholder instead of interpolating connection_config[:database] - Remove raw generated SQL from logs; log only safe metadata (action, table_name, primary_key, sync_id) - Simplify destination group_by_table to use table_name as key (matching source pattern) - Allow :disconnect on sequel_client instance_double in specs (reflects new ensure block behavior)
|
Addressed all CodeRabbit review items in the latest commit ( 🔌 Connection leak (source + destination) 🛡️ SQL injection (source + destination) 🔒 PII logging (destination) ♻️ Destination 🧪 Specs updated All 15 RSpec unit tests and 17 end-to-end integration tests pass. |
- Guard .env.example .github/ISSUE_TEMPLATE/bug_report.md .github/ISSUE_TEMPLATE/feature_request.md .github/pull_request_template.md .github/workflows/create-release-notes.yaml .github/workflows/deploy-main.yml .github/workflows/integrations-ci.yml .github/workflows/integrations-gem-release.yml .github/workflows/integrations-main.yml .github/workflows/release.yaml .github/workflows/server-ci.yml .github/workflows/server-docker-build-amd.yml .github/workflows/server-docker-build-arm.yml .github/workflows/server-docker-hub-push-tags-amd.yaml .github/workflows/server-docker-hub-push-tags-arm.yaml .github/workflows/sync-ce-commits.yaml .github/workflows/ui-ci.yml .github/workflows/ui-docker-build-amd.yml .github/workflows/ui-docker-build-arm.yml .github/workflows/ui-docker-hub-push-tags-amd.yml .github/workflows/ui-docker-hub-push-tags-arm.yml .github/workflows/ui-validate.yml .gitignore CODE_OF_CONDUCT.md CONTRIBUTING.md LICENSE README.md SECURITY.md docker-compose.yml git-hooks/commit-msg git-hooks/setup-hooks.sh integrations/.github/ISSUE_TEMPLATE/bug_report_template.md integrations/.github/ISSUE_TEMPLATE/documentation_update_template.md integrations/.github/ISSUE_TEMPLATE/feature_request_template.md integrations/.github/ISSUE_TEMPLATE/new_connector_issue_template.md integrations/.github/pull_request_template.md integrations/.github/workflows/release.yml integrations/.gitignore integrations/.rspec integrations/.rubocop.yml integrations/.ruby-version integrations/.vscode/settings.json integrations/CHANGELOG.md integrations/CODE_OF_CONDUCT.md integrations/Gemfile integrations/Gemfile.lock integrations/LICENSE.txt integrations/README.md integrations/Rakefile integrations/bin/console integrations/bin/setup integrations/lib/multiwoven/integrations.rb integrations/lib/multiwoven/integrations/config.rb integrations/lib/multiwoven/integrations/core/base_connector.rb integrations/lib/multiwoven/integrations/core/constants.rb integrations/lib/multiwoven/integrations/core/destination_connector.rb integrations/lib/multiwoven/integrations/core/fullrefresher.rb integrations/lib/multiwoven/integrations/core/http_client.rb integrations/lib/multiwoven/integrations/core/http_helper.rb integrations/lib/multiwoven/integrations/core/query_builder.rb integrations/lib/multiwoven/integrations/core/rate_limiter.rb integrations/lib/multiwoven/integrations/core/source_connector.rb integrations/lib/multiwoven/integrations/core/streaming_http_client.rb integrations/lib/multiwoven/integrations/core/unstructured_source_connector.rb integrations/lib/multiwoven/integrations/core/utils.rb integrations/lib/multiwoven/integrations/core/vector_source_connector.rb integrations/lib/multiwoven/integrations/destination/airtable/client.rb integrations/lib/multiwoven/integrations/destination/airtable/config/catalog.json integrations/lib/multiwoven/integrations/destination/airtable/config/meta.json integrations/lib/multiwoven/integrations/destination/airtable/config/spec.json integrations/lib/multiwoven/integrations/destination/airtable/icon.svg integrations/lib/multiwoven/integrations/destination/airtable/schema_helper.rb integrations/lib/multiwoven/integrations/destination/ais_data_store/client.rb integrations/lib/multiwoven/integrations/destination/ais_data_store/config/meta.json integrations/lib/multiwoven/integrations/destination/ais_data_store/config/spec.json integrations/lib/multiwoven/integrations/destination/ais_data_store/icon.svg integrations/lib/multiwoven/integrations/destination/amazon_s3/client.rb integrations/lib/multiwoven/integrations/destination/amazon_s3/config/meta.json integrations/lib/multiwoven/integrations/destination/amazon_s3/config/spec.json integrations/lib/multiwoven/integrations/destination/amazon_s3/icon.svg integrations/lib/multiwoven/integrations/destination/databricks_lakehouse/client.rb integrations/lib/multiwoven/integrations/destination/databricks_lakehouse/config/meta.json integrations/lib/multiwoven/integrations/destination/databricks_lakehouse/config/spec.json integrations/lib/multiwoven/integrations/destination/databricks_lakehouse/icon.svg integrations/lib/multiwoven/integrations/destination/facebook_custom_audience/client.rb integrations/lib/multiwoven/integrations/destination/facebook_custom_audience/config/catalog.json integrations/lib/multiwoven/integrations/destination/facebook_custom_audience/config/meta.json integrations/lib/multiwoven/integrations/destination/facebook_custom_audience/config/spec.json integrations/lib/multiwoven/integrations/destination/facebook_custom_audience/icon.svg integrations/lib/multiwoven/integrations/destination/google_sheets/client.rb integrations/lib/multiwoven/integrations/destination/google_sheets/config/catalog.json integrations/lib/multiwoven/integrations/destination/google_sheets/config/meta.json integrations/lib/multiwoven/integrations/destination/google_sheets/config/spec.json integrations/lib/multiwoven/integrations/destination/google_sheets/icon.svg integrations/lib/multiwoven/integrations/destination/http/client.rb integrations/lib/multiwoven/integrations/destination/http/config/catalog.json integrations/lib/multiwoven/integrations/destination/http/config/meta.json integrations/lib/multiwoven/integrations/destination/http/config/spec.json integrations/lib/multiwoven/integrations/destination/http/icon.svg integrations/lib/multiwoven/integrations/destination/hubspot/client.rb integrations/lib/multiwoven/integrations/destination/hubspot/config/catalog.json integrations/lib/multiwoven/integrations/destination/hubspot/config/meta.json integrations/lib/multiwoven/integrations/destination/hubspot/config/spec.json integrations/lib/multiwoven/integrations/destination/hubspot/icon.svg integrations/lib/multiwoven/integrations/destination/iterable/client.rb integrations/lib/multiwoven/integrations/destination/iterable/config/catalog.json integrations/lib/multiwoven/integrations/destination/iterable/config/meta.json integrations/lib/multiwoven/integrations/destination/iterable/config/spec.json integrations/lib/multiwoven/integrations/destination/iterable/icon.svg integrations/lib/multiwoven/integrations/destination/klaviyo/client.rb integrations/lib/multiwoven/integrations/destination/klaviyo/config/catalog.json integrations/lib/multiwoven/integrations/destination/klaviyo/config/meta.json integrations/lib/multiwoven/integrations/destination/klaviyo/config/spec.json integrations/lib/multiwoven/integrations/destination/klaviyo/icon.svg integrations/lib/multiwoven/integrations/destination/mailchimp/client.rb integrations/lib/multiwoven/integrations/destination/mailchimp/config/catalog.json integrations/lib/multiwoven/integrations/destination/mailchimp/config/meta.json integrations/lib/multiwoven/integrations/destination/mailchimp/config/spec.json integrations/lib/multiwoven/integrations/destination/mailchimp/icon.svg integrations/lib/multiwoven/integrations/destination/maria_db/client.rb integrations/lib/multiwoven/integrations/destination/maria_db/config/meta.json integrations/lib/multiwoven/integrations/destination/maria_db/config/spec.json integrations/lib/multiwoven/integrations/destination/maria_db/icon.svg integrations/lib/multiwoven/integrations/destination/microsoft_dynamics/client.rb integrations/lib/multiwoven/integrations/destination/microsoft_dynamics/config/catalog.json integrations/lib/multiwoven/integrations/destination/microsoft_dynamics/config/meta.json integrations/lib/multiwoven/integrations/destination/microsoft_dynamics/config/spec.json integrations/lib/multiwoven/integrations/destination/microsoft_dynamics/icon.svg integrations/lib/multiwoven/integrations/destination/microsoft_excel/client.rb integrations/lib/multiwoven/integrations/destination/microsoft_excel/config/catalog.json integrations/lib/multiwoven/integrations/destination/microsoft_excel/config/meta.json integrations/lib/multiwoven/integrations/destination/microsoft_excel/config/spec.json integrations/lib/multiwoven/integrations/destination/microsoft_excel/icon.svg integrations/lib/multiwoven/integrations/destination/microsoft_sql/client.rb integrations/lib/multiwoven/integrations/destination/microsoft_sql/config/meta.json integrations/lib/multiwoven/integrations/destination/microsoft_sql/config/spec.json integrations/lib/multiwoven/integrations/destination/microsoft_sql/icon.svg integrations/lib/multiwoven/integrations/destination/mysql/client.rb integrations/lib/multiwoven/integrations/destination/mysql/config/meta.json integrations/lib/multiwoven/integrations/destination/mysql/config/spec.json integrations/lib/multiwoven/integrations/destination/mysql/icon.svg integrations/lib/multiwoven/integrations/destination/odoo/client.rb integrations/lib/multiwoven/integrations/destination/odoo/config/meta.json integrations/lib/multiwoven/integrations/destination/odoo/config/spec.json integrations/lib/multiwoven/integrations/destination/odoo/icon.svg integrations/lib/multiwoven/integrations/destination/oracle_db/client.rb integrations/lib/multiwoven/integrations/destination/oracle_db/config/meta.json integrations/lib/multiwoven/integrations/destination/oracle_db/config/spec.json integrations/lib/multiwoven/integrations/destination/oracle_db/icon.svg integrations/lib/multiwoven/integrations/destination/pinecone_db/client.rb integrations/lib/multiwoven/integrations/destination/pinecone_db/config/meta.json integrations/lib/multiwoven/integrations/destination/pinecone_db/config/spec.json integrations/lib/multiwoven/integrations/destination/pinecone_db/icon.svg integrations/lib/multiwoven/integrations/destination/postgresql/client.rb integrations/lib/multiwoven/integrations/destination/postgresql/config/meta.json integrations/lib/multiwoven/integrations/destination/postgresql/config/spec.json integrations/lib/multiwoven/integrations/destination/postgresql/icon.svg integrations/lib/multiwoven/integrations/destination/qdrant/client.rb integrations/lib/multiwoven/integrations/destination/qdrant/config/meta.json integrations/lib/multiwoven/integrations/destination/qdrant/config/spec.json integrations/lib/multiwoven/integrations/destination/qdrant/icon.svg integrations/lib/multiwoven/integrations/destination/salesforce_consumer_goods_cloud/client.rb integrations/lib/multiwoven/integrations/destination/salesforce_consumer_goods_cloud/config/catalog.json integrations/lib/multiwoven/integrations/destination/salesforce_consumer_goods_cloud/config/meta.json integrations/lib/multiwoven/integrations/destination/salesforce_consumer_goods_cloud/config/spec.json integrations/lib/multiwoven/integrations/destination/salesforce_consumer_goods_cloud/icon.svg integrations/lib/multiwoven/integrations/destination/salesforce_consumer_goods_cloud/schema_helper.rb integrations/lib/multiwoven/integrations/destination/salesforce_crm/client.rb integrations/lib/multiwoven/integrations/destination/salesforce_crm/config/catalog.json integrations/lib/multiwoven/integrations/destination/salesforce_crm/config/meta.json integrations/lib/multiwoven/integrations/destination/salesforce_crm/config/spec.json integrations/lib/multiwoven/integrations/destination/salesforce_crm/icon.svg integrations/lib/multiwoven/integrations/destination/sftp/client.rb integrations/lib/multiwoven/integrations/destination/sftp/config/catalog.json integrations/lib/multiwoven/integrations/destination/sftp/config/meta.json integrations/lib/multiwoven/integrations/destination/sftp/config/spec.json integrations/lib/multiwoven/integrations/destination/sftp/icon.svg integrations/lib/multiwoven/integrations/destination/slack/client.rb integrations/lib/multiwoven/integrations/destination/slack/config/catalog.json integrations/lib/multiwoven/integrations/destination/slack/config/meta.json integrations/lib/multiwoven/integrations/destination/slack/config/spec.json integrations/lib/multiwoven/integrations/destination/slack/icon.svg integrations/lib/multiwoven/integrations/destination/stripe/client.rb integrations/lib/multiwoven/integrations/destination/stripe/config/catalog.json integrations/lib/multiwoven/integrations/destination/stripe/config/meta.json integrations/lib/multiwoven/integrations/destination/stripe/config/spec.json integrations/lib/multiwoven/integrations/destination/stripe/icon.svg integrations/lib/multiwoven/integrations/destination/weaviate/client.rb integrations/lib/multiwoven/integrations/destination/weaviate/config/meta.json integrations/lib/multiwoven/integrations/destination/weaviate/config/spec.json integrations/lib/multiwoven/integrations/destination/weaviate/icon.svg integrations/lib/multiwoven/integrations/destination/zendesk/client.rb integrations/lib/multiwoven/integrations/destination/zendesk/config/catalog.json integrations/lib/multiwoven/integrations/destination/zendesk/config/meta.json integrations/lib/multiwoven/integrations/destination/zendesk/config/spec.json integrations/lib/multiwoven/integrations/destination/zendesk/icon.svg integrations/lib/multiwoven/integrations/protocol/protocol.json integrations/lib/multiwoven/integrations/protocol/protocol.rb integrations/lib/multiwoven/integrations/rollout.rb integrations/lib/multiwoven/integrations/service.rb integrations/lib/multiwoven/integrations/source/amazon_s3/client.rb integrations/lib/multiwoven/integrations/source/amazon_s3/config/meta.json integrations/lib/multiwoven/integrations/source/amazon_s3/config/spec.json integrations/lib/multiwoven/integrations/source/amazon_s3/icon.svg integrations/lib/multiwoven/integrations/source/anthropic/client.rb integrations/lib/multiwoven/integrations/source/anthropic/config/catalog.json integrations/lib/multiwoven/integrations/source/anthropic/config/meta.json integrations/lib/multiwoven/integrations/source/anthropic/config/spec.json integrations/lib/multiwoven/integrations/source/anthropic/icon.svg integrations/lib/multiwoven/integrations/source/aws_athena/client.rb integrations/lib/multiwoven/integrations/source/aws_athena/config/meta.json integrations/lib/multiwoven/integrations/source/aws_athena/config/spec.json integrations/lib/multiwoven/integrations/source/aws_athena/icon.svg integrations/lib/multiwoven/integrations/source/aws_bedrock_model/client.rb integrations/lib/multiwoven/integrations/source/aws_bedrock_model/config/catalog.json integrations/lib/multiwoven/integrations/source/aws_bedrock_model/config/meta.json integrations/lib/multiwoven/integrations/source/aws_bedrock_model/config/spec.json integrations/lib/multiwoven/integrations/source/aws_bedrock_model/icon.svg integrations/lib/multiwoven/integrations/source/aws_sagemaker_model/client.rb integrations/lib/multiwoven/integrations/source/aws_sagemaker_model/config/catalog.json integrations/lib/multiwoven/integrations/source/aws_sagemaker_model/config/meta.json integrations/lib/multiwoven/integrations/source/aws_sagemaker_model/config/spec.json integrations/lib/multiwoven/integrations/source/aws_sagemaker_model/icon.svg integrations/lib/multiwoven/integrations/source/bigquery/client.rb integrations/lib/multiwoven/integrations/source/bigquery/config/meta.json integrations/lib/multiwoven/integrations/source/bigquery/config/spec.json integrations/lib/multiwoven/integrations/source/bigquery/icon.svg integrations/lib/multiwoven/integrations/source/clickhouse/client.rb integrations/lib/multiwoven/integrations/source/clickhouse/config/meta.json integrations/lib/multiwoven/integrations/source/clickhouse/config/spec.json integrations/lib/multiwoven/integrations/source/clickhouse/icon.svg integrations/lib/multiwoven/integrations/source/databricks/client.rb integrations/lib/multiwoven/integrations/source/databricks/config/meta.json integrations/lib/multiwoven/integrations/source/databricks/config/spec.json integrations/lib/multiwoven/integrations/source/databricks/icon.svg integrations/lib/multiwoven/integrations/source/databrics_model/client.rb integrations/lib/multiwoven/integrations/source/databrics_model/config/catalog.json integrations/lib/multiwoven/integrations/source/databrics_model/config/meta.json integrations/lib/multiwoven/integrations/source/databrics_model/config/spec.json integrations/lib/multiwoven/integrations/source/databrics_model/icon.svg integrations/lib/multiwoven/integrations/source/firecrawl/client.rb integrations/lib/multiwoven/integrations/source/firecrawl/config/catalog.json integrations/lib/multiwoven/integrations/source/firecrawl/config/meta.json integrations/lib/multiwoven/integrations/source/firecrawl/config/spec.json integrations/lib/multiwoven/integrations/source/firecrawl/icon.svg integrations/lib/multiwoven/integrations/source/generic_open_ai/client.rb integrations/lib/multiwoven/integrations/source/generic_open_ai/config/catalog.json integrations/lib/multiwoven/integrations/source/generic_open_ai/config/meta.json integrations/lib/multiwoven/integrations/source/generic_open_ai/config/spec.json integrations/lib/multiwoven/integrations/source/generic_open_ai/icon.svg integrations/lib/multiwoven/integrations/source/google_drive/client.rb integrations/lib/multiwoven/integrations/source/google_drive/config/catalog.json integrations/lib/multiwoven/integrations/source/google_drive/config/meta.json integrations/lib/multiwoven/integrations/source/google_drive/config/spec.json integrations/lib/multiwoven/integrations/source/google_drive/icon.svg integrations/lib/multiwoven/integrations/source/google_vertex_model/client.rb integrations/lib/multiwoven/integrations/source/google_vertex_model/config/catalog.json integrations/lib/multiwoven/integrations/source/google_vertex_model/config/meta.json integrations/lib/multiwoven/integrations/source/google_vertex_model/config/spec.json integrations/lib/multiwoven/integrations/source/google_vertex_model/icon.svg integrations/lib/multiwoven/integrations/source/http/client.rb integrations/lib/multiwoven/integrations/source/http/config/meta.json integrations/lib/multiwoven/integrations/source/http/config/spec.json integrations/lib/multiwoven/integrations/source/http/icon.svg integrations/lib/multiwoven/integrations/source/http_model/client.rb integrations/lib/multiwoven/integrations/source/http_model/config/catalog.json integrations/lib/multiwoven/integrations/source/http_model/config/meta.json integrations/lib/multiwoven/integrations/source/http_model/config/spec.json integrations/lib/multiwoven/integrations/source/http_model/icon.svg integrations/lib/multiwoven/integrations/source/intuit_quick_books/client.rb integrations/lib/multiwoven/integrations/source/intuit_quick_books/config/catalog.json integrations/lib/multiwoven/integrations/source/intuit_quick_books/config/meta.json integrations/lib/multiwoven/integrations/source/intuit_quick_books/config/spec.json integrations/lib/multiwoven/integrations/source/intuit_quick_books/icon.svg integrations/lib/multiwoven/integrations/source/maria_db/client.rb integrations/lib/multiwoven/integrations/source/maria_db/config/meta.json integrations/lib/multiwoven/integrations/source/maria_db/config/spec.json integrations/lib/multiwoven/integrations/source/maria_db/icon.svg integrations/lib/multiwoven/integrations/source/mysql/client.rb integrations/lib/multiwoven/integrations/source/mysql/config/meta.json integrations/lib/multiwoven/integrations/source/mysql/config/spec.json integrations/lib/multiwoven/integrations/source/mysql/icon.svg integrations/lib/multiwoven/integrations/source/odoo/client.rb integrations/lib/multiwoven/integrations/source/odoo/config/meta.json integrations/lib/multiwoven/integrations/source/odoo/config/spec.json integrations/lib/multiwoven/integrations/source/odoo/icon.svg integrations/lib/multiwoven/integrations/source/open_ai/client.rb integrations/lib/multiwoven/integrations/source/open_ai/config/catalog.json integrations/lib/multiwoven/integrations/source/open_ai/config/meta.json integrations/lib/multiwoven/integrations/source/open_ai/config/spec.json integrations/lib/multiwoven/integrations/source/open_ai/icon.svg integrations/lib/multiwoven/integrations/source/oracle_db/client.rb integrations/lib/multiwoven/integrations/source/oracle_db/config/meta.json integrations/lib/multiwoven/integrations/source/oracle_db/config/spec.json integrations/lib/multiwoven/integrations/source/oracle_db/icon.svg integrations/lib/multiwoven/integrations/source/pinecone_db/client.rb integrations/lib/multiwoven/integrations/source/pinecone_db/config/catalog.json integrations/lib/multiwoven/integrations/source/pinecone_db/config/meta.json integrations/lib/multiwoven/integrations/source/pinecone_db/config/spec.json integrations/lib/multiwoven/integrations/source/pinecone_db/icon.svg integrations/lib/multiwoven/integrations/source/postgresql/client.rb integrations/lib/multiwoven/integrations/source/postgresql/config/meta.json integrations/lib/multiwoven/integrations/source/postgresql/config/spec.json integrations/lib/multiwoven/integrations/source/postgresql/icon.svg integrations/lib/multiwoven/integrations/source/qdrant/client.rb integrations/lib/multiwoven/integrations/source/qdrant/config/catalog.json integrations/lib/multiwoven/integrations/source/qdrant/config/meta.json integrations/lib/multiwoven/integrations/source/qdrant/config/spec.json integrations/lib/multiwoven/integrations/source/qdrant/icon.svg integrations/lib/multiwoven/integrations/source/redshift/client.rb integrations/lib/multiwoven/integrations/source/redshift/config/meta.json integrations/lib/multiwoven/integrations/source/redshift/config/spec.json integrations/lib/multiwoven/integrations/source/redshift/icon.svg integrations/lib/multiwoven/integrations/source/salesforce_consumer_goods_cloud/client.rb integrations/lib/multiwoven/integrations/source/salesforce_consumer_goods_cloud/config/catalog.json integrations/lib/multiwoven/integrations/source/salesforce_consumer_goods_cloud/config/meta.json integrations/lib/multiwoven/integrations/source/salesforce_consumer_goods_cloud/config/spec.json integrations/lib/multiwoven/integrations/source/salesforce_consumer_goods_cloud/icon.svg integrations/lib/multiwoven/integrations/source/salesforce_consumer_goods_cloud/schema_helper.rb integrations/lib/multiwoven/integrations/source/sftp/client.rb integrations/lib/multiwoven/integrations/source/sftp/config/meta.json integrations/lib/multiwoven/integrations/source/sftp/config/spec.json integrations/lib/multiwoven/integrations/source/sftp/icon.svg integrations/lib/multiwoven/integrations/source/snowflake/client.rb integrations/lib/multiwoven/integrations/source/snowflake/config/meta.json integrations/lib/multiwoven/integrations/source/snowflake/config/spec.json integrations/lib/multiwoven/integrations/source/snowflake/icon.svg integrations/lib/multiwoven/integrations/source/watsonx_ai/client.rb integrations/lib/multiwoven/integrations/source/watsonx_ai/config/catalog.json integrations/lib/multiwoven/integrations/source/watsonx_ai/config/meta.json integrations/lib/multiwoven/integrations/source/watsonx_ai/config/spec.json integrations/lib/multiwoven/integrations/source/watsonx_ai/icon.svg integrations/lib/multiwoven/integrations/source/watsonx_data/client.rb integrations/lib/multiwoven/integrations/source/watsonx_data/config/meta.json integrations/lib/multiwoven/integrations/source/watsonx_data/config/spec.json integrations/lib/multiwoven/integrations/source/watsonx_data/icon.svg integrations/multiwoven-integrations.gemspec integrations/sig/multiwoven/integrations.rbs integrations/spec/multiwoven/integrations/config_spec.rb integrations/spec/multiwoven/integrations/core/base_connector_spec.rb integrations/spec/multiwoven/integrations/core/destination_connector_spec.rb integrations/spec/multiwoven/integrations/core/fullrefresher_spec.rb integrations/spec/multiwoven/integrations/core/http_client_spec.rb integrations/spec/multiwoven/integrations/core/query_builder_spec.rb integrations/spec/multiwoven/integrations/core/rate_limiter_spec.rb integrations/spec/multiwoven/integrations/core/source_connector_spec.rb integrations/spec/multiwoven/integrations/core/streaming_http_client_spec.rb integrations/spec/multiwoven/integrations/core/unstructured_source_connector_spec.rb integrations/spec/multiwoven/integrations/core/utils_spec.rb integrations/spec/multiwoven/integrations/core/vector_source_connector_spec.rb integrations/spec/multiwoven/integrations/destination/airtable/client_spec.rb integrations/spec/multiwoven/integrations/destination/airtable/schema_helper_spec.rb integrations/spec/multiwoven/integrations/destination/ais_data_store/client_spec.rb integrations/spec/multiwoven/integrations/destination/amazon_s3/client_spec.rb integrations/spec/multiwoven/integrations/destination/databricks_lakehouse/client_spec.rb integrations/spec/multiwoven/integrations/destination/facebook_custom_audience/client_spec.rb integrations/spec/multiwoven/integrations/destination/google_sheets/client_spec.rb integrations/spec/multiwoven/integrations/destination/http/client_spec.rb integrations/spec/multiwoven/integrations/destination/hubspot/client_spec.rb integrations/spec/multiwoven/integrations/destination/iterable/client_spec.rb integrations/spec/multiwoven/integrations/destination/klaviyo/client_spec.rb integrations/spec/multiwoven/integrations/destination/mailchimp/client_spec.rb integrations/spec/multiwoven/integrations/destination/maria_db/client_spec.rb integrations/spec/multiwoven/integrations/destination/microsoft_dynamics/client_spec.rb integrations/spec/multiwoven/integrations/destination/microsoft_excel/client_spec.rb integrations/spec/multiwoven/integrations/destination/microsoft_sql/client_spec.rb integrations/spec/multiwoven/integrations/destination/mysql/client_spec.rb integrations/spec/multiwoven/integrations/destination/odoo/client_spec.rb integrations/spec/multiwoven/integrations/destination/oracle_db/client_spec.rb integrations/spec/multiwoven/integrations/destination/pinecone_db/client_spec.rb integrations/spec/multiwoven/integrations/destination/postgresql/client_spec.rb integrations/spec/multiwoven/integrations/destination/qdrant/client_spec.rb integrations/spec/multiwoven/integrations/destination/salesforce_consumer_goods_cloud/client_spec.rb integrations/spec/multiwoven/integrations/destination/salesforce_consumer_goods_cloud/schema_helper_spec.rb integrations/spec/multiwoven/integrations/destination/salesforce_crm/client_spec.rb integrations/spec/multiwoven/integrations/destination/sftp/client_spec.rb integrations/spec/multiwoven/integrations/destination/slack/client_spec.rb integrations/spec/multiwoven/integrations/destination/stripe/client_spec.rb integrations/spec/multiwoven/integrations/destination/weaviate/client_spec.rb integrations/spec/multiwoven/integrations/destination/zendesk/client_spec.rb integrations/spec/multiwoven/integrations/protocol/protocol_spec.rb integrations/spec/multiwoven/integrations/rollout_spec.rb integrations/spec/multiwoven/integrations/service_spec.rb integrations/spec/multiwoven/integrations/source/amazons3/client_spec.rb integrations/spec/multiwoven/integrations/source/anthropic/client_spec.rb integrations/spec/multiwoven/integrations/source/aws_athena/client_spec.rb integrations/spec/multiwoven/integrations/source/aws_bedrock_model/client_spec.rb integrations/spec/multiwoven/integrations/source/aws_sagemaker_model/client_spec.rb integrations/spec/multiwoven/integrations/source/bigquery/client_spec.rb integrations/spec/multiwoven/integrations/source/clickhouse/client_spec.rb integrations/spec/multiwoven/integrations/source/databricks/client_spec.rb integrations/spec/multiwoven/integrations/source/databricks_model/client_spec.rb integrations/spec/multiwoven/integrations/source/firecrawl/client_spec.rb integrations/spec/multiwoven/integrations/source/generic_open_ai/client_spec.rb integrations/spec/multiwoven/integrations/source/google_drive/client_spec.rb integrations/spec/multiwoven/integrations/source/google_vertex_model/client_spec.rb integrations/spec/multiwoven/integrations/source/http/client_spec.rb integrations/spec/multiwoven/integrations/source/http_model/client_spec.rb integrations/spec/multiwoven/integrations/source/intuit_quick_books/client_spec.rb integrations/spec/multiwoven/integrations/source/maria_db/client_spec.rb integrations/spec/multiwoven/integrations/source/mysql/client_spec.rb integrations/spec/multiwoven/integrations/source/odoo/client_spec.rb integrations/spec/multiwoven/integrations/source/open_ai/client_spec.rb integrations/spec/multiwoven/integrations/source/oracle_db/client_spec.rb integrations/spec/multiwoven/integrations/source/pinecone_db/client_spec.rb integrations/spec/multiwoven/integrations/source/postgresql/client_spec.rb integrations/spec/multiwoven/integrations/source/qdrant/client_spec.rb integrations/spec/multiwoven/integrations/source/redshift/client_spec.rb integrations/spec/multiwoven/integrations/source/salesforce_consumer_goods/client_spec.rb integrations/spec/multiwoven/integrations/source/salesforce_consumer_goods/schema_helper_spec.rb integrations/spec/multiwoven/integrations/source/sftp/client_spec.rb integrations/spec/multiwoven/integrations/source/snowflake/client_spec.rb integrations/spec/multiwoven/integrations/source/watsonx_ai/client_spec.rb integrations/spec/multiwoven/integrations/source/watsonx_data/client_spec.rb integrations/spec/multiwoven/integrations_spec.rb integrations/spec/spec_helper.rb release-notes.md server/.dockerignore server/.env.example server/.gitattributes server/.github/ISSUE_TEMPLATE/bug_report_template.md server/.github/ISSUE_TEMPLATE/documentation_update_template.md server/.github/ISSUE_TEMPLATE/feature_request_template.md server/.github/pull_request_template.md server/.gitignore server/.rubocop.yml server/.rubocop_todo.yml server/.ruby-version server/.simplecov server/.vscode/settings.json server/Dockerfile server/Dockerfile.dev server/Gemfile server/Gemfile.lock server/README.md server/Rakefile server/app/channels/application_cable/channel.rb server/app/channels/application_cable/connection.rb server/app/contracts/auth_contracts.rb server/app/contracts/catalog_contracts.rb server/app/contracts/connector_contracts.rb server/app/contracts/connector_definition_contracts.rb server/app/contracts/model_contracts.rb server/app/contracts/report_contracts.rb server/app/contracts/schedule_sync_contracts.rb server/app/contracts/sync_contracts.rb server/app/contracts/sync_record_contracts.rb server/app/contracts/sync_run_contracts.rb server/app/contracts/user_contracts.rb server/app/contracts/workspace_contracts.rb server/app/controllers/api/v1/auth_controller.rb server/app/controllers/api/v1/catalogs_controller.rb server/app/controllers/api/v1/connector_definitions_controller.rb server/app/controllers/api/v1/connectors_controller.rb server/app/controllers/api/v1/models_controller.rb server/app/controllers/api/v1/reports_controller.rb server/app/controllers/api/v1/schedule_syncs_controller.rb server/app/controllers/api/v1/sync_records_controller.rb server/app/controllers/api/v1/sync_runs_controller.rb server/app/controllers/api/v1/syncs_controller.rb server/app/controllers/api/v1/users_controller.rb server/app/controllers/api/v1/workspaces_controller.rb server/app/controllers/application_controller.rb server/app/controllers/concerns/.keep server/app/controllers/concerns/audit_logger.rb server/app/controllers/concerns/exception_handler.rb server/app/controllers/concerns/resource_link_builder.rb server/app/interactors/authentication/login.rb server/app/interactors/authentication/logout.rb server/app/interactors/authentication/resend_verification_email.rb server/app/interactors/authentication/signup.rb server/app/interactors/catalogs/create_catalog.rb server/app/interactors/catalogs/update_catalog.rb server/app/interactors/connector_definitions/filter_connector_definitions.rb server/app/interactors/connectors/create_connector.rb server/app/interactors/connectors/discover_connector.rb server/app/interactors/connectors/execute_model.rb server/app/interactors/connectors/query_source.rb server/app/interactors/connectors/update_connector.rb server/app/interactors/models/create_model.rb server/app/interactors/models/update_model.rb server/app/interactors/reports/activity_report.rb server/app/interactors/syncs/cancel_sync.rb server/app/interactors/syncs/create_sync.rb server/app/interactors/syncs/schedule_sync.rb server/app/interactors/syncs/sync_configurations.rb server/app/interactors/syncs/update_sync.rb server/app/interactors/workspaces/create.rb server/app/interactors/workspaces/delete.rb server/app/interactors/workspaces/find.rb server/app/interactors/workspaces/list_all.rb server/app/interactors/workspaces/update.rb server/app/jobs/application_job.rb server/app/jobs/send_sync_alerts_job.rb server/app/mailers/application_mailer.rb server/app/mailers/devise_mailer.rb server/app/mailers/sync_alert_mailer.rb server/app/mailers/sync_run_mailer.rb server/app/mailers/user_mailer.rb server/app/mailers/workspace_user_mailer.rb server/app/middleware/multiwoven_server/quiet_logger.rb server/app/middleware/multiwoven_server/request_response_logger.rb server/app/models/agents/component.rb server/app/models/agents/edge.rb server/app/models/agents/remote_code_execution.rb server/app/models/agents/workflow.rb server/app/models/agents/workflow_integration.rb server/app/models/agents/workflow_log.rb server/app/models/agents/workflow_run.rb server/app/models/alert.rb server/app/models/alert_channel.rb server/app/models/alert_medium.rb server/app/models/application_record.rb server/app/models/audit_log.rb server/app/models/billing.rb server/app/models/billing/plan.rb server/app/models/billing/subscription.rb server/app/models/catalog.rb server/app/models/chat_message.rb server/app/models/concerns/.keep server/app/models/connector.rb server/app/models/custom_visual_component_file.rb server/app/models/data_app.rb server/app/models/data_app_session.rb server/app/models/embedding_model.rb server/app/models/eula.rb server/app/models/feedback.rb server/app/models/message_feedback.rb server/app/models/model.rb server/app/models/organization.rb server/app/models/resource.rb server/app/models/role.rb server/app/models/schema_validations/integration/configuration_slack.json server/app/models/schema_validations/integrations/configuration_slack.json server/app/models/schema_validations/models/configuration_aiml.json server/app/models/schema_validations/models/configuration_dynamic_sql.json server/app/models/schema_validations/models/configuration_unstructured.json server/app/models/schema_validations/models/configuration_vector_search.json server/app/models/sso_configuration.rb server/app/models/sync.rb server/app/models/sync_file.rb server/app/models/sync_record.rb server/app/models/sync_run.rb server/app/models/user.rb server/app/models/visual_component.rb server/app/models/workflow_integration.rb server/app/models/workspace.rb server/app/models/workspace_user.rb server/app/policies/application_policy.rb server/app/policies/connector_definition_policy.rb server/app/policies/connector_policy.rb server/app/policies/current_context.rb server/app/policies/model_policy.rb server/app/policies/report_policy.rb server/app/policies/sync_policy.rb server/app/policies/sync_record_policy.rb server/app/policies/sync_run_policy.rb server/app/policies/user_policy.rb server/app/policies/workspace_policy.rb server/app/serializers/audit_logs_serializer.rb server/app/serializers/catalog_serializer.rb server/app/serializers/connector_serializer.rb server/app/serializers/feedback_serializer.rb server/app/serializers/message_feedback_serializer.rb server/app/serializers/model_serializer.rb server/app/serializers/sync_record_serializer.rb server/app/serializers/sync_run_serializer.rb server/app/serializers/sync_serializer.rb server/app/serializers/user_serializer.rb server/app/serializers/workspace_serializer.rb server/app/temporal/activities/create_sync_run_activity.rb server/app/temporal/activities/extractor_activity.rb server/app/temporal/activities/fetch_sync_activity.rb server/app/temporal/activities/loader_activity.rb server/app/temporal/activities/reporter_activity.rb server/app/temporal/activities/schedule_sync_activity.rb server/app/temporal/activities/terminate_workflow_activity.rb server/app/temporal/cli/register_namespace server/app/temporal/cli/setup.rb server/app/temporal/cli/worker server/app/temporal/middlewares/database_middleware.rb server/app/temporal/middlewares/logging_middleware.rb server/app/temporal/middlewares/update_sync_run_status_middleware.rb server/app/temporal/workflows/schedule_sync_workflow.rb server/app/temporal/workflows/sync_workflow.rb server/app/temporal/workflows/terminate_workflow.rb server/app/views/devise/mailer/confirmation_instructions.html.erb server/app/views/devise/mailer/invitation_instructions.html.erb server/app/views/devise/mailer/password_change.html.erb server/app/views/devise/mailer/reset_password_instructions.html.erb server/app/views/layouts/mailer.html.erb server/app/views/layouts/mailer.text.erb server/app/views/sync_alert_mailer/sync_failure_email.html.erb server/app/views/sync_alert_mailer/sync_row_failure_email.html.erb server/app/views/sync_alert_mailer/sync_success_email.html.erb server/app/views/sync_run_mailer/status_email.html.erb server/app/views/workspace_user_mailer/send_invitation_email.html.erb server/bin/bundle server/bin/docker-entrypoint server/bin/rails server/bin/rake server/bin/setup server/config.ru server/config/application.rb server/config/boot.rb server/config/cable.yml server/config/credentials.yml.enc server/config/database.yml server/config/environment.rb server/config/environments/development.rb server/config/environments/production.rb server/config/environments/test.rb server/config/initializers/active_model_serializers.rb server/config/initializers/bullet.rb server/config/initializers/cors.rb server/config/initializers/custom_pagination_links.rb server/config/initializers/devise.rb server/config/initializers/filter_parameter_logging.rb server/config/initializers/inflections.rb server/config/initializers/kaminari_config.rb server/config/initializers/logging.rb server/config/initializers/new_relic.rb server/config/initializers/premailer_rails.rb server/config/initializers/rack_attack.rb server/config/initializers/rails_host_authorization.rb server/config/initializers/strong_migrations.rb server/config/initializers/temporal.rb server/config/locales/devise_invitable.en.yml server/config/locales/en.yml server/config/puma.rb server/config/queue.yml server/config/recurring.yml server/config/routes.rb server/config/secrets.yml server/config/storage.yml server/db/data/20240513072634_add_roles.rb server/db/data/20240513073101_add_resources.rb server/db/data/20240516181513_migrate_workspace_user_roles_to_admin.rb server/db/data/20240524141637_update_workspace_users_to_admin_role.rb server/db/data/20240617095053_update_role_policies.rb server/db/data/20240626120511_update_member_view_role_permissions.rb server/db/data/20240702095541_update_role_descriptions.rb server/db/data/20240813084446_update_user_read_permission.rb server/db/data/20240827212112_populate_category_field_in_connectors.rb server/db/data/20240903055705_add_data_app_permission_to_roles.rb server/db/data/20241022143042_add_audit_logs_permission_to_roles.rb server/db/data/20241127103943_add_data_app_and_audit_logs_resources.rb server/db/data/20241204154833_add_catalog_and_schedule_sync_resources.rb server/db/data/20250103102748_add_alerts_permission_to_roles.rb server/db/data/20250105185147_add_slack_and_email_to_alert_medium.rb server/db/data/20250114120956_add_logo_url_to_alert_medium.rb server/db/data/20250206100711_create_default_plan.rb server/db/data/20250206100945_migrate_organizations_to_default_plan.rb server/db/data/20250206101336_change_default_plan_to_active.rb server/db/data/20250207090028_create_embedding_model_openai.rb server/db/data/20250209222957_add_billing_permission_to_roles.rb server/db/data/20250212170921_update_mode_in_embedding_models.rb server/db/data/20250221161222_populate_role_type.rb server/db/data/20250227122723_add_sso_configuration_permission_to_roles.rb server/db/data/20250306202414_update_system_role_descriptions.rb server/db/data/20250403013305_add_eula_permission_to_roles.rb server/db/data/20250411101855_add_assistant_permission_to_roles.rb server/db/data/20250414125119_add_sso_eula_assistant_resources.rb server/db/data/20250417191605_update_eula_permission.rb server/db/data/20250603113843_add_workflow_resources.rb server/db/data/20250603114049_update_workflow_permissions_to_roles.rb server/db/data/20250617163641_update_read_user_permission_for_non_admin_roles.rb server/db/data/20250710183353_populate_sub_category_field_in_connectors.rb server/db/data/20250724110926_assign_configurable_from_model.rb server/db/data_schema.rb server/db/migrate/20231016080754_create_workspaces.rb server/db/migrate/20231016104518_devise_create_users.rb server/db/migrate/20231016132422_add_jti_to_users.rb server/db/migrate/20231020122228_add_confirmation_fields_to_user.rb server/db/migrate/20231023091535_create_connectors.rb server/db/migrate/20231023092329_create_catalogs.rb server/db/migrate/20231023093217_create_models.rb server/db/migrate/20231023130412_create_syncs.rb server/db/migrate/20231101034843_create_workspace_users.rb server/db/migrate/20231230143430_add_name_to_users.rb server/db/migrate/20240103111636_add_connector_name_to_connector.rb server/db/migrate/20240103195046_change_catalog_hash_type.rb server/db/migrate/20240107054041_create_organizations.rb server/db/migrate/20240107054253_add_organization_to_workspaces.rb server/db/migrate/20240107055430_add_unique_index_to_organizations.rb server/db/migrate/20240107104025_remove_indexes_from_workspaces.rb server/db/migrate/20240107201734_create_sync_runs.rb server/db/migrate/20240107203458_create_sync_records.rb server/db/migrate/20240107204141_add_unique_constraint_to_sync_record_fingerprint.rb server/db/migrate/20240107204627_add_cursor_fields_to_sync.rb server/db/migrate/20240109173214_add_sync_mode_to_syncs.rb server/db/migrate/20240109210604_remove_cursor_fields_from_syncs.rb server/db/migrate/20240110110356_remove_schedule_data_from_syncs.rb server/db/migrate/20240110110531_add_sync_interval_and_unit_to_syncs.rb server/db/migrate/20240110111112_add_action_to_sync_runs.rb server/db/migrate/20240110111625_remove_action_from_sync_runs.rb server/db/migrate/20240110112014_add_action_to_sync_record.rb server/db/migrate/20240110115908_add_stream_name_to_syncs.rb server/db/migrate/20240112073233_add_primary_key_to_sync_records.rb server/db/migrate/20240112133554_add_description_to_model.rb server/db/migrate/20240112133622_add_description_to_connector.rb server/db/migrate/20240121122719_add_status_to_sync_records.rb server/db/migrate/20240122091247_add_current_offset_to_sync_runs.rb server/db/migrate/20240122095423_add_unique_index_to_sync_records.rb server/db/migrate/20240122095559_remove_unique_constraint_from_sync_record_fingerprint.rb server/db/migrate/20240123185009_add_workflow_id_to_syncs.rb server/db/migrate/20240125105732_remove_index_sync_id_and_primary_key_from_sync_records.rb server/db/migrate/20240205062322_add_unique_id_to_users.rb server/db/migrate/20240214124507_remove_index_and_add_new_index_to_sync_records.rb server/db/migrate/20240222095807_add_workspace_id_to_sync_run.rb server/db/migrate/20240222110240_add_columns_to_sync_run.rb server/db/migrate/20240222110415_set_values_for_existing_sync_runs.rb server/db/migrate/20240228111723_add_total_query_rows_to_sync_runs.rb server/db/migrate/20240228111957_add_error_to_sync_records.rb server/db/migrate/20240228112259_change_started_at_and_finished_at_in_sync_runs.rb server/db/migrate/20240305070953_add_primary_key_sync_id_unique_index_to_sync_records.rb server/db/migrate/20240305120454_add_discarded_at_to_syncs.rb server/db/migrate/20240306045911_add_discarded_at_to_sync_runs.rb server/db/migrate/20240314102143_add_lockable_to_users.rb server/db/migrate/20240412183836_add_cursor_fields_to_syncs.rb server/db/migrate/20240419062432_add_cron_expression_to_syncs.rb server/db/migrate/20240419080033_update_schedule_type_in_syncs.rb server/db/migrate/20240423060924_add_skipped_rows_to_sync_runs.rb server/db/migrate/20240504054131_add_description_and_region_to_workspaces.rb server/db/migrate/20240506111708_create_resources.rb server/db/migrate/20240506111803_create_roles.rb server/db/migrate/20240515072318_add_role_id_to_workspace_users.rb server/db/migrate/20240521134208_add_invitation_fields_to_users.rb server/db/migrate/20240522101110_devise_invitable_add_to_users.rb server/db/migrate/20240523093913_add_unique_index_to_workspace_users.rb server/db/migrate/20240614135415_remove_error_from_sync_records.rb server/db/migrate/20240614140619_add_error_json_to_sync_records.rb server/db/migrate/20240628122409_rename_error_to_logs_in_sync_records.rb server/db/migrate/20240725060832_add_sync_run_type_to_sync_runs.rb server/db/migrate/20240726095056_add_confirmable_to_devise.rb server/db/migrate/20240823114746_add_configuration_to_models.rb server/db/migrate/20240827211003_add_connector_category_to_connector.rb server/db/migrate/20240829110045_create_data_apps.rb server/db/migrate/20240829131951_create_visual_component.rb server/db/migrate/20240917075008_change_name_null_in_visual_components.rb server/db/migrate/20240923143812_add_data_app_token_to_data_apps.rb server/db/migrate/20240923150740_populate_data_app_token_and_add_index.rb server/db/migrate/20241007070931_create_feedbacks.rb server/db/migrate/20241010214745_remove_name_unique_index_from_organization.rb server/db/migrate/20241016120129_create_audit_logs.rb server/db/migrate/20241017114319_add_feedback_type_and_change_feedback_content_to_feedbacks.rb server/db/migrate/20241017155337_change_reaction_to_be_nullable_in_feedbacks.rb server/db/migrate/20241024064358_create_data_app_sessions.rb server/db/migrate/20241024103527_add_session_id_and_session_count_to_feedbacks_and_visual_components.rb server/db/migrate/20241107074907_add_additional_remarks_to_feedbacks.rb server/db/migrate/20241119070408_add_rendering_type_to_data_apps.rb server/db/migrate/20241119111441_set_data_for_rendering_type_in_data_apps.rb server/db/migrate/20241119205428_add_data_app_sessions_count_to_data_apps.rb server/db/migrate/20241119205508_add_feedbacks_count_to_data_apps.rb server/db/migrate/20241119210518_counter_culture_fix_counts_for_data_app_sessions_and_feedbacks.rb server/db/migrate/20241126100010_create_active_storage_tables.active_storage.rb server/db/migrate/20241126104103_create_cust_visual_compnt_file.rb server/db/migrate/20241206211928_add_resource_link_to_audit_logs.rb server/db/migrate/20241219163555_create_alerts.rb server/db/migrate/20241219163606_create_alert_channels.rb server/db/migrate/20250102134726_create_alert_media.rb server/db/migrate/20250103134002_add_alert_medium_to_alert_channels.rb server/db/migrate/20250103134316_add_foreign_key_alert_medium_to_alert_channel.rb server/db/migrate/20250103134555_validate_add_foreign_key_alert_medium_to_alert_channel.rb server/db/migrate/20250105190454_add_last_run_at_to_alert.rb server/db/migrate/20250105190541_remove_platform_alert_channel.rb server/db/migrate/20250105204109_create_solid_queue_tables.solid_queue.rb server/db/migrate/20250105204110_add_missing_index_to_blocked_executions.solid_queue.rb server/db/migrate/20250105204111_create_recurring_executions.solid_queue.rb server/db/migrate/20250105205739_add_foreign_key_validation_for_solid_queue.rb server/db/migrate/20250106130642_add_logo_to_alert_medium.rb server/db/migrate/20250130231627_create_message_feedback.rb server/db/migrate/20250204172626_remove_metadata_and_timestamp_from_message_feedbacks.rb server/db/migrate/20250205115448_change_chatbot_response_name_in_message_feedbacks.rb server/db/migrate/20250205125111_create_billing_plans.rb server/db/migrate/20250205130002_change_addons_config_to_json_in_billing_plans.rb server/db/migrate/20250205132231_create_billing_subscriptions.rb server/db/migrate/20250205133513_rename_billing_plan_id_to_plan_id_in_billing_subscriptions.rb server/db/migrate/20250207084006_create_embedding_models.rb server/db/migrate/20250211130824_rename_max_rows_synced_limit_in_billing_plans.rb server/db/migrate/20250211180054_change_additional_remark_name_in_message_feedbacks.rb server/db/migrate/20250220021540_create_sso_configuration.rb server/db/migrate/20250220183302_add_role_type_to_role.rb server/db/migrate/20250220191249_add_organization_id_to_role.rb server/db/migrate/20250220191433_add_organization_id_role_name_unique_index_to_role.rb server/db/migrate/20250226100529_create_chat_messages.rb server/db/migrate/20250319092853_create_recurring_tasks.solid_queue.rb server/db/migrate/20250319092938_add_name_to_processes.solid_queue.rb server/db/migrate/20250319092939_make_name_not_null.solid_queue.rb server/db/migrate/20250319092940_change_solid_queue_recurring_tasks_static_to_not_null.solid_queue.rb server/db/migrate/20250321180501_create_eula.rb server/db/migrate/20250326163503_add_eula_accepted_to_users.rb server/db/migrate/20250415181231_add_eula_accepted_at_to_user.rb server/db/migrate/20250415192351_create_sync_files.rb server/db/migrate/20250424010113_add_workflow_run_id_to_sync_run.rb server/db/migrate/20250506000944_acts_as_taggable_on_migration.acts_as_taggable_on_engine.rb server/db/migrate/20250506000945_add_missing_unique_indices.acts_as_taggable_on_engine.rb server/db/migrate/20250506000946_add_taggings_counter_cache_to_tags.acts_as_taggable_on_engine.rb server/db/migrate/20250506000947_add_missing_taggable_index.acts_as_taggable_on_engine.rb server/db/migrate/20250506000948_change_collation_for_tag_names.acts_as_taggable_on_engine.rb server/db/migrate/20250506000949_add_missing_indexes_on_taggings.acts_as_taggable_on_engine.rb server/db/migrate/20250506000950_add_tenant_to_taggings.acts_as_taggable_on_engine.rb server/db/migrate/20250519182802_add_message_feedbacks_count_to_data_apps.rb server/db/migrate/20250519183250_add_chat_messages_count_to_data_apps.rb server/db/migrate/20250519183842_counter_culture_fix_counts_for_message_feedbacks.rb server/db/migrate/20250519183855_counter_culture_fix_counts_for_chat_messages.rb server/db/migrate/20250529124656_add_workspace_logos.rb server/db/migrate/20250529125449_add_organization_logos.rb server/db/migrate/20250602094149_create_workflows.rb server/db/migrate/20250602095746_create_components.rb server/db/migrate/20250602100811_create_edges.rb server/db/migrate/20250611091441_add_unique_index_to_workflows.rb server/db/migrate/20250617051749_add_data_and_json_to_components.rb server/db/migrate/20250618121819_remove_name_not_null_from_components.rb server/db/migrate/20250627000141_add_sub_connector_category_to_connector.rb server/db/migrate/20250701125416_create_workflow_runs.rb server/db/migrate/20250715171640_add_template_to_workflows.rb server/db/migrate/20250717004726_remove_template_to_workflows.rb server/db/migrate/20250724103035_add_configurable_to_visual_components.rb server/db/migrate/20250724111930_make_model_id_nullable_in_visual_components.rb server/db/migrate/20250725172105_create_workflow_logs.rb server/db/migrate/20250730142637_add_finished_at_to_workflow_run.rb server/db/migrate/20250806031347_add_title_to_chat_messages.rb server/db/migrate/20250812205822_move_title_from_chat_messages_to_data_app_session.rb server/db/migrate/20250813130124_create_remote_code_executions.rb server/db/migrate/20250918110212_remove_model_id_from_feedbacks_and_message_feedbacks.rb.rb server/db/migrate/20250925150504_create_workflow_integration.rb server/db/migrate/20251006204127_add_connection_configuration_for_workflow_integration.rb server/db/migrate/20251009173752_change_workflow_id_from_stringto_uuid_in_workflow_integration.rb server/db/schema.rb server/db/seeds.rb server/docker-compose.yml server/enterprise/app/interactors/agents/workflows/run_workflow.rb server/getduckdb.sh server/getduckdbcli.sh server/gethttpfsextension.sh server/getoracleinstantclient.sh server/lib/liquid/custom_filters.rb server/lib/reverse_etl/extractors/base.rb server/lib/reverse_etl/extractors/full_refresh.rb server/lib/reverse_etl/extractors/http.rb server/lib/reverse_etl/extractors/incremental_delta.rb server/lib/reverse_etl/extractors/test_sync_extractor.rb server/lib/reverse_etl/extractors/web_scraping.rb server/lib/reverse_etl/loaders/base.rb server/lib/reverse_etl/loaders/standard.rb server/lib/reverse_etl/transformers/base.rb server/lib/reverse_etl/transformers/chat_message_transformer.rb server/lib/reverse_etl/transformers/embeddings/base.rb server/lib/reverse_etl/transformers/embeddings/embedding_service.rb server/lib/reverse_etl/transformers/embeddings/open_ai.rb server/lib/reverse_etl/transformers/user_mapping.rb server/lib/reverse_etl/utils/batch_query.rb server/lib/reverse_etl/utils/cursor_query_builder.rb server/lib/reverse_etl/utils/paginator.rb server/lib/reverse_etl/utils/random_query_builder.rb server/lib/script_vault/tracker.rb server/lib/tasks/.keep server/lib/utils/constants.rb server/lib/utils/exception_reporter.rb server/lib/utils/health_checker.rb server/lib/utils/http_client.rb server/lib/utils/json_helpers.rb server/lib/utils/payload_generator/ai_ml.rb server/lib/utils/payload_generator/dynamic_sql.rb server/lib/utils/query_validator.rb server/public/favicon.ico server/public/robots.txt server/spec/contracts/auth_contracts_spec.rb server/spec/contracts/catalog_contracts_spec.rb server/spec/contracts/connector_contracts_spec.rb server/spec/contracts/connector_definition_contracts_spec.rb server/spec/contracts/model_contracts_spec.rb server/spec/contracts/report_contracts_spec.rb server/spec/contracts/schedule_sync_contracts_spec.rb server/spec/contracts/sync_contracts_spec.rb server/spec/contracts/sync_record_contracts_spec.rb server/spec/contracts/sync_run_contracts_spec.rb server/spec/contracts/user_contracts_spec.rb server/spec/contracts/workspace_contacts_spec.rb server/spec/controllers/api/v1/auth_controller_spec.rb server/spec/controllers/application_controller_spec.rb server/spec/controllers/concerns/audit_logger_spec.rb server/spec/controllers/concerns/resource_link_builder_spec.rb server/spec/factories/agents/components.rb server/spec/factories/agents/edges.rb server/spec/factories/agents/remote_code_executions.rb server/spec/factories/agents/workflow_integration.rb server/spec/factories/agents/workflow_runs.rb server/spec/factories/agents/workflows.rb server/spec/factories/agents/workflows_logs.rb server/spec/factories/alert_channels.rb server/spec/factories/alert_media.rb server/spec/factories/alerts.rb server/spec/factories/audit_logs.rb server/spec/factories/billing/plans.rb server/spec/factories/billing/subscriptions.rb server/spec/factories/catalogs.rb server/spec/factories/chat_messages.rb server/spec/factories/connectors.rb server/spec/factories/custom_visual_component_files.rb server/spec/factories/data_app_sessions.rb server/spec/factories/data_apps.rb server/spec/factories/embedding_models.rb server/spec/factories/eula.rb server/spec/factories/feedback.rb server/spec/factories/message_feedbacks.rb server/spec/factories/models.rb server/spec/factories/organizations.rb server/spec/factories/resources.rb server/spec/factories/roles.rb server/spec/factories/sso_configuration.rb server/spec/factories/sync_records.rb server/spec/factories/sync_runs.rb server/spec/factories/syncs.rb server/spec/factories/users.rb server/spec/factories/visual_components.rb server/spec/factories/workspace_users.rb server/spec/factories/workspaces.rb server/spec/interactors/authentication/login_spec.rb server/spec/interactors/authentication/logout_spec.rb server/spec/interactors/authentication/resend_verification_email_spec.rb server/spec/interactors/authentication/signup_spec.rb server/spec/interactors/catalogs/create_catalog_spec.rb server/spec/interactors/catalogs/update_catalog_spec.rb server/spec/interactors/connector_definitions/filter_connector_definitions_spec.rb server/spec/interactors/connectors/create_connector_spec.rb server/spec/interactors/connectors/discover_connector_spec.rb server/spec/interactors/connectors/query_source_spec.rb server/spec/interactors/connectors/update_connector_spec.rb server/spec/interactors/models/create_model_spec.rb server/spec/interactors/models/update_model_spec.rb server/spec/interactors/reports/activity_report_spec.rb server/spec/interactors/syncs/cancel_sync_spec.rb server/spec/interactors/syncs/create_sync_spec.rb server/spec/interactors/syncs/schedule_sync_spec.rb server/spec/interactors/syncs/sync_configurations_spec.rb server/spec/interactors/syncs/update_sync_spec.rb server/spec/interactors/workspaces/create_spec.rb server/spec/interactors/workspaces/delete_spec.rb server/spec/interactors/workspaces/find_spec.rb server/spec/interactors/workspaces/list_all_spec.rb server/spec/interactors/workspaces/update_spec.rb server/spec/lib/liquid/custom_filters_spec.rb server/spec/lib/reverse_etl/extractors/base_spec.rb server/spec/lib/reverse_etl/extractors/full_refresh_spec.rb server/spec/lib/reverse_etl/extractors/http_spec.rb server/spec/lib/reverse_etl/extractors/incremental_delta_spec.rb server/spec/lib/reverse_etl/extractors/test_sync_extractor_spec.rb server/spec/lib/reverse_etl/extractors/web_scraping_spec.rb server/spec/lib/reverse_etl/loaders/base_spec.rb server/spec/lib/reverse_etl/loaders/standard_spec.rb server/spec/lib/reverse_etl/transformers/base_spec.rb server/spec/lib/reverse_etl/transformers/chat_message_transformer_spec.rb server/spec/lib/reverse_etl/transformers/embeddings/base_spec.rb server/spec/lib/reverse_etl/transformers/embeddings/embedding_service_spec.rb server/spec/lib/reverse_etl/transformers/embeddings/open_ai_spec.rb server/spec/lib/reverse_etl/transformers/user_mapping_spec.rb server/spec/lib/reverse_etl/utils/batch_query_spec.rb server/spec/lib/reverse_etl/utils/cursor_query_builder_spec.rb server/spec/lib/reverse_etl/utils/paginator_spec.rb server/spec/lib/reverse_etl/utils/random_query_builder_spec.rb server/spec/lib/utils/exception_reporter_spec.rb server/spec/lib/utils/health_checker_spec.rb server/spec/lib/utils/http_client_spec.rb server/spec/lib/utils/json_helpers_spec.rb server/spec/lib/utils/payload_generator/ai_ml_spec.rb server/spec/lib/utils/payload_generator/dynamic_sql_spec.rb server/spec/lib/utils/query_validator_spec.rb server/spec/mailers/device_mailer_spec.rb server/spec/mailers/sync_alert_mailer_spec.rb server/spec/mailers/sync_run_mailer_spec.rb server/spec/middleware/multiwoven_server/request_response_logger_spec.rb server/spec/models/agents/component_spec.rb server/spec/models/agents/edge_spec.rb server/spec/models/agents/remote_code_execution_spec.rb server/spec/models/agents/workflow_integration_spec.rb server/spec/models/agents/workflow_log_spec.rb server/spec/models/agents/workflow_run_spec.rb server/spec/models/agents/workflow_spec.rb server/spec/models/alert_channel_spec.rb server/spec/models/alert_medium_spec.rb server/spec/models/alert_spec.rb server/spec/models/audit_log_spec.rb server/spec/models/billing/plan_spec.rb server/spec/models/billing/subscription_spec.rb server/spec/models/catalog_spec.rb server/spec/models/chat_message_spec.rb server/spec/models/connector_spec.rb server/spec/models/custom_visual_component_file_spec.rb server/spec/models/data_app_session_spec.rb server/spec/models/data_app_spec.rb server/spec/models/eula_spec.rb server/spec/models/feedback_spec.rb server/spec/models/message_feedback_spec.rb server/spec/models/model_spec.rb server/spec/models/organization_spec.rb server/spec/models/resource_spec.rb server/spec/models/role_spec.rb server/spec/models/sso_configuration_spec.rb server/spec/models/sync_file_spec.rb server/spec/models/sync_record_spec.rb server/spec/models/sync_run_spec.rb server/spec/models/sync_spec.rb server/spec/models/user_spec.rb server/spec/models/visual_component_spec.rb server/spec/models/workspace_spec.rb server/spec/models/workspace_user_spec.rb server/spec/policies/application_policy_spec.rb server/spec/policies/connector_definition_policy_spec.rb server/spec/policies/connector_policy_spec.rb server/spec/policies/model_policy_spec.rb server/spec/policies/report_policy_spec.rb server/spec/policies/sync_policy_spec.rb server/spec/policies/sync_record_policy_spec.rb server/spec/policies/sync_run_policy_spec.rb server/spec/policies/user_policy_spec.rb server/spec/policies/workspace_policy_spec.rb server/spec/rails_helper.rb server/spec/requests/api/v1/catalogs_controller_spec.rb server/spec/requests/api/v1/connector_definitions_spec.rb server/spec/requests/api/v1/connectors_controller_spec.rb server/spec/requests/api/v1/models_controller_spec.rb server/spec/requests/api/v1/reports_controller_spec.rb server/spec/requests/api/v1/schedule_syncs_controller_spec.rb server/spec/requests/api/v1/sync_records_controller_spec.rb server/spec/requests/api/v1/sync_runs_controller_spec.rb server/spec/requests/api/v1/syncs_controller_spec.rb server/spec/requests/api/v1/users_controller_spec.rb server/spec/requests/api/v1/workspaces_controller_spec.rb server/spec/spec_helper.rb server/spec/support/auth_helper.rb server/spec/temporal/activities/create_sync_run_activity_spec.rb server/spec/temporal/activities/extractor_activity_spec.rb server/spec/temporal/activities/loader_activity_spec.rb server/spec/temporal/activities/reporter_activity_spec.rb server/spec/temporal/activities/schedule_sync_activity_spec.rb server/spec/temporal/middlewares/logging_middleware_spec.rb server/spec/temporal/middlewares/update_sync_run_status_middleware_spec.rb server/spec/temporal/workflows/schedule_sync_workflow_spec.rb server/spec/temporal/workflows/sync_workflow_spec.rb server/storage/.keep server/tmp/pids/.keep server/vendor/.keep sync_commit.sh ui/.eslintrc.cjs ui/.github/CODEOWNERS ui/.github/ISSUE_TEMPLATE/bug_report_template.md ui/.github/ISSUE_TEMPLATE/documentation_update_template.md ui/.github/ISSUE_TEMPLATE/feature_request_template.md ui/.github/pull_request_template.md ui/.gitignore ui/.prettierrc ui/CODE_OF_CONDUCT.md ui/CONTRIBUTING.md ui/Dockerfile ui/Dockerfile.dev ui/LICENSE ui/README.md ui/__mocks__/moment.js ui/__mocks__/react-chartjs-2.js ui/cypress.config.ts ui/cypress/e2e/login.cy.js ui/index.html ui/jest.config.js ui/package-lock.json ui/package.json ui/public/favicon.svg ui/server-config/nginx.conf ui/server.js ui/src/App.tsx ui/src/assets/icons/FiBug.svg ui/src/assets/icons/connector-placeholder.svg ui/src/assets/images/404-image.png ui/src/assets/images/DBTModelSelector.svg ui/src/assets/images/EmptyQueryPreview.svg ui/src/assets/images/ExitWarning.png ui/src/assets/images/NoDestinations.png ui/src/assets/images/NoModels.png ui/src/assets/images/NoSources.png ui/src/assets/images/NoSyncs.svg ui/src/assets/images/SQLQuerySelector.svg ui/src/assets/images/TableSelector.svg ui/src/assets/images/database.svg ui/src/assets/images/empty-state-illustration.svg ui/src/assets/images/icon-white.svg ui/src/assets/images/icon.svg ui/src/assets/images/multiwoven-logo.svg ui/src/assets/images/stars.svg ui/src/assets/styles/common_styles.scss ui/src/chakra-core.config.ts ui/src/chakra.config.ts ui/src/components/Alerts/Alerts.tsx ui/src/components/Alerts/index.ts ui/src/components/Badge/Badge.tsx ui/src/components/Badge/index.ts ui/src/components/BaseButton/BaseButton.tsx ui/src/components/BaseButton/index.ts ui/src/components/Breadcrumbs/Breadcrumbs.tsx ui/src/components/Breadcrumbs/index.ts ui/src/components/Breadcrumbs/types.ts ui/src/components/ConnectorTable/ConnectorTable.tsx ui/src/components/ConnectorTable/index.ts ui/src/components/ContentContainer/ContentContainer.tsx ui/src/components/ContentContainer/index.ts ui/src/components/DataTable/RowsNotFound.tsx ui/src/components/DataTable/Table.tsx ui/src/components/DataTable/index.ts ui/src/components/EnhancedPagination/PageChangeButton.tsx ui/src/components/EnhancedPagination/PageNumberItem.tsx ui/src/components/EnhancedPagination/Pagination.tsx ui/src/components/EnhancedPagination/__tests__/Pagination.test.tsx ui/src/components/EnhancedPagination/index.ts ui/src/components/EntityItem/EntityItem.tsx ui/src/components/EntityItem/index.ts ui/src/components/ExitModal/ExitModal.tsx ui/src/components/ExitModal/index.ts ui/src/components/Fields/Fields.tsx ui/src/components/Fields/index.ts ui/src/components/FormFooter/FormFooter.tsx ui/src/components/FormFooter/index.ts ui/src/components/Heading/index.tsx ui/src/components/HiddenInput/HiddenInput.tsx ui/src/components/HiddenInput/index.ts ui/src/components/JSONSchemaForm/JSONSchemaForm.tsx ui/src/components/JSONSchemaForm/index.ts ui/src/components/JSONSchemaForm/rjsf/BaseInputTemplate.tsx ui/src/components/JSONSchemaForm/rjsf/DescriptionFieldTemplate.tsx ui/src/components/JSONSchemaForm/rjsf/FieldTemplate.tsx ui/src/components/JSONSchemaForm/rjsf/ObjectFieldTemplate.tsx ui/src/components/JSONSchemaForm/rjsf/TitleFieldTemplate.tsx ui/src/components/JSONSchemaForm/rjsf/WrapIfAdditionalTemplate.tsx ui/src/components/Loader/Loader.tsx ui/src/components/Loader/index.ts ui/src/components/ModelTable/ModelTable.tsx ui/src/components/ModelTable/index.ts ui/src/components/Pagination/Pagination.tsx ui/src/components/Pagination/index.ts ui/src/components/SearchBar/SearchBar.tsx ui/src/components/StatusTag/StatusTag.tsx ui/src/components/StatusTag/index.ts ui/src/components/Stepped…
Description
Adds MySQL source and destination connectors for the Multiwoven Reverse ETL platform. Both connectors use the Sequel mysql2 adapter (same as the existing MariaDB connector).
check_connection,discover,read(with limit/offset)check_connection,discover,write(QueryBuilder-based SQL +db.run)Related Issue
Closes #10
Type of Change
How Has This Been Tested?
All 15 tests pass (9 source + 6 destination). Run with:
Checklist:
feature/mysql2already transitive via MariaDB)Summary by CodeRabbit