@revenexx/studio-integrations 0.7.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +633 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +2 -1
- package/dist/runtime/components/Integrations/CredentialCreateDialog.vue +4 -1
- package/dist/runtime/components/Integrations/CredentialDetailDialog.vue +8 -2
- package/dist/runtime/components/Integrations/DeadLettersPanel.vue +2 -6
- package/dist/runtime/components/Integrations/ExpressionInput.vue +5 -0
- package/dist/runtime/components/Integrations/NodeConfigDynamicField.d.vue.ts +3 -0
- package/dist/runtime/components/Integrations/NodeConfigDynamicField.vue +16 -3
- package/dist/runtime/components/Integrations/NodeConfigDynamicField.vue.d.ts +3 -0
- package/dist/runtime/components/Integrations/NodeConfigDynamicSchema.vue +1 -0
- package/dist/runtime/components/Integrations/NodeConfigField.d.vue.ts +3 -0
- package/dist/runtime/components/Integrations/NodeConfigField.vue +2 -0
- package/dist/runtime/components/Integrations/NodeConfigField.vue.d.ts +3 -0
- package/dist/runtime/components/Integrations/NodeInspector.d.vue.ts +2 -2
- package/dist/runtime/components/Integrations/NodeInspector.vue +135 -10
- package/dist/runtime/components/Integrations/NodeInspector.vue.d.ts +2 -2
- package/dist/runtime/components/Integrations/NodeOutputSchema.d.vue.ts +2 -1
- package/dist/runtime/components/Integrations/NodeOutputSchema.vue +34 -8
- package/dist/runtime/components/Integrations/NodeOutputSchema.vue.d.ts +2 -1
- package/dist/runtime/components/Integrations/NodePalette.vue +12 -8
- package/dist/runtime/components/Integrations/RunDetailPanel.vue +9 -6
- package/dist/runtime/components/Integrations/RunsTable.vue +2 -2
- package/dist/runtime/components/Integrations/StickyNoteView.vue +45 -11
- package/dist/runtime/components/Integrations/SurfaceCard.d.vue.ts +50 -0
- package/dist/runtime/components/Integrations/SurfaceCard.vue +55 -0
- package/dist/runtime/components/Integrations/SurfaceCard.vue.d.ts +50 -0
- package/dist/runtime/components/Integrations/TemplateCard.vue +3 -3
- package/dist/runtime/components/Integrations/TemplateFlowPreview.vue +12 -3
- package/dist/runtime/components/Integrations/WorkflowCreateDialog.vue +5 -4
- package/dist/runtime/components/Integrations/WorkflowEditor.d.vue.ts +16 -0
- package/dist/runtime/components/Integrations/WorkflowEditor.vue +79 -12
- package/dist/runtime/components/Integrations/WorkflowEditor.vue.d.ts +16 -0
- package/dist/runtime/components/Integrations/WorkflowHistoryPanel.d.vue.ts +6 -0
- package/dist/runtime/components/Integrations/WorkflowHistoryPanel.vue +13 -3
- package/dist/runtime/components/Integrations/WorkflowHistoryPanel.vue.d.ts +6 -0
- package/dist/runtime/components/Integrations/WorkflowNodeView.d.vue.ts +13 -0
- package/dist/runtime/components/Integrations/WorkflowNodeView.vue +95 -29
- package/dist/runtime/components/Integrations/WorkflowNodeView.vue.d.ts +13 -0
- package/dist/runtime/components/Integrations/WorkflowRunReplayPanel.vue +11 -10
- package/dist/runtime/components/Integrations/WorkflowSettingsDialog.d.vue.ts +16 -17
- package/dist/runtime/components/Integrations/WorkflowSettingsDialog.vue +37 -26
- package/dist/runtime/components/Integrations/WorkflowSettingsDialog.vue.d.ts +16 -17
- package/dist/runtime/components/Integrations/WorkflowTriggerView.vue +4 -5
- package/dist/runtime/components/Integrations/WorkflowVariablesDialog.vue +53 -14
- package/dist/runtime/components/Integrations/WorkflowsTable.vue +9 -4
- package/dist/runtime/composables/useIntegrationsCredentials.d.ts +11 -0
- package/dist/runtime/composables/useIntegrationsCredentials.js +2 -2
- package/dist/runtime/composables/useIntegrationsDeadLetters.d.ts +9 -2
- package/dist/runtime/composables/useIntegrationsDeadLetters.js +27 -18
- package/dist/runtime/composables/useIntegrationsNodes.js +11 -1
- package/dist/runtime/composables/useIntegrationsRuns.d.ts +30 -1
- package/dist/runtime/composables/useIntegrationsRuns.js +70 -29
- package/dist/runtime/composables/useIntegrationsSchedules.d.ts +7 -14
- package/dist/runtime/composables/useIntegrationsSchedules.js +80 -35
- package/dist/runtime/composables/useIntegrationsTriggers.d.ts +30 -3
- package/dist/runtime/composables/useIntegrationsTriggers.js +18 -7
- package/dist/runtime/composables/useIntegrationsWorkflows.d.ts +10 -1
- package/dist/runtime/composables/useIntegrationsWorkflows.js +25 -4
- package/dist/runtime/composables/useNodeConfigResolve.js +2 -1
- package/dist/runtime/data/integrationNodeCatalog.d.ts +22 -1
- package/dist/runtime/data/integrationNodeCatalog.js +8 -4
- package/dist/runtime/data/loopBody.d.ts +129 -0
- package/dist/runtime/data/loopBody.js +76 -0
- package/dist/runtime/data/nodeInputData.d.ts +58 -1
- package/dist/runtime/data/nodeInputData.js +30 -5
- package/dist/runtime/data/triggerGlyphs.d.ts +47 -0
- package/dist/runtime/data/triggerGlyphs.js +11 -0
- package/dist/runtime/i18n/messages/de.json +62 -33
- package/dist/runtime/i18n/messages/en.json +32 -3
- package/dist/runtime/pages/integrations/credentials.vue +4 -1
- package/dist/runtime/pages/integrations/index.vue +32 -34
- package/dist/runtime/pages/integrations/runs.vue +22 -10
- package/dist/runtime/pages/integrations/schedules.vue +64 -7
- package/dist/runtime/pages/integrations/templates/[slug].vue +13 -5
- package/dist/runtime/pages/integrations/workflows/[id].vue +193 -104
- package/dist/runtime/types/integrations.d.ts +64 -1
- package/dist/runtime/utils/cockpitSources.d.ts +22 -3
- package/dist/runtime/utils/credentialState.d.ts +6 -1
- package/dist/runtime/utils/credentialState.js +1 -1
- package/dist/runtime/utils/localize.d.ts +34 -0
- package/dist/runtime/utils/localize.js +22 -7
- package/dist/runtime/utils/pollBudget.d.ts +1 -1
- package/dist/runtime/utils/servedPaths.d.ts +22 -0
- package/dist/runtime/utils/servedPaths.js +3 -0
- package/dist/runtime/utils/statusStyle.d.ts +52 -0
- package/dist/runtime/utils/statusStyle.js +26 -0
- package/package.json +1 -1
|
@@ -70,6 +70,9 @@
|
|
|
70
70
|
"integration.canvas.node.action.duplicate": "Duplizieren",
|
|
71
71
|
"integration.canvas.node.action.duplicateAria": "Node duplizieren",
|
|
72
72
|
"integration.canvas.node.badge.invalidConfig": "Konfiguration unvollständig — {n} Einstellung muss noch behoben werden: {fields} | Konfiguration unvollständig — {n} Einstellungen müssen noch behoben werden: {fields}",
|
|
73
|
+
"integration.canvas.node.badge.noBuiltCode": "Version {version} ist nicht einsatzbereit — dieser Schritt lässt sich nicht testen",
|
|
74
|
+
"integration.canvas.node.badge.repeats": "Wiederholt sich — läuft einmal pro Element von {iterators} | Wiederholt sich — läuft einmal pro Element jeder der {n} Schleifen, in denen er liegt: {iterators}",
|
|
75
|
+
"integration.canvas.node.badge.loopBody": "Schleife — am Ausgang „Element“ hängt noch nichts, es wiederholt sich also nichts | Schleife — wiederholt den einen Schritt am Ausgang „Element“, einmal pro Element | Schleife — wiederholt die {n} Schritte am Ausgang „Element“, einmal pro Element",
|
|
73
76
|
"integration.canvas.node.handle.input": "Eingang",
|
|
74
77
|
"integration.canvas.node.meta.versionTitle": "Version {version}",
|
|
75
78
|
"integration.canvas.node.note.heading": "Notiz",
|
|
@@ -258,7 +261,7 @@
|
|
|
258
261
|
"integration.dashboard.action.newWorkflow": "Workflow anlegen",
|
|
259
262
|
"integration.dashboard.attention.failed": "Fehlgeschlagen.",
|
|
260
263
|
"integration.dashboard.attention.healthy": "Alle Workflows in Ordnung.",
|
|
261
|
-
"integration.dashboard.attention.missedRuns": "{n}
|
|
264
|
+
"integration.dashboard.attention.missedRuns": "{n} verpasster Run | {n} verpasste Runs",
|
|
262
265
|
"integration.dashboard.attention.missedRuns.hint": "Trigger haben ausgelöst, während ihr Workflow nicht laufen konnte — prüfen und erneut ausführen.",
|
|
263
266
|
"integration.dashboard.attention.title": "Erfordert Aufmerksamkeit",
|
|
264
267
|
"integration.dashboard.head.title": "Dashboard · Integration Studio",
|
|
@@ -267,20 +270,21 @@
|
|
|
267
270
|
"integration.dashboard.kpi.activeWorkflows.label": "Aktive Workflows",
|
|
268
271
|
"integration.dashboard.kpi.activeWorkflows.sub": "{n} pausiert oder Entwurf | {n} pausiert oder Entwürfe",
|
|
269
272
|
"integration.dashboard.kpi.aria.group": "Kennzahlen",
|
|
270
|
-
"integration.dashboard.kpi.missedRuns.label": "Verpasste
|
|
271
|
-
"integration.dashboard.kpi.missedRuns.sub": "Trigger-Auslösungen ohne
|
|
273
|
+
"integration.dashboard.kpi.missedRuns.label": "Verpasste Runs",
|
|
274
|
+
"integration.dashboard.kpi.missedRuns.sub": "Trigger-Auslösungen ohne Run",
|
|
272
275
|
"integration.dashboard.kpi.runningNow.label": "Läuft gerade",
|
|
273
|
-
"integration.dashboard.kpi.runningNow.sub": "laufende
|
|
276
|
+
"integration.dashboard.kpi.runningNow.sub": "laufende Runs",
|
|
274
277
|
"integration.dashboard.kpi.scheduled.label": "Geplant",
|
|
275
278
|
"integration.dashboard.kpi.scheduled.sub": "aktive Zeitplan-Trigger",
|
|
276
|
-
"integration.dashboard.runs.empty": "Noch keine
|
|
277
|
-
"integration.dashboard.runs.title": "Letzte
|
|
279
|
+
"integration.dashboard.runs.empty": "Noch keine Runs.",
|
|
280
|
+
"integration.dashboard.runs.title": "Letzte Runs",
|
|
278
281
|
"integration.dashboard.surface.events.hint": "Live-Events der Plattform, die Workflows abonnieren.",
|
|
279
282
|
"integration.dashboard.surface.events.label": "Event-Stream",
|
|
280
283
|
"integration.dashboard.surface.io.hint": "Profile, die Katalog- und Entitätsdaten hinein- und hinausbewegen.",
|
|
281
284
|
"integration.dashboard.surface.io.label": "Import & Export",
|
|
282
285
|
"integration.dashboard.surface.sftp.hint": "Verwaltete SFTP-Endpoints für den dateibasierten Austausch.",
|
|
283
286
|
"integration.dashboard.surface.sftp.label": "SFTP-Server",
|
|
287
|
+
"integration.dashboard.surface.unavailable": "Hier nicht verfügbar — {surface} finden Sie im Revenexx Cockpit.",
|
|
284
288
|
"integration.dashboard.surface.webhooks.hint": "Eingehende HTTP-Endpoints, die Workflows auslösen.",
|
|
285
289
|
"integration.dashboard.surface.webhooks.label": "Webhooks",
|
|
286
290
|
"integration.dashboard.templates.empty": "Noch keine Vorlagen registriert.",
|
|
@@ -296,13 +300,17 @@
|
|
|
296
300
|
"integration.deadLetters.panel.title": "Verpasste Runs",
|
|
297
301
|
"integration.deadLetters.reason.fallback": "Kein Grund erfasst.",
|
|
298
302
|
"integration.deadLetters.state.empty": "Keine verpassten Runs. Jeder Trigger hat einen Run ausgelöst.",
|
|
303
|
+
"integration.deadLetters.status.discarded": "verworfen",
|
|
304
|
+
"integration.deadLetters.status.pending": "wartet",
|
|
305
|
+
"integration.deadLetters.status.replayed": "wiederholt",
|
|
306
|
+
"integration.deadLetters.status.unknown": "unbekannt ({status})",
|
|
299
307
|
"integration.deadLetters.tabs.missed.label": "Verpasste Runs",
|
|
300
308
|
"integration.deadLetters.toast.discard.done": "Verworfen",
|
|
301
309
|
"integration.deadLetters.toast.discard.error": "Verwerfen fehlgeschlagen.",
|
|
302
310
|
"integration.deadLetters.toast.replay.done": "Wiederholt",
|
|
303
311
|
"integration.deadLetters.toast.replay.error": "Wiederholen fehlgeschlagen.",
|
|
304
312
|
"integration.deadLetters.toast.replay.started": "Wiederholt — Run #{id} gestartet",
|
|
305
|
-
"integration.
|
|
313
|
+
"integration.deadLetters.workflow.fallback": "Workflow #{id}",
|
|
306
314
|
"integration.editor.action.activate.title": "Workflow aktivieren",
|
|
307
315
|
"integration.editor.action.activate.title.invalid": "{n} Node-Einstellung vor der Aktivierung beheben | {n} Node-Einstellungen vor der Aktivierung beheben",
|
|
308
316
|
"integration.editor.action.backToWorkflow": "Zurück zum Workflow",
|
|
@@ -310,11 +318,11 @@
|
|
|
310
318
|
"integration.editor.action.discard.title": "Nicht gespeicherte Änderungen verwerfen",
|
|
311
319
|
"integration.editor.action.duplicate.label": "Duplizieren",
|
|
312
320
|
"integration.editor.action.duplicate.title": "Diesen Workflow duplizieren",
|
|
313
|
-
"integration.editor.action.pause.label": "Pausieren",
|
|
314
321
|
"integration.editor.action.pause.title": "Workflow pausieren",
|
|
315
322
|
"integration.editor.action.retry": "Erneut versuchen",
|
|
316
323
|
"integration.editor.action.save.label": "Speichern",
|
|
317
324
|
"integration.editor.action.save.saving": "Wird gespeichert…",
|
|
325
|
+
"integration.editor.action.state.label": "Workflow-Status",
|
|
318
326
|
"integration.editor.activate.error.generic": "Der Workflow-Status konnte nicht geändert werden.",
|
|
319
327
|
"integration.editor.activate.error.needsFixing": "Kann nicht aktiviert werden — {n} Einstellung muss noch behoben werden (siehe Banner oben). | Kann nicht aktiviert werden — {n} Einstellungen müssen noch behoben werden (siehe Banner oben).",
|
|
320
328
|
"integration.editor.activate.error.validationIssues": "Kann nicht aktiviert werden — {n} Validierungsproblem zu beheben. | Kann nicht aktiviert werden — {n} Validierungsprobleme zu beheben.",
|
|
@@ -325,12 +333,12 @@
|
|
|
325
333
|
"integration.editor.breadcrumb.workflows": "Workflows",
|
|
326
334
|
"integration.editor.build.chip.building": "Build wird erstellt…",
|
|
327
335
|
"integration.editor.build.chip.queued": "Build in Warteschlange…",
|
|
328
|
-
"integration.editor.build.notice.building": "Der Workflow-Build läuft noch —
|
|
336
|
+
"integration.editor.build.notice.building": "Der Workflow-Build läuft noch — Runs sind erst möglich, wenn er fertig ist.",
|
|
329
337
|
"integration.editor.build.notice.failed": "Der Workflow-Build ist fehlgeschlagen. Speichern Sie den Workflow erneut, um den Build neu zu starten.",
|
|
330
338
|
"integration.editor.build.notice.failedWithError": "Der Workflow-Build ist fehlgeschlagen: {error} Speichern Sie den Workflow erneut, um den Build neu zu starten.",
|
|
331
|
-
"integration.editor.build.notice.pending": "Der Build des Workflows ist in der Warteschlange —
|
|
332
|
-
"integration.editor.build.toast.failed": "Der Workflow-Build ist fehlgeschlagen —
|
|
333
|
-
"integration.editor.build.toast.timeout": "Der Build dauert ungewöhnlich lange — versuchen Sie
|
|
339
|
+
"integration.editor.build.notice.pending": "Der Build des Workflows ist in der Warteschlange — Runs sind erst möglich, wenn er fertig ist.",
|
|
340
|
+
"integration.editor.build.toast.failed": "Der Workflow-Build ist fehlgeschlagen — der Run wurde nicht gestartet.",
|
|
341
|
+
"integration.editor.build.toast.timeout": "Der Build dauert ungewöhnlich lange — versuchen Sie den Run erneut, sobald er bereit ist.",
|
|
334
342
|
"integration.editor.build.tooltip.failed": "Der Workflow-Build ist fehlgeschlagen.",
|
|
335
343
|
"integration.editor.clipboard.error.empty": "Die Zwischenablage enthält keine Nodes.",
|
|
336
344
|
"integration.editor.clipboard.error.read": "Zwischenablage konnte nicht gelesen werden.",
|
|
@@ -347,19 +355,23 @@
|
|
|
347
355
|
"integration.editor.emptyState.hint": "Ziehen Sie einen Trigger und eine Aktion aus dem Panel links.",
|
|
348
356
|
"integration.editor.emptyState.title": "Leere Arbeitsfläche",
|
|
349
357
|
"integration.editor.event.toast.noneReceived": "Noch kein {topic}-Event empfangen.",
|
|
350
|
-
"integration.editor.executionMode.async.hint": "
|
|
358
|
+
"integration.editor.executionMode.async.hint": "Runs werden immer in die Warteschlange gestellt; der Trigger antwortet sofort.",
|
|
351
359
|
"integration.editor.executionMode.async.label": "Nur asynchron",
|
|
352
360
|
"integration.editor.executionMode.async.short": "Asynchron",
|
|
353
|
-
"integration.editor.executionMode.callerDecides.hint": "Der Aufrufer entscheidet pro
|
|
361
|
+
"integration.editor.executionMode.callerDecides.hint": "Der Aufrufer entscheidet pro Run zwischen synchron und asynchron.",
|
|
354
362
|
"integration.editor.executionMode.callerDecides.label": "Aufrufer entscheidet",
|
|
355
363
|
"integration.editor.executionMode.error.generic": "Der Ausführungsmodus konnte nicht aktualisiert werden.",
|
|
356
|
-
"integration.editor.executionMode.sync.hint": "
|
|
364
|
+
"integration.editor.executionMode.sync.hint": "Runs blockieren, bis sie abgeschlossen sind, und liefern das Ergebnis direkt zurück.",
|
|
357
365
|
"integration.editor.executionMode.sync.label": "Nur synchron",
|
|
358
366
|
"integration.editor.executionMode.sync.short": "Synchron",
|
|
359
367
|
"integration.editor.group.defaultLabel": "Gruppe {n}",
|
|
360
368
|
"integration.editor.head.title": "{name} · Revenexx Cockpit",
|
|
361
369
|
"integration.editor.head.untitled": "Workflow",
|
|
362
370
|
"integration.editor.header.executionMode.title": "Ausführungsmodus: {mode}",
|
|
371
|
+
"integration.editor.leave.dialog.description": "Dieser Workflow hat Änderungen, die noch nicht gespeichert sind. Wer ihn jetzt verlässt, verwirft sie.",
|
|
372
|
+
"integration.editor.leave.dialog.discard": "Verwerfen und verlassen",
|
|
373
|
+
"integration.editor.leave.dialog.stay": "Weiter bearbeiten",
|
|
374
|
+
"integration.editor.leave.dialog.title": "Ohne Speichern verlassen?",
|
|
363
375
|
"integration.editor.minimap.action.bottomLeft": "Unten links",
|
|
364
376
|
"integration.editor.minimap.action.bottomRight": "Unten rechts",
|
|
365
377
|
"integration.editor.minimap.action.collapse.title": "Minimap einklappen",
|
|
@@ -382,15 +394,15 @@
|
|
|
382
394
|
"integration.editor.quickConnect.toast": "Node auswählen — er wird dort platziert und ist bereits verbunden.",
|
|
383
395
|
"integration.editor.reauth.action.fix": "in den Zugangsdaten beheben",
|
|
384
396
|
"integration.editor.reauth.banner": "{n} hier verwendeter Zugangsdaten-Eintrag muss neu verbunden werden | {n} hier verwendete Zugangsdaten-Einträge müssen neu verbunden werden",
|
|
385
|
-
"integration.editor.retry.error.generic": "
|
|
397
|
+
"integration.editor.retry.error.generic": "Der Run konnte nicht wiederholt werden.",
|
|
386
398
|
"integration.editor.retry.toast.requested": "Wiederholung angefordert",
|
|
387
399
|
"integration.editor.retry.toast.started": "Run #{id} gestartet",
|
|
388
400
|
"integration.editor.run.button": "Run",
|
|
389
|
-
"integration.editor.run.error.couldNotStart": "
|
|
390
|
-
"integration.editor.run.error.loadOpenRun": "
|
|
401
|
+
"integration.editor.run.error.couldNotStart": "Der Run konnte nicht gestartet werden.",
|
|
402
|
+
"integration.editor.run.error.loadOpenRun": "Der Run konnte nicht geladen werden.",
|
|
391
403
|
"integration.editor.run.error.refusedForSettings": "Kann nicht ausgeführt werden — {summary}{where}",
|
|
392
|
-
"integration.editor.run.error.syncFailed": "
|
|
393
|
-
"integration.editor.run.error.syncTimeout": "
|
|
404
|
+
"integration.editor.run.error.syncFailed": "Synchroner Run fehlgeschlagen",
|
|
405
|
+
"integration.editor.run.error.syncTimeout": "Synchroner Run: Zeitüberschreitung",
|
|
394
406
|
"integration.editor.run.loading": "Run wird geladen…",
|
|
395
407
|
"integration.editor.run.waitingForBuild": "Warten auf Build…",
|
|
396
408
|
"integration.editor.runPayload.action.latestEvent": "Letztes reales Event",
|
|
@@ -399,25 +411,25 @@
|
|
|
399
411
|
"integration.editor.runPayload.action.sampleEvent": "Beispiel-Event",
|
|
400
412
|
"integration.editor.runPayload.action.sampleEvent.titleAvailable": "Beispiel-Payload aus dem Katalog einfügen",
|
|
401
413
|
"integration.editor.runPayload.action.sampleEvent.titleUnavailable": "Der Event-Katalog enthält kein Beispiel für dieses Topic.",
|
|
402
|
-
"integration.editor.runPayload.dialog.description": "Startet
|
|
414
|
+
"integration.editor.runPayload.dialog.description": "Startet einen manuellen Run mit diesem Trigger-Payload. Das Ergebnis erscheint im Tab Runs.",
|
|
403
415
|
"integration.editor.runPayload.dialog.title": "Mit Payload ausführen",
|
|
404
416
|
"integration.editor.runPayload.prefill.label": "Vorbelegen mit",
|
|
405
417
|
"integration.editor.runView.details": "Details",
|
|
406
418
|
"integration.editor.runView.replay": "Replay",
|
|
407
419
|
"integration.editor.runView.timeline": "Zeitleiste",
|
|
408
|
-
"integration.editor.runs.empty": "Noch keine
|
|
409
|
-
"integration.editor.runs.error.load": "
|
|
410
|
-
"integration.editor.runs.pagination.count": "{n}
|
|
420
|
+
"integration.editor.runs.empty": "Noch keine Runs — im Editor auf Run klicken.",
|
|
421
|
+
"integration.editor.runs.error.load": "Runs konnten nicht geladen werden.",
|
|
422
|
+
"integration.editor.runs.pagination.count": "{n} Run | {n} Runs",
|
|
411
423
|
"integration.editor.runs.pagination.newer": "← Neuer",
|
|
412
424
|
"integration.editor.runs.pagination.older": "Älter →",
|
|
413
425
|
"integration.editor.runs.pagination.page": "Seite {page} / {lastPage}",
|
|
414
426
|
"integration.editor.save.error.generic": "Speichern fehlgeschlagen.",
|
|
415
|
-
"integration.editor.splice.error.terminal": "{name} beendet
|
|
427
|
+
"integration.editor.splice.error.terminal": "{name} beendet den Run und kann nicht in eine Verbindung eingefügt werden.",
|
|
416
428
|
"integration.editor.splice.toast": "Node aus der Palette auswählen — er wird in die Verbindung eingefügt.",
|
|
417
429
|
"integration.editor.state.loading": "Wird geladen…",
|
|
418
430
|
"integration.editor.status.unsavedChanges": "Nicht gespeicherte Änderungen",
|
|
419
431
|
"integration.editor.sticky.starterContent": "## Ich bin eine Notiz\n**Doppelklicken**, um mich zu bearbeiten. **Fett**, *kursiv*, `Code`, [Links](https://revenexx.com) und\n- Listen funktionieren",
|
|
420
|
-
"integration.editor.tab.deadLetters": "Verpasste
|
|
432
|
+
"integration.editor.tab.deadLetters": "Verpasste Runs",
|
|
421
433
|
"integration.editor.tab.editor": "Editor",
|
|
422
434
|
"integration.editor.tab.history": "Verlauf",
|
|
423
435
|
"integration.editor.tab.runs": "Runs",
|
|
@@ -430,7 +442,7 @@
|
|
|
430
442
|
"integration.editor.tool.fitView.tooltip": "Ansicht einpassen",
|
|
431
443
|
"integration.editor.tool.hand": "Hand (Verschieben)",
|
|
432
444
|
"integration.editor.tool.run.tooltip": "Workflow ausführen",
|
|
433
|
-
"integration.editor.tool.run.tooltipWaiting": "Der Build läuft noch —
|
|
445
|
+
"integration.editor.tool.run.tooltipWaiting": "Der Build läuft noch — der Run startet, sobald er bereit ist",
|
|
434
446
|
"integration.editor.tool.select": "Auswählen",
|
|
435
447
|
"integration.editor.tool.settings.label": "Einstellungen",
|
|
436
448
|
"integration.editor.tool.settings.tooltip": "Workflow-Einstellungen",
|
|
@@ -453,6 +465,7 @@
|
|
|
453
465
|
"integration.history.badge.paused": "Pausiert",
|
|
454
466
|
"integration.history.badge.pausedHint": "Workflow ist pausiert; beim Aktivieren läuft diese Revision.",
|
|
455
467
|
"integration.history.confirm.restore": "Revision {revision} wiederherstellen? Die aktuelle Version wird zuerst archiviert, dann wird der Workflow aus dieser Momentaufnahme neu aufgebaut.",
|
|
468
|
+
"integration.history.confirm.restoreWithDraft": "Revision {revision} wiederherstellen? Die aktuelle Version wird zuerst archiviert, dann wird der Workflow aus dieser Momentaufnahme neu aufgebaut — und die nicht gespeicherten Änderungen im Editor werden verworfen.",
|
|
456
469
|
"integration.history.heading.description": "Jedes Speichern archiviert die vorherige Revision; die neueste ist die, die läuft, solange der Workflow aktiv ist.",
|
|
457
470
|
"integration.history.heading.title": "Versionsverlauf",
|
|
458
471
|
"integration.history.list.revisionLabel": "Revision {revision}",
|
|
@@ -499,6 +512,7 @@
|
|
|
499
512
|
"integration.nodeConfig.dynamicField.reloading": "wird neu geladen…",
|
|
500
513
|
"integration.nodeConfig.dynamicField.resolving": "Optionen werden geladen…",
|
|
501
514
|
"integration.nodeConfig.dynamicField.searching": "wird gesucht…",
|
|
515
|
+
"integration.nodeConfig.dynamicField.versionNotReady": "Keine Auswahl möglich, solange diese Version nicht einsatzbereit ist.",
|
|
502
516
|
"integration.nodeConfig.dynamicSchema.depthCapped": "verschachteltes dynamisches Schema wird nicht weiter aufgeklappt",
|
|
503
517
|
"integration.nodeConfig.dynamicSchema.empty": "Keine Felder geladen.",
|
|
504
518
|
"integration.nodeConfig.dynamicSchema.fieldCollision": "geladenes Feld '{key}' kollidiert mit einem statischen Konfigurationsfeld — übersprungen",
|
|
@@ -506,6 +520,7 @@
|
|
|
506
520
|
"integration.nodeConfig.dynamicSchema.resolving": "Felder werden geladen…",
|
|
507
521
|
"integration.nodeConfig.expression.badge.title": "Akzeptiert ${{ … }}-Ausdrücke",
|
|
508
522
|
"integration.nodeConfig.expression.insertTitle": "Ausdruck einfügen",
|
|
523
|
+
"integration.nodeConfig.expression.picker.aria": "Verfügbare Daten für diese Einstellung",
|
|
509
524
|
"integration.nodeConfig.expression.picker.empty": "Nichts entspricht „{query}“.",
|
|
510
525
|
"integration.nodeConfig.expression.picker.filterAria": "Verfügbare Daten filtern",
|
|
511
526
|
"integration.nodeConfig.expression.picker.filterPlaceholder": "Filtern…",
|
|
@@ -575,6 +590,8 @@
|
|
|
575
590
|
"integration.nodeConfig.validation.min": "Muss ≥ {min} sein",
|
|
576
591
|
"integration.nodeConfig.validation.minLength": "Muss mindestens {min} Zeichen lang sein",
|
|
577
592
|
"integration.nodeConfig.validation.pattern": "Entspricht nicht dem erforderlichen Format",
|
|
593
|
+
"integration.nodeInspector.dialogTitle": "{name} konfigurieren",
|
|
594
|
+
"integration.nodeInspector.footer.done": "Fertig",
|
|
578
595
|
"integration.nodeInspector.footer.removeFromWorkflow": "Aus Workflow entfernen",
|
|
579
596
|
"integration.nodeInspector.footer.unsavedChanges": "Ungespeicherte Änderungen",
|
|
580
597
|
"integration.nodeInspector.header.groupNode": "Node",
|
|
@@ -585,6 +602,9 @@
|
|
|
585
602
|
"integration.nodeInspector.header.previousStep": "Vorheriger Schritt (speichert Änderungen)",
|
|
586
603
|
"integration.nodeInspector.header.whatThisDoes": "Was dieser Node macht",
|
|
587
604
|
"integration.nodeInspector.input.description": "Verfügbare Daten. Klicken Sie auf einen Wert, um ihn in das fokussierte Feld einzufügen, oder ziehen Sie ihn hinein.",
|
|
605
|
+
"integration.nodeInspector.input.expects.heading": "Erwartet:",
|
|
606
|
+
"integration.nodeInspector.input.expects.optional": "optional",
|
|
607
|
+
"integration.nodeInspector.input.expects.required": "erforderlich",
|
|
588
608
|
"integration.nodeInspector.input.noUpstreamForTrigger": "Trigger starten den Workflow, daher gibt es keine vorgelagerten Daten. Workflow-Variablen sind überall verfügbar.",
|
|
589
609
|
"integration.nodeInspector.input.nodes.empty": "Noch keine vorgelagerten Nodes. Verbinden Sie einen Node mit diesem, um dessen Ausgabe hier zu referenzieren.",
|
|
590
610
|
"integration.nodeInspector.input.nodes.heading": "Nodes",
|
|
@@ -606,7 +626,13 @@
|
|
|
606
626
|
"integration.nodeInspector.note.addLabel": "Notiz hinzufügen",
|
|
607
627
|
"integration.nodeInspector.note.label": "Notiz",
|
|
608
628
|
"integration.nodeInspector.note.placeholder": "Warum dieser Node hier ist…",
|
|
629
|
+
"integration.nodeInspector.notice.versionNotReady.none": "Version {version} dieses Nodes ist nicht mehr einsatzbereit, und es liegt keine einsatzbereite Version vor. Dieser Schritt lässt sich nicht testen, und Auswahllisten in seinen Einstellungen bleiben leer.",
|
|
630
|
+
"integration.nodeInspector.notice.versionNotReady.upgrade": "Version {version} dieses Nodes ist nicht mehr einsatzbereit. Um den Node weiter zu verwenden, ist ein Upgrade auf Version {ready} notwendig.",
|
|
609
631
|
"integration.nodeInspector.output.description": "Was nachgelagerte Nodes von diesem erhalten. Deklariert vom Node-Typ; wird mit echten Werten gefüllt, sobald der Schritt gelaufen ist.",
|
|
632
|
+
"integration.nodeInspector.output.loopBody.heading": "Der Schleifenkörper",
|
|
633
|
+
"integration.nodeInspector.output.loopBody.size": "Am Ausgang „Element“ hängt noch nichts, diese Schleife wiederholt also nichts. | Ein Schritt hängt am Ausgang „Element“ und läuft einmal pro Element. | {n} Schritte hängen am Ausgang „Element“ und laufen jeder einmal pro Element.",
|
|
634
|
+
"integration.nodeInspector.output.loopBody.names": "Diese wiederholen sich: {names}",
|
|
635
|
+
"integration.nodeInspector.output.loopBody.joined": "Einer davon hängt zugleich hinter der Schleife, am Ausgang „Fertig“ — er wiederholt sich also mit dem Schleifenkörper, statt einmal zu laufen: {names} | {n} davon hängen zugleich hinter der Schleife, am Ausgang „Fertig“ — sie wiederholen sich also mit dem Schleifenkörper, statt einmal zu laufen: {names}",
|
|
610
636
|
"integration.nodeInspector.output.pin.editAction": "Angeheftetes Beispiel bearbeiten",
|
|
611
637
|
"integration.nodeInspector.output.pin.editorAria": "Angeheftete Beispielausgabe",
|
|
612
638
|
"integration.nodeInspector.output.pin.hint": "Ein angeheftetes Beispiel steht anstelle von Run-Daten, während Sie nachgelagerte Felder zuordnen.",
|
|
@@ -786,8 +812,8 @@
|
|
|
786
812
|
"integration.replay.debug.stepCounter": "Schritt {current} / {total}",
|
|
787
813
|
"integration.replay.debug.titleFallback": "Debug",
|
|
788
814
|
"integration.replay.error.loadStepsFailed": "Die Run-Schritte konnten nicht geladen werden.",
|
|
789
|
-
"integration.replay.runsList.description": "Klicken Sie sich durch die
|
|
790
|
-
"integration.replay.runsList.empty": "Noch keine Runs —
|
|
815
|
+
"integration.replay.runsList.description": "Klicken Sie sich durch die Runs, um sie auf dem Canvas abzuspielen.",
|
|
816
|
+
"integration.replay.runsList.empty": "Noch keine Runs — im Editor auf Run klicken.",
|
|
791
817
|
"integration.replay.runsList.heading": "Runs",
|
|
792
818
|
"integration.replay.runsList.loadMore": "Ältere Runs laden",
|
|
793
819
|
"integration.replay.state.noSteps": "Für diesen Run wurden keine Schritte aufgezeichnet.",
|
|
@@ -933,6 +959,7 @@
|
|
|
933
959
|
"integration.schedules.cron.weekday.tuesday": "Dienstags",
|
|
934
960
|
"integration.schedules.cron.weekday.wednesday": "Mittwochs",
|
|
935
961
|
"integration.schedules.cron.weeklyAt": "{days} um {time}",
|
|
962
|
+
"integration.schedules.error.loadFailed": "Zeitpläne konnten nicht geladen werden.",
|
|
936
963
|
"integration.schedules.head.title": "Zeitpläne · Integration Studio",
|
|
937
964
|
"integration.schedules.header.description": "Jeder Zeitplan-Trigger aus allen Ihren Workflows. Klicken Sie auf eine Zeile, um den Workflow zu öffnen.",
|
|
938
965
|
"integration.schedules.header.title": "Zeitpläne",
|
|
@@ -941,8 +968,8 @@
|
|
|
941
968
|
"integration.schedules.state.empty": "Noch keine Zeitpläne. Fügen Sie einem Workflow einen Zeitplan-Trigger hinzu.",
|
|
942
969
|
"integration.schedules.status.live": "aktiv",
|
|
943
970
|
"integration.schedules.status.paused": "pausiert",
|
|
944
|
-
"integration.schedules.table.column.lastRun": "
|
|
945
|
-
"integration.schedules.table.column.nextRun": "
|
|
971
|
+
"integration.schedules.table.column.lastRun": "Letzter Run",
|
|
972
|
+
"integration.schedules.table.column.nextRun": "Nächster Run",
|
|
946
973
|
"integration.schedules.table.column.status": "Status",
|
|
947
974
|
"integration.schedules.table.column.timezone": "Zeitzone",
|
|
948
975
|
"integration.schedules.table.column.when": "Wann",
|
|
@@ -957,7 +984,7 @@
|
|
|
957
984
|
"integration.secrets.cell.updated.aria": "Aktualisiert für {key}: {date}",
|
|
958
985
|
"integration.secrets.dialog.create.description": "Der Wert wird nach dem Speichern mit AES-256-GCM verschlüsselt und nie wieder ausgegeben. Sie können ihn später überschreiben, aber um ihn zu lesen, müssen Sie ihn bereits kennen.",
|
|
959
986
|
"integration.secrets.dialog.create.title": "Secret anlegen",
|
|
960
|
-
"integration.secrets.dialog.delete.body": "wird endgültig entfernt. Workflows, die darauf verweisen, funktionieren beim nächsten
|
|
987
|
+
"integration.secrets.dialog.delete.body": "wird endgültig entfernt. Workflows, die darauf verweisen, funktionieren beim nächsten Run nicht mehr.",
|
|
961
988
|
"integration.secrets.dialog.delete.title": "Secret löschen?",
|
|
962
989
|
"integration.secrets.error.invalidKey": "Der Schlüssel muss dem Muster ^[A-Z0-9_]+$ entsprechen.",
|
|
963
990
|
"integration.secrets.error.loadFailed": "Secrets konnten nicht geladen werden.",
|
|
@@ -998,6 +1025,7 @@
|
|
|
998
1025
|
"integration.templates.detail.credentials.title": "Zugangsdaten",
|
|
999
1026
|
"integration.templates.detail.fit.anyIndustry": "Jede Branche",
|
|
1000
1027
|
"integration.templates.detail.fit.title": "Gut geeignet für",
|
|
1028
|
+
"integration.templates.detail.flow.ariaLabel": "Der Ablauf, den diese Vorlage aufbaut",
|
|
1001
1029
|
"integration.templates.detail.head.fallbackName": "Vorlage",
|
|
1002
1030
|
"integration.templates.detail.head.title": "{name} · Integration Studio",
|
|
1003
1031
|
"integration.templates.detail.install.createOneLink": "Jetzt anlegen",
|
|
@@ -1119,7 +1147,7 @@
|
|
|
1119
1147
|
"integration.workflows.list.error.title": "Workflows konnten nicht geladen werden",
|
|
1120
1148
|
"integration.workflows.list.head.title": "Workflows · Revenexx Cockpit",
|
|
1121
1149
|
"integration.workflows.list.header.title": "Workflows",
|
|
1122
|
-
"integration.workflows.settings.action.
|
|
1150
|
+
"integration.workflows.settings.action.done": "Fertig",
|
|
1123
1151
|
"integration.workflows.settings.dialog.description": "Ausführungsverhalten und Metadaten für „{name}“.",
|
|
1124
1152
|
"integration.workflows.settings.dialog.title": "Workflow-Einstellungen",
|
|
1125
1153
|
"integration.workflows.settings.field.description.label": "Beschreibung",
|
|
@@ -1184,6 +1212,7 @@
|
|
|
1184
1212
|
"integration.workflows.variables.action.add": "Hinzufügen",
|
|
1185
1213
|
"integration.workflows.variables.action.copyUsage.title": "Kopieren: ${{ vars.{key} }}",
|
|
1186
1214
|
"integration.workflows.variables.action.delete": "Variable löschen",
|
|
1215
|
+
"integration.workflows.variables.action.done": "Fertig",
|
|
1187
1216
|
"integration.workflows.variables.dialog.description.after": "Änderungen werden beim Speichern des Workflows übernommen.",
|
|
1188
1217
|
"integration.workflows.variables.dialog.description.before": "Wiederverwendbare Werte für diesen Workflow — in jedem Konfigurationsfeld referenzierbar als",
|
|
1189
1218
|
"integration.workflows.variables.dialog.title": "Workflow-Variablen",
|
|
@@ -70,6 +70,9 @@
|
|
|
70
70
|
"integration.canvas.node.action.duplicate": "Duplicate",
|
|
71
71
|
"integration.canvas.node.action.duplicateAria": "Duplicate node",
|
|
72
72
|
"integration.canvas.node.badge.invalidConfig": "Config incomplete — {n} setting still needs fixing: {fields} | Config incomplete — {n} settings still need fixing: {fields}",
|
|
73
|
+
"integration.canvas.node.badge.noBuiltCode": "Version {version} is not ready to use — this step cannot be tested",
|
|
74
|
+
"integration.canvas.node.badge.repeats": "Repeats — runs once per element of {iterators} | Repeats — runs once per element of each of the {n} loops it sits inside: {iterators}",
|
|
75
|
+
"integration.canvas.node.badge.loopBody": "Loop — nothing is wired to Item yet, so nothing repeats | Loop — repeats the one step wired to Item, once per element | Loop — repeats the {n} steps wired to Item, once per element",
|
|
73
76
|
"integration.canvas.node.handle.input": "Input",
|
|
74
77
|
"integration.canvas.node.meta.versionTitle": "Version {version}",
|
|
75
78
|
"integration.canvas.node.note.heading": "Note",
|
|
@@ -281,6 +284,7 @@
|
|
|
281
284
|
"integration.dashboard.surface.io.label": "Import & Export",
|
|
282
285
|
"integration.dashboard.surface.sftp.hint": "Managed SFTP endpoints for file-based exchange.",
|
|
283
286
|
"integration.dashboard.surface.sftp.label": "SFTP Server",
|
|
287
|
+
"integration.dashboard.surface.unavailable": "Not available here — you will find {surface} in the Revenexx Cockpit.",
|
|
284
288
|
"integration.dashboard.surface.webhooks.hint": "Inbound HTTP endpoints that trigger workflows.",
|
|
285
289
|
"integration.dashboard.surface.webhooks.label": "Webhooks",
|
|
286
290
|
"integration.dashboard.templates.empty": "No templates registered yet.",
|
|
@@ -296,13 +300,17 @@
|
|
|
296
300
|
"integration.deadLetters.panel.title": "Missed runs",
|
|
297
301
|
"integration.deadLetters.reason.fallback": "No reason recorded.",
|
|
298
302
|
"integration.deadLetters.state.empty": "No missed runs. Every trigger firing made it into a run.",
|
|
303
|
+
"integration.deadLetters.status.discarded": "discarded",
|
|
304
|
+
"integration.deadLetters.status.pending": "waiting",
|
|
305
|
+
"integration.deadLetters.status.replayed": "replayed",
|
|
306
|
+
"integration.deadLetters.status.unknown": "unknown ({status})",
|
|
299
307
|
"integration.deadLetters.tabs.missed.label": "Missed runs",
|
|
300
308
|
"integration.deadLetters.toast.discard.done": "Discarded",
|
|
301
309
|
"integration.deadLetters.toast.discard.error": "Could not discard.",
|
|
302
310
|
"integration.deadLetters.toast.replay.done": "Replayed",
|
|
303
311
|
"integration.deadLetters.toast.replay.error": "Could not replay.",
|
|
304
312
|
"integration.deadLetters.toast.replay.started": "Replayed — started run #{id}",
|
|
305
|
-
"integration.
|
|
313
|
+
"integration.deadLetters.workflow.fallback": "Workflow #{id}",
|
|
306
314
|
"integration.editor.action.activate.title": "Activate this workflow",
|
|
307
315
|
"integration.editor.action.activate.title.invalid": "Fix {n} node setting before activating | Fix {n} node settings before activating",
|
|
308
316
|
"integration.editor.action.backToWorkflow": "Back to Workflow",
|
|
@@ -310,11 +318,11 @@
|
|
|
310
318
|
"integration.editor.action.discard.title": "Discard unsaved changes",
|
|
311
319
|
"integration.editor.action.duplicate.label": "Duplicate",
|
|
312
320
|
"integration.editor.action.duplicate.title": "Duplicate this workflow",
|
|
313
|
-
"integration.editor.action.pause.label": "Pause",
|
|
314
321
|
"integration.editor.action.pause.title": "Pause this workflow",
|
|
315
322
|
"integration.editor.action.retry": "Retry",
|
|
316
323
|
"integration.editor.action.save.label": "Save",
|
|
317
324
|
"integration.editor.action.save.saving": "Saving…",
|
|
325
|
+
"integration.editor.action.state.label": "Workflow status",
|
|
318
326
|
"integration.editor.activate.error.generic": "Could not change the workflow status.",
|
|
319
327
|
"integration.editor.activate.error.needsFixing": "Can’t activate — {n} setting still needs fixing (see the banner above). | Can’t activate — {n} settings still need fixing (see the banner above).",
|
|
320
328
|
"integration.editor.activate.error.validationIssues": "Can’t activate — {n} validation issue to fix. | Can’t activate — {n} validation issues to fix.",
|
|
@@ -360,6 +368,10 @@
|
|
|
360
368
|
"integration.editor.head.title": "{name} · Revenexx Cockpit",
|
|
361
369
|
"integration.editor.head.untitled": "Workflow",
|
|
362
370
|
"integration.editor.header.executionMode.title": "Execution mode: {mode}",
|
|
371
|
+
"integration.editor.leave.dialog.description": "This workflow has changes that have not been saved yet. Leaving now discards them.",
|
|
372
|
+
"integration.editor.leave.dialog.discard": "Discard and leave",
|
|
373
|
+
"integration.editor.leave.dialog.stay": "Keep editing",
|
|
374
|
+
"integration.editor.leave.dialog.title": "Leave without saving?",
|
|
363
375
|
"integration.editor.minimap.action.bottomLeft": "Bottom left",
|
|
364
376
|
"integration.editor.minimap.action.bottomRight": "Bottom right",
|
|
365
377
|
"integration.editor.minimap.action.collapse.title": "Collapse the minimap",
|
|
@@ -453,6 +465,7 @@
|
|
|
453
465
|
"integration.history.badge.paused": "Paused",
|
|
454
466
|
"integration.history.badge.pausedHint": "Workflow is paused; activating runs this revision.",
|
|
455
467
|
"integration.history.confirm.restore": "Restore revision {revision}? The current version is archived first, then the workflow is rebuilt from this snapshot.",
|
|
468
|
+
"integration.history.confirm.restoreWithDraft": "Restore revision {revision}? The current version is archived first, then the workflow is rebuilt from this snapshot — and the unsaved changes in the editor are discarded.",
|
|
456
469
|
"integration.history.heading.description": "Every save archives the previous revision; the newest one is what runs while the workflow is active.",
|
|
457
470
|
"integration.history.heading.title": "Version history",
|
|
458
471
|
"integration.history.list.revisionLabel": "Revision {revision}",
|
|
@@ -499,6 +512,7 @@
|
|
|
499
512
|
"integration.nodeConfig.dynamicField.reloading": "reloading…",
|
|
500
513
|
"integration.nodeConfig.dynamicField.resolving": "resolving options…",
|
|
501
514
|
"integration.nodeConfig.dynamicField.searching": "searching…",
|
|
515
|
+
"integration.nodeConfig.dynamicField.versionNotReady": "No choices while this version is not ready to use.",
|
|
502
516
|
"integration.nodeConfig.dynamicSchema.depthCapped": "nested dynamic-schema is not expanded further",
|
|
503
517
|
"integration.nodeConfig.dynamicSchema.empty": "No fields resolved.",
|
|
504
518
|
"integration.nodeConfig.dynamicSchema.fieldCollision": "resolved field '{key}' collides with a static config field — skipped",
|
|
@@ -506,6 +520,7 @@
|
|
|
506
520
|
"integration.nodeConfig.dynamicSchema.resolving": "Resolving fields…",
|
|
507
521
|
"integration.nodeConfig.expression.badge.title": "Accepts ${{ … }} expressions",
|
|
508
522
|
"integration.nodeConfig.expression.insertTitle": "Insert expression",
|
|
523
|
+
"integration.nodeConfig.expression.picker.aria": "Available data for this setting",
|
|
509
524
|
"integration.nodeConfig.expression.picker.empty": "Nothing matches “{query}”.",
|
|
510
525
|
"integration.nodeConfig.expression.picker.filterAria": "Filter available data",
|
|
511
526
|
"integration.nodeConfig.expression.picker.filterPlaceholder": "Filter…",
|
|
@@ -575,6 +590,8 @@
|
|
|
575
590
|
"integration.nodeConfig.validation.min": "Must be ≥ {min}",
|
|
576
591
|
"integration.nodeConfig.validation.minLength": "Must be at least {min} characters",
|
|
577
592
|
"integration.nodeConfig.validation.pattern": "Does not match the required format",
|
|
593
|
+
"integration.nodeInspector.dialogTitle": "Configure {name}",
|
|
594
|
+
"integration.nodeInspector.footer.done": "Done",
|
|
578
595
|
"integration.nodeInspector.footer.removeFromWorkflow": "Remove from workflow",
|
|
579
596
|
"integration.nodeInspector.footer.unsavedChanges": "Unsaved changes",
|
|
580
597
|
"integration.nodeInspector.header.groupNode": "Node",
|
|
@@ -585,6 +602,9 @@
|
|
|
585
602
|
"integration.nodeInspector.header.previousStep": "Previous step (saves changes)",
|
|
586
603
|
"integration.nodeInspector.header.whatThisDoes": "What this node does",
|
|
587
604
|
"integration.nodeInspector.input.description": "Available data. Click a value to insert it into the focused field, or drag it onto one.",
|
|
605
|
+
"integration.nodeInspector.input.expects.heading": "Expects:",
|
|
606
|
+
"integration.nodeInspector.input.expects.optional": "optional",
|
|
607
|
+
"integration.nodeInspector.input.expects.required": "required",
|
|
588
608
|
"integration.nodeInspector.input.noUpstreamForTrigger": "Triggers start the workflow, so there is no upstream data. Workflow variables are available everywhere.",
|
|
589
609
|
"integration.nodeInspector.input.nodes.empty": "No upstream nodes yet. Connect a node into this one to reference its output here.",
|
|
590
610
|
"integration.nodeInspector.input.nodes.heading": "Nodes",
|
|
@@ -606,7 +626,13 @@
|
|
|
606
626
|
"integration.nodeInspector.note.addLabel": "Add note",
|
|
607
627
|
"integration.nodeInspector.note.label": "Note",
|
|
608
628
|
"integration.nodeInspector.note.placeholder": "Why this node is here…",
|
|
629
|
+
"integration.nodeInspector.notice.versionNotReady.none": "Version {version} of this node is no longer usable, and no version of it is. This step cannot be tested, and the choice lists in its settings stay empty.",
|
|
630
|
+
"integration.nodeInspector.notice.versionNotReady.upgrade": "Version {version} of this node is no longer usable. To keep using this step, it has to be upgraded to version {ready}.",
|
|
609
631
|
"integration.nodeInspector.output.description": "What downstream nodes receive from this one. Declared by the node type; filled with real values once the step has run.",
|
|
632
|
+
"integration.nodeInspector.output.loopBody.heading": "The loop body",
|
|
633
|
+
"integration.nodeInspector.output.loopBody.size": "Nothing is wired to Item yet, so this loop repeats nothing. | One step is wired to Item and runs once per element. | {n} steps are wired to Item and each runs once per element.",
|
|
634
|
+
"integration.nodeInspector.output.loopBody.names": "These repeat: {names}",
|
|
635
|
+
"integration.nodeInspector.output.loopBody.joined": "One of them is wired after the loop as well, on the Done side — so it repeats with the body rather than running once: {names} | {n} of them are wired after the loop as well, on the Done side — so they repeat with the body rather than running once: {names}",
|
|
610
636
|
"integration.nodeInspector.output.pin.editAction": "Edit pinned sample",
|
|
611
637
|
"integration.nodeInspector.output.pin.editorAria": "Pinned sample output",
|
|
612
638
|
"integration.nodeInspector.output.pin.hint": "A pinned sample stands in for run data while you map downstream fields.",
|
|
@@ -933,6 +959,7 @@
|
|
|
933
959
|
"integration.schedules.cron.weekday.tuesday": "Tuesdays",
|
|
934
960
|
"integration.schedules.cron.weekday.wednesday": "Wednesdays",
|
|
935
961
|
"integration.schedules.cron.weeklyAt": "{days} at {time}",
|
|
962
|
+
"integration.schedules.error.loadFailed": "Schedules could not be loaded.",
|
|
936
963
|
"integration.schedules.head.title": "Schedules · Integration Studio",
|
|
937
964
|
"integration.schedules.header.description": "Every scheduled trigger across your workflows. Click a row to open the workflow.",
|
|
938
965
|
"integration.schedules.header.title": "Schedules",
|
|
@@ -998,6 +1025,7 @@
|
|
|
998
1025
|
"integration.templates.detail.credentials.title": "Credentials",
|
|
999
1026
|
"integration.templates.detail.fit.anyIndustry": "Any industry",
|
|
1000
1027
|
"integration.templates.detail.fit.title": "Good fit for",
|
|
1028
|
+
"integration.templates.detail.flow.ariaLabel": "The flow this template builds",
|
|
1001
1029
|
"integration.templates.detail.head.fallbackName": "Template",
|
|
1002
1030
|
"integration.templates.detail.head.title": "{name} · Integration Studio",
|
|
1003
1031
|
"integration.templates.detail.install.createOneLink": "Create one",
|
|
@@ -1119,7 +1147,7 @@
|
|
|
1119
1147
|
"integration.workflows.list.error.title": "Could not load workflows",
|
|
1120
1148
|
"integration.workflows.list.head.title": "Workflows · Revenexx Cockpit",
|
|
1121
1149
|
"integration.workflows.list.header.title": "Workflows",
|
|
1122
|
-
"integration.workflows.settings.action.
|
|
1150
|
+
"integration.workflows.settings.action.done": "Done",
|
|
1123
1151
|
"integration.workflows.settings.dialog.description": "Execution behaviour and metadata for “{name}”.",
|
|
1124
1152
|
"integration.workflows.settings.dialog.title": "Workflow settings",
|
|
1125
1153
|
"integration.workflows.settings.field.description.label": "Description",
|
|
@@ -1184,6 +1212,7 @@
|
|
|
1184
1212
|
"integration.workflows.variables.action.add": "Add",
|
|
1185
1213
|
"integration.workflows.variables.action.copyUsage.title": "Copy ${{ vars.{key} }}",
|
|
1186
1214
|
"integration.workflows.variables.action.delete": "Delete variable",
|
|
1215
|
+
"integration.workflows.variables.action.done": "Done",
|
|
1187
1216
|
"integration.workflows.variables.dialog.description.after": "Changes persist with the workflow Save.",
|
|
1188
1217
|
"integration.workflows.variables.dialog.description.before": "Reusable values for this workflow — reference them in any config field as",
|
|
1189
1218
|
"integration.workflows.variables.dialog.title": "Workflow variables",
|
|
@@ -442,7 +442,10 @@ async function confirmDelete() {
|
|
|
442
442
|
class="rounded-md px-3 py-2 text-sm"
|
|
443
443
|
:class="testResult.ok ? 'bg-emerald-500/10 text-emerald-700' : 'bg-rose-500/10 text-rose-700'"
|
|
444
444
|
>
|
|
445
|
-
|
|
445
|
+
<!-- What the credential type said, whichever way the test went. The fixed
|
|
446
|
+
sentences are the fallback for a type that reports nothing, not the
|
|
447
|
+
first choice (specs/credential-test.md). -->
|
|
448
|
+
{{ testResult.ok ? testResult.message ?? t("integration.credentials.shared.test.ok") : testResult.error ?? testResult.message ?? t("integration.credentials.shared.test.failed") }}
|
|
446
449
|
</div>
|
|
447
450
|
|
|
448
451
|
</div>
|
|
@@ -1,41 +1,42 @@
|
|
|
1
1
|
<script setup>
|
|
2
2
|
import { computed, ref, watch } from "vue";
|
|
3
|
+
import SurfaceCard from "../../components/Integrations/SurfaceCard.vue";
|
|
3
4
|
import TemplateCard from "../../components/Integrations/TemplateCard.vue";
|
|
4
5
|
import WorkflowCreateDialog from "../../components/Integrations/WorkflowCreateDialog.vue";
|
|
5
6
|
import { Pulse as Activity, DangerTriangle as AlertTriangle, ArrowRight, Box as Boxes, ClockCircle as Clock, Database, Layers, AddCircle as Plus, Radio, MagicStick as Sparkles, LinkRound as Webhook, Programming as Workflow } from "#solar-icons";
|
|
6
7
|
import { Badge, Button } from "@revenexx/studio";
|
|
7
|
-
import {
|
|
8
|
+
import { servedPaths } from "../../utils/servedPaths";
|
|
9
|
+
import { runStatusClass, runStatusLabel } from "../../utils/statusStyle";
|
|
8
10
|
const t = useIntegrationsT();
|
|
9
11
|
useHead({ title: () => t("integration.dashboard.head.title") });
|
|
10
12
|
const { workflows, activeCount: activeWorkflows, loading: workflowsLoading, load: loadWorkflows } = useIntegrationsWorkflows();
|
|
11
|
-
const {
|
|
13
|
+
const {
|
|
14
|
+
latestPerWorkflow: latestRunPerWorkflow,
|
|
15
|
+
runningCount,
|
|
16
|
+
latestLoading: runsLoading,
|
|
17
|
+
loadSummary: loadRunSummary,
|
|
18
|
+
loadLatestPerWorkflow
|
|
19
|
+
} = useIntegrationsRuns();
|
|
12
20
|
const { startingPoints, loading: templatesLoading, load: loadTemplates, ensureDetails } = useIntegrationsTemplates();
|
|
13
21
|
watch(() => startingPoints.value.map((t2) => t2.slug).join(","), () => {
|
|
14
22
|
if (startingPoints.value.length) void ensureDetails(startingPoints.value.map((t2) => t2.slug));
|
|
15
23
|
}, { immediate: true });
|
|
16
24
|
const { activeCount: schedulesActive, load: loadSchedules } = useIntegrationsSchedules();
|
|
17
25
|
const { pendingCount: missedRuns, globalLoading: missedLoading, loadGlobal: loadMissedRuns } = useIntegrationsDeadLetters();
|
|
18
|
-
const kpisLoading = computed(() => workflowsLoading.value && !workflows.value.length || runsLoading.value && !
|
|
19
|
-
const latestLoading = computed(() => runsLoading.value && !
|
|
26
|
+
const kpisLoading = computed(() => workflowsLoading.value && !workflows.value.length || runsLoading.value && !latestRunPerWorkflow.value.length);
|
|
27
|
+
const latestLoading = computed(() => runsLoading.value && !latestRunPerWorkflow.value.length);
|
|
20
28
|
const createOpen = ref(false);
|
|
21
29
|
const NuxtLinkComp = resolveComponent("NuxtLink");
|
|
22
30
|
onMounted(() => {
|
|
23
31
|
void loadWorkflows();
|
|
24
|
-
void
|
|
32
|
+
void loadRunSummary();
|
|
33
|
+
void loadLatestPerWorkflow();
|
|
25
34
|
void loadTemplates();
|
|
26
35
|
void loadSchedules();
|
|
27
|
-
void loadMissedRuns()
|
|
28
|
-
});
|
|
29
|
-
const latestByWorkflow = computed(() => {
|
|
30
|
-
const seen = /* @__PURE__ */ new Set();
|
|
31
|
-
const out = [];
|
|
32
|
-
for (const r of runs.value) {
|
|
33
|
-
if (seen.has(r.workflowId)) continue;
|
|
34
|
-
seen.add(r.workflowId);
|
|
35
|
-
out.push(r);
|
|
36
|
-
}
|
|
37
|
-
return out;
|
|
36
|
+
void loadMissedRuns().catch(() => {
|
|
37
|
+
});
|
|
38
38
|
});
|
|
39
|
+
const latestByWorkflow = computed(() => latestRunPerWorkflow.value);
|
|
39
40
|
const latestPerWorkflow = computed(() => latestByWorkflow.value.slice(0, 10));
|
|
40
41
|
const failedRecent = computed(() => latestByWorkflow.value.filter((r) => r.status === "failed").slice(0, 3));
|
|
41
42
|
function formatRelative(iso) {
|
|
@@ -89,6 +90,11 @@ const surfaces = computed(() => [
|
|
|
89
90
|
{ label: t("integration.dashboard.surface.events.label"), to: "/integrations/events", icon: Radio, hint: t("integration.dashboard.surface.events.hint") },
|
|
90
91
|
{ label: t("integration.dashboard.surface.webhooks.label"), to: "/integrations/webhooks", icon: Webhook, hint: t("integration.dashboard.surface.webhooks.hint") }
|
|
91
92
|
]);
|
|
93
|
+
const router = useRouter();
|
|
94
|
+
function surfaceCards() {
|
|
95
|
+
const served = servedPaths(router.getRoutes().map((route) => route.path));
|
|
96
|
+
return surfaces.value.map((sfc) => ({ ...sfc, available: served.has(sfc.to) }));
|
|
97
|
+
}
|
|
92
98
|
</script>
|
|
93
99
|
|
|
94
100
|
<template>
|
|
@@ -173,7 +179,7 @@ const surfaces = computed(() => [
|
|
|
173
179
|
:to="{ path: `/integrations/workflows/${r.workflowId}`, query: { run: r.id } }"
|
|
174
180
|
class="grid grid-cols-[90px_minmax(0,1fr)_100px_70px] items-center gap-2 border-b border-black/[0.04] px-3 py-2 text-sm last:border-b-0 hover:bg-muted/30"
|
|
175
181
|
>
|
|
176
|
-
<Badge variant="outline" :class="['border text-xs font-medium uppercase',
|
|
182
|
+
<Badge variant="outline" :class="['border text-xs font-medium uppercase', runStatusClass(r.status)]">
|
|
177
183
|
{{ runStatusLabel(r.status) }}
|
|
178
184
|
</Badge>
|
|
179
185
|
<div class="truncate">
|
|
@@ -258,25 +264,17 @@ const surfaces = computed(() => [
|
|
|
258
264
|
</div>
|
|
259
265
|
</div>
|
|
260
266
|
|
|
261
|
-
<!-- Data exchange & events —
|
|
267
|
+
<!-- Data exchange & events — surfaces beyond workflows, and the only cards
|
|
268
|
+
here that lead OUT of this module: all four are the cockpit's pages.
|
|
269
|
+
Where the host does not have them the card stays and says so, rather
|
|
270
|
+
than leading into a 404 (PO-223, `SurfaceCard.vue`). -->
|
|
262
271
|
<div class="grid gap-2 sm:grid-cols-2 lg:grid-cols-4">
|
|
263
|
-
<
|
|
264
|
-
v-for="sfc in
|
|
272
|
+
<SurfaceCard
|
|
273
|
+
v-for="sfc in surfaceCards()"
|
|
265
274
|
:key="sfc.to"
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
<div class="flex items-center gap-2">
|
|
270
|
-
<span class="flex size-6 items-center justify-center rounded-md bg-slate-100 text-slate-500">
|
|
271
|
-
<component :is="sfc.icon" :size="12" />
|
|
272
|
-
</span>
|
|
273
|
-
<span class="min-w-0 flex-1 truncate text-sm font-semibold">{{ sfc.label }}</span>
|
|
274
|
-
<ArrowRight :size="11" class="text-muted-foreground transition-transform group-hover:translate-x-0.5" />
|
|
275
|
-
</div>
|
|
276
|
-
<p class="mt-2 text-sm text-muted-foreground">
|
|
277
|
-
{{ sfc.hint }}
|
|
278
|
-
</p>
|
|
279
|
-
</NuxtLink>
|
|
275
|
+
v-bind="sfc"
|
|
276
|
+
:note="t('integration.dashboard.surface.unavailable', { surface: sfc.label })"
|
|
277
|
+
/>
|
|
280
278
|
</div>
|
|
281
279
|
|
|
282
280
|
<!-- Named for the offer it makes, not for a ranking nothing measures
|