Skip to content

feat: add Baserow data source integration#454

Merged
joaquimds merged 2 commits into
mainfrom
feat/baserow-integration
Jul 23, 2026
Merged

feat: add Baserow data source integration#454
joaquimds merged 2 commits into
mainfrom
feat/baserow-integration

Conversation

@joaquimds

Copy link
Copy Markdown
Member

Adds Baserow alongside the existing CRM integrations, with import, enrichment write-back, tagging, column deletion and webhook-driven auto-import.

Baserow has no OAuth flow, and its database tokens are rejected by the field and webhook endpoints, so the adaptor signs in with an account email and password to obtain a JWT. Refresh tokens expire after 7 days and are not rotated, so the password has to be stored for background syncs to keep working; the form recommends creating a dedicated bot account to bound the blast radius, and the config panel now masks password values.

The API base URL is configurable to support self-hosted instances.

Link and select field values are unwrapped from Baserow's { id, value } objects to the plain strings and string arrays that Airtable already returns, so they can be filtered and mapped rather than importing as ColumnType.Object.

Tests run against the real Baserow API; the table fixture they expect is documented at the top of the test file.

Adds Baserow alongside the existing CRM integrations, with import,
enrichment write-back, tagging, column deletion and webhook-driven
auto-import.

Baserow has no OAuth flow, and its database tokens are rejected by the
field and webhook endpoints, so the adaptor signs in with an account
email and password to obtain a JWT. Refresh tokens expire after 7 days
and are not rotated, so the password has to be stored for background
syncs to keep working; the form recommends creating a dedicated bot
account to bound the blast radius, and the config panel now masks
password values.

The API base URL is configurable to support self-hosted instances.

Link and select field values are unwrapped from Baserow's
`{ id, value }` objects to the plain strings and string arrays that
Airtable already returns, so they can be filtered and mapped rather
than importing as ColumnType.Object.

Tests run against the real Baserow API; the table fixture they expect is
documented at the top of the test file.
Extends the existing link and select unwrapping to the remaining field
types Baserow serializes as objects. These wrap their value in `name`
rather than `value`, so the previous unwrapper passed them through
untouched and they imported as ColumnType.Object:

- multiple_collaborators: [{ id, name }]
- created_by:             { id, name }
- last_modified_by:       { id, name }

The field type table now carries both the wrapping property and whether
the value is an array, so adding a type is a one-line change.

Shapes were confirmed against the real API rather than assumed. The two
new tests assert by shape rather than by user name, so they survive the
test credentials being pointed at a different account.
@joaquimds
joaquimds merged commit 4e67b10 into main Jul 23, 2026
1 check passed
@joaquimds
joaquimds deleted the feat/baserow-integration branch July 23, 2026 11:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant