Der Umgang mit OAuth2-Tokens ist komplex. dataflows abstrahiert das vollständig weg.
connections-TabelleTokens werden in der connections-Tabelle gespeichert.
access_token und refresh_token werden mit AES-256-GCM verschlüsselt, bevor sie in die Datenbank geschrieben werden.expires_at und erneuert den Token, bevor ein Workflow-Schritt läuft.Wir trennen die „Application“ (Service-Client) vom „User“ (Connection).
client_id und client_secret.access_token des Users.Workflows greifen nie direkt auf Secrets zu. Die Engine injiziert vorauthentifizierte Clients in jeden Schritt.
// ❌ SCHLECHT: Tokens manuell handhaben
const token = await db.tokens.find(...)
await fetch('https://api.github.com', {
headers: { Authorization: token }
})
// ✅ GUT: Authentifizierter Client von der Engine injiziert
export const syncIssues = defineWorkflow({
id: 'sync-github-issues',
trigger: schedule.every('1h'),
async run({ step, clients }) {
// Die Engine löst die Connection auf, erneuert Tokens
// bei Bedarf und gibt dir einen einsatzbereiten Client.
return step.run('fetch-issues', () =>
clients.github.listIssues({ repo: 'dataflows-io/app' })
)
}
})
Jede Workflow-Execution läuft in einem isolierten Kontext.