Workflow Connectors
Workflow connectors let a LenserFight user connect an external service once and reuse that connection from workflow nodes through connector references such as [[:connector:google.sheets.primary]].
Connector credentials are resolved only by server-side execution workers. The browser, workflow JSON, node outputs, logs, battle pages, agent prompts, and public result pages must never receive access tokens, refresh tokens, API keys, webhook secrets, or vault identifiers.
Runtime Model
- Provider discovery lives in
@lenserfight/domain/oauth-connections. - Workflow runners declare provider, capability, operation, and scopes.
ConnectorRuntimeresolves credentials server-side and dispatches to provider adapters.- Adapters return sanitized
ExecutionResultobjects whosedatacan flow to downstream DAG nodes. - Existing inbound platform API connectors under
connectors.*remain separate.
Provider Status
Priority workflow providers have deterministic mocked adapters in this phase: Notion, Google Sheets, Asana, Monday.com, Zapier, Slack, GitHub, Jira, Linear, and Webhook / Custom HTTP.
Metadata-only providers are visible for planning and contributor extension: GitLab, Trello, Airtable, HubSpot, Salesforce, Discord, Microsoft Teams, Microsoft Outlook, Microsoft OneDrive, Microsoft Excel Online, Dropbox, Box, Calendly, ClickUp, and Todoist.
Unavailable runtime operations return connector_operation_unavailable instead of pretending to call the provider.
Security Rules
- Validate connector refs at save time where possible and again during execution.
- Validate provider, capability, scopes, owner, workspace, active status, and revocation before use.
- Store secrets in Supabase Vault and expose only safe metadata through RPCs.
- Mask
token,secret,password,authorization,apiKey, and cookie-like fields in logs and outputs. - Do not include private external data in AI model prompts unless the workflow node explicitly declares that behavior and the user chooses it.
Custom HTTP
Custom HTTP is high risk and must use the server-side safety layer:
- HTTPS only.
- Explicit allowlisted origins or hosts in sanitized connector config.
- Block localhost, private IP ranges, link-local hosts, and metadata services.
- Strip unsafe headers.
- Do not forward credentials by default.
- Cap response size and enforce timeout/retry limits in production adapters.
Examples
- Notion database row to Lens input:
notion.database.primarywithquery_database, then map returned row fields into a downstream Lens node. - Google Sheets row to workflow generation node:
google.sheets.primarywithread_range, then usedata.request.rangeor mocked row data downstream. - Asana task creation from workflow result:
asana.tasks.primarywithcreate_task. - Monday.com item creation from AI-generated output:
monday.boards.primarywithcreate_item. - Zapier webhook trigger from completed workflow:
zapier.webhooks.primarywithtrigger_webhook. - Slack notification after workflow completion:
slack.chat.primarywithsend_message. - GitHub issue creation from workflow analysis:
github.repos.primarywithcreate_issue. - Jira ticket creation from bug triage workflow:
jira.issues.primarywithcreate_issue. - Linear issue creation from product planning workflow:
linear.issues.primarywithcreate_issue. - Custom HTTP export:
custom_http.http.primarywithsend_requestand an allowlisted HTTPS host.
Adding A Provider
Add provider metadata to the domain registry, add or reuse a focused runtime adapter, expose connector_ref fields in workflow descriptors, add mocked tests, and update this support matrix. Do not add provider-specific branching to the workflow execution engine.