Flowfile 0.3.4.1__py3-none-any.whl → 0.3.6__py3-none-any.whl

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.

Potentially problematic release.


This version of Flowfile might be problematic. Click here for more details.

Files changed (122) hide show
  1. flowfile/__init__.py +3 -3
  2. flowfile/api.py +36 -15
  3. flowfile/web/static/assets/CloudConnectionManager-2dfdce2f.css +86 -0
  4. flowfile/web/static/assets/CloudConnectionManager-d004942f.js +784 -0
  5. flowfile/web/static/assets/CloudStorageReader-29d14fcc.css +143 -0
  6. flowfile/web/static/assets/CloudStorageReader-eccf9fc2.js +437 -0
  7. flowfile/web/static/assets/CloudStorageWriter-49c9a4b2.css +138 -0
  8. flowfile/web/static/assets/CloudStorageWriter-b1ba6bba.js +430 -0
  9. flowfile/web/static/assets/{CrossJoin-dfcf7351.js → CrossJoin-68981877.js} +8 -8
  10. flowfile/web/static/assets/{DatabaseConnectionSettings-b2afb1d7.js → DatabaseConnectionSettings-0b06649c.js} +2 -2
  11. flowfile/web/static/assets/{DatabaseManager-824a49b2.js → DatabaseManager-8349a426.js} +2 -2
  12. flowfile/web/static/assets/{DatabaseReader-a48124d8.js → DatabaseReader-905344f8.js} +9 -9
  13. flowfile/web/static/assets/{DatabaseWriter-b47cbae2.js → DatabaseWriter-9f5b8638.js} +9 -9
  14. flowfile/web/static/assets/{ExploreData-fdfc45a4.js → ExploreData-131a6d53.js} +5 -5
  15. flowfile/web/static/assets/{ExternalSource-861b0e71.js → ExternalSource-e3549dcc.js} +6 -6
  16. flowfile/web/static/assets/{Filter-f87bb897.js → Filter-6e0730ae.js} +8 -8
  17. flowfile/web/static/assets/{Formula-1e2ed720.js → Formula-02f033e6.js} +75 -9
  18. flowfile/web/static/assets/{Formula-b8cefc31.css → Formula-29f19d21.css} +10 -0
  19. flowfile/web/static/assets/{FuzzyMatch-b6cc4fdd.js → FuzzyMatch-54c14036.js} +9 -9
  20. flowfile/web/static/assets/{GraphSolver-6a371f4c.js → GraphSolver-08a3f499.js} +5 -5
  21. flowfile/web/static/assets/{GroupBy-f7b7f472.js → GroupBy-2ae38139.js} +6 -6
  22. flowfile/web/static/assets/{Join-eec38203.js → Join-493b9772.js} +23 -15
  23. flowfile/web/static/assets/{Join-41c0f331.css → Join-f45eff22.css} +20 -20
  24. flowfile/web/static/assets/{ManualInput-9aaa46fb.js → ManualInput-4373d163.js} +106 -34
  25. flowfile/web/static/assets/{ManualInput-ac7b9972.css → ManualInput-a71b52c6.css} +29 -17
  26. flowfile/web/static/assets/{Output-3b2ca045.js → Output-b534f3c7.js} +4 -4
  27. flowfile/web/static/assets/{Pivot-a4f5d88f.js → Pivot-2968ff65.js} +6 -6
  28. flowfile/web/static/assets/{PolarsCode-49ce444f.js → PolarsCode-65136536.js} +6 -6
  29. flowfile/web/static/assets/{Read-07acdc9a.js → Read-c56339ed.js} +6 -6
  30. flowfile/web/static/assets/{RecordCount-6a21da56.js → RecordCount-1c641a5e.js} +5 -5
  31. flowfile/web/static/assets/{RecordId-949bdc17.js → RecordId-df308b8f.js} +6 -6
  32. flowfile/web/static/assets/{Sample-7afca6e1.js → Sample-293e8a64.js} +5 -5
  33. flowfile/web/static/assets/{SecretManager-b41c029d.js → SecretManager-03911655.js} +2 -2
  34. flowfile/web/static/assets/{Select-32b28406.js → Select-3058a13d.js} +8 -8
  35. flowfile/web/static/assets/{SettingsSection-a0f15a05.js → SettingsSection-fbf4fb39.js} +1 -1
  36. flowfile/web/static/assets/{Sort-fc6ba0e2.js → Sort-a29bbaf7.js} +6 -6
  37. flowfile/web/static/assets/{TextToRows-23127596.js → TextToRows-c7d7760e.js} +8 -8
  38. flowfile/web/static/assets/{UnavailableFields-c42880a3.js → UnavailableFields-118f1d20.js} +2 -2
  39. flowfile/web/static/assets/{Union-39eecc6c.js → Union-f0589571.js} +5 -5
  40. flowfile/web/static/assets/{Unique-a0e8fe61.js → Unique-7329a207.js} +8 -8
  41. flowfile/web/static/assets/{Unpivot-1e2d43f0.js → Unpivot-30b0be15.js} +5 -5
  42. flowfile/web/static/assets/{api-44ca9e9c.js → api-602fb95c.js} +1 -1
  43. flowfile/web/static/assets/api-fb67319c.js +80 -0
  44. flowfile/web/static/assets/cloud_storage_reader-aa1415d6.png +0 -0
  45. flowfile/web/static/assets/{designer-267d44f1.js → designer-94a6bf4d.js} +36 -34
  46. flowfile/web/static/assets/{documentation-6c0810a2.js → documentation-a224831e.js} +1 -1
  47. flowfile/web/static/assets/{dropDown-52790b15.js → dropDown-c2d2aa97.js} +1 -1
  48. flowfile/web/static/assets/{fullEditor-e272b506.js → fullEditor-921ac5fd.js} +2 -2
  49. flowfile/web/static/assets/{genericNodeSettings-4bdcf98e.js → genericNodeSettings-7013cc94.js} +3 -3
  50. flowfile/web/static/assets/{index-e235a8bc.js → index-3a75211d.js} +19 -6
  51. flowfile/web/static/assets/{nodeTitle-fc3fc4b7.js → nodeTitle-a63d4680.js} +3 -3
  52. flowfile/web/static/assets/{secretApi-cdc2a3fd.js → secretApi-763aec6e.js} +1 -1
  53. flowfile/web/static/assets/{selectDynamic-96aa82cd.js → selectDynamic-08464729.js} +3 -3
  54. flowfile/web/static/assets/{vue-codemirror.esm-25e75a08.js → vue-codemirror.esm-f15a5f87.js} +2 -1
  55. flowfile/web/static/assets/{vue-content-loader.es-6c4b1c24.js → vue-content-loader.es-93bd09d7.js} +1 -1
  56. flowfile/web/static/index.html +1 -1
  57. {flowfile-0.3.4.1.dist-info → flowfile-0.3.6.dist-info}/METADATA +8 -3
  58. {flowfile-0.3.4.1.dist-info → flowfile-0.3.6.dist-info}/RECORD +109 -104
  59. {flowfile-0.3.4.1.dist-info → flowfile-0.3.6.dist-info}/entry_points.txt +2 -0
  60. flowfile_core/__init__.py +2 -0
  61. flowfile_core/configs/node_store/nodes.py +8 -6
  62. flowfile_core/database/connection.py +63 -15
  63. flowfile_core/database/init_db.py +0 -1
  64. flowfile_core/database/models.py +49 -2
  65. flowfile_core/flowfile/code_generator/code_generator.py +402 -18
  66. flowfile_core/flowfile/connection_manager/models.py +1 -1
  67. flowfile_core/flowfile/database_connection_manager/db_connections.py +216 -2
  68. flowfile_core/flowfile/extensions.py +1 -1
  69. flowfile_core/flowfile/flow_data_engine/cloud_storage_reader.py +259 -0
  70. flowfile_core/flowfile/flow_data_engine/create/funcs.py +19 -8
  71. flowfile_core/flowfile/flow_data_engine/flow_data_engine.py +522 -59
  72. flowfile_core/flowfile/flow_data_engine/flow_file_column/main.py +12 -2
  73. flowfile_core/flowfile/flow_data_engine/fuzzy_matching/settings_validator.py +1 -1
  74. flowfile_core/flowfile/flow_data_engine/join/__init__.py +2 -1
  75. flowfile_core/flowfile/flow_data_engine/join/utils.py +25 -0
  76. flowfile_core/flowfile/flow_data_engine/subprocess_operations/subprocess_operations.py +29 -22
  77. flowfile_core/flowfile/flow_data_engine/utils.py +1 -40
  78. flowfile_core/flowfile/flow_graph.py +119 -82
  79. flowfile_core/flowfile/flow_node/flow_node.py +68 -33
  80. flowfile_core/flowfile/flow_node/models.py +32 -3
  81. flowfile_core/flowfile/flow_node/schema_callback.py +3 -2
  82. flowfile_core/flowfile/sources/external_sources/__init__.py +0 -2
  83. flowfile_core/flowfile/sources/external_sources/factory.py +4 -7
  84. flowfile_core/flowfile/utils.py +1 -23
  85. flowfile_core/main.py +3 -2
  86. flowfile_core/routes/cloud_connections.py +81 -0
  87. flowfile_core/routes/logs.py +0 -1
  88. flowfile_core/routes/routes.py +3 -39
  89. flowfile_core/schemas/cloud_storage_schemas.py +215 -0
  90. flowfile_core/schemas/input_schema.py +37 -15
  91. flowfile_core/schemas/schemas.py +7 -2
  92. flowfile_core/schemas/transform_schema.py +97 -22
  93. flowfile_core/utils/utils.py +40 -1
  94. flowfile_core/utils/validate_setup.py +41 -0
  95. flowfile_frame/flow_frame.py +253 -102
  96. flowfile_frame/flow_frame_methods.py +13 -13
  97. flowfile_worker/external_sources/s3_source/main.py +216 -0
  98. flowfile_worker/external_sources/s3_source/models.py +142 -0
  99. flowfile_worker/funcs.py +51 -6
  100. flowfile_worker/models.py +22 -2
  101. flowfile_worker/routes.py +40 -38
  102. flowfile_worker/utils.py +1 -1
  103. test_utils/s3/commands.py +46 -0
  104. test_utils/s3/data_generator.py +291 -0
  105. test_utils/s3/fixtures.py +209 -0
  106. flowfile/web/static/assets/AirbyteReader-1ac35765.css +0 -314
  107. flowfile/web/static/assets/AirbyteReader-e08044e5.js +0 -922
  108. flowfile/web/static/assets/dropDownGeneric-60f56a8a.js +0 -72
  109. flowfile/web/static/assets/dropDownGeneric-895680d6.css +0 -10
  110. flowfile_core/flowfile/sources/external_sources/airbyte_sources/airbyte.py +0 -159
  111. flowfile_core/flowfile/sources/external_sources/airbyte_sources/models.py +0 -172
  112. flowfile_core/flowfile/sources/external_sources/airbyte_sources/settings.py +0 -173
  113. flowfile_core/schemas/external_sources/airbyte_schemas.py +0 -20
  114. flowfile_worker/external_sources/airbyte_sources/__init__.py +0 -0
  115. flowfile_worker/external_sources/airbyte_sources/cache_manager.py +0 -161
  116. flowfile_worker/external_sources/airbyte_sources/main.py +0 -89
  117. flowfile_worker/external_sources/airbyte_sources/models.py +0 -133
  118. flowfile_worker/external_sources/airbyte_sources/settings.py +0 -0
  119. {flowfile-0.3.4.1.dist-info → flowfile-0.3.6.dist-info}/LICENSE +0 -0
  120. {flowfile-0.3.4.1.dist-info → flowfile-0.3.6.dist-info}/WHEEL +0 -0
  121. {flowfile_core/flowfile/sources/external_sources/airbyte_sources → flowfile_worker/external_sources/s3_source}/__init__.py +0 -0
  122. {flowfile_core/schemas/external_sources → test_utils/s3}/__init__.py +0 -0
@@ -0,0 +1,784 @@
1
+ import { f as fetchCloudStorageConnectionsInterfaces, c as createCloudStorageConnectionApi, d as deleteCloudStorageConnectionApi } from "./api-fb67319c.js";
2
+ import { d as defineComponent, r as ref, m as watch, l as computed, c as openBlock, e as createElementBlock, p as createBaseVNode, a5 as withDirectives, a6 as vModelText, ag as vModelSelect, F as Fragment, q as renderList, t as toDisplayString, i as createCommentVNode, ah as vModelDynamic, s as normalizeClass, ai as vModelCheckbox, v as withModifiers, n as onMounted, g as createTextVNode, f as createVNode, w as withCtx, u as unref, z as ElMessage, aj as ElDialog, ak as ElButton, _ as _export_sfc } from "./index-3a75211d.js";
3
+ const _hoisted_1$1 = { class: "form-grid" };
4
+ const _hoisted_2$1 = { class: "form-field" };
5
+ const _hoisted_3$1 = { class: "form-field" };
6
+ const _hoisted_4$1 = { class: "form-field" };
7
+ const _hoisted_5$1 = ["value"];
8
+ const _hoisted_6$1 = { class: "form-field" };
9
+ const _hoisted_7$1 = ["required"];
10
+ const _hoisted_8$1 = {
11
+ key: 0,
12
+ class: "form-field"
13
+ };
14
+ const _hoisted_9$1 = ["required"];
15
+ const _hoisted_10$1 = {
16
+ key: 1,
17
+ class: "form-field"
18
+ };
19
+ const _hoisted_11$1 = { class: "password-field" };
20
+ const _hoisted_12$1 = ["type", "required"];
21
+ const _hoisted_13$1 = {
22
+ key: 2,
23
+ class: "form-field"
24
+ };
25
+ const _hoisted_14$1 = ["required"];
26
+ const _hoisted_15$1 = { class: "form-field" };
27
+ const _hoisted_16$1 = { class: "checkbox-container" };
28
+ const _hoisted_17$1 = { class: "form-field" };
29
+ const _hoisted_18$1 = ["required"];
30
+ const _hoisted_19$1 = {
31
+ key: 0,
32
+ class: "form-field"
33
+ };
34
+ const _hoisted_20$1 = { class: "password-field" };
35
+ const _hoisted_21$1 = ["type", "required"];
36
+ const _hoisted_22 = { class: "form-field" };
37
+ const _hoisted_23 = ["required"];
38
+ const _hoisted_24 = { class: "form-field" };
39
+ const _hoisted_25 = ["required"];
40
+ const _hoisted_26 = { class: "form-field" };
41
+ const _hoisted_27 = { class: "password-field" };
42
+ const _hoisted_28 = ["type", "required"];
43
+ const _hoisted_29 = { class: "form-field" };
44
+ const _hoisted_30 = { class: "form-field" };
45
+ const _hoisted_31 = { class: "checkbox-container" };
46
+ const _hoisted_32 = { class: "form-actions" };
47
+ const _hoisted_33 = ["disabled"];
48
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
49
+ __name: "CloudConnectionSettings",
50
+ props: {
51
+ initialConnection: {},
52
+ isSubmitting: { type: Boolean }
53
+ },
54
+ emits: ["submit", "cancel"],
55
+ setup(__props, { emit: __emit }) {
56
+ const props = __props;
57
+ const emit = __emit;
58
+ const authMethodsByStorageType = {
59
+ s3: [
60
+ { value: "access_key", label: "Access Key" },
61
+ { value: "iam_role", label: "IAM Role" },
62
+ { value: "aws-cli", label: "AWS CLI" },
63
+ { value: "auto", label: "Auto" }
64
+ ],
65
+ adls: [
66
+ { value: "access_key", label: "Access Key" },
67
+ { value: "service_principal", label: "Service Principal" },
68
+ { value: "managed_identity", label: "Managed Identity" },
69
+ { value: "sas_token", label: "SAS Token" },
70
+ { value: "auto", label: "Auto" }
71
+ ]
72
+ };
73
+ const defaultConnection = () => ({
74
+ connectionName: "",
75
+ storageType: "s3",
76
+ authMethod: "access_key",
77
+ verifySsl: true,
78
+ awsAllowUnsafeHtml: false
79
+ });
80
+ const connection = ref(
81
+ props.initialConnection ? { ...props.initialConnection } : defaultConnection()
82
+ );
83
+ watch(
84
+ () => props.initialConnection,
85
+ (newVal) => {
86
+ if (newVal) {
87
+ connection.value = { ...newVal };
88
+ }
89
+ }
90
+ );
91
+ const showAwsSecret = ref(false);
92
+ const showAzureKey = ref(false);
93
+ const showAzureSecret = ref(false);
94
+ const availableAuthMethods = computed(() => {
95
+ const cloudStorageType = connection.value.storageType;
96
+ return authMethodsByStorageType[cloudStorageType] || [];
97
+ });
98
+ watch(
99
+ () => connection.value.storageType,
100
+ (newStorageType) => {
101
+ const methods = authMethodsByStorageType[newStorageType];
102
+ if (methods && methods.length > 0) {
103
+ const currentMethodAvailable = methods.some((m) => m.value === connection.value.authMethod);
104
+ if (!currentMethodAvailable) {
105
+ connection.value.authMethod = methods[0].value;
106
+ }
107
+ }
108
+ }
109
+ );
110
+ const isValid = computed(() => {
111
+ const baseValid = !!connection.value.connectionName && !!connection.value.storageType && !!connection.value.authMethod;
112
+ if (!baseValid)
113
+ return false;
114
+ if (connection.value.storageType === "s3") {
115
+ if (!connection.value.awsRegion)
116
+ return false;
117
+ if (connection.value.authMethod === "access_key") {
118
+ return !!connection.value.awsAccessKeyId && !!connection.value.awsSecretAccessKey;
119
+ } else if (connection.value.authMethod === "iam_role") {
120
+ return !!connection.value.awsRoleArn;
121
+ }
122
+ }
123
+ if (connection.value.storageType === "adls") {
124
+ if (!connection.value.azureAccountName)
125
+ return false;
126
+ if (connection.value.authMethod === "access_key") {
127
+ return !!connection.value.azureAccountKey;
128
+ } else if (connection.value.authMethod === "service_principal") {
129
+ return !!connection.value.azureTenantId && !!connection.value.azureClientId && !!connection.value.azureClientSecret;
130
+ }
131
+ }
132
+ return true;
133
+ });
134
+ const submitButtonText = computed(() => {
135
+ if (props.isSubmitting) {
136
+ return "Saving...";
137
+ }
138
+ return props.initialConnection ? "Update Connection" : "Create Connection";
139
+ });
140
+ const submitForm = () => {
141
+ if (isValid.value) {
142
+ emit("submit", connection.value);
143
+ }
144
+ };
145
+ return (_ctx, _cache) => {
146
+ return openBlock(), createElementBlock("form", {
147
+ class: "form",
148
+ onSubmit: withModifiers(submitForm, ["prevent"])
149
+ }, [
150
+ createBaseVNode("div", _hoisted_1$1, [
151
+ createBaseVNode("div", _hoisted_2$1, [
152
+ _cache[19] || (_cache[19] = createBaseVNode("label", {
153
+ for: "connection-name",
154
+ class: "form-label"
155
+ }, "Connection Name", -1)),
156
+ withDirectives(createBaseVNode("input", {
157
+ id: "connection-name",
158
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => connection.value.connectionName = $event),
159
+ type: "text",
160
+ class: "form-input",
161
+ placeholder: "my_cloud_storage",
162
+ required: ""
163
+ }, null, 512), [
164
+ [vModelText, connection.value.connectionName]
165
+ ])
166
+ ]),
167
+ createBaseVNode("div", _hoisted_3$1, [
168
+ _cache[21] || (_cache[21] = createBaseVNode("label", {
169
+ for: "storage-type",
170
+ class: "form-label"
171
+ }, "Storage Type", -1)),
172
+ withDirectives(createBaseVNode("select", {
173
+ id: "storage-type",
174
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => connection.value.storageType = $event),
175
+ class: "form-input",
176
+ required: ""
177
+ }, _cache[20] || (_cache[20] = [
178
+ createBaseVNode("option", { value: "s3" }, "AWS S3", -1),
179
+ createBaseVNode("option", { value: "adls" }, "Azure Data Lake Storage", -1)
180
+ ]), 512), [
181
+ [vModelSelect, connection.value.storageType]
182
+ ])
183
+ ]),
184
+ createBaseVNode("div", _hoisted_4$1, [
185
+ _cache[22] || (_cache[22] = createBaseVNode("label", {
186
+ for: "auth-method",
187
+ class: "form-label"
188
+ }, "Authentication Method", -1)),
189
+ withDirectives(createBaseVNode("select", {
190
+ id: "auth-method",
191
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => connection.value.authMethod = $event),
192
+ class: "form-input",
193
+ required: ""
194
+ }, [
195
+ (openBlock(true), createElementBlock(Fragment, null, renderList(availableAuthMethods.value, (method) => {
196
+ return openBlock(), createElementBlock("option", {
197
+ key: method.value,
198
+ value: method.value
199
+ }, toDisplayString(method.label), 9, _hoisted_5$1);
200
+ }), 128))
201
+ ], 512), [
202
+ [vModelSelect, connection.value.authMethod]
203
+ ])
204
+ ]),
205
+ connection.value.storageType === "s3" ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
206
+ createBaseVNode("div", _hoisted_6$1, [
207
+ _cache[23] || (_cache[23] = createBaseVNode("label", {
208
+ for: "aws-region",
209
+ class: "form-label"
210
+ }, "AWS Region", -1)),
211
+ withDirectives(createBaseVNode("input", {
212
+ id: "aws-region",
213
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => connection.value.awsRegion = $event),
214
+ type: "text",
215
+ class: "form-input",
216
+ placeholder: "us-east-1",
217
+ required: connection.value.storageType === "s3"
218
+ }, null, 8, _hoisted_7$1), [
219
+ [vModelText, connection.value.awsRegion]
220
+ ])
221
+ ]),
222
+ connection.value.authMethod === "access_key" ? (openBlock(), createElementBlock("div", _hoisted_8$1, [
223
+ _cache[24] || (_cache[24] = createBaseVNode("label", {
224
+ for: "aws-access-key-id",
225
+ class: "form-label"
226
+ }, "AWS Access Key ID", -1)),
227
+ withDirectives(createBaseVNode("input", {
228
+ id: "aws-access-key-id",
229
+ "onUpdate:modelValue": _cache[4] || (_cache[4] = ($event) => connection.value.awsAccessKeyId = $event),
230
+ type: "text",
231
+ class: "form-input",
232
+ placeholder: "AKIAIOSFODNN7EXAMPLE",
233
+ required: connection.value.authMethod === "access_key"
234
+ }, null, 8, _hoisted_9$1), [
235
+ [vModelText, connection.value.awsAccessKeyId]
236
+ ])
237
+ ])) : createCommentVNode("", true),
238
+ connection.value.authMethod === "access_key" ? (openBlock(), createElementBlock("div", _hoisted_10$1, [
239
+ _cache[25] || (_cache[25] = createBaseVNode("label", {
240
+ for: "aws-secret-access-key",
241
+ class: "form-label"
242
+ }, "AWS Secret Access Key", -1)),
243
+ createBaseVNode("div", _hoisted_11$1, [
244
+ withDirectives(createBaseVNode("input", {
245
+ id: "aws-secret-access-key",
246
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => connection.value.awsSecretAccessKey = $event),
247
+ type: showAwsSecret.value ? "text" : "password",
248
+ class: "form-input",
249
+ placeholder: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
250
+ required: connection.value.authMethod === "access_key"
251
+ }, null, 8, _hoisted_12$1), [
252
+ [vModelDynamic, connection.value.awsSecretAccessKey]
253
+ ]),
254
+ createBaseVNode("button", {
255
+ type: "button",
256
+ class: "toggle-visibility",
257
+ "aria-label": "Toggle AWS secret visibility",
258
+ onClick: _cache[6] || (_cache[6] = ($event) => showAwsSecret.value = !showAwsSecret.value)
259
+ }, [
260
+ createBaseVNode("i", {
261
+ class: normalizeClass(showAwsSecret.value ? "fa-solid fa-eye-slash" : "fa-solid fa-eye")
262
+ }, null, 2)
263
+ ])
264
+ ])
265
+ ])) : createCommentVNode("", true),
266
+ connection.value.authMethod === "iam_role" ? (openBlock(), createElementBlock("div", _hoisted_13$1, [
267
+ _cache[26] || (_cache[26] = createBaseVNode("label", {
268
+ for: "aws-role-arn",
269
+ class: "form-label"
270
+ }, "AWS Role ARN", -1)),
271
+ withDirectives(createBaseVNode("input", {
272
+ id: "aws-role-arn",
273
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => connection.value.awsRoleArn = $event),
274
+ type: "text",
275
+ class: "form-input",
276
+ placeholder: "arn:aws:iam::123456789012:role/MyRole",
277
+ required: connection.value.authMethod === "iam_role"
278
+ }, null, 8, _hoisted_14$1), [
279
+ [vModelText, connection.value.awsRoleArn]
280
+ ])
281
+ ])) : createCommentVNode("", true),
282
+ createBaseVNode("div", _hoisted_15$1, [
283
+ createBaseVNode("div", _hoisted_16$1, [
284
+ withDirectives(createBaseVNode("input", {
285
+ id: "aws-allow-unsafe-html",
286
+ "onUpdate:modelValue": _cache[8] || (_cache[8] = ($event) => connection.value.awsAllowUnsafeHtml = $event),
287
+ type: "checkbox",
288
+ class: "checkbox-input"
289
+ }, null, 512), [
290
+ [vModelCheckbox, connection.value.awsAllowUnsafeHtml]
291
+ ]),
292
+ _cache[27] || (_cache[27] = createBaseVNode("label", {
293
+ for: "aws-allow-unsafe-html",
294
+ class: "form-label"
295
+ }, "Allow Unsafe HTML", -1))
296
+ ])
297
+ ])
298
+ ], 64)) : createCommentVNode("", true),
299
+ connection.value.storageType === "adls" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
300
+ createBaseVNode("div", _hoisted_17$1, [
301
+ _cache[28] || (_cache[28] = createBaseVNode("label", {
302
+ for: "azure-account-name",
303
+ class: "form-label"
304
+ }, "Azure Account Name", -1)),
305
+ withDirectives(createBaseVNode("input", {
306
+ id: "azure-account-name",
307
+ "onUpdate:modelValue": _cache[9] || (_cache[9] = ($event) => connection.value.azureAccountName = $event),
308
+ type: "text",
309
+ class: "form-input",
310
+ placeholder: "mystorageaccount",
311
+ required: connection.value.storageType === "adls"
312
+ }, null, 8, _hoisted_18$1), [
313
+ [vModelText, connection.value.azureAccountName]
314
+ ])
315
+ ]),
316
+ connection.value.authMethod === "access_key" ? (openBlock(), createElementBlock("div", _hoisted_19$1, [
317
+ _cache[29] || (_cache[29] = createBaseVNode("label", {
318
+ for: "azure-account-key",
319
+ class: "form-label"
320
+ }, "Azure Account Key", -1)),
321
+ createBaseVNode("div", _hoisted_20$1, [
322
+ withDirectives(createBaseVNode("input", {
323
+ id: "azure-account-key",
324
+ "onUpdate:modelValue": _cache[10] || (_cache[10] = ($event) => connection.value.azureAccountKey = $event),
325
+ type: showAzureKey.value ? "text" : "password",
326
+ class: "form-input",
327
+ placeholder: "Account key",
328
+ required: connection.value.authMethod === "access_key"
329
+ }, null, 8, _hoisted_21$1), [
330
+ [vModelDynamic, connection.value.azureAccountKey]
331
+ ]),
332
+ createBaseVNode("button", {
333
+ type: "button",
334
+ class: "toggle-visibility",
335
+ "aria-label": "Toggle Azure key visibility",
336
+ onClick: _cache[11] || (_cache[11] = ($event) => showAzureKey.value = !showAzureKey.value)
337
+ }, [
338
+ createBaseVNode("i", {
339
+ class: normalizeClass(showAzureKey.value ? "fa-solid fa-eye-slash" : "fa-solid fa-eye")
340
+ }, null, 2)
341
+ ])
342
+ ])
343
+ ])) : createCommentVNode("", true),
344
+ connection.value.authMethod === "service_principal" ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
345
+ createBaseVNode("div", _hoisted_22, [
346
+ _cache[30] || (_cache[30] = createBaseVNode("label", {
347
+ for: "azure-tenant-id",
348
+ class: "form-label"
349
+ }, "Azure Tenant ID", -1)),
350
+ withDirectives(createBaseVNode("input", {
351
+ id: "azure-tenant-id",
352
+ "onUpdate:modelValue": _cache[12] || (_cache[12] = ($event) => connection.value.azureTenantId = $event),
353
+ type: "text",
354
+ class: "form-input",
355
+ placeholder: "12345678-1234-1234-1234-123456789012",
356
+ required: connection.value.authMethod === "service_principal"
357
+ }, null, 8, _hoisted_23), [
358
+ [vModelText, connection.value.azureTenantId]
359
+ ])
360
+ ]),
361
+ createBaseVNode("div", _hoisted_24, [
362
+ _cache[31] || (_cache[31] = createBaseVNode("label", {
363
+ for: "azure-client-id",
364
+ class: "form-label"
365
+ }, "Azure Client ID", -1)),
366
+ withDirectives(createBaseVNode("input", {
367
+ id: "azure-client-id",
368
+ "onUpdate:modelValue": _cache[13] || (_cache[13] = ($event) => connection.value.azureClientId = $event),
369
+ type: "text",
370
+ class: "form-input",
371
+ placeholder: "12345678-1234-1234-1234-123456789012",
372
+ required: connection.value.authMethod === "service_principal"
373
+ }, null, 8, _hoisted_25), [
374
+ [vModelText, connection.value.azureClientId]
375
+ ])
376
+ ]),
377
+ createBaseVNode("div", _hoisted_26, [
378
+ _cache[32] || (_cache[32] = createBaseVNode("label", {
379
+ for: "azure-client-secret",
380
+ class: "form-label"
381
+ }, "Azure Client Secret", -1)),
382
+ createBaseVNode("div", _hoisted_27, [
383
+ withDirectives(createBaseVNode("input", {
384
+ id: "azure-client-secret",
385
+ "onUpdate:modelValue": _cache[14] || (_cache[14] = ($event) => connection.value.azureClientSecret = $event),
386
+ type: showAzureSecret.value ? "text" : "password",
387
+ class: "form-input",
388
+ placeholder: "Client secret",
389
+ required: connection.value.authMethod === "service_principal"
390
+ }, null, 8, _hoisted_28), [
391
+ [vModelDynamic, connection.value.azureClientSecret]
392
+ ]),
393
+ createBaseVNode("button", {
394
+ type: "button",
395
+ class: "toggle-visibility",
396
+ "aria-label": "Toggle Azure secret visibility",
397
+ onClick: _cache[15] || (_cache[15] = ($event) => showAzureSecret.value = !showAzureSecret.value)
398
+ }, [
399
+ createBaseVNode("i", {
400
+ class: normalizeClass(showAzureSecret.value ? "fa-solid fa-eye-slash" : "fa-solid fa-eye")
401
+ }, null, 2)
402
+ ])
403
+ ])
404
+ ])
405
+ ], 64)) : createCommentVNode("", true)
406
+ ], 64)) : createCommentVNode("", true),
407
+ createBaseVNode("div", _hoisted_29, [
408
+ _cache[33] || (_cache[33] = createBaseVNode("label", {
409
+ for: "endpoint-url",
410
+ class: "form-label"
411
+ }, "Custom Endpoint URL (Optional)", -1)),
412
+ withDirectives(createBaseVNode("input", {
413
+ id: "endpoint-url",
414
+ "onUpdate:modelValue": _cache[16] || (_cache[16] = ($event) => connection.value.endpointUrl = $event),
415
+ type: "text",
416
+ class: "form-input",
417
+ placeholder: "https://custom-endpoint.example.com"
418
+ }, null, 512), [
419
+ [vModelText, connection.value.endpointUrl]
420
+ ])
421
+ ]),
422
+ createBaseVNode("div", _hoisted_30, [
423
+ createBaseVNode("div", _hoisted_31, [
424
+ withDirectives(createBaseVNode("input", {
425
+ id: "verify-ssl",
426
+ "onUpdate:modelValue": _cache[17] || (_cache[17] = ($event) => connection.value.verifySsl = $event),
427
+ type: "checkbox",
428
+ class: "checkbox-input"
429
+ }, null, 512), [
430
+ [vModelCheckbox, connection.value.verifySsl]
431
+ ]),
432
+ _cache[34] || (_cache[34] = createBaseVNode("label", {
433
+ for: "verify-ssl",
434
+ class: "form-label"
435
+ }, "Verify SSL", -1))
436
+ ])
437
+ ])
438
+ ]),
439
+ createBaseVNode("div", _hoisted_32, [
440
+ createBaseVNode("button", {
441
+ type: "button",
442
+ class: "btn btn-secondary",
443
+ onClick: _cache[18] || (_cache[18] = ($event) => _ctx.$emit("cancel"))
444
+ }, "Cancel"),
445
+ createBaseVNode("button", {
446
+ type: "submit",
447
+ class: "btn btn-primary",
448
+ disabled: !isValid.value || _ctx.isSubmitting
449
+ }, toDisplayString(submitButtonText.value), 9, _hoisted_33)
450
+ ])
451
+ ], 32);
452
+ };
453
+ }
454
+ });
455
+ const _hoisted_1 = { class: "cloud-connection-manager-container" };
456
+ const _hoisted_2 = { class: "card mb-3" };
457
+ const _hoisted_3 = { class: "card-header" };
458
+ const _hoisted_4 = { class: "card-title" };
459
+ const _hoisted_5 = { class: "card-content" };
460
+ const _hoisted_6 = {
461
+ key: 0,
462
+ class: "loading-state"
463
+ };
464
+ const _hoisted_7 = {
465
+ key: 1,
466
+ class: "empty-state"
467
+ };
468
+ const _hoisted_8 = {
469
+ key: 2,
470
+ class: "flex-col gap-2"
471
+ };
472
+ const _hoisted_9 = { class: "secret-info" };
473
+ const _hoisted_10 = { class: "secret-name" };
474
+ const _hoisted_11 = { class: "badge" };
475
+ const _hoisted_12 = { class: "badge auth-badge" };
476
+ const _hoisted_13 = { class: "connection-details" };
477
+ const _hoisted_14 = { key: 0 };
478
+ const _hoisted_15 = { key: 1 };
479
+ const _hoisted_16 = { key: 2 };
480
+ const _hoisted_17 = { key: 3 };
481
+ const _hoisted_18 = { class: "secret-actions" };
482
+ const _hoisted_19 = ["onClick"];
483
+ const _hoisted_20 = ["onClick"];
484
+ const _hoisted_21 = { class: "dialog-footer" };
485
+ const _sfc_main = /* @__PURE__ */ defineComponent({
486
+ __name: "CloudConnectionManager",
487
+ setup(__props) {
488
+ const connectionInterfaces = ref([]);
489
+ const isLoading = ref(true);
490
+ const dialogVisible = ref(false);
491
+ const deleteDialogVisible = ref(false);
492
+ const isEditing = ref(false);
493
+ const isSubmitting = ref(false);
494
+ const isDeleting = ref(false);
495
+ const connectionToDelete = ref("");
496
+ const activeConnection = ref(void 0);
497
+ const getStorageIcon = (storageType) => {
498
+ switch (storageType) {
499
+ case "s3":
500
+ return "fa-brands fa-aws";
501
+ case "adls":
502
+ return "fa-brands fa-microsoft";
503
+ default:
504
+ return "fa-solid fa-cloud";
505
+ }
506
+ };
507
+ const getStorageLabel = (storageType) => {
508
+ switch (storageType) {
509
+ case "s3":
510
+ return "AWS S3";
511
+ case "adls":
512
+ return "Azure ADLS";
513
+ default:
514
+ return storageType.toUpperCase();
515
+ }
516
+ };
517
+ const getAuthMethodLabel = (authMethod) => {
518
+ switch (authMethod) {
519
+ case "access_key":
520
+ return "Access Key";
521
+ case "iam_role":
522
+ return "IAM Role";
523
+ case "service_principal":
524
+ return "Service Principal";
525
+ case "managed_identity":
526
+ return "Managed Identity";
527
+ case "sas_token":
528
+ return "SAS Token";
529
+ case "aws-cli":
530
+ return "AWS CLI";
531
+ case "auto":
532
+ return "Auto";
533
+ default:
534
+ return authMethod;
535
+ }
536
+ };
537
+ const fetchConnections = async () => {
538
+ isLoading.value = true;
539
+ try {
540
+ connectionInterfaces.value = await fetchCloudStorageConnectionsInterfaces();
541
+ } catch (error) {
542
+ console.error("Error fetching connections:", error);
543
+ ElMessage.error("Failed to load cloud storage connections");
544
+ } finally {
545
+ isLoading.value = false;
546
+ }
547
+ };
548
+ const showAddModal = () => {
549
+ isEditing.value = false;
550
+ activeConnection.value = void 0;
551
+ dialogVisible.value = true;
552
+ };
553
+ const showEditModal = (connection) => {
554
+ isEditing.value = true;
555
+ activeConnection.value = {
556
+ connectionName: connection.connectionName,
557
+ storageType: connection.storageType,
558
+ authMethod: connection.authMethod,
559
+ // AWS fields
560
+ awsRegion: connection.awsRegion || "",
561
+ awsAccessKeyId: connection.awsAccessKeyId || "",
562
+ awsSecretAccessKey: "",
563
+ // Password is not returned from the API
564
+ awsRoleArn: connection.awsRoleArn || "",
565
+ awsAllowUnsafeHtml: connection.awsAllowUnsafeHtml,
566
+ // Azure fields
567
+ azureAccountName: connection.azureAccountName || "",
568
+ azureAccountKey: "",
569
+ // Password is not returned from the API
570
+ azureTenantId: connection.azureTenantId || "",
571
+ azureClientId: connection.azureClientId || "",
572
+ azureClientSecret: "",
573
+ // Password is not returned from the API
574
+ // Common fields
575
+ endpointUrl: connection.endpointUrl || "",
576
+ verifySsl: connection.verifySsl
577
+ };
578
+ dialogVisible.value = true;
579
+ };
580
+ const showDeleteModal = (connectionName) => {
581
+ connectionToDelete.value = connectionName;
582
+ deleteDialogVisible.value = true;
583
+ };
584
+ const handleFormSubmit = async (connection) => {
585
+ isSubmitting.value = true;
586
+ try {
587
+ await createCloudStorageConnectionApi(connection);
588
+ await fetchConnections();
589
+ dialogVisible.value = false;
590
+ ElMessage.success(`Connection ${isEditing.value ? "updated" : "created"} successfully`);
591
+ } catch (error) {
592
+ ElMessage.error(
593
+ `Failed to ${isEditing.value ? "update" : "create"} connection: ${error.message || "Unknown error"}`
594
+ );
595
+ } finally {
596
+ isSubmitting.value = false;
597
+ }
598
+ };
599
+ const handleDeleteConnection = async () => {
600
+ if (!connectionToDelete.value)
601
+ return;
602
+ isDeleting.value = true;
603
+ try {
604
+ await deleteCloudStorageConnectionApi(connectionToDelete.value);
605
+ await fetchConnections();
606
+ deleteDialogVisible.value = false;
607
+ ElMessage.success("Connection deleted successfully");
608
+ } catch (error) {
609
+ ElMessage.error("Failed to delete connection");
610
+ } finally {
611
+ isDeleting.value = false;
612
+ connectionToDelete.value = "";
613
+ }
614
+ };
615
+ const handleCloseDialog = (done) => {
616
+ if (isSubmitting.value)
617
+ return;
618
+ done();
619
+ };
620
+ const handleCloseDeleteDialog = (done) => {
621
+ if (isDeleting.value)
622
+ return;
623
+ done();
624
+ };
625
+ onMounted(() => {
626
+ fetchConnections();
627
+ });
628
+ return (_ctx, _cache) => {
629
+ return openBlock(), createElementBlock("div", _hoisted_1, [
630
+ _cache[18] || (_cache[18] = createBaseVNode("div", { class: "mb-3" }, [
631
+ createBaseVNode("h2", { class: "page-title" }, "Cloud Storage Connections"),
632
+ createBaseVNode("p", { class: "description-text" }, " Cloud storage connections allow you to connect to your cloud storage services like AWS S3 and Azure Data Lake Storage. Create and manage your connections here to use them in your data workflows. ")
633
+ ], -1)),
634
+ createBaseVNode("div", _hoisted_2, [
635
+ createBaseVNode("div", _hoisted_3, [
636
+ createBaseVNode("h3", _hoisted_4, "Your Connections (" + toDisplayString(connectionInterfaces.value.length) + ")", 1),
637
+ createBaseVNode("button", {
638
+ class: "btn btn-primary",
639
+ onClick: showAddModal
640
+ }, _cache[4] || (_cache[4] = [
641
+ createBaseVNode("i", { class: "fa-solid fa-plus" }, null, -1),
642
+ createTextVNode(" Add Connection ")
643
+ ]))
644
+ ]),
645
+ createBaseVNode("div", _hoisted_5, [
646
+ _cache[11] || (_cache[11] = createBaseVNode("div", { class: "info-box mb-3" }, [
647
+ createBaseVNode("i", { class: "fa-solid fa-info-circle" }),
648
+ createBaseVNode("div", null, [
649
+ createBaseVNode("p", null, [
650
+ createBaseVNode("strong", null, "What are cloud storage connections?")
651
+ ]),
652
+ createBaseVNode("p", null, " Cloud storage connections store the credentials and configuration needed to securely access your cloud storage services. Once set up, you can reuse these connections throughout your workflows without re-entering credentials. ")
653
+ ])
654
+ ], -1)),
655
+ isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_6, _cache[5] || (_cache[5] = [
656
+ createBaseVNode("div", { class: "loading-spinner" }, null, -1),
657
+ createBaseVNode("p", null, "Loading connections...", -1)
658
+ ]))) : connectionInterfaces.value.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_7, _cache[6] || (_cache[6] = [
659
+ createBaseVNode("i", { class: "fa-solid fa-cloud" }, null, -1),
660
+ createBaseVNode("p", null, "You haven't added any cloud storage connections yet", -1),
661
+ createBaseVNode("p", { class: "hint-text" }, ' Click the "Add Connection" button to create your first cloud storage connection. ', -1)
662
+ ]))) : (openBlock(), createElementBlock("div", _hoisted_8, [
663
+ (openBlock(true), createElementBlock(Fragment, null, renderList(connectionInterfaces.value, (connection) => {
664
+ return openBlock(), createElementBlock("div", {
665
+ key: connection.connectionName,
666
+ class: "secret-item"
667
+ }, [
668
+ createBaseVNode("div", _hoisted_9, [
669
+ createBaseVNode("div", _hoisted_10, [
670
+ createBaseVNode("i", {
671
+ class: normalizeClass(getStorageIcon(connection.storageType))
672
+ }, null, 2),
673
+ createBaseVNode("span", null, toDisplayString(connection.connectionName), 1),
674
+ createBaseVNode("span", _hoisted_11, toDisplayString(getStorageLabel(connection.storageType)), 1),
675
+ createBaseVNode("span", _hoisted_12, toDisplayString(getAuthMethodLabel(connection.authMethod)), 1)
676
+ ]),
677
+ createBaseVNode("div", _hoisted_13, [
678
+ connection.storageType === "s3" && connection.awsRegion ? (openBlock(), createElementBlock("span", _hoisted_14, " Region: " + toDisplayString(connection.awsRegion), 1)) : connection.storageType === "adls" && connection.azureAccountName ? (openBlock(), createElementBlock("span", _hoisted_15, " Account: " + toDisplayString(connection.azureAccountName), 1)) : createCommentVNode("", true),
679
+ connection.endpointUrl ? (openBlock(), createElementBlock("span", _hoisted_16, _cache[7] || (_cache[7] = [
680
+ createBaseVNode("span", { class: "separator" }, "•", -1),
681
+ createTextVNode(" Custom endpoint ")
682
+ ]))) : createCommentVNode("", true),
683
+ !connection.verifySsl ? (openBlock(), createElementBlock("span", _hoisted_17, _cache[8] || (_cache[8] = [
684
+ createBaseVNode("span", { class: "separator" }, "•", -1),
685
+ createTextVNode(" SSL verification disabled ")
686
+ ]))) : createCommentVNode("", true)
687
+ ])
688
+ ]),
689
+ createBaseVNode("div", _hoisted_18, [
690
+ createBaseVNode("button", {
691
+ type: "button",
692
+ class: "btn btn-secondary",
693
+ onClick: ($event) => showEditModal(connection)
694
+ }, _cache[9] || (_cache[9] = [
695
+ createBaseVNode("i", { class: "fa-solid fa-edit" }, null, -1),
696
+ createBaseVNode("span", null, "Modify", -1)
697
+ ]), 8, _hoisted_19),
698
+ connection.connectionName ? (openBlock(), createElementBlock("button", {
699
+ key: 0,
700
+ type: "button",
701
+ class: "btn btn-danger",
702
+ onClick: ($event) => showDeleteModal(connection.connectionName)
703
+ }, _cache[10] || (_cache[10] = [
704
+ createBaseVNode("i", { class: "fa-solid fa-trash-alt" }, null, -1),
705
+ createBaseVNode("span", null, "Delete", -1)
706
+ ]), 8, _hoisted_20)) : createCommentVNode("", true)
707
+ ])
708
+ ]);
709
+ }), 128))
710
+ ]))
711
+ ])
712
+ ]),
713
+ createVNode(unref(ElDialog), {
714
+ modelValue: dialogVisible.value,
715
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => dialogVisible.value = $event),
716
+ title: isEditing.value ? "Edit Cloud Storage Connection" : "Add Cloud Storage Connection",
717
+ width: "600px",
718
+ "before-close": handleCloseDialog
719
+ }, {
720
+ default: withCtx(() => [
721
+ _cache[12] || (_cache[12] = createBaseVNode("div", { class: "modal-description mb-3" }, [
722
+ createBaseVNode("p", null, " Configure your cloud storage connection details. Choose your storage provider and authentication method, then provide the required credentials. ")
723
+ ], -1)),
724
+ createVNode(_sfc_main$1, {
725
+ "initial-connection": activeConnection.value,
726
+ "is-submitting": isSubmitting.value,
727
+ onSubmit: handleFormSubmit,
728
+ onCancel: _cache[0] || (_cache[0] = ($event) => dialogVisible.value = false)
729
+ }, null, 8, ["initial-connection", "is-submitting"])
730
+ ]),
731
+ _: 1,
732
+ __: [12]
733
+ }, 8, ["modelValue", "title"]),
734
+ createVNode(unref(ElDialog), {
735
+ modelValue: deleteDialogVisible.value,
736
+ "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => deleteDialogVisible.value = $event),
737
+ title: "Delete Connection",
738
+ width: "400px",
739
+ "before-close": handleCloseDeleteDialog
740
+ }, {
741
+ footer: withCtx(() => [
742
+ createBaseVNode("div", _hoisted_21, [
743
+ createVNode(unref(ElButton), {
744
+ onClick: _cache[2] || (_cache[2] = ($event) => deleteDialogVisible.value = false)
745
+ }, {
746
+ default: withCtx(() => _cache[15] || (_cache[15] = [
747
+ createTextVNode("Cancel")
748
+ ])),
749
+ _: 1,
750
+ __: [15]
751
+ }),
752
+ createVNode(unref(ElButton), {
753
+ type: "danger",
754
+ loading: isDeleting.value,
755
+ onClick: handleDeleteConnection
756
+ }, {
757
+ default: withCtx(() => _cache[16] || (_cache[16] = [
758
+ createTextVNode(" Delete ")
759
+ ])),
760
+ _: 1,
761
+ __: [16]
762
+ }, 8, ["loading"])
763
+ ])
764
+ ]),
765
+ default: withCtx(() => [
766
+ createBaseVNode("p", null, [
767
+ _cache[13] || (_cache[13] = createTextVNode(" Are you sure you want to delete the connection ")),
768
+ createBaseVNode("strong", null, toDisplayString(connectionToDelete.value), 1),
769
+ _cache[14] || (_cache[14] = createTextVNode("? "))
770
+ ]),
771
+ _cache[17] || (_cache[17] = createBaseVNode("p", { class: "warning-text" }, " This action cannot be undone and may affect any processes using this connection. ", -1))
772
+ ]),
773
+ _: 1,
774
+ __: [17]
775
+ }, 8, ["modelValue"])
776
+ ]);
777
+ };
778
+ }
779
+ });
780
+ const CloudConnectionManager_vue_vue_type_style_index_0_scoped_23359c71_lang = "";
781
+ const CloudConnectionManager = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-23359c71"]]);
782
+ export {
783
+ CloudConnectionManager as default
784
+ };