Thread

AA
André Ahlert4:33 PMOpen in Slack
Hey team! Looking at the open connector PRs (Slack, OneDrive, Dropbox, file upload), there's a lot of repeated BaseConnector plumbing across them. I drafted what a @archestra/connector-sdk package + scaffold could look like to cut that. Open to an RFC issue, or do you prefer keeping connectors in-tree?

19 replies
II
Ildar Iskhakov (archestra team)10:28 PMOpen in Slack
Hi @user
Pretty cool idea, @user or @user are the authors of this integration. We need to check with them
🎯1
J(
joey (archestra team)1:23 PMOpen in Slack
hey 👋 I'm not sure we need an external package for this. Do you have specific examples of "repeated BaseConnector plumbing"? If there's particular repetition you notice I think extracting that into BaseConnector and/or shared utils would be fine 🙂
AA
André Ahlert4:06 PMOpen in Slack
Hey @user tks!
Fair, in-tree first makes sense while the interface still moves.
Context on where I see this going: short term extract the repeated bits into BaseConnector + utils. Medium term, once the Connector / SyncBatch / checkpoint shapes stabilize, that same code lives behind a public archestra/connector-sdk + create-archestra-connector scaffold (Backstage / Airflow providers / ESLint plugins style).
AA
André Ahlert4:07 PMOpen in Slack
In Long term that opens a connector marketplace, third parties ship zendesk / hubspot / freshdesk without forking core, and Archestra captures distribution + revenue share on paid ones. So I'd treat the in-tree extraction as step 0 of that path, not a separate thing.
AA
André Ahlert4:09 PMOpen in Slack
what I hit reading dropbox + onedrive + slack #3962 was
J(
joey (archestra team)4:10 PMOpen in Slack
archestra/connector-sdk + third parties ship zendesk / hubspot / freshdesk without forking core
how would that work? at the end of the day, the code for the available connectors need to be in the codebase/docker-images themselves. what concrete problem is this trying to solve that exists today?
do you have any examples of "repeated bits"?
AA
André Ahlert4:12 PMOpen in Slack
let me get here
:thumbsup_all:1
AA
André Ahlert4:21 PMOpen in Slack
sorry, came to my pc was on mobile
AA
André Ahlert4:21 PMOpen in Slack
repetition I see in-tree:
AA
André Ahlert4:22 PMOpen in Slack
validateConfig is the same skeleton in dropbox / onedrive / notion / jira / github (parseX + null check + return). slack diverged with per-field errors, which is itself a sign the simple skeleton hit its ceiling.
for example
AA
André Ahlert4:22 PMOpen in Slack
imho could be BaseConnector.validateConfigWithSchema(schema, label).
AA
André Ahlert4:23 PMOpen in Slack
testConnection has the same try/catch + log + return shape, but error formatting already drifts. dropbox, onedrive, notion use extractErrorMessage. Jira and github do error instanceof Error ? .message : String(error) inline.
AA
André Ahlert4:25 PMOpen in Slack
we could have something like BaseConnector.runConnectionTest({ label, probe })
AA
André Ahlert4:26 PMOpen in Slack
I didnt dig all of then
AA
André Ahlert4:27 PMOpen in Slack
just some notes, came at this from a community product angle (lower the bar for outside contributors, faster connector PR throughput) and ended up zooming in on where the real friction is, which is the boilerplate every new connector reintroduces
AA
André Ahlert4:44 PMOpen in Slack
Parking the SDK/marketplace bit, that was me jumping ahead. What I see as Concrete today (imho):
ValidateConfig is the same skeleton in dropbox / onedrive / notion / jira / github (parse + null check + return).
TestConnection has the same try/catch shape but error formatting already drifts (extractErrorMessage in dropbox/onedrive/notion vs inline instanceof Error in jira/github). Slack diverged into per-field errors, which is the skeleton hitting its ceiling.
Proposing a small PR: BaseConnector.validateConfigWithSchema(schema, label) + BaseConnector.runConnectionTest({ label, probe }), migrating dropbox/onedrive/notion as proof. If it holds across the next 2-3 connectors, we can revisit whether the surface deserves a stable package later. wdyt?