[{"data":1,"prerenderedAt":1715},["ShallowReactive",2],{"footer-compare-de":3,"dynamicForm-newsletter-de":24,"mdc--4uzlmi-key":55,"architecture-index-de":77,"architecture-items-de":125},[4,8,12,16,20],{"path":5,"competitorName":6,"title":7},"\u002Fmake","Make","dataflows vs Make",{"path":9,"competitorName":10,"title":11},"\u002Fpipedream","Pipedream","dataflows vs Pipedream",{"path":13,"competitorName":14,"title":15},"\u002Fpower-automate","Power Automate","dataflows vs Power Automate",{"path":17,"competitorName":18,"title":19},"\u002Fzapier","Zapier","dataflows vs Zapier",{"path":21,"competitorName":22,"title":23},"\u002Fn8n","n8n","dataflows vs n8n",{"id":25,"title":26,"apiEndpoint":27,"body":28,"description":28,"extension":29,"fields":30,"mail":43,"meta":46,"navigation":35,"path":47,"seo":48,"stem":49,"submitButtonLabel":50,"successMsg":51,"__hash__":54},"forms_de\u002Fnewsletter.yml","Newsletter","\u002Fapi\u002FdynamicFormsInbox",null,"yml",[31,38],{"name":32,"type":32,"label":33,"placeholder":34,"required":35,"validationError":36,"width":37},"email","E-Mail","deine@email.de",true,"Bitte gib eine gültige E-Mail-Adresse an","full",{"name":39,"type":40,"label":41,"required":35,"validationError":42,"width":37},"privacy","checkbox","Ich stimme der [Datenschutzerklärung](\u002Fde\u002Fprivacy) zu","Bitte stimme der Datenschutzerklärung zu",{"to":44,"subject":45},"info@nbrx.com","Neues Newsletter-Abo",{},"\u002Fnewsletter",{"title":26},"newsletter","Abonnieren",{"title":52,"description":53},"Fast geschafft","Wir haben dir eine Bestätigungs-E-Mail geschickt – bitte schau kurz rein.","revae07UJt6EZkkQ6uf8RmCpu7w1TTPocdQKkKUB2LQ",{"data":56,"body":57},{},{"type":58,"children":59},"root",[60],{"type":61,"tag":62,"props":63,"children":64},"element","p",{},[65,68,75],{"type":66,"value":67},"text","Ich stimme der ",{"type":61,"tag":69,"props":70,"children":72},"a",{"href":71},"\u002Fde\u002Fprivacy",[73],{"type":66,"value":74},"Datenschutzerklärung",{"type":66,"value":76}," zu",{"id":78,"title":79,"body":80,"description":115,"extension":116,"icon":117,"meta":118,"navigation":35,"path":119,"seo":120,"stem":123,"__hash__":124},"architecture_de\u002Findex.md","Architektur im Überblick",{"type":81,"value":82,"toc":106},"minimark",[83,88,91,96,99,103],[84,85,87],"h2",{"id":86},"design-philosophie","Design-Philosophie",[62,89,90],{},"dataflows ist dafür gemacht, die „Day-2“-Probleme der Automatisierung zu lösen: Error-Handling, State-Management und Observability. Während visuelle Builder auf „Day 1“ optimieren (schneller Start), geht es uns um etwas anderes: jahrelang verlässlich laufen.",[92,93,95],"h3",{"id":94},"verlässlichkeit-vor-bequemlichkeit","Verlässlichkeit vor Bequemlichkeit",[62,97,98],{},"Wir setzen auf streng typisierten Code statt Drag-and-Drop, weil visuelle Editoren bei wachsender Komplexität an ihre Grenzen kommen. Mit TypeScript greifen wir auf die CI\u002FCD-Pipelines, Code-Reviews und Test-Frameworks zurück, die dein Team längst beherrscht.",[92,100,102],{"id":101},"das-durable-versprechen","Das Durable-Versprechen",[62,104,105],{},"Einmal gestartet, läuft jeder Workflow zu Ende – auch wenn ein Server abstürzt oder API-Limits zuschlagen. Möglich macht das unsere Event-Sourcing-Architektur mit Replay-Mechanismus.",{"title":107,"searchDepth":108,"depth":108,"links":109},"",2,[110],{"id":86,"depth":108,"text":87,"children":111},[112,114],{"id":94,"depth":113,"text":95},3,{"id":101,"depth":113,"text":102},"Das technische Fundament der dataflows-Engine.","md","i-lucide-cpu",{},"\u002F",{"title":121,"description":122},"dataflows-Architektur","Schau dir an, wie die dataflows-Engine technisch aufgebaut ist.","index","OO0tYvLm0cFFklg904DxGFioo01ra43A1H2fJ1vQ60Q",[126,775,1325],{"id":127,"title":128,"body":129,"description":767,"extension":116,"icon":117,"meta":768,"navigation":35,"path":769,"seo":770,"stem":773,"__hash__":774},"architecture_de\u002Fcore-engine.md","Core-Engine-Architektur",{"type":81,"value":130,"toc":759},[131,135,138,146,168,171,175,181,185,188,208,212,228,529,532,631,635,638,755],[84,132,134],{"id":133},"aus-erfahrung-gewachsen","Aus Erfahrung gewachsen",[62,136,137],{},"Diese Architektur ist keine akademische Übung. Sie ist das Ergebnis jahrelanger Arbeit an geschäftskritischen Automatisierungs-Systemen. Wir haben jeden denkbaren Failure-Mode gesehen: API-Rate-Limits, Datenbank-Timeouts, Worker-Crashes, Memory-Leaks.",[62,139,140,141,145],{},"Deshalb bauen wir auf bewährter ",[142,143,144],"strong",{},"Open-Source","-Technologie auf – statt eigene Black-Boxes zu erfinden.",[147,148,149,156,162],"ul",{},[150,151,152,155],"li",{},[142,153,154],{},"Runtime",": Node.js & Nitro für hochperformante asynchrone I\u002FO.",[150,157,158,161],{},[142,159,160],{},"Datenbank",": PostgreSQL für verlässliche, ACID-konforme State-Speicherung.",[150,163,164,167],{},[142,165,166],{},"Engine",": Durable-Execution-Engine für resumable Workflows.",[62,169,170],{},"Mit diesen kampferprobten Komponenten fokussieren wir unsere Innovation auf das, was zählt: die Workflow-Abstraktion selbst – nicht das Plumbing.",[84,172,174],{"id":173},"durable-execution","Durable Execution",[62,176,177,178,180],{},"dataflows ist auf dem Konzept der ",[142,179,174],{}," aufgebaut. Statt Queues, Wiederholungen und State manuell zu verwalten, schreibst du Standard-TypeScript-Code – die Engine macht ihn automatisch durable.",[92,182,184],{"id":183},"reliability-as-code","Reliability-as-Code",[62,186,187],{},"Weg von handgerollten Queues und Custom-Retries – hin zu durablem, resumable Code.",[147,189,190,196,202],{},[150,191,192,195],{},[142,193,194],{},"Keine Queues",": Du definierst keine Queues oder Worker. Du deklarierst einen Workflow und löst ihn aus.",[150,197,198,201],{},[142,199,200],{},"Keine Timeouts",": Workflows können Sekunden, Tage oder Monate laufen.",[150,203,204,207],{},[142,205,206],{},"Resumable",": Stürzt der Prozess ab, läuft er genau dort weiter, wo er aufgehört hat.",[92,209,211],{"id":210},"workflows-und-steps","Workflows und Steps",[62,213,214,215,219,220,223,224,227],{},"Ein Workflow wird mit ",[216,217,218],"code",{},"defineWorkflow"," definiert. Innerhalb seiner ",[216,221,222],{},"run","-Funktion ist jeder in ",[216,225,226],{},"step.run(...)"," gewrappte Aufruf ein atomarer, memoisierter Schritt. Die Engine persistiert das Ergebnis jedes Schritts in PostgreSQL – stürzt der Prozess ab und startet neu, werden bereits ausgeführte Schritte übersprungen und aus dem Cache repliziert.",[229,230,234],"pre",{"className":231,"code":232,"language":233,"meta":107,"style":107},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export const copyToClickUp = defineWorkflow({\n  id: 'copy-to-clickup',\n  trigger: azure.onWorkItemCreated(),\n\n  async run({ event, step }) {\n    \u002F\u002F Jeder Schritt läuft einmal. Beim Replay wird das Ergebnis\n    \u002F\u002F aus der DB geholt, statt die API erneut zu treffen.\n    const item = await step.run('fetch-item', () =>\n      azure.getWorkItem({ id: event.payload.id })\n    )\n\n    const task = await step.run('create-task', () =>\n      clickup.createTask(item)\n    )\n\n    return task\n  }\n})\n","typescript",[216,235,236,267,289,310,316,344,351,357,395,434,440,445,478,496,501,506,515,521],{"__ignoreMap":107},[237,238,241,245,249,253,257,261,264],"span",{"class":239,"line":240},"line",1,[237,242,244],{"class":243},"s7zQu","export",[237,246,248],{"class":247},"spNyl"," const",[237,250,252],{"class":251},"sTEyZ"," copyToClickUp ",[237,254,256],{"class":255},"sMK4o","=",[237,258,260],{"class":259},"s2Zo4"," defineWorkflow",[237,262,263],{"class":251},"(",[237,265,266],{"class":255},"{\n",[237,268,269,273,276,279,283,286],{"class":239,"line":108},[237,270,272],{"class":271},"swJcz","  id",[237,274,275],{"class":255},":",[237,277,278],{"class":255}," '",[237,280,282],{"class":281},"sfazB","copy-to-clickup",[237,284,285],{"class":255},"'",[237,287,288],{"class":255},",\n",[237,290,291,294,296,299,302,305,308],{"class":239,"line":113},[237,292,293],{"class":271},"  trigger",[237,295,275],{"class":255},[237,297,298],{"class":251}," azure",[237,300,301],{"class":255},".",[237,303,304],{"class":259},"onWorkItemCreated",[237,306,307],{"class":251},"()",[237,309,288],{"class":255},[237,311,313],{"class":239,"line":312},4,[237,314,315],{"emptyLinePlaceholder":35},"\n",[237,317,319,322,325,328,332,335,338,341],{"class":239,"line":318},5,[237,320,321],{"class":247},"  async",[237,323,324],{"class":271}," run",[237,326,327],{"class":255},"({",[237,329,331],{"class":330},"sHdIc"," event",[237,333,334],{"class":255},",",[237,336,337],{"class":330}," step",[237,339,340],{"class":255}," })",[237,342,343],{"class":255}," {\n",[237,345,347],{"class":239,"line":346},6,[237,348,350],{"class":349},"sHwdD","    \u002F\u002F Jeder Schritt läuft einmal. Beim Replay wird das Ergebnis\n",[237,352,354],{"class":239,"line":353},7,[237,355,356],{"class":349},"    \u002F\u002F aus der DB geholt, statt die API erneut zu treffen.\n",[237,358,360,363,366,369,372,374,376,378,380,382,385,387,389,392],{"class":239,"line":359},8,[237,361,362],{"class":247},"    const",[237,364,365],{"class":251}," item",[237,367,368],{"class":255}," =",[237,370,371],{"class":243}," await",[237,373,337],{"class":251},[237,375,301],{"class":255},[237,377,222],{"class":259},[237,379,263],{"class":271},[237,381,285],{"class":255},[237,383,384],{"class":281},"fetch-item",[237,386,285],{"class":255},[237,388,334],{"class":255},[237,390,391],{"class":255}," ()",[237,393,394],{"class":247}," =>\n",[237,396,398,401,403,406,408,411,414,416,418,420,423,425,428,431],{"class":239,"line":397},9,[237,399,400],{"class":251},"      azure",[237,402,301],{"class":255},[237,404,405],{"class":259},"getWorkItem",[237,407,263],{"class":271},[237,409,410],{"class":255},"{",[237,412,413],{"class":271}," id",[237,415,275],{"class":255},[237,417,331],{"class":251},[237,419,301],{"class":255},[237,421,422],{"class":251},"payload",[237,424,301],{"class":255},[237,426,427],{"class":251},"id",[237,429,430],{"class":255}," }",[237,432,433],{"class":271},")\n",[237,435,437],{"class":239,"line":436},10,[237,438,439],{"class":271},"    )\n",[237,441,443],{"class":239,"line":442},11,[237,444,315],{"emptyLinePlaceholder":35},[237,446,448,450,453,455,457,459,461,463,465,467,470,472,474,476],{"class":239,"line":447},12,[237,449,362],{"class":247},[237,451,452],{"class":251}," task",[237,454,368],{"class":255},[237,456,371],{"class":243},[237,458,337],{"class":251},[237,460,301],{"class":255},[237,462,222],{"class":259},[237,464,263],{"class":271},[237,466,285],{"class":255},[237,468,469],{"class":281},"create-task",[237,471,285],{"class":255},[237,473,334],{"class":255},[237,475,391],{"class":255},[237,477,394],{"class":247},[237,479,481,484,486,489,491,494],{"class":239,"line":480},13,[237,482,483],{"class":251},"      clickup",[237,485,301],{"class":255},[237,487,488],{"class":259},"createTask",[237,490,263],{"class":271},[237,492,493],{"class":251},"item",[237,495,433],{"class":271},[237,497,499],{"class":239,"line":498},14,[237,500,439],{"class":271},[237,502,504],{"class":239,"line":503},15,[237,505,315],{"emptyLinePlaceholder":35},[237,507,509,512],{"class":239,"line":508},16,[237,510,511],{"class":243},"    return",[237,513,514],{"class":251}," task\n",[237,516,518],{"class":239,"line":517},17,[237,519,520],{"class":255},"  }\n",[237,522,524,527],{"class":239,"line":523},18,[237,525,526],{"class":255},"}",[237,528,433],{"class":251},[62,530,531],{},"Workflows können auch pausieren und auf externe Signale oder Zeit warten:",[229,533,535],{"className":231,"code":534,"language":233,"meta":107,"style":107},"\u002F\u002F Auf eine menschliche Freigabe warten und dann weitermachen – auch Tage später\nconst decision = await step.waitForEvent('approval', {\n  timeout: '7d'\n})\n\nawait step.sleep('cooldown', '24h')\n",[216,536,537,542,574,589,595,599],{"__ignoreMap":107},[237,538,539],{"class":239,"line":240},[237,540,541],{"class":349},"\u002F\u002F Auf eine menschliche Freigabe warten und dann weitermachen – auch Tage später\n",[237,543,544,547,550,552,554,556,558,561,563,565,568,570,572],{"class":239,"line":108},[237,545,546],{"class":247},"const",[237,548,549],{"class":251}," decision ",[237,551,256],{"class":255},[237,553,371],{"class":243},[237,555,337],{"class":251},[237,557,301],{"class":255},[237,559,560],{"class":259},"waitForEvent",[237,562,263],{"class":251},[237,564,285],{"class":255},[237,566,567],{"class":281},"approval",[237,569,285],{"class":255},[237,571,334],{"class":255},[237,573,343],{"class":255},[237,575,576,579,581,583,586],{"class":239,"line":113},[237,577,578],{"class":271},"  timeout",[237,580,275],{"class":255},[237,582,278],{"class":255},[237,584,585],{"class":281},"7d",[237,587,588],{"class":255},"'\n",[237,590,591,593],{"class":239,"line":312},[237,592,526],{"class":255},[237,594,433],{"class":251},[237,596,597],{"class":239,"line":318},[237,598,315],{"emptyLinePlaceholder":35},[237,600,601,604,606,608,611,613,615,618,620,622,624,627,629],{"class":239,"line":346},[237,602,603],{"class":243},"await",[237,605,337],{"class":251},[237,607,301],{"class":255},[237,609,610],{"class":259},"sleep",[237,612,263],{"class":251},[237,614,285],{"class":255},[237,616,617],{"class":281},"cooldown",[237,619,285],{"class":255},[237,621,334],{"class":255},[237,623,278],{"class":255},[237,625,626],{"class":281},"24h",[237,628,285],{"class":255},[237,630,433],{"class":251},[92,632,634],{"id":633},"execution-flow","Execution-Flow",[62,636,637],{},"Die Engine verwaltet den Execution-State in PostgreSQL. Schläft ein Workflow oder wartet er auf ein Event, gibt er seinen State ab und gibt Compute-Ressourcen frei.",[229,639,643],{"className":640,"code":641,"language":642,"meta":107,"style":107},"language-mermaid shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","sequenceDiagram\n    participant Webhook\n    participant API\n    participant Engine\n    participant DB\n\n    Webhook->>API: POST \u002Fhooks\u002Fshopify\n    API->>Engine: Workflow starten\n    API-->>Webhook: 202 Accepted\n\n    Engine->>DB: Execution anlegen\n    Engine->>Engine: Step 1 ausführen\n    Engine->>DB: Ergebnis 1 speichern\n    Engine->>Engine: Step 2 ausführen\n    Engine->>DB: Ergebnis 2 speichern\n\n    Engine->>DB: Suspendieren (Sleep\u002FWait)\n    Note right of Engine: Ressourcen freigegeben\n\n    Engine->>DB: Resume (Timer\u002FEvent)\n    Engine->>Engine: Steps replayen (gecached)\n    Engine->>Engine: Step 3 ausführen\n","mermaid",[216,644,645,650,655,660,665,670,674,679,684,689,693,698,703,708,713,718,722,727,732,737,743,749],{"__ignoreMap":107},[237,646,647],{"class":239,"line":240},[237,648,649],{},"sequenceDiagram\n",[237,651,652],{"class":239,"line":108},[237,653,654],{},"    participant Webhook\n",[237,656,657],{"class":239,"line":113},[237,658,659],{},"    participant API\n",[237,661,662],{"class":239,"line":312},[237,663,664],{},"    participant Engine\n",[237,666,667],{"class":239,"line":318},[237,668,669],{},"    participant DB\n",[237,671,672],{"class":239,"line":346},[237,673,315],{"emptyLinePlaceholder":35},[237,675,676],{"class":239,"line":353},[237,677,678],{},"    Webhook->>API: POST \u002Fhooks\u002Fshopify\n",[237,680,681],{"class":239,"line":359},[237,682,683],{},"    API->>Engine: Workflow starten\n",[237,685,686],{"class":239,"line":397},[237,687,688],{},"    API-->>Webhook: 202 Accepted\n",[237,690,691],{"class":239,"line":436},[237,692,315],{"emptyLinePlaceholder":35},[237,694,695],{"class":239,"line":442},[237,696,697],{},"    Engine->>DB: Execution anlegen\n",[237,699,700],{"class":239,"line":447},[237,701,702],{},"    Engine->>Engine: Step 1 ausführen\n",[237,704,705],{"class":239,"line":480},[237,706,707],{},"    Engine->>DB: Ergebnis 1 speichern\n",[237,709,710],{"class":239,"line":498},[237,711,712],{},"    Engine->>Engine: Step 2 ausführen\n",[237,714,715],{"class":239,"line":503},[237,716,717],{},"    Engine->>DB: Ergebnis 2 speichern\n",[237,719,720],{"class":239,"line":508},[237,721,315],{"emptyLinePlaceholder":35},[237,723,724],{"class":239,"line":517},[237,725,726],{},"    Engine->>DB: Suspendieren (Sleep\u002FWait)\n",[237,728,729],{"class":239,"line":523},[237,730,731],{},"    Note right of Engine: Ressourcen freigegeben\n",[237,733,735],{"class":239,"line":734},19,[237,736,315],{"emptyLinePlaceholder":35},[237,738,740],{"class":239,"line":739},20,[237,741,742],{},"    Engine->>DB: Resume (Timer\u002FEvent)\n",[237,744,746],{"class":239,"line":745},21,[237,747,748],{},"    Engine->>Engine: Steps replayen (gecached)\n",[237,750,752],{"class":239,"line":751},22,[237,753,754],{},"    Engine->>Engine: Step 3 ausführen\n",[756,757,758],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":107,"searchDepth":108,"depth":108,"links":760},[761,762],{"id":133,"depth":108,"text":134},{"id":173,"depth":108,"text":174,"children":763},[764,765,766],{"id":183,"depth":113,"text":184},{"id":210,"depth":113,"text":211},{"id":633,"depth":113,"text":634},"Wie dataflows Workflows auch im großen Maßstab verlässlich ausführt.",{},"\u002Fcore-engine",{"title":771,"description":772},"dataflows-Engine-Architektur","Tiefer Blick in die event-getriebene Architektur von dataflows.","core-engine","fFT16c_2QmaPxsKT46eVyW3iXInfj2FwIcoDaQZIEs8",{"id":776,"title":777,"body":778,"description":1316,"extension":116,"icon":1317,"meta":1318,"navigation":35,"path":1319,"seo":1320,"stem":1323,"__hash__":1324},"architecture_de\u002Fdata-layer.md","Datenschicht & Warehouse",{"type":81,"value":779,"toc":1300},[780,784,787,791,794,802,805,825,832,835,855,862,865,891,895,898,1239,1242,1246,1249,1253,1256,1270,1274,1277,1297],[84,781,783],{"id":782},"das-data-warehouse","Das Data-Warehouse",[62,785,786],{},"Anders als andere Workflow-Engines, die rein ephemer sind, baut dataflows einen persistenten „Kontext“ aus deinen Unternehmensdaten auf. Das ermöglicht historische Auswertungen, Time-Travel-Debugging und echten Kontext für KI.",[84,788,790],{"id":789},"core-schema","Core-Schema",[62,792,793],{},"Das Core-Schema ist flexibel gedacht, aber strikt da, wo es zählt.",[92,795,797,798,801],{"id":796},"service-clients-service_clients","Service-Clients (",[216,799,800],{},"service_clients",")",[62,803,804],{},"Verwaltet die Identität externer Systeme.",[147,806,807,813,819],{},[150,808,809,812],{},[142,810,811],{},"Auth-Typen",": OAuth2, API Key, Basic Auth.",[150,814,815,818],{},[142,816,817],{},"Security-Schema",": Mappt auf OpenAPI-Security-Definitionen.",[150,820,821,824],{},[142,822,823],{},"Scopes",": Definiert, welche Berechtigungen der Client hat.",[92,826,828,829,801],{"id":827},"connections-connections","Connections (",[216,830,831],{},"connections",[62,833,834],{},"Speichert die tatsächlichen Credentials (Tokens), die einen User oder Account mit einem Service-Client verbinden.",[147,836,837,843,849],{},[150,838,839,842],{},[142,840,841],{},"Token-Management",": Verwaltet Access- und Refresh-Tokens automatisch.",[150,844,845,848],{},[142,846,847],{},"User-Info",": Cached Profildaten vom Provider.",[150,850,851,854],{},[142,852,853],{},"Verschlüsselung",": Alle sensiblen Tokens sind at rest verschlüsselt.",[92,856,858,859,801],{"id":857},"executions-executions","Executions (",[216,860,861],{},"executions",[62,863,864],{},"Das Audit-Log von allem, was im System passiert.",[147,866,867,873,879,885],{},[150,868,869,872],{},[142,870,871],{},"Payload",": Die kompletten Event-Daten, die den Workflow ausgelöst haben.",[150,874,875,878],{},[142,876,877],{},"Result",": Der finale Output des Workflows.",[150,880,881,884],{},[142,882,883],{},"Status",": Running, Success, Error.",[150,886,887,890],{},[142,888,889],{},"Timing",": Präzise Start- und Completion-Timestamps.",[84,892,894],{"id":893},"daten-synchronisation","Daten-Synchronisation",[62,896,897],{},"dataflows ist darauf ausgelegt, Daten aus externen Systemen in die eigenen Warehouse-Tabellen zu synchronisieren.",[229,899,901],{"className":231,"code":900,"language":233,"meta":107,"style":107},"\u002F\u002F Beispiel: ClickUp-Tasks ins lokale Warehouse synchronisieren\nexport const syncClickUpTask = defineWorkflow({\n  id: 'sync-clickup-task',\n  trigger: clickup.onTaskUpdated(),\n\n  async run({ event, step }) {\n    const task = event.payload\n\n    \u002F\u002F Jedes Upsert ist ein durabler Schritt – bei Fehler wiederholt,\n    \u002F\u002F beim Replay übersprungen, falls bereits erfolgreich.\n    const project = await step.run('upsert-project', () =>\n      db.projects.upsert({\n        clickup_id: task.project.id,\n        name: task.project.name\n      })\n    )\n\n    await step.run('upsert-task', () =>\n      db.tasks.upsert({\n        clickup_id: task.id,\n        project_id: project.id,\n        name: task.name,\n        status: task.status\n      })\n    )\n  }\n})\n",[216,902,903,908,925,940,958,962,980,995,999,1004,1009,1041,1060,1080,1098,1105,1109,1113,1139,1156,1170,1185,1200,1215,1222,1227,1232],{"__ignoreMap":107},[237,904,905],{"class":239,"line":240},[237,906,907],{"class":349},"\u002F\u002F Beispiel: ClickUp-Tasks ins lokale Warehouse synchronisieren\n",[237,909,910,912,914,917,919,921,923],{"class":239,"line":108},[237,911,244],{"class":243},[237,913,248],{"class":247},[237,915,916],{"class":251}," syncClickUpTask ",[237,918,256],{"class":255},[237,920,260],{"class":259},[237,922,263],{"class":251},[237,924,266],{"class":255},[237,926,927,929,931,933,936,938],{"class":239,"line":113},[237,928,272],{"class":271},[237,930,275],{"class":255},[237,932,278],{"class":255},[237,934,935],{"class":281},"sync-clickup-task",[237,937,285],{"class":255},[237,939,288],{"class":255},[237,941,942,944,946,949,951,954,956],{"class":239,"line":312},[237,943,293],{"class":271},[237,945,275],{"class":255},[237,947,948],{"class":251}," clickup",[237,950,301],{"class":255},[237,952,953],{"class":259},"onTaskUpdated",[237,955,307],{"class":251},[237,957,288],{"class":255},[237,959,960],{"class":239,"line":318},[237,961,315],{"emptyLinePlaceholder":35},[237,963,964,966,968,970,972,974,976,978],{"class":239,"line":346},[237,965,321],{"class":247},[237,967,324],{"class":271},[237,969,327],{"class":255},[237,971,331],{"class":330},[237,973,334],{"class":255},[237,975,337],{"class":330},[237,977,340],{"class":255},[237,979,343],{"class":255},[237,981,982,984,986,988,990,992],{"class":239,"line":353},[237,983,362],{"class":247},[237,985,452],{"class":251},[237,987,368],{"class":255},[237,989,331],{"class":251},[237,991,301],{"class":255},[237,993,994],{"class":251},"payload\n",[237,996,997],{"class":239,"line":359},[237,998,315],{"emptyLinePlaceholder":35},[237,1000,1001],{"class":239,"line":397},[237,1002,1003],{"class":349},"    \u002F\u002F Jedes Upsert ist ein durabler Schritt – bei Fehler wiederholt,\n",[237,1005,1006],{"class":239,"line":436},[237,1007,1008],{"class":349},"    \u002F\u002F beim Replay übersprungen, falls bereits erfolgreich.\n",[237,1010,1011,1013,1016,1018,1020,1022,1024,1026,1028,1030,1033,1035,1037,1039],{"class":239,"line":442},[237,1012,362],{"class":247},[237,1014,1015],{"class":251}," project",[237,1017,368],{"class":255},[237,1019,371],{"class":243},[237,1021,337],{"class":251},[237,1023,301],{"class":255},[237,1025,222],{"class":259},[237,1027,263],{"class":271},[237,1029,285],{"class":255},[237,1031,1032],{"class":281},"upsert-project",[237,1034,285],{"class":255},[237,1036,334],{"class":255},[237,1038,391],{"class":255},[237,1040,394],{"class":247},[237,1042,1043,1046,1048,1051,1053,1056,1058],{"class":239,"line":447},[237,1044,1045],{"class":251},"      db",[237,1047,301],{"class":255},[237,1049,1050],{"class":251},"projects",[237,1052,301],{"class":255},[237,1054,1055],{"class":259},"upsert",[237,1057,263],{"class":271},[237,1059,266],{"class":255},[237,1061,1062,1065,1067,1069,1071,1074,1076,1078],{"class":239,"line":480},[237,1063,1064],{"class":271},"        clickup_id",[237,1066,275],{"class":255},[237,1068,452],{"class":251},[237,1070,301],{"class":255},[237,1072,1073],{"class":251},"project",[237,1075,301],{"class":255},[237,1077,427],{"class":251},[237,1079,288],{"class":255},[237,1081,1082,1085,1087,1089,1091,1093,1095],{"class":239,"line":498},[237,1083,1084],{"class":271},"        name",[237,1086,275],{"class":255},[237,1088,452],{"class":251},[237,1090,301],{"class":255},[237,1092,1073],{"class":251},[237,1094,301],{"class":255},[237,1096,1097],{"class":251},"name\n",[237,1099,1100,1103],{"class":239,"line":503},[237,1101,1102],{"class":255},"      }",[237,1104,433],{"class":271},[237,1106,1107],{"class":239,"line":508},[237,1108,439],{"class":271},[237,1110,1111],{"class":239,"line":517},[237,1112,315],{"emptyLinePlaceholder":35},[237,1114,1115,1118,1120,1122,1124,1126,1128,1131,1133,1135,1137],{"class":239,"line":523},[237,1116,1117],{"class":243},"    await",[237,1119,337],{"class":251},[237,1121,301],{"class":255},[237,1123,222],{"class":259},[237,1125,263],{"class":271},[237,1127,285],{"class":255},[237,1129,1130],{"class":281},"upsert-task",[237,1132,285],{"class":255},[237,1134,334],{"class":255},[237,1136,391],{"class":255},[237,1138,394],{"class":247},[237,1140,1141,1143,1145,1148,1150,1152,1154],{"class":239,"line":734},[237,1142,1045],{"class":251},[237,1144,301],{"class":255},[237,1146,1147],{"class":251},"tasks",[237,1149,301],{"class":255},[237,1151,1055],{"class":259},[237,1153,263],{"class":271},[237,1155,266],{"class":255},[237,1157,1158,1160,1162,1164,1166,1168],{"class":239,"line":739},[237,1159,1064],{"class":271},[237,1161,275],{"class":255},[237,1163,452],{"class":251},[237,1165,301],{"class":255},[237,1167,427],{"class":251},[237,1169,288],{"class":255},[237,1171,1172,1175,1177,1179,1181,1183],{"class":239,"line":745},[237,1173,1174],{"class":271},"        project_id",[237,1176,275],{"class":255},[237,1178,1015],{"class":251},[237,1180,301],{"class":255},[237,1182,427],{"class":251},[237,1184,288],{"class":255},[237,1186,1187,1189,1191,1193,1195,1198],{"class":239,"line":751},[237,1188,1084],{"class":271},[237,1190,275],{"class":255},[237,1192,452],{"class":251},[237,1194,301],{"class":255},[237,1196,1197],{"class":251},"name",[237,1199,288],{"class":255},[237,1201,1203,1206,1208,1210,1212],{"class":239,"line":1202},23,[237,1204,1205],{"class":271},"        status",[237,1207,275],{"class":255},[237,1209,452],{"class":251},[237,1211,301],{"class":255},[237,1213,1214],{"class":251},"status\n",[237,1216,1218,1220],{"class":239,"line":1217},24,[237,1219,1102],{"class":255},[237,1221,433],{"class":271},[237,1223,1225],{"class":239,"line":1224},25,[237,1226,439],{"class":271},[237,1228,1230],{"class":239,"line":1229},26,[237,1231,520],{"class":255},[237,1233,1235,1237],{"class":239,"line":1234},27,[237,1236,526],{"class":255},[237,1238,433],{"class":251},[62,1240,1241],{},"So kannst du deine Daten mit Standard-SQL abfragen – auch wenn die Quell-API gerade langsam oder down ist.",[84,1243,1245],{"id":1244},"analytics-bi-readiness","Analytics & BI-Readiness",[62,1247,1248],{},"Die eigentliche Stärke des dataflows-Warehouses: Es verwandelt rohe API-Daten in handlungsleitende Business-Intelligence.",[92,1250,1252],{"id":1251},"reporting-views","Reporting-Views",[62,1254,1255],{},"Wir kippen nicht nur JSON in die Datenbank. Wir erstellen strukturierte SQL-Views, die Daten über verschiedene Services hinweg verknüpfen.",[147,1257,1258,1264],{},[150,1259,1260,1263],{},[142,1261,1262],{},"Unified Customer View",": Stripe-Zahlungen mit HubSpot-Kontakten verknüpft.",[150,1265,1266,1269],{},[142,1267,1268],{},"Projekt-Profitabilität",": ClickUp-Zeiteinträge mit Xero-Rechnungen verknüpft.",[92,1271,1273],{"id":1272},"visualisierung","Visualisierung",[62,1275,1276],{},"Weil die Daten in Standard-PostgreSQL liegen, kannst du jedes Visualisierungs-Tool anbinden:",[147,1278,1279,1285,1291],{},[150,1280,1281,1284],{},[142,1282,1283],{},"Interne Dashboards",": Custom-Nuxt-UI-Dashboards direkt in der dataflows-App bauen.",[150,1286,1287,1290],{},[142,1288,1289],{},"BI-Tools",": PowerBI, Tableau oder Metabase direkt mit dem Warehouse verbinden.",[150,1292,1293,1296],{},[142,1294,1295],{},"KI-Kontext",": Diese strukturierten Daten dienen als „Long-Term-Memory“ für deine KI-Agenten und ermöglichen Antworten wie „Welche Projekte waren letzten Monat über Budget?“",[756,1298,1299],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":107,"searchDepth":108,"depth":108,"links":1301},[1302,1303,1311,1312],{"id":782,"depth":108,"text":783},{"id":789,"depth":108,"text":790,"children":1304},[1305,1307,1309],{"id":796,"depth":113,"text":1306},"Service-Clients (service_clients)",{"id":827,"depth":113,"text":1308},"Connections (connections)",{"id":857,"depth":113,"text":1310},"Executions (executions)",{"id":893,"depth":108,"text":894},{"id":1244,"depth":108,"text":1245,"children":1313},[1314,1315],{"id":1251,"depth":113,"text":1252},{"id":1272,"depth":113,"text":1273},"Das Schema, das den dataflows-Kontext trägt.","i-lucide-database",{},"\u002Fdata-layer",{"title":1321,"description":1322},"Datenschicht-Architektur","So ist das dataflows-Datenbank-Schema und Warehouse aufgebaut.","data-layer","vnkILB9s7fHBYqowozYzOGIIyXQ7B0asyGNks_5M0KU",{"id":1326,"title":1327,"body":1328,"description":1706,"extension":116,"icon":1707,"meta":1708,"navigation":35,"path":1709,"seo":1710,"stem":1713,"__hash__":1714},"architecture_de\u002Fsecurity.md","Sicherheit & Auth",{"type":81,"value":1329,"toc":1697},[1330,1333,1336,1343,1349,1374,1378,1381,1404,1408,1411,1673,1677,1680,1694],[84,1331,841],{"id":1332},"token-management",[62,1334,1335],{},"Der Umgang mit OAuth2-Tokens ist komplex. dataflows abstrahiert das vollständig weg.",[92,1337,1339,1340,1342],{"id":1338},"die-connections-tabelle","Die ",[216,1341,831],{},"-Tabelle",[62,1344,1345,1346,1348],{},"Tokens werden in der ",[216,1347,831],{},"-Tabelle gespeichert.",[147,1350,1351,1364],{},[150,1352,1353,1355,1356,1359,1360,1363],{},[142,1354,853],{},": ",[216,1357,1358],{},"access_token"," und ",[216,1361,1362],{},"refresh_token"," werden mit AES-256-GCM verschlüsselt, bevor sie in die Datenbank geschrieben werden.",[150,1365,1366,1369,1370,1373],{},[142,1367,1368],{},"Auto-Refresh",": Die Engine prüft automatisch ",[216,1371,1372],{},"expires_at"," und erneuert den Token, bevor ein Workflow-Schritt läuft.",[92,1375,1377],{"id":1376},"service-clients","Service-Clients",[62,1379,1380],{},"Wir trennen die „Application“ (Service-Client) vom „User“ (Connection).",[147,1382,1383,1395],{},[150,1384,1385,1388,1389,1359,1392,301],{},[142,1386,1387],{},"Service-Client",": Enthält ",[216,1390,1391],{},"client_id",[216,1393,1394],{},"client_secret",[150,1396,1397,1400,1401,1403],{},[142,1398,1399],{},"Connection",": Enthält das ",[216,1402,1358],{}," des Users.",[84,1405,1407],{"id":1406},"dependency-injection","Dependency Injection",[62,1409,1410],{},"Workflows greifen nie direkt auf Secrets zu. Die Engine injiziert vorauthentifizierte Clients in jeden Schritt.",[229,1412,1414],{"className":231,"code":1413,"language":233,"meta":107,"style":107},"\u002F\u002F ❌ SCHLECHT: Tokens manuell handhaben\nconst token = await db.tokens.find(...)\nawait fetch('https:\u002F\u002Fapi.github.com', {\n  headers: { Authorization: token }\n})\n\n\u002F\u002F ✅ GUT: Authentifizierter Client von der Engine injiziert\nexport const syncIssues = defineWorkflow({\n  id: 'sync-github-issues',\n  trigger: schedule.every('1h'),\n\n  async run({ step, clients }) {\n    \u002F\u002F Die Engine löst die Connection auf, erneuert Tokens\n    \u002F\u002F bei Bedarf und gibt dir einen einsatzbereiten Client.\n    return step.run('fetch-issues', () =>\n      clients.github.listIssues({ repo: 'dataflows-io\u002Fapp' })\n    )\n  }\n})\n",[216,1415,1416,1421,1452,1472,1492,1498,1502,1507,1524,1539,1566,1570,1589,1594,1599,1624,1659,1663,1667],{"__ignoreMap":107},[237,1417,1418],{"class":239,"line":240},[237,1419,1420],{"class":349},"\u002F\u002F ❌ SCHLECHT: Tokens manuell handhaben\n",[237,1422,1423,1425,1428,1430,1432,1435,1437,1440,1442,1445,1447,1450],{"class":239,"line":108},[237,1424,546],{"class":247},[237,1426,1427],{"class":251}," token ",[237,1429,256],{"class":255},[237,1431,371],{"class":243},[237,1433,1434],{"class":251}," db",[237,1436,301],{"class":255},[237,1438,1439],{"class":251},"tokens",[237,1441,301],{"class":255},[237,1443,1444],{"class":259},"find",[237,1446,263],{"class":251},[237,1448,1449],{"class":255},"...",[237,1451,433],{"class":251},[237,1453,1454,1456,1459,1461,1463,1466,1468,1470],{"class":239,"line":113},[237,1455,603],{"class":243},[237,1457,1458],{"class":259}," fetch",[237,1460,263],{"class":251},[237,1462,285],{"class":255},[237,1464,1465],{"class":281},"https:\u002F\u002Fapi.github.com",[237,1467,285],{"class":255},[237,1469,334],{"class":255},[237,1471,343],{"class":255},[237,1473,1474,1477,1479,1482,1485,1487,1489],{"class":239,"line":312},[237,1475,1476],{"class":271},"  headers",[237,1478,275],{"class":255},[237,1480,1481],{"class":255}," {",[237,1483,1484],{"class":271}," Authorization",[237,1486,275],{"class":255},[237,1488,1427],{"class":251},[237,1490,1491],{"class":255},"}\n",[237,1493,1494,1496],{"class":239,"line":318},[237,1495,526],{"class":255},[237,1497,433],{"class":251},[237,1499,1500],{"class":239,"line":346},[237,1501,315],{"emptyLinePlaceholder":35},[237,1503,1504],{"class":239,"line":353},[237,1505,1506],{"class":349},"\u002F\u002F ✅ GUT: Authentifizierter Client von der Engine injiziert\n",[237,1508,1509,1511,1513,1516,1518,1520,1522],{"class":239,"line":359},[237,1510,244],{"class":243},[237,1512,248],{"class":247},[237,1514,1515],{"class":251}," syncIssues ",[237,1517,256],{"class":255},[237,1519,260],{"class":259},[237,1521,263],{"class":251},[237,1523,266],{"class":255},[237,1525,1526,1528,1530,1532,1535,1537],{"class":239,"line":397},[237,1527,272],{"class":271},[237,1529,275],{"class":255},[237,1531,278],{"class":255},[237,1533,1534],{"class":281},"sync-github-issues",[237,1536,285],{"class":255},[237,1538,288],{"class":255},[237,1540,1541,1543,1545,1548,1550,1553,1555,1557,1560,1562,1564],{"class":239,"line":436},[237,1542,293],{"class":271},[237,1544,275],{"class":255},[237,1546,1547],{"class":251}," schedule",[237,1549,301],{"class":255},[237,1551,1552],{"class":259},"every",[237,1554,263],{"class":251},[237,1556,285],{"class":255},[237,1558,1559],{"class":281},"1h",[237,1561,285],{"class":255},[237,1563,801],{"class":251},[237,1565,288],{"class":255},[237,1567,1568],{"class":239,"line":442},[237,1569,315],{"emptyLinePlaceholder":35},[237,1571,1572,1574,1576,1578,1580,1582,1585,1587],{"class":239,"line":447},[237,1573,321],{"class":247},[237,1575,324],{"class":271},[237,1577,327],{"class":255},[237,1579,337],{"class":330},[237,1581,334],{"class":255},[237,1583,1584],{"class":330}," clients",[237,1586,340],{"class":255},[237,1588,343],{"class":255},[237,1590,1591],{"class":239,"line":480},[237,1592,1593],{"class":349},"    \u002F\u002F Die Engine löst die Connection auf, erneuert Tokens\n",[237,1595,1596],{"class":239,"line":498},[237,1597,1598],{"class":349},"    \u002F\u002F bei Bedarf und gibt dir einen einsatzbereiten Client.\n",[237,1600,1601,1603,1605,1607,1609,1611,1613,1616,1618,1620,1622],{"class":239,"line":503},[237,1602,511],{"class":243},[237,1604,337],{"class":251},[237,1606,301],{"class":255},[237,1608,222],{"class":259},[237,1610,263],{"class":271},[237,1612,285],{"class":255},[237,1614,1615],{"class":281},"fetch-issues",[237,1617,285],{"class":255},[237,1619,334],{"class":255},[237,1621,391],{"class":255},[237,1623,394],{"class":247},[237,1625,1626,1629,1631,1634,1636,1639,1641,1643,1646,1648,1650,1653,1655,1657],{"class":239,"line":508},[237,1627,1628],{"class":251},"      clients",[237,1630,301],{"class":255},[237,1632,1633],{"class":251},"github",[237,1635,301],{"class":255},[237,1637,1638],{"class":259},"listIssues",[237,1640,263],{"class":271},[237,1642,410],{"class":255},[237,1644,1645],{"class":271}," repo",[237,1647,275],{"class":255},[237,1649,278],{"class":255},[237,1651,1652],{"class":281},"dataflows-io\u002Fapp",[237,1654,285],{"class":255},[237,1656,430],{"class":255},[237,1658,433],{"class":271},[237,1660,1661],{"class":239,"line":517},[237,1662,439],{"class":271},[237,1664,1665],{"class":239,"line":523},[237,1666,520],{"class":255},[237,1668,1669,1671],{"class":239,"line":734},[237,1670,526],{"class":255},[237,1672,433],{"class":251},[84,1674,1676],{"id":1675},"isolation","Isolation",[62,1678,1679],{},"Jede Workflow-Execution läuft in einem isolierten Kontext.",[147,1681,1682,1688],{},[150,1683,1684,1687],{},[142,1685,1686],{},"Environment-Variablen",": Secrets werden als Umgebungsvariablen injiziert.",[150,1689,1690,1693],{},[142,1691,1692],{},"Netzwerk-Isolation",": Workflows können auf bestimmte Egress-Domains beschränkt werden.",[756,1695,1696],{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":107,"searchDepth":108,"depth":108,"links":1698},[1699,1704,1705],{"id":1332,"depth":108,"text":841,"children":1700},[1701,1703],{"id":1338,"depth":113,"text":1702},"Die connections-Tabelle",{"id":1376,"depth":113,"text":1377},{"id":1406,"depth":108,"text":1407},{"id":1675,"depth":108,"text":1676},"Wie dataflows Secrets, Tokens und Berechtigungen handhabt.","i-lucide-lock",{},"\u002Fsecurity",{"title":1711,"description":1712},"Sicherheits-Architektur","Security first. So schützen wir deine Tokens und Daten.","security","cQq-funNgCGtDOUwFQfrtYl_K3t4KNh48SzCGWk37gc",1776797942757]