@kong-ui-public/entities-gateway-services 3.11.31-pr.2030.ed70890b6.0 → 3.11.31-pr.2172.668d1b50a.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.
Files changed (38) hide show
  1. package/dist/entities-gateway-services.es.js +2392 -0
  2. package/dist/entities-gateway-services.umd.js +1 -0
  3. package/dist/style.css +1 -0
  4. package/dist/types/components/GatewayServiceConfigCard.vue.d.ts +62 -0
  5. package/dist/types/components/GatewayServiceConfigCard.vue.d.ts.map +1 -0
  6. package/dist/types/components/GatewayServiceForm.vue.d.ts +101 -0
  7. package/dist/types/components/GatewayServiceForm.vue.d.ts.map +1 -0
  8. package/dist/types/components/GatewayServiceList.vue.d.ts +136 -0
  9. package/dist/types/components/GatewayServiceList.vue.d.ts.map +1 -0
  10. package/dist/types/components/LegacyGatewayServiceForm.vue.d.ts +86 -0
  11. package/dist/types/components/LegacyGatewayServiceForm.vue.d.ts.map +1 -0
  12. package/dist/types/composables/getPortFromProtocol.d.ts +4 -0
  13. package/dist/types/composables/getPortFromProtocol.d.ts.map +1 -0
  14. package/dist/types/composables/index.d.ts +10 -0
  15. package/dist/types/composables/index.d.ts.map +1 -0
  16. package/dist/types/composables/useI18n.d.ts +9 -0
  17. package/dist/types/composables/useI18n.d.ts.map +1 -0
  18. package/dist/types/composables/useUrlValidators.d.ts +8 -0
  19. package/dist/types/composables/useUrlValidators.d.ts.map +1 -0
  20. package/dist/types/constants.d.ts +15 -0
  21. package/dist/types/constants.d.ts.map +1 -0
  22. package/dist/types/gateway-services-endpoints.d.ts +24 -0
  23. package/dist/types/gateway-services-endpoints.d.ts.map +1 -0
  24. package/dist/types/index.d.ts +8 -0
  25. package/dist/types/index.d.ts.map +1 -0
  26. package/dist/types/types/gateway-service-config-card.d.ts +28 -0
  27. package/dist/types/types/gateway-service-config-card.d.ts.map +1 -0
  28. package/dist/types/types/gateway-service-form.d.ts +76 -0
  29. package/dist/types/types/gateway-service-form.d.ts.map +1 -0
  30. package/dist/types/types/gateway-service-list.d.ts +36 -0
  31. package/dist/types/types/gateway-service-list.d.ts.map +1 -0
  32. package/dist/types/types/index.d.ts +4 -0
  33. package/dist/types/types/index.d.ts.map +1 -0
  34. package/dist/types/utils/index.d.ts +2 -0
  35. package/dist/types/utils/index.d.ts.map +1 -0
  36. package/dist/types/utils/urlValidator.d.ts +4 -0
  37. package/dist/types/utils/urlValidator.d.ts.map +1 -0
  38. package/package.json +5 -5
@@ -0,0 +1,2392 @@
1
+ import { defineComponent as Le, computed as k, ref as D, watch as Fe, onBeforeMount as tt, resolveComponent as W, openBlock as S, createElementBlock as F, createVNode as u, unref as l, createSlots as Te, withCtx as m, createBlock as $e, Teleport as je, createElementVNode as I, createCommentVNode as M, createTextVNode as Z, toDisplayString as P, withModifiers as De, reactive as Me, onMounted as He, renderSlot as Ze, Transition as We, Fragment as lt, renderList as ot } from "vue";
2
+ import { useRouter as qe } from "vue-router";
3
+ import { BookIcon as ze, AddIcon as it, ServicesIcon as rt } from "@kong/icons";
4
+ import { createI18n as st, i18nTComponent as at } from "@kong-ui-public/i18n";
5
+ import { useAxios as Ge, useTableState as nt, useFetcher as ct, useDeleteUrlBuilder as dt, FetcherStatus as ut, EntityBaseTable as ft, EntityFilter as pt, PermissionsWrapper as Ue, TableTags as mt, EntityEmptyState as vt, EntityToggleModal as gt, EntityDeleteModal as yt, EntityTypes as _t, useErrors as Je, useValidators as Qe, EntityBaseFormType as Be, useGatewayFeatureSupported as Xe, EntityBaseForm as Ye, SupportedEntityType as Oe, EntityFormSection as Ke, useHelpers as et, ConfigurationSchemaSection as Ae, ConfigurationSchemaType as bt, EntityBaseConfigCard as ht } from "@kong-ui-public/entities-shared";
6
+ const wt = {
7
+ create: "New gateway service",
8
+ serverless_create: "Add a Service",
9
+ copy_id: "Copy ID",
10
+ copy_json: "Copy JSON",
11
+ edit: "Edit",
12
+ clear: "Clear",
13
+ view: "View Details",
14
+ delete: {
15
+ title: "Delete a Gateway Service",
16
+ description: "Deleting this Gateway Service will also remove any associated plugins. This action cannot be reversed.",
17
+ menu_label: "Delete"
18
+ }
19
+ }, kt = {
20
+ placeholder: {
21
+ konnect: "Filter by name",
22
+ kongManager: "Filter by exact name or ID"
23
+ }
24
+ }, Vt = {
25
+ title: "Gateway Services",
26
+ list: {
27
+ toolbar_actions: {
28
+ new_gateway_service: "New gateway service"
29
+ },
30
+ table_headers: {
31
+ name: "Name",
32
+ control_plane: "Control Plane",
33
+ protocol: "Protocol",
34
+ host: "Host",
35
+ port: "Port",
36
+ path: "Path",
37
+ enabled: "Enabled",
38
+ tags: "Tags",
39
+ id: "ID",
40
+ created_at: "Created At",
41
+ updated_at: "Last Modified"
42
+ },
43
+ empty_state: {
44
+ title: "Configure a New Gateway Service",
45
+ description: "Gateway services are used to proxy traffic.",
46
+ serverless_title: "Configure your first Gateway Service"
47
+ }
48
+ },
49
+ empty_state_v2: {
50
+ create: "New gateway service",
51
+ title: "Configure your first gateway service",
52
+ group: "Services created in gateways within this group will automatically appear here.",
53
+ description: "Gateway services represent backend APIs or microservices that receive traffic routed through the gateway."
54
+ },
55
+ form: {
56
+ buttons: {
57
+ try_sample: "Try sample API"
58
+ },
59
+ errors: {
60
+ host: {
61
+ empty: "Host cannot be empty",
62
+ invalid: "Invalid host"
63
+ },
64
+ port: {
65
+ type: "Port must be a number",
66
+ invalid: "Port must be between 0 and 65535"
67
+ },
68
+ path: {
69
+ prefix: "Path must begin with /",
70
+ invalid: "Path should not include characters outside of the reserved list of RFC 3986"
71
+ },
72
+ protocol: {
73
+ empty: "Protocol cannot be empty",
74
+ invalid: "Protocol - value must be one of http, https, grpc, grpcs, tcp, udp, tls, tls_passthrough, ws, wss"
75
+ },
76
+ url: {
77
+ invalid: "The URL must follow a valid format. Example: https://api.kong-air.com/flights"
78
+ }
79
+ },
80
+ sections: {
81
+ general: {
82
+ title: "General Information",
83
+ description: "Provide a name and tags to help identify and manage this service."
84
+ },
85
+ keys: {
86
+ title: "Service endpoint",
87
+ description: "Define where this service should send requests.",
88
+ checkedGroupLabel: "Choose how and where to send traffic",
89
+ urlLabel: "Full URL",
90
+ checkedGroupAltLabel: "Protocol, host, port and path",
91
+ url: {
92
+ label: "Full URL",
93
+ description: "Define the service using a single, complete API URL for simple setup."
94
+ },
95
+ protocol: {
96
+ label: "Protocol, host, port, and path",
97
+ description: "Manually specify each component of the API’s URL for advanced configurations."
98
+ },
99
+ viewAdvancedFields: "View advanced fields"
100
+ }
101
+ },
102
+ fields: {
103
+ upstream_url: {
104
+ label: "Full URL",
105
+ placeholder: "e.g. https://api.kong-air.com/flights",
106
+ tooltip_for_konnect: "This is the URL of the API you will manage in Konnect.",
107
+ tooltip_for_km: "This is the URL of the API you will manage in Kong Gateway."
108
+ },
109
+ name: {
110
+ label: "Name",
111
+ placeholder: "Enter a unique name",
112
+ tooltip: "The Service name."
113
+ },
114
+ protocol: {
115
+ label: "Protocol",
116
+ tooltip: "The protocol used to communicate with the upstream.",
117
+ options: {
118
+ http: "http",
119
+ https: "https",
120
+ tcp: "tcp",
121
+ tls: "tls",
122
+ tls_passthrough: "tls_passthrough",
123
+ grpc: "grpc",
124
+ grpcs: "grpcs",
125
+ ws: "ws",
126
+ wss: "wss",
127
+ udp: "udp"
128
+ }
129
+ },
130
+ host: {
131
+ label: "Host",
132
+ placeholder: "e.g. api.kong-air.com",
133
+ tooltip: "The host of the upstream server. Note that the host value is case sensitive."
134
+ },
135
+ path: {
136
+ label: "Path",
137
+ placeholder: "e.g. /sample",
138
+ tooltip: "The path to be used in request to the upstream server."
139
+ },
140
+ port: {
141
+ label: "Port",
142
+ tooltip: "The upstream server port."
143
+ },
144
+ retries: {
145
+ label: "Retries",
146
+ tooltip: "The number of retries to execute upon failure to proxy."
147
+ },
148
+ connect_timeout: {
149
+ label: "Connection timeout",
150
+ tooltip: "The timeout in milliseconds for establishing a connection to the upstream server."
151
+ },
152
+ write_timeout: {
153
+ label: "Write timeout",
154
+ tooltip: "The timeout in milliseconds between two successive write operations for transmitting a request to the upstream server."
155
+ },
156
+ read_timeout: {
157
+ label: "Read timeout",
158
+ tooltip: "The timeout in milliseconds between two successive read operations for transmitting a request to the upstream server."
159
+ },
160
+ client_certificate: {
161
+ label: "Client certificate",
162
+ placeholder: "Enter a Certificate ID",
163
+ tooltip: "Certificate to be used as client certificate while TLS handshaking to the upstream server."
164
+ },
165
+ ca_certificates: {
166
+ label: "CA certificates",
167
+ placeholder: "Enter a comma separated list of CA Certificate IDs",
168
+ tooltip: "Array of {code1} object UUIDs that are used to build the trust store while verifying upstream server's TLS certificate. If set to {code2} when Nginx default is respected. If default CA list in Nginx are not specified and TLS verification is enabled, then handshake with upstream server will always fail (because no CA are trusted).",
169
+ code1: "CA Certificate",
170
+ code2: "null"
171
+ },
172
+ tls_verify_enabled: {
173
+ label: "TLS verify",
174
+ help: "If unchecked, use default system setting",
175
+ tooltip: "Whether to enable verification of upstream server TLS certificate. If set to {code1}, then the Nginx default is respected.",
176
+ code1: "null"
177
+ },
178
+ tls_verify_option: {
179
+ unset: {
180
+ display: "Use default system setting"
181
+ },
182
+ true: {
183
+ label: "True",
184
+ display: "On"
185
+ },
186
+ false: {
187
+ label: "False",
188
+ display: "Off"
189
+ }
190
+ },
191
+ tags: {
192
+ label: "Tags",
193
+ tooltip: "An optional set of strings associated with the Service for grouping and filtering.",
194
+ placeholder: "Enter a list of tags separated by comma",
195
+ help: "e.g. tag1, tag2, tag3",
196
+ collapse: "Add tags"
197
+ },
198
+ enabled: {
199
+ label: "Enabled",
200
+ tooltip: "Whether the Service is active. If set to {false}, the proxy behavior will be as if any routes attached to it do not exist (404). Default: {true}.",
201
+ false: "false",
202
+ true: "true"
203
+ }
204
+ }
205
+ }
206
+ }, Ct = {
207
+ general: "Gateway Services could not be retrieved",
208
+ delete: "The gateway service could not be deleted at this time.",
209
+ copy: "Failed to copy to clipboard",
210
+ urlErrorMessage: "Error: invalid URL"
211
+ }, St = {
212
+ success: "Copied {val} to clipboard",
213
+ success_brief: "Successfully copied to clipboard"
214
+ }, It = {
215
+ gateway_services: "gateway services"
216
+ }, Pt = {
217
+ actions: wt,
218
+ search: kt,
219
+ gateway_services: Vt,
220
+ errors: Ct,
221
+ copy: St,
222
+ glossary: It
223
+ };
224
+ function Et() {
225
+ const n = st("en-us", Pt);
226
+ return {
227
+ i18n: n,
228
+ i18nT: at(n)
229
+ // Translation component <i18n-t>
230
+ };
231
+ }
232
+ function Ut() {
233
+ return {
234
+ getPortFromProtocol: (X, _) => {
235
+ const v = [80, 443], a = Number(_);
236
+ if ((a || a === 0) && !v.includes(a))
237
+ return a;
238
+ switch (X) {
239
+ case "grpcs":
240
+ case "tls":
241
+ case "https":
242
+ case "wss":
243
+ return 443;
244
+ case "grpc":
245
+ case "tcp":
246
+ case "http":
247
+ case "ws":
248
+ default:
249
+ return 80;
250
+ }
251
+ }
252
+ };
253
+ }
254
+ function $t() {
255
+ const { i18n: { t: n } } = se.useI18n();
256
+ return {
257
+ validateHost: (h) => {
258
+ if (!h || h.trim() === "") return n("gateway_services.form.errors.host.empty");
259
+ const L = /^(?!:\/\/)([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.([a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?))*)(\.[a-zA-Z]{1,63})?$/;
260
+ return /^((25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])\.){3}(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])$/.test(h) || L.test(h) ? "" : n("gateway_services.form.errors.host.invalid");
261
+ },
262
+ validateProtocol: (h, L) => !h || h.trim() === "" ? n("gateway_services.form.errors.protocol.empty") : (h = h.slice(0, -1), L.find((r) => {
263
+ if (r.value === h) return r;
264
+ }) === void 0 ? n("gateway_services.form.errors.protocol.invalid") : ""),
265
+ validatePath: (h) => !h || h === "" ? "" : h.startsWith("/") ? /[^A-Za-z0-9\-._~:/?#[\]@!$&'()*+,;=%]/.test(h) ? n("gateway_services.form.errors.path.invalid") : "" : n("gateway_services.form.errors.path.prefix"),
266
+ validatePort: (h) => {
267
+ if (h == null || h === "")
268
+ return "";
269
+ const L = typeof h == "string" ? parseInt(h, 10) : h;
270
+ return isNaN(L) ? n("gateway_services.form.errors.port.type") : L < 0 || L > 65535 ? n("gateway_services.form.errors.port.invalid") : "";
271
+ }
272
+ };
273
+ }
274
+ const se = {
275
+ useI18n: Et,
276
+ usePortFromProtocol: Ut,
277
+ useUrlValidators: $t
278
+ }, xe = "/v2/control-planes/{controlPlaneId}/core-entities", Re = "/{workspace}", pe = {
279
+ list: {
280
+ konnect: {
281
+ all: `${xe}/services`
282
+ },
283
+ kongManager: {
284
+ all: `${Re}/services`
285
+ }
286
+ },
287
+ form: {
288
+ konnect: {
289
+ create: `${xe}/services`,
290
+ validate: `${xe}/v1/schemas/json/service/validate`,
291
+ edit: `${xe}/services/{id}`
292
+ },
293
+ kongManager: {
294
+ create: `${Re}/services`,
295
+ validate: `${Re}/schemas/services/validate`,
296
+ edit: `${Re}/services/{id}`
297
+ }
298
+ }
299
+ }, Ft = "#00abd2", At = "24px", xt = { class: "kong-ui-entities-gateway-services-list" }, Rt = { class: "button-row" }, Tt = { class: "empty-state-icon-gateway" }, Mt = { key: 1 }, Bt = /* @__PURE__ */ Le({
300
+ __name: "GatewayServiceList",
301
+ props: {
302
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
303
+ config: {
304
+ type: Object,
305
+ required: !0,
306
+ validator: (n) => !(!n || !["konnect", "kongManager"].includes(n == null ? void 0 : n.app) || !n.createRoute || !n.getViewRoute || !n.getEditRoute || n.app === "kongManager" && !n.isExactMatch && !n.filterSchema)
307
+ },
308
+ // used to override the default identifier for the cache entry
309
+ cacheIdentifier: {
310
+ type: String,
311
+ default: ""
312
+ },
313
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can create a new entity */
314
+ canCreate: {
315
+ type: Function,
316
+ required: !1,
317
+ default: async () => !0
318
+ },
319
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can delete a given entity */
320
+ canDelete: {
321
+ type: Function,
322
+ required: !1,
323
+ default: async () => !0
324
+ },
325
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can edit a given entity */
326
+ canEdit: {
327
+ type: Function,
328
+ required: !1,
329
+ default: async () => !0
330
+ },
331
+ /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can retrieve (view details) a given entity */
332
+ canRetrieve: {
333
+ type: Function,
334
+ required: !1,
335
+ default: async () => !0
336
+ },
337
+ /** default to false, setting to true will teleport the toolbar button to the destination in the consuming app */
338
+ useActionOutside: {
339
+ type: Boolean,
340
+ default: !1
341
+ },
342
+ /** user is onboarding, use onboarding text */
343
+ isServerless: {
344
+ type: Boolean,
345
+ default: !1
346
+ },
347
+ /**
348
+ * Enables the new empty state design, this prop can be removed when
349
+ * the khcp-14756-empty-states-m2 FF is removed.
350
+ */
351
+ enableV2EmptyStates: {
352
+ type: Boolean,
353
+ default: !1
354
+ }
355
+ },
356
+ emits: ["error", "click:learn-more", "copy:success", "copy:error", "delete:success", "toggle:success"],
357
+ setup(n, { emit: X }) {
358
+ var c;
359
+ const _ = X, v = n, { i18n: { t: a, formatUnixTimeStamp: h } } = se.useI18n(), L = qe(), { axiosInstance: Q } = Ge((c = v.config) == null ? void 0 : c.axiosRequestConfig), { hasRecords: r, handleStateChange: j } = nt(() => N.value), A = k(() => r.value && v.config.app === "konnect"), Se = k(() => !v.enableV2EmptyStates && v.config.app === "konnect"), be = k(() => v.config.app !== "kongManager" || !!v.config.disableSorting), Y = {
360
+ // the Name column is non-hidable
361
+ name: { label: a("gateway_services.list.table_headers.name"), searchable: !0, sortable: !0, hidable: !1 },
362
+ ...v.config.showControlPlaneColumn ? { control_plane: { label: a("gateway_services.list.table_headers.control_plane") } } : {},
363
+ protocol: { label: a("gateway_services.list.table_headers.protocol"), searchable: !0, sortable: !0 },
364
+ host: { label: a("gateway_services.list.table_headers.host"), searchable: !0, sortable: !0 },
365
+ port: { label: a("gateway_services.list.table_headers.port"), searchable: !0, sortable: !0 },
366
+ path: { label: a("gateway_services.list.table_headers.path"), searchable: !0, sortable: !0 },
367
+ enabled: { label: a("gateway_services.list.table_headers.enabled"), searchable: !0, sortable: !0 },
368
+ tags: { label: a("gateway_services.list.table_headers.tags"), sortable: !1 },
369
+ updated_at: { label: a("gateway_services.list.table_headers.updated_at"), sortable: !0 },
370
+ created_at: { label: a("gateway_services.list.table_headers.created_at"), sortable: !0 }
371
+ }, he = {
372
+ columnVisibility: {
373
+ created_at: !1
374
+ }
375
+ }, ae = Y, x = k(() => {
376
+ var p, C;
377
+ let g = `${v.config.apiBaseUrl}${pe.list[v.config.app].all}`;
378
+ return v.config.app === "konnect" ? g = g.replace(/{controlPlaneId}/gi, ((p = v.config) == null ? void 0 : p.controlPlaneId) || "") : v.config.app === "kongManager" && (g = g.replace(/\/{workspace}/gi, (C = v.config) != null && C.workspace ? `/${v.config.workspace}` : "")), g;
379
+ }), me = k(() => v.config.apiBaseUrl.startsWith("/") ? new URL(`${window.location.origin}${x.value}`) : new URL(x.value)), N = D(""), Ie = k(() => {
380
+ const g = v.config.app === "konnect" || v.config.isExactMatch;
381
+ if (g)
382
+ return {
383
+ isExactMatch: g,
384
+ placeholder: a(`search.placeholder.${v.config.app}`)
385
+ };
386
+ const { name: p, enabled: C, protocol: K, host: ue, port: G, path: fe } = Y;
387
+ return {
388
+ isExactMatch: g,
389
+ fields: { name: p, enabled: C, protocol: K, host: ue, port: G, path: fe },
390
+ schema: v.config.filterSchema
391
+ };
392
+ }), {
393
+ fetcher: o,
394
+ fetcherState: w,
395
+ fetcherCacheKey: ie
396
+ } = ct(k(() => ({ ...v.config, cacheIdentifier: v.cacheIdentifier })), x), ve = () => {
397
+ N.value = "";
398
+ }, we = () => {
399
+ ie.value++;
400
+ }, e = D(null), $ = k(() => ({
401
+ ctaPath: v.config.createRoute,
402
+ ctaText: R.value ? v.isServerless ? a("actions.serverless_create") : a("actions.create") : void 0,
403
+ message: `${a("gateway_services.list.empty_state.description")}${v.config.additionMessageForEmptyState ? ` ${v.config.additionMessageForEmptyState}` : ""}`,
404
+ title: R.value ? v.isServerless ? a("gateway_services.list.empty_state.serverless_title") : a("gateway_services.list.empty_state.title") : a("gateway_services.title")
405
+ })), ne = D(!1), q = D(null), re = k(() => {
406
+ const g = {
407
+ action: "disable",
408
+ id: "",
409
+ name: ""
410
+ };
411
+ if (q.value) {
412
+ const { enabled: p, id: C, name: K } = q.value;
413
+ g.action = p ? "disable" : "enable", g.id = C, g.name = K || C;
414
+ }
415
+ return g;
416
+ }), Pe = (g) => {
417
+ ne.value = !0, q.value = g;
418
+ }, oe = () => {
419
+ ne.value = !1, q.value = null;
420
+ }, ke = async () => {
421
+ var K, ue;
422
+ if (!await ((K = v.canEdit) == null ? void 0 : K.call(v, q.value)) || !q.value)
423
+ return;
424
+ const p = `${me.value.href}/${q.value.id}`, C = !q.value.enabled;
425
+ try {
426
+ const { data: G } = ((ue = v.config) == null ? void 0 : ue.app) === "konnect" ? await Q.put(p, { ...q.value, enabled: C }) : await Q.patch(p, { ...q.value, enabled: C });
427
+ _("toggle:success", G), q.value.enabled = C;
428
+ } catch (G) {
429
+ _("error", G);
430
+ }
431
+ }, Ve = (g) => {
432
+ v.config.getControlPlaneRoute && L.push(v.config.getControlPlaneRoute(g));
433
+ }, ce = async (g, p) => {
434
+ const C = g.id;
435
+ if (!await p(C)) {
436
+ _("copy:error", {
437
+ entity: g,
438
+ field: "id",
439
+ message: a("errors.copy")
440
+ });
441
+ return;
442
+ }
443
+ _("copy:success", {
444
+ entity: g,
445
+ field: "id",
446
+ message: a("copy.success", { val: C })
447
+ });
448
+ }, ge = async (g, p) => {
449
+ const C = JSON.stringify(g);
450
+ if (!await p(C)) {
451
+ _("copy:error", {
452
+ entity: g,
453
+ message: a("errors.copy")
454
+ });
455
+ return;
456
+ }
457
+ _("copy:success", {
458
+ entity: g,
459
+ message: a("copy.success_brief")
460
+ });
461
+ }, ye = async (g) => {
462
+ var C;
463
+ await ((C = v.canRetrieve) == null ? void 0 : C.call(v, g)) && L.push(v.config.getViewRoute(g.id));
464
+ }, Ee = (g) => ({
465
+ label: a("actions.view"),
466
+ to: v.config.getViewRoute(g)
467
+ }), ee = (g) => ({
468
+ label: a("actions.edit"),
469
+ to: v.config.getEditRoute(g)
470
+ }), z = D(void 0), H = D(!1), te = D(!1), de = D(""), i = dt(v.config, x.value), f = (g) => {
471
+ z.value = g, H.value = !0, de.value = "";
472
+ }, V = () => {
473
+ H.value = !1, z.value = void 0;
474
+ }, J = async () => {
475
+ var g, p, C;
476
+ if ((g = z.value) != null && g.id) {
477
+ te.value = !0;
478
+ try {
479
+ await Q.delete(i(z.value.id)), _("delete:success", z.value), V(), ie.value++;
480
+ } catch (K) {
481
+ de.value = ((C = (p = K.response) == null ? void 0 : p.data) == null ? void 0 : C.message) || K.message || a("errors.delete"), _("error", K);
482
+ } finally {
483
+ te.value = !1;
484
+ }
485
+ }
486
+ }, B = () => {
487
+ L.push(v.config.createRoute);
488
+ };
489
+ Fe(w, (g) => {
490
+ var p, C, K;
491
+ if (g.status === ut.Error) {
492
+ e.value = {
493
+ title: a("errors.general")
494
+ }, (K = (C = (p = g.error) == null ? void 0 : p.response) == null ? void 0 : C.data) != null && K.message && (e.value.message = g.error.response.data.message), _("error", g.error);
495
+ return;
496
+ }
497
+ e.value = null;
498
+ });
499
+ const R = D(!1);
500
+ return tt(async () => {
501
+ R.value = await v.canCreate();
502
+ }), (g, p) => {
503
+ const C = W("KButton"), K = W("KBadge"), ue = W("KInputSwitch"), G = W("KDropdownItem"), fe = W("KClipboardProvider");
504
+ return S(), F("div", xt, [
505
+ u(l(ft), {
506
+ "cache-identifier": n.cacheIdentifier,
507
+ "default-table-preferences": he,
508
+ "disable-sorting": be.value,
509
+ "empty-state-options": $.value,
510
+ "enable-entity-actions": "",
511
+ "error-message": e.value,
512
+ fetcher: l(o),
513
+ "fetcher-cache-key": l(ie),
514
+ "pagination-type": "offset",
515
+ "preferences-storage-key": "kong-ui-entities-gateway-services-list",
516
+ query: N.value,
517
+ "table-headers": l(ae),
518
+ onClearSearchInput: ve,
519
+ "onClick:row": p[5] || (p[5] = (b) => ye(b)),
520
+ onSort: we,
521
+ onState: l(j)
522
+ }, Te({
523
+ "toolbar-filter": m(() => [
524
+ u(l(pt), {
525
+ modelValue: N.value,
526
+ "onUpdate:modelValue": p[0] || (p[0] = (b) => N.value = b),
527
+ config: Ie.value
528
+ }, null, 8, ["modelValue", "config"])
529
+ ]),
530
+ "toolbar-button": m(() => [
531
+ (S(), $e(je, {
532
+ disabled: !n.useActionOutside,
533
+ to: "#kong-ui-app-page-header-action-button"
534
+ }, [
535
+ I("div", Rt, [
536
+ A.value ? (S(), $e(C, {
537
+ key: 0,
538
+ appearance: "secondary",
539
+ class: "open-learning-hub",
540
+ "data-testid": "gateway-services-learn-more-button",
541
+ icon: "",
542
+ onClick: p[1] || (p[1] = (b) => g.$emit("click:learn-more"))
543
+ }, {
544
+ default: m(() => [
545
+ u(l(ze), { decorative: "" })
546
+ ]),
547
+ _: 1
548
+ })) : M("", !0),
549
+ u(l(Ue), {
550
+ "auth-function": () => n.canCreate()
551
+ }, {
552
+ default: m(() => [
553
+ u(C, {
554
+ appearance: "primary",
555
+ "data-testid": "toolbar-add-gateway-service",
556
+ size: n.useActionOutside ? "medium" : "large",
557
+ to: n.config.createRoute
558
+ }, {
559
+ default: m(() => [
560
+ u(l(it)),
561
+ Z(" " + P(l(a)("gateway_services.list.toolbar_actions.new_gateway_service")), 1)
562
+ ]),
563
+ _: 1
564
+ }, 8, ["size", "to"])
565
+ ]),
566
+ _: 1
567
+ }, 8, ["auth-function"])
568
+ ])
569
+ ], 8, ["disabled"]))
570
+ ]),
571
+ name: m(({ rowValue: b }) => [
572
+ I("b", null, P(b ?? "-"), 1)
573
+ ]),
574
+ control_plane: m(({ row: b }) => {
575
+ var t;
576
+ return [
577
+ (t = b.x_meta) != null && t.cluster_id ? (S(), $e(K, {
578
+ key: 0,
579
+ tooltip: b.x_meta.cluster_id,
580
+ "truncation-tooltip": "",
581
+ onClick: De((s) => Ve(b.x_meta.cluster_id), ["stop"])
582
+ }, {
583
+ default: m(() => [
584
+ Z(P(b.x_meta.cluster_id), 1)
585
+ ]),
586
+ _: 2
587
+ }, 1032, ["tooltip", "onClick"])) : (S(), F("b", Mt, "-"))
588
+ ];
589
+ }),
590
+ enabled: m(({ row: b }) => [
591
+ u(l(Ue), {
592
+ "auth-function": () => n.canEdit(b),
593
+ "force-show": ""
594
+ }, {
595
+ default: m(({ isAllowed: t }) => [
596
+ I("div", {
597
+ onClick: p[4] || (p[4] = De(() => {
598
+ }, ["stop"]))
599
+ }, [
600
+ u(ue, {
601
+ modelValue: b.enabled,
602
+ "onUpdate:modelValue": (s) => b.enabled = s,
603
+ "data-testid": `row-${b.id}-toggle-input`,
604
+ disabled: !t,
605
+ onClick: De((s) => Pe(b), ["prevent"])
606
+ }, null, 8, ["modelValue", "onUpdate:modelValue", "data-testid", "disabled", "onClick"])
607
+ ])
608
+ ]),
609
+ _: 2
610
+ }, 1032, ["auth-function"])
611
+ ]),
612
+ tags: m(({ rowValue: b }) => [
613
+ u(l(mt), { tags: b }, null, 8, ["tags"])
614
+ ]),
615
+ created_at: m(({ rowValue: b }) => [
616
+ Z(P(l(h)(b)), 1)
617
+ ]),
618
+ updated_at: m(({ row: b, rowValue: t }) => [
619
+ Z(P(l(h)(t ?? b.created_at)), 1)
620
+ ]),
621
+ actions: m(({ row: b }) => [
622
+ u(fe, null, {
623
+ default: m(({ copyToClipboard: t }) => [
624
+ u(G, {
625
+ "data-testid": "action-entity-copy-id",
626
+ onClick: (s) => ce(b, t)
627
+ }, {
628
+ default: m(() => [
629
+ Z(P(l(a)("actions.copy_id")), 1)
630
+ ]),
631
+ _: 2
632
+ }, 1032, ["onClick"])
633
+ ]),
634
+ _: 2
635
+ }, 1024),
636
+ u(fe, null, {
637
+ default: m(({ copyToClipboard: t }) => [
638
+ u(G, {
639
+ "data-testid": "action-entity-copy-json",
640
+ onClick: (s) => ge(b, t)
641
+ }, {
642
+ default: m(() => [
643
+ Z(P(l(a)("actions.copy_json")), 1)
644
+ ]),
645
+ _: 2
646
+ }, 1032, ["onClick"])
647
+ ]),
648
+ _: 2
649
+ }, 1024),
650
+ u(l(Ue), {
651
+ "auth-function": () => n.canRetrieve(b)
652
+ }, {
653
+ default: m(() => [
654
+ u(G, {
655
+ "data-testid": "action-entity-view",
656
+ "has-divider": "",
657
+ item: Ee(b.id)
658
+ }, null, 8, ["item"])
659
+ ]),
660
+ _: 2
661
+ }, 1032, ["auth-function"]),
662
+ u(l(Ue), {
663
+ "auth-function": () => n.canEdit(b)
664
+ }, {
665
+ default: m(() => [
666
+ u(G, {
667
+ "data-testid": "action-entity-edit",
668
+ item: ee(b.id)
669
+ }, null, 8, ["item"])
670
+ ]),
671
+ _: 2
672
+ }, 1032, ["auth-function"]),
673
+ u(l(Ue), {
674
+ "auth-function": () => n.canDelete(b)
675
+ }, {
676
+ default: m(() => [
677
+ u(G, {
678
+ danger: "",
679
+ "data-testid": "action-entity-delete",
680
+ "has-divider": "",
681
+ onClick: (t) => f(b)
682
+ }, {
683
+ default: m(() => [
684
+ Z(P(l(a)("actions.delete.menu_label")), 1)
685
+ ]),
686
+ _: 2
687
+ }, 1032, ["onClick"])
688
+ ]),
689
+ _: 2
690
+ }, 1032, ["auth-function"])
691
+ ]),
692
+ _: 2
693
+ }, [
694
+ !l(r) && Se.value ? {
695
+ name: "outside-actions",
696
+ fn: m(() => [
697
+ (S(), $e(je, {
698
+ disabled: !n.useActionOutside,
699
+ to: "#kong-ui-app-page-header-action-button"
700
+ }, [
701
+ u(C, {
702
+ appearance: "secondary",
703
+ class: "open-learning-hub",
704
+ "data-testid": "gateway-services-more-button",
705
+ icon: "",
706
+ onClick: p[2] || (p[2] = (b) => g.$emit("click:learn-more"))
707
+ }, {
708
+ default: m(() => [
709
+ u(l(ze), { decorative: "" })
710
+ ]),
711
+ _: 1
712
+ })
713
+ ], 8, ["disabled"]))
714
+ ]),
715
+ key: "0"
716
+ } : void 0,
717
+ !N.value && n.enableV2EmptyStates && n.config.app === "konnect" ? {
718
+ name: "empty-state",
719
+ fn: m(() => {
720
+ var b;
721
+ return [
722
+ u(l(vt), {
723
+ "action-button-text": l(a)("gateway_services.empty_state_v2.create"),
724
+ appearance: "secondary",
725
+ "can-create": () => n.canCreate(),
726
+ "data-testid": "gateway-services-entity-empty-state",
727
+ description: l(a)("gateway_services.empty_state_v2.description"),
728
+ "learn-more": n.config.app === "konnect",
729
+ title: l(a)("gateway_services.empty_state_v2.title"),
730
+ "onClick:create": B,
731
+ "onClick:learnMore": p[3] || (p[3] = (t) => g.$emit("click:learn-more"))
732
+ }, Te({
733
+ image: m(() => [
734
+ I("div", Tt, [
735
+ u(l(rt), {
736
+ color: l(Ft),
737
+ size: l(At)
738
+ }, null, 8, ["color", "size"])
739
+ ])
740
+ ]),
741
+ _: 2
742
+ }, [
743
+ (b = n.config) != null && b.isControlPlaneGroup ? {
744
+ name: "message",
745
+ fn: m(() => [
746
+ Z(P(l(a)("gateway_services.empty_state_v2.group")), 1)
747
+ ]),
748
+ key: "0"
749
+ } : void 0
750
+ ]), 1032, ["action-button-text", "can-create", "description", "learn-more", "title"])
751
+ ];
752
+ }),
753
+ key: "1"
754
+ } : void 0
755
+ ]), 1032, ["cache-identifier", "disable-sorting", "empty-state-options", "error-message", "fetcher", "fetcher-cache-key", "query", "table-headers", "onState"]),
756
+ u(l(gt), {
757
+ action: re.value.action,
758
+ "entity-id": re.value.id,
759
+ "entity-name": re.value.name,
760
+ "entity-type": l(a)("glossary.gateway_services"),
761
+ "on-confirm": ke,
762
+ visible: ne.value,
763
+ onCancel: oe,
764
+ onProceed: oe
765
+ }, null, 8, ["action", "entity-id", "entity-name", "entity-type", "visible"]),
766
+ u(l(yt), {
767
+ "action-pending": te.value,
768
+ description: l(a)("actions.delete.description"),
769
+ "entity-name": z.value && (z.value.name || z.value.id),
770
+ "entity-type": l(_t).GatewayService,
771
+ error: de.value,
772
+ title: l(a)("actions.delete.title"),
773
+ visible: H.value,
774
+ onCancel: V,
775
+ onProceed: J
776
+ }, null, 8, ["action-pending", "description", "entity-name", "entity-type", "error", "title", "visible"])
777
+ ]);
778
+ };
779
+ }
780
+ }), Ne = (n, X) => {
781
+ const _ = n.__vccOpts || n;
782
+ for (const [v, a] of X)
783
+ _[v] = a;
784
+ return _;
785
+ }, Fl = /* @__PURE__ */ Ne(Bt, [["__scopeId", "data-v-210f19c5"]]), Kt = { class: "kong-ui-entities-gateway-service-form" }, Lt = { key: 0 }, Dt = { class: "gateway-service-form-traffic-label" }, Wt = { class: "gateway-service-form-margin-bottom" }, qt = {
786
+ key: 0,
787
+ class: "gateway-service-form-group-fields"
788
+ }, Gt = {
789
+ key: 1,
790
+ class: "gateway-service-form-group-fields"
791
+ }, Ot = { key: 0 }, Nt = { class: "gateway-service-form-margin-top" }, jt = { class: "gateway-service-form-margin-bottom" }, zt = { class: "gateway-service-form-margin-bottom" }, Ht = { class: "gateway-service-form-margin-bottom" }, Zt = { class: "gateway-service-form-margin-bottom" }, Jt = {
792
+ key: 0,
793
+ class: "gateway-service-form-margin-bottom"
794
+ }, Qt = {
795
+ key: 1,
796
+ class: "gateway-service-form-margin-bottom"
797
+ }, Xt = {
798
+ key: 2,
799
+ class: "gateway-service-form-margin-bottom"
800
+ }, Yt = {
801
+ key: 0,
802
+ class: "checkbox-aligned-radio"
803
+ }, el = {
804
+ key: 1,
805
+ class: "checkbox-aligned-radio"
806
+ }, tl = /* @__PURE__ */ Le({
807
+ __name: "LegacyGatewayServiceForm",
808
+ props: {
809
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
810
+ config: {
811
+ type: Object,
812
+ required: !0,
813
+ validator: (n) => !(!n || !["konnect", "kongManager"].includes(n == null ? void 0 : n.app) || n.app === "konnect" && !n.controlPlaneId || n.app === "kongManager" && typeof n.workspace != "string" || !n.cancelRoute)
814
+ },
815
+ /** If a valid Gateway Service ID is provided, it will put the form in Edit mode instead of Create */
816
+ gatewayServiceId: {
817
+ type: String,
818
+ required: !1,
819
+ default: ""
820
+ },
821
+ /** Whether show or hide EntityFormSection info column */
822
+ hideSectionsInfo: {
823
+ type: Boolean,
824
+ required: !1,
825
+ default: !1
826
+ }
827
+ },
828
+ emits: ["update", "error", "url-valid:success", "url-valid:error", "loading", "model-updated"],
829
+ setup(n, { expose: X, emit: _ }) {
830
+ var de;
831
+ const v = _, a = n, h = D(!0), L = qe(), { i18nT: Q, i18n: { t: r } } = se.useI18n(), { getMessageFromError: j } = Je(), { axiosInstance: A } = Ge((de = a.config) == null ? void 0 : de.axiosRequestConfig), Se = Qe(), be = k(() => pe.form[a.config.app].edit), Y = k(() => a.gatewayServiceId ? Be.Edit : Be.Create), he = D(!1), ae = k(() => !!a.gatewayServiceId), x = D(ae.value ? "protocol" : "url"), me = se.usePortFromProtocol(), N = D(""), Ie = k(() => !!N.value), o = Me({
832
+ fields: {
833
+ name: "",
834
+ protocol: "http",
835
+ host: "",
836
+ path: "",
837
+ port: 80,
838
+ url: "",
839
+ retries: 5,
840
+ connect_timeout: 6e4,
841
+ write_timeout: 6e4,
842
+ read_timeout: 6e4,
843
+ client_certificate: "",
844
+ ca_certificates: "",
845
+ tls_verify_enabled: !1,
846
+ tls_verify_value: !1,
847
+ tags: "",
848
+ enabled: !0
849
+ },
850
+ isReadonly: !1,
851
+ errorMessage: ""
852
+ }), w = Me({
853
+ name: "",
854
+ protocol: "http",
855
+ host: "",
856
+ path: "",
857
+ port: 80,
858
+ url: "",
859
+ retries: 5,
860
+ connect_timeout: 6e4,
861
+ write_timeout: 6e4,
862
+ read_timeout: 6e4,
863
+ client_certificate: "",
864
+ ca_certificates: "",
865
+ tls_verify_enabled: !1,
866
+ tls_verify_value: !1,
867
+ tags: "",
868
+ enabled: !0
869
+ }), ie = a.config.app === "konnect" || Xe({
870
+ gatewayInfo: a.config.gatewayInfo,
871
+ // 'ws' and 'wss' are not valid values for the protocol field in Gateway Community Edition or before Gateway Enterprise Edition 3.0
872
+ supportedRange: {
873
+ enterprise: ["3.0"]
874
+ }
875
+ }), ve = [
876
+ {
877
+ label: r("gateway_services.form.fields.protocol.options.http"),
878
+ value: "http",
879
+ group: "http"
880
+ },
881
+ {
882
+ label: r("gateway_services.form.fields.protocol.options.https"),
883
+ value: "https",
884
+ group: "http"
885
+ },
886
+ {
887
+ label: r("gateway_services.form.fields.protocol.options.tcp"),
888
+ value: "tcp",
889
+ group: "tcp"
890
+ },
891
+ {
892
+ label: r("gateway_services.form.fields.protocol.options.tls"),
893
+ value: "tls",
894
+ group: "tcp"
895
+ },
896
+ {
897
+ label: r("gateway_services.form.fields.protocol.options.tls_passthrough"),
898
+ value: "tls_passthrough",
899
+ group: "tcp"
900
+ },
901
+ {
902
+ label: r("gateway_services.form.fields.protocol.options.grpc"),
903
+ value: "grpc",
904
+ group: "grpc"
905
+ },
906
+ {
907
+ label: r("gateway_services.form.fields.protocol.options.grpcs"),
908
+ value: "grpcs",
909
+ group: "grpc"
910
+ },
911
+ ...ie ? [
912
+ {
913
+ label: r("gateway_services.form.fields.protocol.options.ws"),
914
+ value: "ws",
915
+ group: "websocket"
916
+ },
917
+ {
918
+ label: r("gateway_services.form.fields.protocol.options.wss"),
919
+ value: "wss",
920
+ group: "websocket"
921
+ }
922
+ ] : [],
923
+ {
924
+ label: r("gateway_services.form.fields.protocol.options.udp"),
925
+ value: "udp",
926
+ group: "udp"
927
+ }
928
+ ], we = { url: "url", protocol: "protocol" }, e = (i, f) => {
929
+ f.value;
930
+ }, $ = (i) => i ? parseFloat(i) : 0, ne = () => {
931
+ h.value = !0, o.errorMessage = "", o.fields.host = w.host, o.fields.path = w.path, o.fields.port = w.port, o.fields.protocol = w.protocol, o.fields.url = w.url, o.fields.retries = w.retries, o.fields.connect_timeout = w.connect_timeout, o.fields.write_timeout = w.write_timeout, o.fields.read_timeout = w.read_timeout, o.fields.client_certificate = w.client_certificate, o.fields.ca_certificates = w.ca_certificates, o.fields.tls_verify_enabled = w.tls_verify_enabled, o.fields.tls_verify_value = w.tls_verify_value, o.fields.enabled = w.enabled;
932
+ }, q = () => {
933
+ if (o.fields.url && x.value === "url")
934
+ try {
935
+ const i = new URL(o.fields.url);
936
+ o.errorMessage = "", o.fields.protocol = i.protocol.slice(0, -1), o.fields.host = i.hostname, o.fields.path = i.pathname;
937
+ const f = Number(i.port);
938
+ he.value = !!f, o.fields.port = f || me.getPortFromProtocol(o.fields.protocol), o.errorMessage = "", v("url-valid:success");
939
+ } catch (i) {
940
+ o.errorMessage = r("errors.urlErrorMessage"), v("url-valid:error", j(i));
941
+ }
942
+ else
943
+ v("url-valid:success"), o.errorMessage = "";
944
+ }, re = k(() => !["tcp", "tls", "tls_passthrough", "grpc", "grpcs", "udp"].includes(o.fields.protocol)), Pe = k(() => {
945
+ if (x.value === "url")
946
+ return !0;
947
+ const i = ["https", "wss", "tls"].includes(o.fields.protocol);
948
+ return x.value === "protocol" && i;
949
+ }), oe = k(() => {
950
+ if (x.value === "url")
951
+ return !0;
952
+ const i = ["https", "tls"].includes(o.fields.protocol);
953
+ return x.value === "protocol" && i;
954
+ }), ke = k(() => {
955
+ if (x.value === "url")
956
+ return !0;
957
+ const i = ["https", "wss", "tls"].includes(o.fields.protocol);
958
+ return x.value === "protocol" && i;
959
+ }), Ve = (i) => {
960
+ N.value = Se.utf8Name(i);
961
+ }, ce = k(() => ae.value && JSON.stringify(o.fields) !== JSON.stringify(w) || x.value === "url" && !!o.fields.url || x.value === "protocol" && !!o.fields.host), ge = (i) => {
962
+ var f, V, J;
963
+ o.fields.name = (i == null ? void 0 : i.name) || "", o.fields.tags = ((f = i == null ? void 0 : i.tags) == null ? void 0 : f.join(", ")) || "", o.fields.protocol = (i == null ? void 0 : i.protocol) || "http", o.fields.path = (i == null ? void 0 : i.path) || "", o.fields.read_timeout = i != null && i.read_timeout || (i == null ? void 0 : i.read_timeout) === 0 ? i == null ? void 0 : i.read_timeout : 6e4, o.fields.retries = i != null && i.retries || (i == null ? void 0 : i.retries) === 0 ? i == null ? void 0 : i.retries : 5, o.fields.host = (i == null ? void 0 : i.host) || "", o.fields.connect_timeout = i != null && i.connect_timeout || (i == null ? void 0 : i.connect_timeout) === 0 ? i == null ? void 0 : i.connect_timeout : 6e4, o.fields.tls_verify_enabled = (i == null ? void 0 : i.tls_verify) !== "" && (i == null ? void 0 : i.tls_verify) !== null && (i == null ? void 0 : i.tls_verify) !== void 0, o.fields.tls_verify_value = i != null && i.tls_verify ? i == null ? void 0 : i.tls_verify : !1, o.fields.ca_certificates = ((V = i == null ? void 0 : i.ca_certificates) == null ? void 0 : V.join(",")) || "", o.fields.client_certificate = ((J = i == null ? void 0 : i.client_certificate) == null ? void 0 : J.id) || "", o.fields.write_timeout = i != null && i.write_timeout || (i == null ? void 0 : i.write_timeout) === 0 ? i == null ? void 0 : i.write_timeout : 6e4, o.fields.port = i != null && i.port || (i == null ? void 0 : i.port) === 0 ? i == null ? void 0 : i.port : 80, o.fields.enabled = (i == null ? void 0 : i.enabled) ?? !0, Object.assign(w, o.fields);
964
+ }, ye = () => {
965
+ L.push(a.config.cancelRoute);
966
+ }, Ee = k(() => {
967
+ var f, V;
968
+ let i = `${a.config.apiBaseUrl}${pe.form[a.config.app].validate}`;
969
+ return a.config.app === "konnect" ? i = i.replace(/{controlPlaneId}/gi, ((f = a.config) == null ? void 0 : f.controlPlaneId) || "") : a.config.app === "kongManager" && (i = i.replace(/\/{workspace}/gi, (V = a.config) != null && V.workspace ? `/${a.config.workspace}` : "")), i = i.replace(/{id}/gi, a.gatewayServiceId), i;
970
+ }), ee = k(() => {
971
+ var f, V;
972
+ let i = `${a.config.apiBaseUrl}${pe.form[a.config.app][Y.value]}`;
973
+ return a.config.app === "konnect" ? i = i.replace(/{controlPlaneId}/gi, ((f = a.config) == null ? void 0 : f.controlPlaneId) || "") : a.config.app === "kongManager" && (i = i.replace(/\/{workspace}/gi, (V = a.config) != null && V.workspace ? `/${a.config.workspace}` : "")), i = i.replace(/{id}/gi, a.gatewayServiceId), i;
974
+ }), z = (i) => {
975
+ let f = "";
976
+ i.url && (f = new URL(i.url).protocol), (["https", "wss", "tls"].includes(i.protocol) || ["https", "wss", "tls"].includes(f)) && (i.tls_verify = i.tls_verify_enabled ? i.tls_verify_value : null), delete i.tls_verify_enabled, delete i.tls_verify_value;
977
+ }, H = k(() => {
978
+ var f, V, J, B;
979
+ const i = {
980
+ name: o.fields.name || null,
981
+ tags: o.fields.tags ? (J = (V = (f = o.fields.tags) == null ? void 0 : f.split(",")) == null ? void 0 : V.map((R) => String(R || "").trim())) == null ? void 0 : J.filter((R) => R !== "") : null,
982
+ protocol: o.fields.protocol,
983
+ path: o.fields.path || null,
984
+ read_timeout: o.fields.read_timeout,
985
+ retries: o.fields.retries,
986
+ host: o.fields.host,
987
+ connect_timeout: o.fields.connect_timeout,
988
+ tls_verify_value: o.fields.tls_verify_value,
989
+ tls_verify_enabled: o.fields.tls_verify_enabled,
990
+ ca_certificates: o.fields.ca_certificates ? (B = o.fields.ca_certificates) == null ? void 0 : B.split(",").filter((R) => R !== "") : null,
991
+ client_certificate: o.fields.client_certificate ? { id: o.fields.client_certificate } : null,
992
+ write_timeout: o.fields.write_timeout,
993
+ port: o.fields.port,
994
+ url: o.fields.url,
995
+ enabled: o.fields.enabled
996
+ };
997
+ return o.fields.client_certificate && ["https", "wss", "tls"].includes(o.fields.protocol) && (i.client_certificate = { id: o.fields.client_certificate }), o.fields.tls_verify_enabled && ["https", "wss", "tls"].includes(o.fields.protocol) && (i.tls_verify = o.fields.tls_verify_value), re.value || (i.path = null), Y.value === "create" ? x.value === "url" ? (delete i.protocol, delete i.host, delete i.path, a.config.app === "konnect" && delete i.port) : delete i.url : Y.value === "edit" && delete i.url, i;
998
+ }), te = async () => {
999
+ var i, f, V, J;
1000
+ try {
1001
+ o.isReadonly = !0, q();
1002
+ const B = H.value;
1003
+ z(B);
1004
+ let R;
1005
+ if (await A.post(Ee.value, B), Y.value === "create" ? R = await A.post(ee.value, B) : Y.value === "edit" && (R = ((i = a.config) == null ? void 0 : i.app) === "konnect" ? await A.put(ee.value, B) : await A.patch(ee.value, B)), R) {
1006
+ const { data: c } = R;
1007
+ o.fields.name = (c == null ? void 0 : c.name) || "", o.fields.port = c.port || me.getPortFromProtocol(c.protocol), o.fields.protocol = (c == null ? void 0 : c.protocol) || "http", o.fields.host = (c == null ? void 0 : c.host) || "", o.fields.path = (c == null ? void 0 : c.path) || "", o.fields.url = (c == null ? void 0 : c.url) || "", o.fields.retries = c != null && c.retries || (c == null ? void 0 : c.retries) === 0 ? c == null ? void 0 : c.retries : 5, o.fields.connect_timeout = c != null && c.connect_timeout || (c == null ? void 0 : c.connect_timeout) === 0 ? c == null ? void 0 : c.connect_timeout : 6e4, o.fields.write_timeout = c != null && c.write_timeout || (c == null ? void 0 : c.write_timeout) === 0 ? c == null ? void 0 : c.write_timeout : 6e4, o.fields.read_timeout = c != null && c.read_timeout || (c == null ? void 0 : c.read_timeout) === 0 ? c == null ? void 0 : c.read_timeout : 6e4, o.fields.client_certificate = ((f = c == null ? void 0 : c.client_certificate) == null ? void 0 : f.id) || "", o.fields.ca_certificates = (V = c == null ? void 0 : c.ca_certificates) != null && V.length ? c == null ? void 0 : c.ca_certificates.join(",") : "", o.fields.tls_verify_enabled = (c == null ? void 0 : c.tls_verify) !== "" && (c == null ? void 0 : c.tls_verify) !== null && (c == null ? void 0 : c.tls_verify) !== void 0, o.fields.tls_verify_value = o.fields.tls_verify_enabled && (c == null ? void 0 : c.tls_verify), o.fields.tags = (J = c == null ? void 0 : c.tags) != null && J.length ? c.tags.join(", ") : "", o.fields.enabled = (c == null ? void 0 : c.enabled) ?? !0, Object.assign(w, o.fields), v("update", R == null ? void 0 : R.data);
1008
+ }
1009
+ return R;
1010
+ } catch (B) {
1011
+ o.errorMessage = j(B), v("error", B);
1012
+ } finally {
1013
+ o.isReadonly = !1;
1014
+ }
1015
+ };
1016
+ return Fe(() => a.gatewayServiceId, () => {
1017
+ Object.assign(o.fields, w);
1018
+ }), Fe(o.fields, (i) => {
1019
+ o.fields.port = me.getPortFromProtocol(i.protocol, String(i.port)), v("model-updated", H.value);
1020
+ }), He(() => {
1021
+ v("model-updated", H.value);
1022
+ }), X({
1023
+ validateUrl: q,
1024
+ getPayload: H,
1025
+ saveFormData: te,
1026
+ canSubmit: ce,
1027
+ initForm: ge
1028
+ }), (i, f) => {
1029
+ const V = W("KInput"), J = W("KLabel"), B = W("KRadio"), R = W("KSelect"), c = W("KCheckbox"), g = W("KCollapse");
1030
+ return S(), F("div", Kt, [
1031
+ u(l(Ye), {
1032
+ "can-submit": ce.value,
1033
+ config: n.config,
1034
+ "edit-id": n.gatewayServiceId,
1035
+ "entity-type": l(Oe).GatewayService,
1036
+ "error-message": o.errorMessage,
1037
+ "fetch-url": be.value,
1038
+ "form-fields": H.value,
1039
+ "is-readonly": o.isReadonly,
1040
+ onCancel: ye,
1041
+ "onFetch:error": f[25] || (f[25] = (p) => i.$emit("error", p)),
1042
+ "onFetch:success": ge,
1043
+ onLoading: f[26] || (f[26] = (p) => i.$emit("loading", p)),
1044
+ onSubmit: te
1045
+ }, {
1046
+ "form-actions": m(() => [
1047
+ Ze(i.$slots, "form-actions", {
1048
+ canSubmit: ce.value,
1049
+ cancel: ye,
1050
+ submit: te
1051
+ }, void 0, !0)
1052
+ ]),
1053
+ default: m(() => [
1054
+ u(l(Ke), {
1055
+ description: l(r)("gateway_services.form.sections.general.description"),
1056
+ "hide-info-header": n.hideSectionsInfo,
1057
+ title: l(r)("gateway_services.form.sections.general.title")
1058
+ }, {
1059
+ default: m(() => [
1060
+ u(V, {
1061
+ modelValue: o.fields.name,
1062
+ "onUpdate:modelValue": f[0] || (f[0] = (p) => o.fields.name = p),
1063
+ modelModifiers: { trim: !0 },
1064
+ autocomplete: "off",
1065
+ "data-testid": "gateway-service-name-input",
1066
+ error: Ie.value,
1067
+ "error-message": N.value,
1068
+ label: l(r)("gateway_services.form.fields.name.label"),
1069
+ "label-attributes": {
1070
+ info: l(r)("gateway_services.form.fields.name.tooltip"),
1071
+ tooltipAttributes: { maxWidth: "400" }
1072
+ },
1073
+ name: "name",
1074
+ placeholder: l(r)("gateway_services.form.fields.name.placeholder"),
1075
+ readonly: o.isReadonly,
1076
+ type: "text",
1077
+ onInput: Ve
1078
+ }, null, 8, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder", "readonly"]),
1079
+ u(V, {
1080
+ modelValue: o.fields.tags,
1081
+ "onUpdate:modelValue": f[1] || (f[1] = (p) => o.fields.tags = p),
1082
+ modelModifiers: { trim: !0 },
1083
+ autocomplete: "off",
1084
+ "data-testid": "gateway-service-tags-input",
1085
+ help: l(r)("gateway_services.form.fields.tags.help"),
1086
+ label: l(r)("gateway_services.form.fields.tags.label"),
1087
+ "label-attributes": {
1088
+ info: l(r)("gateway_services.form.fields.tags.tooltip"),
1089
+ tooltipAttributes: { maxWidth: "400" }
1090
+ },
1091
+ name: "tags",
1092
+ placeholder: l(r)("gateway_services.form.fields.tags.placeholder"),
1093
+ readonly: o.isReadonly,
1094
+ type: "text"
1095
+ }, null, 8, ["modelValue", "help", "label", "label-attributes", "placeholder", "readonly"])
1096
+ ]),
1097
+ _: 1
1098
+ }, 8, ["description", "hide-info-header", "title"]),
1099
+ u(l(Ke), {
1100
+ description: l(r)("gateway_services.form.sections.keys.description"),
1101
+ "hide-info-header": n.hideSectionsInfo,
1102
+ title: l(r)("gateway_services.form.sections.keys.title")
1103
+ }, {
1104
+ default: m(() => [
1105
+ ae.value ? M("", !0) : (S(), F("div", Lt, [
1106
+ I("div", Dt, [
1107
+ u(J, { required: "" }, {
1108
+ default: m(() => [
1109
+ Z(P(l(r)("gateway_services.form.sections.keys.checkedGroupLabel")), 1)
1110
+ ]),
1111
+ _: 1
1112
+ })
1113
+ ]),
1114
+ I("div", Wt, [
1115
+ u(B, {
1116
+ modelValue: x.value,
1117
+ "onUpdate:modelValue": f[2] || (f[2] = (p) => x.value = p),
1118
+ "data-testid": "gateway-service-url-radio",
1119
+ "selected-value": we.url,
1120
+ onChange: ne
1121
+ }, {
1122
+ default: m(() => [
1123
+ Z(P(l(r)("gateway_services.form.sections.keys.urlLabel")), 1)
1124
+ ]),
1125
+ _: 1
1126
+ }, 8, ["modelValue", "selected-value"])
1127
+ ]),
1128
+ x.value === "url" ? (S(), F("div", qt, [
1129
+ u(V, {
1130
+ modelValue: o.fields.url,
1131
+ "onUpdate:modelValue": f[3] || (f[3] = (p) => o.fields.url = p),
1132
+ modelModifiers: { trim: !0 },
1133
+ class: "gateway-service-url-input gateway-service-form-margin-bottom",
1134
+ "data-testid": "gateway-service-url-input",
1135
+ label: l(r)("gateway_services.form.fields.upstream_url.label"),
1136
+ "label-attributes": {
1137
+ info: n.config.app === "konnect" ? l(r)("gateway_services.form.fields.upstream_url.tooltip_for_konnect") : l(r)("gateway_services.form.fields.upstream_url.tooltip_for_km"),
1138
+ tooltipAttributes: { maxWidth: "400" }
1139
+ },
1140
+ name: "url",
1141
+ placeholder: l(r)("gateway_services.form.fields.upstream_url.placeholder"),
1142
+ required: ""
1143
+ }, null, 8, ["modelValue", "label", "label-attributes", "placeholder"])
1144
+ ])) : M("", !0),
1145
+ u(B, {
1146
+ modelValue: x.value,
1147
+ "onUpdate:modelValue": f[4] || (f[4] = (p) => x.value = p),
1148
+ "checked-group": "protocol",
1149
+ "data-testid": "gateway-service-protocol-radio",
1150
+ "selected-value": we.protocol,
1151
+ onChange: ne
1152
+ }, {
1153
+ default: m(() => [
1154
+ Z(P(l(r)("gateway_services.form.sections.keys.checkedGroupAltLabel")), 1)
1155
+ ]),
1156
+ _: 1
1157
+ }, 8, ["modelValue", "selected-value"])
1158
+ ])),
1159
+ x.value === "protocol" || ae.value ? (S(), F("div", Gt, [
1160
+ u(R, {
1161
+ modelValue: o.fields.protocol,
1162
+ "onUpdate:modelValue": f[5] || (f[5] = (p) => o.fields.protocol = p),
1163
+ "data-testid": "gateway-service-protocol-select",
1164
+ items: ve,
1165
+ label: l(r)("gateway_services.form.fields.protocol.label"),
1166
+ "label-attributes": {
1167
+ info: l(r)("gateway_services.form.fields.protocol.tooltip"),
1168
+ tooltipAttributes: { maxWidth: "400" }
1169
+ },
1170
+ readonly: o.isReadonly,
1171
+ required: "",
1172
+ width: "100%",
1173
+ onSelected: f[6] || (f[6] = (p) => e(o.fields.protocol, p))
1174
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"]),
1175
+ u(V, {
1176
+ modelValue: o.fields.host,
1177
+ "onUpdate:modelValue": f[7] || (f[7] = (p) => o.fields.host = p),
1178
+ modelModifiers: { trim: !0 },
1179
+ class: "gateway-service-form-margin-top",
1180
+ "data-testid": "gateway-service-host-input",
1181
+ label: l(r)("gateway_services.form.fields.host.label"),
1182
+ "label-attributes": {
1183
+ info: l(r)("gateway_services.form.fields.host.tooltip"),
1184
+ tooltipAttributes: { maxWidth: "400" }
1185
+ },
1186
+ name: "host",
1187
+ placeholder: l(r)("gateway_services.form.fields.host.placeholder"),
1188
+ required: ""
1189
+ }, null, 8, ["modelValue", "label", "label-attributes", "placeholder"]),
1190
+ re.value ? (S(), F("div", Ot, [
1191
+ u(V, {
1192
+ modelValue: o.fields.path,
1193
+ "onUpdate:modelValue": f[8] || (f[8] = (p) => o.fields.path = p),
1194
+ modelModifiers: { trim: !0 },
1195
+ class: "gateway-service-form-margin-top",
1196
+ "data-testid": "gateway-service-path-input",
1197
+ label: l(r)("gateway_services.form.fields.path.label"),
1198
+ "label-attributes": {
1199
+ info: l(r)("gateway_services.form.fields.path.tooltip"),
1200
+ tooltipAttributes: { maxWidth: "400" }
1201
+ },
1202
+ name: "path",
1203
+ placeholder: l(r)("gateway_services.form.fields.path.placeholder")
1204
+ }, null, 8, ["modelValue", "label", "label-attributes", "placeholder"])
1205
+ ])) : M("", !0),
1206
+ u(V, {
1207
+ modelValue: o.fields.port,
1208
+ "onUpdate:modelValue": [
1209
+ f[9] || (f[9] = (p) => o.fields.port = p),
1210
+ f[10] || (f[10] = () => {
1211
+ o.fields.port = $(o.fields.port + "");
1212
+ })
1213
+ ],
1214
+ class: "gateway-service-form-margin-top",
1215
+ "data-testid": "gateway-service-port-input",
1216
+ label: l(r)("gateway_services.form.fields.port.label"),
1217
+ "label-attributes": {
1218
+ info: l(r)("gateway_services.form.fields.port.tooltip"),
1219
+ tooltipAttributes: { maxWidth: "400" }
1220
+ },
1221
+ name: "port",
1222
+ type: "number"
1223
+ }, null, 8, ["modelValue", "label", "label-attributes"])
1224
+ ])) : M("", !0),
1225
+ u(g, {
1226
+ modelValue: h.value,
1227
+ "onUpdate:modelValue": f[24] || (f[24] = (p) => h.value = p),
1228
+ "data-testid": "advanced-fields-collapse",
1229
+ "trigger-alignment": "leading",
1230
+ "trigger-label": l(r)("gateway_services.form.sections.keys.viewAdvancedFields")
1231
+ }, {
1232
+ default: m(() => [
1233
+ I("div", Nt, [
1234
+ I("div", jt, [
1235
+ u(V, {
1236
+ modelValue: o.fields.retries,
1237
+ "onUpdate:modelValue": [
1238
+ f[11] || (f[11] = (p) => o.fields.retries = p),
1239
+ f[12] || (f[12] = () => {
1240
+ o.fields.retries = $(o.fields.retries + "");
1241
+ })
1242
+ ],
1243
+ autocomplete: "off",
1244
+ "data-testid": "gateway-service-retries-input",
1245
+ label: l(r)("gateway_services.form.fields.retries.label"),
1246
+ "label-attributes": {
1247
+ info: l(r)("gateway_services.form.fields.retries.tooltip"),
1248
+ tooltipAttributes: { maxWidth: "400" }
1249
+ },
1250
+ name: "retries",
1251
+ readonly: o.isReadonly,
1252
+ type: "number"
1253
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
1254
+ ]),
1255
+ I("div", zt, [
1256
+ u(V, {
1257
+ modelValue: o.fields.connect_timeout,
1258
+ "onUpdate:modelValue": [
1259
+ f[13] || (f[13] = (p) => o.fields.connect_timeout = p),
1260
+ f[14] || (f[14] = () => {
1261
+ o.fields.connect_timeout = $(o.fields.connect_timeout + "");
1262
+ })
1263
+ ],
1264
+ autocomplete: "off",
1265
+ "data-testid": "gateway-service-connTimeout-input",
1266
+ label: l(r)("gateway_services.form.fields.connect_timeout.label"),
1267
+ "label-attributes": {
1268
+ info: l(r)("gateway_services.form.fields.connect_timeout.tooltip"),
1269
+ tooltipAttributes: { maxWidth: "400" }
1270
+ },
1271
+ name: "connTimeout",
1272
+ readonly: o.isReadonly,
1273
+ type: "number"
1274
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
1275
+ ]),
1276
+ I("div", Ht, [
1277
+ u(V, {
1278
+ modelValue: o.fields.write_timeout,
1279
+ "onUpdate:modelValue": [
1280
+ f[15] || (f[15] = (p) => o.fields.write_timeout = p),
1281
+ f[16] || (f[16] = () => {
1282
+ o.fields.write_timeout = $(o.fields.write_timeout + "");
1283
+ })
1284
+ ],
1285
+ autocomplete: "off",
1286
+ "data-testid": "gateway-service-writeTimeout-input",
1287
+ label: l(r)("gateway_services.form.fields.write_timeout.label"),
1288
+ "label-attributes": {
1289
+ info: l(r)("gateway_services.form.fields.write_timeout.tooltip"),
1290
+ tooltipAttributes: { maxWidth: "400" }
1291
+ },
1292
+ name: "writeTimeout",
1293
+ readonly: o.isReadonly,
1294
+ type: "number"
1295
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
1296
+ ]),
1297
+ I("div", Zt, [
1298
+ u(V, {
1299
+ modelValue: o.fields.read_timeout,
1300
+ "onUpdate:modelValue": [
1301
+ f[17] || (f[17] = (p) => o.fields.read_timeout = p),
1302
+ f[18] || (f[18] = () => {
1303
+ o.fields.read_timeout = $(o.fields.read_timeout + "");
1304
+ })
1305
+ ],
1306
+ autocomplete: "off",
1307
+ "data-testid": "gateway-service-readTimeout-input",
1308
+ label: l(r)("gateway_services.form.fields.read_timeout.label"),
1309
+ "label-attributes": {
1310
+ info: l(r)("gateway_services.form.fields.read_timeout.tooltip"),
1311
+ tooltipAttributes: { maxWidth: "400" }
1312
+ },
1313
+ name: "readTimeout",
1314
+ readonly: o.isReadonly,
1315
+ type: "number"
1316
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
1317
+ ]),
1318
+ Pe.value ? (S(), F("div", Jt, [
1319
+ u(V, {
1320
+ modelValue: o.fields.client_certificate,
1321
+ "onUpdate:modelValue": f[19] || (f[19] = (p) => o.fields.client_certificate = p),
1322
+ modelModifiers: { trim: !0 },
1323
+ autocomplete: "off",
1324
+ "data-testid": "gateway-service-clientCert-input",
1325
+ label: l(r)("gateway_services.form.fields.client_certificate.label"),
1326
+ "label-attributes": {
1327
+ info: l(r)("gateway_services.form.fields.client_certificate.tooltip"),
1328
+ tooltipAttributes: { maxWidth: "400" }
1329
+ },
1330
+ name: "clientCert",
1331
+ placeholder: l(r)("gateway_services.form.fields.client_certificate.placeholder"),
1332
+ readonly: o.isReadonly,
1333
+ type: "text"
1334
+ }, null, 8, ["modelValue", "label", "label-attributes", "placeholder", "readonly"])
1335
+ ])) : M("", !0),
1336
+ oe.value ? (S(), F("div", Qt, [
1337
+ u(V, {
1338
+ modelValue: o.fields.ca_certificates,
1339
+ "onUpdate:modelValue": f[20] || (f[20] = (p) => o.fields.ca_certificates = p),
1340
+ modelModifiers: { trim: !0 },
1341
+ autocomplete: "off",
1342
+ "data-testid": "gateway-service-ca-certs-input",
1343
+ label: l(r)("gateway_services.form.fields.ca_certificates.label"),
1344
+ "label-attributes": { tooltipAttributes: { maxWidth: "400" } },
1345
+ placeholder: l(r)("gateway_services.form.fields.ca_certificates.placeholder"),
1346
+ readonly: o.isReadonly,
1347
+ type: "text"
1348
+ }, {
1349
+ "label-tooltip": m(() => [
1350
+ u(l(Q), {
1351
+ keypath: "gateway_services.form.fields.ca_certificates.tooltip",
1352
+ scope: "global"
1353
+ }, {
1354
+ code1: m(() => [
1355
+ I("code", null, P(l(r)("gateway_services.form.fields.ca_certificates.code1")), 1)
1356
+ ]),
1357
+ code2: m(() => [
1358
+ I("code", null, P(l(r)("gateway_services.form.fields.ca_certificates.code2")), 1)
1359
+ ]),
1360
+ _: 1
1361
+ })
1362
+ ]),
1363
+ _: 1
1364
+ }, 8, ["modelValue", "label", "placeholder", "readonly"])
1365
+ ])) : M("", !0),
1366
+ ke.value ? (S(), F("div", Xt, [
1367
+ u(c, {
1368
+ modelValue: o.fields.tls_verify_enabled,
1369
+ "onUpdate:modelValue": f[21] || (f[21] = (p) => o.fields.tls_verify_enabled = p),
1370
+ "data-testid": "gateway-service-tls-verify-checkbox",
1371
+ description: l(r)("gateway_services.form.fields.tls_verify_enabled.help"),
1372
+ label: l(r)("gateway_services.form.fields.tls_verify_enabled.label"),
1373
+ "label-attributes": { tooltipAttributes: { maxWidth: "400" } }
1374
+ }, {
1375
+ tooltip: m(() => [
1376
+ u(l(Q), {
1377
+ keypath: "gateway_services.form.fields.tls_verify_enabled.tooltip",
1378
+ scope: "global"
1379
+ }, {
1380
+ code1: m(() => [
1381
+ I("code", null, P(l(r)("gateway_services.form.fields.tls_verify_enabled.code1")), 1)
1382
+ ]),
1383
+ _: 1
1384
+ })
1385
+ ]),
1386
+ _: 1
1387
+ }, 8, ["modelValue", "description", "label"]),
1388
+ o.fields.tls_verify_enabled ? (S(), F("div", Yt, [
1389
+ u(B, {
1390
+ modelValue: o.fields.tls_verify_value,
1391
+ "onUpdate:modelValue": f[22] || (f[22] = (p) => o.fields.tls_verify_value = p),
1392
+ "data-testid": "gateway-service-tls-verify-true-option",
1393
+ label: l(r)("gateway_services.form.fields.tls_verify_option.true.label"),
1394
+ "selected-value": !0
1395
+ }, null, 8, ["modelValue", "label"])
1396
+ ])) : M("", !0),
1397
+ o.fields.tls_verify_enabled ? (S(), F("div", el, [
1398
+ u(B, {
1399
+ modelValue: o.fields.tls_verify_value,
1400
+ "onUpdate:modelValue": f[23] || (f[23] = (p) => o.fields.tls_verify_value = p),
1401
+ "data-testid": "gateway-service-tls-verify-false-option",
1402
+ label: l(r)("gateway_services.form.fields.tls_verify_option.false.label"),
1403
+ "selected-value": !1
1404
+ }, null, 8, ["modelValue", "label"])
1405
+ ])) : M("", !0)
1406
+ ])) : M("", !0)
1407
+ ])
1408
+ ]),
1409
+ _: 1
1410
+ }, 8, ["modelValue", "trigger-label"])
1411
+ ]),
1412
+ _: 1
1413
+ }, 8, ["description", "hide-info-header", "title"])
1414
+ ]),
1415
+ _: 3
1416
+ }, 8, ["can-submit", "config", "edit-id", "entity-type", "error-message", "fetch-url", "form-fields", "is-readonly"])
1417
+ ]);
1418
+ };
1419
+ }
1420
+ }), Al = /* @__PURE__ */ Ne(tl, [["__scopeId", "data-v-e874c296"]]), ll = { class: "kong-ui-gateway-service-entity-config-card" }, xl = /* @__PURE__ */ Le({
1421
+ __name: "GatewayServiceConfigCard",
1422
+ props: {
1423
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
1424
+ config: {
1425
+ type: Object,
1426
+ required: !0,
1427
+ validator: (n) => !(!n || !["konnect", "kongManager"].includes(n == null ? void 0 : n.app) || n.app === "konnect" && !n.controlPlaneId || n.app === "kongManager" && typeof n.workspace != "string" || !n.entityId)
1428
+ },
1429
+ /**
1430
+ * External link for documentation that determines visibility of Documentation button
1431
+ */
1432
+ configCardDoc: {
1433
+ type: String,
1434
+ default: "",
1435
+ required: !1
1436
+ },
1437
+ /**
1438
+ * Control visibility of card title content
1439
+ */
1440
+ hideTitle: {
1441
+ type: Boolean,
1442
+ default: !1
1443
+ }
1444
+ },
1445
+ emits: ["loading", "fetch:error", "fetch:success"],
1446
+ setup(n) {
1447
+ const X = n, { i18n: { t: _ }, i18nT: v } = se.useI18n(), a = k(() => pe.form[X.config.app].edit), { getPropValue: h } = et(), L = (r, j) => h(r, j) === !0 ? _("gateway_services.form.fields.tls_verify_option.true.display") : _("gateway_services.form.fields.tls_verify_option.false.display"), Q = D({
1448
+ id: {},
1449
+ name: {
1450
+ tooltip: _("gateway_services.form.fields.name.tooltip")
1451
+ },
1452
+ enabled: {},
1453
+ updated_at: {},
1454
+ created_at: {},
1455
+ protocol: {
1456
+ section: Ae.Basic,
1457
+ tooltip: _("gateway_services.form.fields.protocol.tooltip")
1458
+ },
1459
+ host: {
1460
+ section: Ae.Basic,
1461
+ tooltip: _("gateway_services.form.fields.host.tooltip")
1462
+ },
1463
+ path: {
1464
+ section: Ae.Basic,
1465
+ tooltip: _("gateway_services.form.fields.path.tooltip")
1466
+ },
1467
+ port: {
1468
+ section: Ae.Basic,
1469
+ tooltip: _("gateway_services.form.fields.port.tooltip")
1470
+ },
1471
+ tags: {
1472
+ tooltip: _("gateway_services.form.fields.tags.tooltip")
1473
+ },
1474
+ // advanced fields
1475
+ retries: {
1476
+ order: 1,
1477
+ tooltip: _("gateway_services.form.fields.retries.tooltip")
1478
+ },
1479
+ connect_timeout: {
1480
+ order: 2,
1481
+ tooltip: _("gateway_services.form.fields.connect_timeout.tooltip")
1482
+ },
1483
+ write_timeout: {
1484
+ order: 3,
1485
+ tooltip: _("gateway_services.form.fields.write_timeout.tooltip")
1486
+ },
1487
+ read_timeout: {
1488
+ order: 4,
1489
+ tooltip: _("gateway_services.form.fields.read_timeout.tooltip")
1490
+ },
1491
+ client_certificate: {
1492
+ order: 5,
1493
+ tooltip: _("gateway_services.form.fields.client_certificate.tooltip")
1494
+ },
1495
+ ca_certificates: {
1496
+ type: bt.BadgeTag,
1497
+ label: _("gateway_services.form.fields.ca_certificates.label"),
1498
+ order: 6
1499
+ },
1500
+ tls_verify: {
1501
+ label: _("gateway_services.form.fields.tls_verify_enabled.label")
1502
+ },
1503
+ tls_verify_depth: {
1504
+ hidden: !0
1505
+ }
1506
+ });
1507
+ return (r, j) => (S(), F("div", ll, [
1508
+ u(l(ht), {
1509
+ config: n.config,
1510
+ "config-card-doc": n.configCardDoc,
1511
+ "config-schema": Q.value,
1512
+ "entity-type": l(Oe).GatewayService,
1513
+ "fetch-url": a.value,
1514
+ "hide-title": n.hideTitle,
1515
+ "onFetch:error": j[0] || (j[0] = (A) => r.$emit("fetch:error", A)),
1516
+ "onFetch:success": j[1] || (j[1] = (A) => r.$emit("fetch:success", A)),
1517
+ onLoading: j[2] || (j[2] = (A) => r.$emit("loading", A))
1518
+ }, {
1519
+ "enabled-label-tooltip": m(() => [
1520
+ u(l(v), {
1521
+ keypath: "gateway_services.form.fields.enabled.tooltip",
1522
+ scope: "global"
1523
+ }, {
1524
+ false: m(() => [
1525
+ I("code", null, P(l(_)("gateway_services.form.fields.enabled.false")), 1)
1526
+ ]),
1527
+ true: m(() => [
1528
+ I("code", null, P(l(_)("gateway_services.form.fields.enabled.true")), 1)
1529
+ ]),
1530
+ _: 1
1531
+ })
1532
+ ]),
1533
+ "ca_certificates-label-tooltip": m(() => [
1534
+ u(l(v), {
1535
+ keypath: "gateway_services.form.fields.ca_certificates.tooltip",
1536
+ scope: "global"
1537
+ }, {
1538
+ code1: m(() => [
1539
+ I("code", null, P(l(_)("gateway_services.form.fields.ca_certificates.code1")), 1)
1540
+ ]),
1541
+ code2: m(() => [
1542
+ I("code", null, P(l(_)("gateway_services.form.fields.ca_certificates.code2")), 1)
1543
+ ]),
1544
+ _: 1
1545
+ })
1546
+ ]),
1547
+ "tls_verify-label-tooltip": m(() => [
1548
+ u(l(v), {
1549
+ keypath: "gateway_services.form.fields.tls_verify_enabled.tooltip",
1550
+ scope: "global"
1551
+ }, {
1552
+ code1: m(() => [
1553
+ I("code", null, P(l(_)("gateway_services.form.fields.tls_verify_enabled.code1")), 1)
1554
+ ]),
1555
+ _: 1
1556
+ })
1557
+ ]),
1558
+ tls_verify: m((A) => [
1559
+ Z(P(typeof l(h)("rowValue", A) == "boolean" ? L("rowValue", A) : l(_)("gateway_services.form.fields.tls_verify_option.unset.display")), 1)
1560
+ ]),
1561
+ client_certificate: m((A) => [
1562
+ Z(P(l(h)("rowValue", A) ? l(h)("rowValue", A).id : "–"), 1)
1563
+ ]),
1564
+ _: 1
1565
+ }, 8, ["config", "config-card-doc", "config-schema", "entity-type", "fetch-url", "hide-title"])
1566
+ ]));
1567
+ }
1568
+ }), le = {
1569
+ name: "Kong-Air-Flights-API",
1570
+ tags: [],
1571
+ protocol: "https",
1572
+ path: "/flights",
1573
+ read_timeout: 6e4,
1574
+ retries: 5,
1575
+ host: "api.kong-air.com",
1576
+ connect_timeout: 6e4,
1577
+ ca_certificates: null,
1578
+ client_certificate: null,
1579
+ write_timeout: 6e4,
1580
+ port: 443
1581
+ }, ol = { class: "kong-ui-entities-gateway-service-form" }, il = {
1582
+ key: 0,
1583
+ class: "gateway-service-form-general-info"
1584
+ }, rl = { class: "gateway-service-form-group-selection-wrapper" }, sl = {
1585
+ key: 0,
1586
+ class: "gateway-service-form-group-fields"
1587
+ }, al = {
1588
+ key: 0,
1589
+ class: "gateway-service-form-group-fields"
1590
+ }, nl = { key: 0 }, cl = {
1591
+ key: 0,
1592
+ class: "gateway-service-form-advanced-fields"
1593
+ }, dl = { class: "gateway-service-form-margin-bottom" }, ul = { class: "gateway-service-form-margin-bottom" }, fl = { class: "gateway-service-form-margin-bottom" }, pl = { class: "gateway-service-form-margin-bottom" }, ml = {
1594
+ key: 0,
1595
+ class: "gateway-service-form-margin-bottom"
1596
+ }, vl = {
1597
+ key: 1,
1598
+ class: "gateway-service-form-margin-bottom"
1599
+ }, gl = {
1600
+ key: 2,
1601
+ class: "gateway-service-form-margin-bottom"
1602
+ }, yl = {
1603
+ key: 0,
1604
+ class: "checkbox-aligned-radio"
1605
+ }, _l = {
1606
+ key: 1,
1607
+ class: "checkbox-aligned-radio"
1608
+ }, bl = { class: "gateway-service-form-tags" }, hl = { class: "form-error-list" }, wl = /* @__PURE__ */ Le({
1609
+ __name: "GatewayServiceForm",
1610
+ props: {
1611
+ /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
1612
+ config: {
1613
+ type: Object,
1614
+ required: !0,
1615
+ validator: (n) => !(!n || !["konnect", "kongManager"].includes(n == null ? void 0 : n.app) || n.app === "konnect" && !n.controlPlaneId || n.app === "kongManager" && typeof n.workspace != "string" || !n.cancelRoute)
1616
+ },
1617
+ /** If a valid Gateway Service ID is provided, it will put the form in Edit mode instead of Create */
1618
+ gatewayServiceId: {
1619
+ type: String,
1620
+ required: !1,
1621
+ default: ""
1622
+ },
1623
+ /** Whether show or hide EntityFormSection info column */
1624
+ hideSectionsInfo: {
1625
+ type: Boolean,
1626
+ required: !1,
1627
+ default: !1
1628
+ },
1629
+ /** Whether show or hide Try sample API button */
1630
+ hideTrySampleApiButton: {
1631
+ type: Boolean,
1632
+ required: !1,
1633
+ default: !1
1634
+ }
1635
+ },
1636
+ emits: ["update", "error", "url-valid:success", "url-valid:error", "loading", "model-updated", "try-sample-api"],
1637
+ setup(n, { expose: X, emit: _ }) {
1638
+ var b;
1639
+ const v = _, a = n, h = D(!0), L = qe(), { i18nT: Q, i18n: { t: r } } = se.useI18n(), { getErrorFieldsFromError: j } = Je(), { axiosInstance: A } = Ge((b = a.config) == null ? void 0 : b.axiosRequestConfig), Se = Qe(), { validateHost: be, validatePath: Y, validatePort: he, validateProtocol: ae } = se.useUrlValidators(), { objectsAreEqual: x } = et(), me = k(() => pe.form[a.config.app].edit), N = k(() => a.gatewayServiceId ? Be.Edit : Be.Create), Ie = D(!1), o = k(() => !!a.gatewayServiceId), w = D(o.value ? "protocol" : "url"), ie = se.usePortFromProtocol(), ve = D(""), we = k(() => !!ve.value || !!ee("name")), e = Me({
1640
+ fields: {
1641
+ name: "",
1642
+ protocol: "http",
1643
+ host: "",
1644
+ path: "",
1645
+ port: 80,
1646
+ url: "",
1647
+ retries: 5,
1648
+ connect_timeout: 6e4,
1649
+ write_timeout: 6e4,
1650
+ read_timeout: 6e4,
1651
+ client_certificate: "",
1652
+ ca_certificates: "",
1653
+ tls_verify_enabled: !1,
1654
+ tls_verify_value: !1,
1655
+ tags: "",
1656
+ enabled: !0
1657
+ },
1658
+ isReadonly: !1,
1659
+ errorMessages: [],
1660
+ formFieldErrors: {
1661
+ host: "",
1662
+ port: "",
1663
+ path: "",
1664
+ name: "",
1665
+ url: "",
1666
+ tags: "",
1667
+ retries: "",
1668
+ connect_timeout: "",
1669
+ write_timeout: "",
1670
+ read_timeout: "",
1671
+ client_certificate: "",
1672
+ ca_certificates: "",
1673
+ tls_verify_enabled: "",
1674
+ tls_verify_value: ""
1675
+ }
1676
+ }), $ = Me({
1677
+ name: "",
1678
+ protocol: "http",
1679
+ host: "",
1680
+ path: "",
1681
+ port: 80,
1682
+ url: "",
1683
+ retries: 5,
1684
+ connect_timeout: 6e4,
1685
+ write_timeout: 6e4,
1686
+ read_timeout: 6e4,
1687
+ client_certificate: "",
1688
+ ca_certificates: "",
1689
+ tls_verify_enabled: !1,
1690
+ tls_verify_value: !1,
1691
+ tags: "",
1692
+ enabled: !0
1693
+ }), ne = a.config.app === "konnect" || Xe({
1694
+ gatewayInfo: a.config.gatewayInfo,
1695
+ // 'ws' and 'wss' are not valid values for the protocol field in Gateway Community Edition or before Gateway Enterprise Edition 3.0
1696
+ supportedRange: {
1697
+ enterprise: ["3.0"]
1698
+ }
1699
+ }), q = [
1700
+ {
1701
+ label: r("gateway_services.form.fields.protocol.options.http"),
1702
+ value: "http",
1703
+ group: "http"
1704
+ },
1705
+ {
1706
+ label: r("gateway_services.form.fields.protocol.options.https"),
1707
+ value: "https",
1708
+ group: "http"
1709
+ },
1710
+ {
1711
+ label: r("gateway_services.form.fields.protocol.options.tcp"),
1712
+ value: "tcp",
1713
+ group: "tcp"
1714
+ },
1715
+ {
1716
+ label: r("gateway_services.form.fields.protocol.options.tls"),
1717
+ value: "tls",
1718
+ group: "tcp"
1719
+ },
1720
+ {
1721
+ label: r("gateway_services.form.fields.protocol.options.tls_passthrough"),
1722
+ value: "tls_passthrough",
1723
+ group: "tcp"
1724
+ },
1725
+ {
1726
+ label: r("gateway_services.form.fields.protocol.options.grpc"),
1727
+ value: "grpc",
1728
+ group: "grpc"
1729
+ },
1730
+ {
1731
+ label: r("gateway_services.form.fields.protocol.options.grpcs"),
1732
+ value: "grpcs",
1733
+ group: "grpc"
1734
+ },
1735
+ ...ne ? [
1736
+ {
1737
+ label: r("gateway_services.form.fields.protocol.options.ws"),
1738
+ value: "ws",
1739
+ group: "websocket"
1740
+ },
1741
+ {
1742
+ label: r("gateway_services.form.fields.protocol.options.wss"),
1743
+ value: "wss",
1744
+ group: "websocket"
1745
+ }
1746
+ ] : [],
1747
+ {
1748
+ label: r("gateway_services.form.fields.protocol.options.udp"),
1749
+ value: "udp",
1750
+ group: "udp"
1751
+ }
1752
+ ], re = { url: "url", protocol: "protocol" }, Pe = (t, s) => {
1753
+ s.value;
1754
+ }, oe = (t) => t ? parseFloat(t) : 0, ke = () => {
1755
+ e.fields.host = $.host, e.fields.path = $.path, e.fields.port = $.port, e.fields.protocol = $.protocol, e.fields.url = $.url, e.fields.retries = $.retries, e.fields.connect_timeout = $.connect_timeout, e.fields.write_timeout = $.write_timeout, e.fields.read_timeout = $.read_timeout, e.fields.client_certificate = $.client_certificate, e.fields.ca_certificates = $.ca_certificates, e.fields.tls_verify_enabled = $.tls_verify_enabled, e.fields.tls_verify_value = $.tls_verify_value, e.fields.enabled = $.enabled;
1756
+ }, Ve = () => {
1757
+ h.value = !0, H(), e.errorMessages = [], ke();
1758
+ }, ce = () => {
1759
+ switch (ke(), e.fields.name = `${le.name}-${(/* @__PURE__ */ new Date()).toISOString().replace(/\D/g, "").slice(0, 17)}`, w.value) {
1760
+ case "url":
1761
+ e.fields.url = `${le.protocol}://${le.host}${le.path}`;
1762
+ break;
1763
+ case "protocol":
1764
+ e.fields.host = le.host, e.fields.path = le.path, e.fields.protocol = le.protocol, e.fields.port = le.port;
1765
+ break;
1766
+ default:
1767
+ e.fields.url = `${le.protocol}://${le.host}${le.path}`;
1768
+ }
1769
+ }, ge = () => {
1770
+ if (H(), e.fields.url.length)
1771
+ try {
1772
+ const t = new URL(e.fields.url), s = ae(t.protocol, q);
1773
+ if (s) throw new Error(s);
1774
+ e.fields.protocol = t.protocol.slice(0, -1);
1775
+ const E = be(t.hostname);
1776
+ if (E) throw new Error(E);
1777
+ e.fields.host = t.hostname;
1778
+ const O = Y(t.pathname);
1779
+ if (O) throw new Error(O);
1780
+ e.fields.path = t.pathname;
1781
+ const U = he(t.port);
1782
+ if (U) throw new Error(U);
1783
+ const T = Number(t.port);
1784
+ Ie.value = !!T, e.fields.port = T || ie.getPortFromProtocol(e.fields.protocol), v("url-valid:success");
1785
+ } catch {
1786
+ v("url-valid:error", r("gateway_services.form.errors.url.invalid")), e.formFieldErrors.url = r("gateway_services.form.errors.url.invalid");
1787
+ }
1788
+ }, ye = (t) => {
1789
+ H(t);
1790
+ }, Ee = k(() => !!e.formFieldErrors.url || !!e.formFieldErrors.host || !!e.formFieldErrors.port), ee = (t) => {
1791
+ if (e.errorMessages.length) return "";
1792
+ const s = e.formFieldErrors;
1793
+ return s[t] ? s[t] : "";
1794
+ }, z = (t) => {
1795
+ H(t ?? void 0);
1796
+ const s = be(e.fields.host);
1797
+ s && (e.formFieldErrors.host = s);
1798
+ const E = Y(e.fields.path);
1799
+ E && (e.formFieldErrors.path = E);
1800
+ const O = he(e.fields.port);
1801
+ O && (e.formFieldErrors.port = O), te.value ? v("url-valid:success") : v("url-valid:error", e.errorMessages.join(",") || r("gateway_services.form.errors.url.invalid"));
1802
+ }, H = (t) => {
1803
+ if (t)
1804
+ e.formFieldErrors[t] = "";
1805
+ else
1806
+ for (let s in e.formFieldErrors)
1807
+ e.formFieldErrors[s] = "";
1808
+ e.errorMessages = [];
1809
+ }, te = k(() => {
1810
+ for (let t in e.formFieldErrors)
1811
+ if (e.formFieldErrors[t].length)
1812
+ return !1;
1813
+ return !0;
1814
+ }), de = () => {
1815
+ e.fields.url && w.value === "url" ? ge() : z();
1816
+ }, i = () => `new-service-${(/* @__PURE__ */ new Date()).toISOString().replace(/\D/g, "").slice(0, 17)}`, f = k(() => !["tcp", "tls", "tls_passthrough", "grpc", "grpcs", "udp"].includes(e.fields.protocol)), V = k(() => {
1817
+ if (w.value === "url")
1818
+ return !0;
1819
+ const t = ["https", "wss", "tls"].includes(e.fields.protocol);
1820
+ return w.value === "protocol" && t;
1821
+ }), J = k(() => {
1822
+ if (w.value === "url")
1823
+ return !0;
1824
+ const t = ["https", "tls"].includes(e.fields.protocol);
1825
+ return w.value === "protocol" && t;
1826
+ }), B = k(() => {
1827
+ if (w.value === "url")
1828
+ return !0;
1829
+ const t = ["https", "wss", "tls"].includes(e.fields.protocol);
1830
+ return w.value === "protocol" && t;
1831
+ }), R = (t) => {
1832
+ H("name"), ve.value = Se.utf8Name(t);
1833
+ }, c = k(() => {
1834
+ const t = !o.value || !x(e.fields, $), s = w.value === "url" && !!e.fields.url && te.value, E = w.value === "protocol" && !!e.fields.host && te.value;
1835
+ return t && (s || E);
1836
+ }), g = (t) => {
1837
+ var s, E, O;
1838
+ e.fields.name = (t == null ? void 0 : t.name) || "", e.fields.tags = ((s = t == null ? void 0 : t.tags) == null ? void 0 : s.join(", ")) || "", e.fields.protocol = (t == null ? void 0 : t.protocol) || "http", e.fields.path = (t == null ? void 0 : t.path) || "", e.fields.read_timeout = t != null && t.read_timeout || (t == null ? void 0 : t.read_timeout) === 0 ? t == null ? void 0 : t.read_timeout : 6e4, e.fields.retries = t != null && t.retries || (t == null ? void 0 : t.retries) === 0 ? t == null ? void 0 : t.retries : 5, e.fields.host = (t == null ? void 0 : t.host) || "", e.fields.connect_timeout = t != null && t.connect_timeout || (t == null ? void 0 : t.connect_timeout) === 0 ? t == null ? void 0 : t.connect_timeout : 6e4, e.fields.tls_verify_enabled = (t == null ? void 0 : t.tls_verify) !== "" && (t == null ? void 0 : t.tls_verify) !== null && (t == null ? void 0 : t.tls_verify) !== void 0, e.fields.tls_verify_value = t != null && t.tls_verify ? t == null ? void 0 : t.tls_verify : !1, e.fields.ca_certificates = ((E = t == null ? void 0 : t.ca_certificates) == null ? void 0 : E.join(",")) || "", e.fields.client_certificate = ((O = t == null ? void 0 : t.client_certificate) == null ? void 0 : O.id) || "", e.fields.write_timeout = t != null && t.write_timeout || (t == null ? void 0 : t.write_timeout) === 0 ? t == null ? void 0 : t.write_timeout : 6e4, e.fields.port = t != null && t.port || (t == null ? void 0 : t.port) === 0 ? t == null ? void 0 : t.port : 80, e.fields.enabled = (t == null ? void 0 : t.enabled) ?? !0, Object.assign($, e.fields);
1839
+ }, p = () => {
1840
+ L.push(a.config.cancelRoute);
1841
+ }, C = k(() => {
1842
+ var s, E;
1843
+ let t = `${a.config.apiBaseUrl}${pe.form[a.config.app].validate}`;
1844
+ return a.config.app === "konnect" ? t = t.replace(/{controlPlaneId}/gi, ((s = a.config) == null ? void 0 : s.controlPlaneId) || "") : a.config.app === "kongManager" && (t = t.replace(/\/{workspace}/gi, (E = a.config) != null && E.workspace ? `/${a.config.workspace}` : "")), t = t.replace(/{id}/gi, a.gatewayServiceId), t;
1845
+ }), K = k(() => {
1846
+ var s, E;
1847
+ let t = `${a.config.apiBaseUrl}${pe.form[a.config.app][N.value]}`;
1848
+ return a.config.app === "konnect" ? t = t.replace(/{controlPlaneId}/gi, ((s = a.config) == null ? void 0 : s.controlPlaneId) || "") : a.config.app === "kongManager" && (t = t.replace(/\/{workspace}/gi, (E = a.config) != null && E.workspace ? `/${a.config.workspace}` : "")), t = t.replace(/{id}/gi, a.gatewayServiceId), t;
1849
+ }), ue = (t) => {
1850
+ let s = "";
1851
+ t.url && (s = new URL(t.url).protocol), (["https", "wss", "tls"].includes(t.protocol) || ["https", "wss", "tls"].includes(s)) && (t.tls_verify = t.tls_verify_enabled ? t.tls_verify_value : null), delete t.tls_verify_enabled, delete t.tls_verify_value;
1852
+ }, G = k(() => {
1853
+ var s, E, O, U;
1854
+ const t = {
1855
+ name: e.fields.name || null,
1856
+ tags: e.fields.tags ? (O = (E = (s = e.fields.tags) == null ? void 0 : s.split(",")) == null ? void 0 : E.map((T) => String(T || "").trim())) == null ? void 0 : O.filter((T) => T !== "") : null,
1857
+ protocol: e.fields.protocol,
1858
+ path: e.fields.path || null,
1859
+ read_timeout: e.fields.read_timeout,
1860
+ retries: e.fields.retries,
1861
+ host: e.fields.host,
1862
+ connect_timeout: e.fields.connect_timeout,
1863
+ tls_verify_value: e.fields.tls_verify_value,
1864
+ tls_verify_enabled: e.fields.tls_verify_enabled,
1865
+ ca_certificates: e.fields.ca_certificates ? (U = e.fields.ca_certificates) == null ? void 0 : U.split(",").filter((T) => T !== "") : null,
1866
+ client_certificate: e.fields.client_certificate ? { id: e.fields.client_certificate } : null,
1867
+ write_timeout: e.fields.write_timeout,
1868
+ port: e.fields.port,
1869
+ url: e.fields.url,
1870
+ enabled: e.fields.enabled
1871
+ };
1872
+ return e.fields.client_certificate && ["https", "wss", "tls"].includes(e.fields.protocol) && (t.client_certificate = { id: e.fields.client_certificate }), e.fields.tls_verify_enabled && ["https", "wss", "tls"].includes(e.fields.protocol) && (t.tls_verify = e.fields.tls_verify_value), f.value || (t.path = null), N.value === "create" ? w.value === "url" ? (delete t.protocol, delete t.host, delete t.path, a.config.app === "konnect" && delete t.port) : delete t.url : N.value === "edit" && delete t.url, t;
1873
+ }), fe = async () => {
1874
+ var t, s, E, O;
1875
+ try {
1876
+ e.isReadonly = !0;
1877
+ const U = G.value;
1878
+ ue(U);
1879
+ let T;
1880
+ if (await A.post(C.value, U), N.value === "create" ? T = await A.post(K.value, U) : N.value === "edit" && (T = ((t = a.config) == null ? void 0 : t.app) === "konnect" ? await A.put(K.value, U) : await A.patch(K.value, U)), T) {
1881
+ const { data: d } = T;
1882
+ e.fields.name = (d == null ? void 0 : d.name) || "", e.fields.port = d.port || ie.getPortFromProtocol(d.protocol), e.fields.protocol = (d == null ? void 0 : d.protocol) || "http", e.fields.host = (d == null ? void 0 : d.host) || "", e.fields.path = (d == null ? void 0 : d.path) || "", e.fields.url = (d == null ? void 0 : d.url) || "", e.fields.retries = d != null && d.retries || (d == null ? void 0 : d.retries) === 0 ? d == null ? void 0 : d.retries : 5, e.fields.connect_timeout = d != null && d.connect_timeout || (d == null ? void 0 : d.connect_timeout) === 0 ? d == null ? void 0 : d.connect_timeout : 6e4, e.fields.write_timeout = d != null && d.write_timeout || (d == null ? void 0 : d.write_timeout) === 0 ? d == null ? void 0 : d.write_timeout : 6e4, e.fields.read_timeout = d != null && d.read_timeout || (d == null ? void 0 : d.read_timeout) === 0 ? d == null ? void 0 : d.read_timeout : 6e4, e.fields.client_certificate = ((s = d == null ? void 0 : d.client_certificate) == null ? void 0 : s.id) || "", e.fields.ca_certificates = (E = d == null ? void 0 : d.ca_certificates) != null && E.length ? d == null ? void 0 : d.ca_certificates.join(",") : "", e.fields.tls_verify_enabled = (d == null ? void 0 : d.tls_verify) !== "" && (d == null ? void 0 : d.tls_verify) !== null && (d == null ? void 0 : d.tls_verify) !== void 0, e.fields.tls_verify_value = e.fields.tls_verify_enabled && (d == null ? void 0 : d.tls_verify), e.fields.tags = (O = d == null ? void 0 : d.tags) != null && O.length ? d.tags.join(", ") : "", e.fields.enabled = (d == null ? void 0 : d.enabled) ?? !0, Object.assign($, e.fields), v("update", T == null ? void 0 : T.data);
1883
+ }
1884
+ return T;
1885
+ } catch (U) {
1886
+ const { fields: T, messages: d } = j(U);
1887
+ e.errorMessages = d, T.length && T.forEach((_e) => {
1888
+ const Ce = _e.field;
1889
+ Ce === "client_certificate.id" ? e.formFieldErrors.client_certificate = _e.message : Ce.startsWith("ca_certificates") ? e.formFieldErrors.ca_certificates = _e.message : Object.keys(e.formFieldErrors).includes(Ce) && (e.formFieldErrors = {
1890
+ ...e.formFieldErrors,
1891
+ [Ce]: _e.message
1892
+ });
1893
+ }), v("error", U);
1894
+ } finally {
1895
+ e.isReadonly = !1;
1896
+ }
1897
+ };
1898
+ return Fe(() => a.gatewayServiceId, () => {
1899
+ Object.assign(e.fields, $);
1900
+ }), Fe(e.fields, (t) => {
1901
+ e.fields.port = ie.getPortFromProtocol(t.protocol, String(t.port)), v("model-updated", G.value);
1902
+ }), He(() => {
1903
+ v("model-updated", G.value), o.value || (e.fields.name = i());
1904
+ }), X({
1905
+ validateUrl: de,
1906
+ getPayload: G,
1907
+ saveFormData: fe,
1908
+ canSubmit: c,
1909
+ initForm: g
1910
+ }), (t, s) => {
1911
+ const E = W("KRadio"), O = W("KButton"), U = W("KInput"), T = W("KSelect"), d = W("KCheckbox"), _e = W("KCollapse"), Ce = W("KAlert");
1912
+ return S(), F("div", ol, [
1913
+ u(l(Ye), {
1914
+ "can-submit": c.value,
1915
+ config: n.config,
1916
+ "edit-id": n.gatewayServiceId,
1917
+ "entity-type": l(Oe).GatewayService,
1918
+ "fetch-url": me.value,
1919
+ "form-fields": G.value,
1920
+ "is-readonly": e.isReadonly,
1921
+ onCancel: p,
1922
+ "onFetch:error": s[30] || (s[30] = (y) => t.$emit("error", y)),
1923
+ "onFetch:success": g,
1924
+ onLoading: s[31] || (s[31] = (y) => t.$emit("loading", y)),
1925
+ onSubmit: fe
1926
+ }, {
1927
+ "form-actions": m(() => [
1928
+ Ze(t.$slots, "form-actions", {
1929
+ canSubmit: c.value,
1930
+ cancel: p,
1931
+ submit: fe
1932
+ }, void 0, !0)
1933
+ ]),
1934
+ default: m(() => [
1935
+ u(l(Ke), {
1936
+ description: l(r)("gateway_services.form.sections.keys.description"),
1937
+ "hide-info-header": n.hideSectionsInfo,
1938
+ title: l(r)("gateway_services.form.sections.keys.title")
1939
+ }, {
1940
+ default: m(() => [
1941
+ o.value ? M("", !0) : (S(), F("div", il, [
1942
+ I("div", rl, [
1943
+ u(E, {
1944
+ modelValue: w.value,
1945
+ "onUpdate:modelValue": s[0] || (s[0] = (y) => w.value = y),
1946
+ card: "",
1947
+ "card-orientation": "horizontal",
1948
+ "data-testid": "gateway-service-url-radio",
1949
+ description: l(r)("gateway_services.form.sections.keys.url.description"),
1950
+ label: l(r)("gateway_services.form.sections.keys.url.label"),
1951
+ "selected-value": re.url,
1952
+ onChange: Ve
1953
+ }, null, 8, ["modelValue", "description", "label", "selected-value"]),
1954
+ u(E, {
1955
+ modelValue: w.value,
1956
+ "onUpdate:modelValue": s[1] || (s[1] = (y) => w.value = y),
1957
+ card: "",
1958
+ "card-orientation": "horizontal",
1959
+ "checked-group": "protocol",
1960
+ "data-testid": "gateway-service-protocol-radio",
1961
+ description: l(r)("gateway_services.form.sections.keys.protocol.description"),
1962
+ label: l(r)("gateway_services.form.sections.keys.protocol.label"),
1963
+ "selected-value": re.protocol,
1964
+ onChange: Ve
1965
+ }, null, 8, ["modelValue", "description", "label", "selected-value"])
1966
+ ]),
1967
+ u(We, { name: "slide-fade" }, {
1968
+ default: m(() => [
1969
+ w.value === "url" ? (S(), F("div", sl, [
1970
+ u(U, {
1971
+ modelValue: e.fields.url,
1972
+ "onUpdate:modelValue": s[2] || (s[2] = (y) => e.fields.url = y),
1973
+ modelModifiers: { trim: !0 },
1974
+ class: "gateway-service-url-input gateway-service-form-margin-bottom",
1975
+ "data-testid": "gateway-service-url-input",
1976
+ error: Ee.value,
1977
+ "error-message": ee("url"),
1978
+ label: l(r)("gateway_services.form.fields.upstream_url.label"),
1979
+ "label-attributes": {
1980
+ info: n.config.app === "konnect" ? l(r)("gateway_services.form.fields.upstream_url.tooltip_for_konnect") : l(r)("gateway_services.form.fields.upstream_url.tooltip_for_km"),
1981
+ tooltipAttributes: { maxWidth: "400" }
1982
+ },
1983
+ name: "url",
1984
+ placeholder: l(r)("gateway_services.form.fields.upstream_url.placeholder"),
1985
+ required: "",
1986
+ onInput: ge
1987
+ }, Te({ _: 2 }, [
1988
+ n.hideTrySampleApiButton ? void 0 : {
1989
+ name: "after",
1990
+ fn: m(() => [
1991
+ u(O, {
1992
+ appearance: "tertiary",
1993
+ "data-testid": "try-sample-api",
1994
+ size: "small",
1995
+ onClick: ce
1996
+ }, {
1997
+ default: m(() => [
1998
+ Z(P(l(r)("gateway_services.form.buttons.try_sample")), 1)
1999
+ ]),
2000
+ _: 1
2001
+ })
2002
+ ]),
2003
+ key: "0"
2004
+ }
2005
+ ]), 1032, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder"])
2006
+ ])) : M("", !0)
2007
+ ]),
2008
+ _: 1
2009
+ })
2010
+ ])),
2011
+ u(We, { name: "slide-fade" }, {
2012
+ default: m(() => [
2013
+ w.value === "protocol" || o.value ? (S(), F("div", al, [
2014
+ u(T, {
2015
+ modelValue: e.fields.protocol,
2016
+ "onUpdate:modelValue": s[3] || (s[3] = (y) => e.fields.protocol = y),
2017
+ "data-testid": "gateway-service-protocol-select",
2018
+ items: q,
2019
+ label: l(r)("gateway_services.form.fields.protocol.label"),
2020
+ "label-attributes": {
2021
+ info: l(r)("gateway_services.form.fields.protocol.tooltip"),
2022
+ tooltipAttributes: { maxWidth: "400" }
2023
+ },
2024
+ readonly: e.isReadonly,
2025
+ required: "",
2026
+ width: "100%",
2027
+ onSelected: s[4] || (s[4] = (y) => Pe(e.fields.protocol, y))
2028
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"]),
2029
+ u(U, {
2030
+ modelValue: e.fields.host,
2031
+ "onUpdate:modelValue": s[5] || (s[5] = (y) => e.fields.host = y),
2032
+ modelModifiers: { trim: !0 },
2033
+ class: "gateway-service-form-margin-top",
2034
+ "data-testid": "gateway-service-host-input",
2035
+ error: !!e.formFieldErrors.host,
2036
+ "error-message": ee("host"),
2037
+ label: l(r)("gateway_services.form.fields.host.label"),
2038
+ "label-attributes": {
2039
+ info: l(r)("gateway_services.form.fields.host.tooltip"),
2040
+ tooltipAttributes: { maxWidth: "400" }
2041
+ },
2042
+ name: "host",
2043
+ placeholder: l(r)("gateway_services.form.fields.host.placeholder"),
2044
+ required: "",
2045
+ onInput: s[6] || (s[6] = (y) => z("host"))
2046
+ }, Te({ _: 2 }, [
2047
+ n.hideTrySampleApiButton ? void 0 : {
2048
+ name: "after",
2049
+ fn: m(() => [
2050
+ u(O, {
2051
+ appearance: "tertiary",
2052
+ size: "small",
2053
+ onClick: ce
2054
+ }, {
2055
+ default: m(() => [
2056
+ Z(P(l(r)("gateway_services.form.buttons.try_sample")), 1)
2057
+ ]),
2058
+ _: 1
2059
+ })
2060
+ ]),
2061
+ key: "0"
2062
+ }
2063
+ ]), 1032, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder"]),
2064
+ f.value ? (S(), F("div", nl, [
2065
+ u(U, {
2066
+ modelValue: e.fields.path,
2067
+ "onUpdate:modelValue": s[7] || (s[7] = (y) => e.fields.path = y),
2068
+ modelModifiers: { trim: !0 },
2069
+ class: "gateway-service-form-margin-top",
2070
+ "data-testid": "gateway-service-path-input",
2071
+ error: !!e.formFieldErrors.path,
2072
+ "error-message": ee("path"),
2073
+ label: l(r)("gateway_services.form.fields.path.label"),
2074
+ "label-attributes": {
2075
+ info: l(r)("gateway_services.form.fields.path.tooltip"),
2076
+ tooltipAttributes: { maxWidth: "400" }
2077
+ },
2078
+ name: "path",
2079
+ placeholder: l(r)("gateway_services.form.fields.path.placeholder"),
2080
+ onInput: s[8] || (s[8] = (y) => z("path"))
2081
+ }, null, 8, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder"])
2082
+ ])) : M("", !0),
2083
+ u(U, {
2084
+ modelValue: e.fields.port,
2085
+ "onUpdate:modelValue": [
2086
+ s[9] || (s[9] = (y) => e.fields.port = y),
2087
+ s[11] || (s[11] = () => {
2088
+ e.fields.port = oe(e.fields.port + "");
2089
+ })
2090
+ ],
2091
+ class: "gateway-service-form-margin-top",
2092
+ "data-testid": "gateway-service-port-input",
2093
+ error: !!e.formFieldErrors.port,
2094
+ "error-message": ee("port"),
2095
+ label: l(r)("gateway_services.form.fields.port.label"),
2096
+ "label-attributes": {
2097
+ info: l(r)("gateway_services.form.fields.port.tooltip"),
2098
+ tooltipAttributes: { maxWidth: "400" }
2099
+ },
2100
+ name: "port",
2101
+ type: "number",
2102
+ onInput: s[10] || (s[10] = (y) => z("port"))
2103
+ }, null, 8, ["modelValue", "error", "error-message", "label", "label-attributes"])
2104
+ ])) : M("", !0)
2105
+ ]),
2106
+ _: 1
2107
+ }),
2108
+ u(_e, {
2109
+ modelValue: h.value,
2110
+ "onUpdate:modelValue": s[27] || (s[27] = (y) => h.value = y),
2111
+ "data-testid": "advanced-fields-collapse",
2112
+ "trigger-alignment": "leading",
2113
+ "trigger-label": l(r)("gateway_services.form.sections.keys.viewAdvancedFields")
2114
+ }, {
2115
+ default: m(() => [
2116
+ u(We, { name: "slide-fade" }, {
2117
+ default: m(() => [
2118
+ h.value ? M("", !0) : (S(), F("div", cl, [
2119
+ I("div", dl, [
2120
+ u(U, {
2121
+ modelValue: e.fields.retries,
2122
+ "onUpdate:modelValue": [
2123
+ s[12] || (s[12] = (y) => e.fields.retries = y),
2124
+ s[13] || (s[13] = () => {
2125
+ e.fields.retries = oe(e.fields.retries + "");
2126
+ })
2127
+ ],
2128
+ autocomplete: "off",
2129
+ "data-testid": "gateway-service-retries-input",
2130
+ label: l(r)("gateway_services.form.fields.retries.label"),
2131
+ "label-attributes": {
2132
+ info: l(r)("gateway_services.form.fields.retries.tooltip"),
2133
+ tooltipAttributes: { maxWidth: "400" }
2134
+ },
2135
+ name: "retries",
2136
+ readonly: e.isReadonly,
2137
+ type: "number"
2138
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
2139
+ ]),
2140
+ I("div", ul, [
2141
+ u(U, {
2142
+ modelValue: e.fields.connect_timeout,
2143
+ "onUpdate:modelValue": [
2144
+ s[14] || (s[14] = (y) => e.fields.connect_timeout = y),
2145
+ s[15] || (s[15] = () => {
2146
+ e.fields.connect_timeout = oe(e.fields.connect_timeout + "");
2147
+ })
2148
+ ],
2149
+ autocomplete: "off",
2150
+ "data-testid": "gateway-service-connTimeout-input",
2151
+ label: l(r)("gateway_services.form.fields.connect_timeout.label"),
2152
+ "label-attributes": {
2153
+ info: l(r)("gateway_services.form.fields.connect_timeout.tooltip"),
2154
+ tooltipAttributes: { maxWidth: "400" }
2155
+ },
2156
+ name: "connTimeout",
2157
+ readonly: e.isReadonly,
2158
+ type: "number"
2159
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
2160
+ ]),
2161
+ I("div", fl, [
2162
+ u(U, {
2163
+ modelValue: e.fields.write_timeout,
2164
+ "onUpdate:modelValue": [
2165
+ s[16] || (s[16] = (y) => e.fields.write_timeout = y),
2166
+ s[17] || (s[17] = () => {
2167
+ e.fields.write_timeout = oe(e.fields.write_timeout + "");
2168
+ })
2169
+ ],
2170
+ autocomplete: "off",
2171
+ "data-testid": "gateway-service-writeTimeout-input",
2172
+ label: l(r)("gateway_services.form.fields.write_timeout.label"),
2173
+ "label-attributes": {
2174
+ info: l(r)("gateway_services.form.fields.write_timeout.tooltip"),
2175
+ tooltipAttributes: { maxWidth: "400" }
2176
+ },
2177
+ name: "writeTimeout",
2178
+ readonly: e.isReadonly,
2179
+ type: "number"
2180
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
2181
+ ]),
2182
+ I("div", pl, [
2183
+ u(U, {
2184
+ modelValue: e.fields.read_timeout,
2185
+ "onUpdate:modelValue": [
2186
+ s[18] || (s[18] = (y) => e.fields.read_timeout = y),
2187
+ s[19] || (s[19] = () => {
2188
+ e.fields.read_timeout = oe(e.fields.read_timeout + "");
2189
+ })
2190
+ ],
2191
+ autocomplete: "off",
2192
+ "data-testid": "gateway-service-readTimeout-input",
2193
+ label: l(r)("gateway_services.form.fields.read_timeout.label"),
2194
+ "label-attributes": {
2195
+ info: l(r)("gateway_services.form.fields.read_timeout.tooltip"),
2196
+ tooltipAttributes: { maxWidth: "400" }
2197
+ },
2198
+ name: "readTimeout",
2199
+ readonly: e.isReadonly,
2200
+ type: "number"
2201
+ }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
2202
+ ]),
2203
+ V.value ? (S(), F("div", ml, [
2204
+ u(U, {
2205
+ modelValue: e.fields.client_certificate,
2206
+ "onUpdate:modelValue": s[20] || (s[20] = (y) => e.fields.client_certificate = y),
2207
+ modelModifiers: { trim: !0 },
2208
+ autocomplete: "off",
2209
+ "data-testid": "gateway-service-clientCert-input",
2210
+ error: !!e.formFieldErrors.client_certificate,
2211
+ label: l(r)("gateway_services.form.fields.client_certificate.label"),
2212
+ "label-attributes": {
2213
+ info: l(r)("gateway_services.form.fields.client_certificate.tooltip"),
2214
+ tooltipAttributes: { maxWidth: "400" }
2215
+ },
2216
+ name: "clientCert",
2217
+ placeholder: l(r)("gateway_services.form.fields.client_certificate.placeholder"),
2218
+ readonly: e.isReadonly,
2219
+ type: "text",
2220
+ onInput: s[21] || (s[21] = (y) => ye("client_certificate"))
2221
+ }, null, 8, ["modelValue", "error", "label", "label-attributes", "placeholder", "readonly"])
2222
+ ])) : M("", !0),
2223
+ J.value ? (S(), F("div", vl, [
2224
+ u(U, {
2225
+ modelValue: e.fields.ca_certificates,
2226
+ "onUpdate:modelValue": s[22] || (s[22] = (y) => e.fields.ca_certificates = y),
2227
+ modelModifiers: { trim: !0 },
2228
+ autocomplete: "off",
2229
+ "data-testid": "gateway-service-ca-certs-input",
2230
+ error: !!e.formFieldErrors.ca_certificates,
2231
+ label: l(r)("gateway_services.form.fields.ca_certificates.label"),
2232
+ "label-attributes": { tooltipAttributes: { maxWidth: "400" } },
2233
+ placeholder: l(r)("gateway_services.form.fields.ca_certificates.placeholder"),
2234
+ readonly: e.isReadonly,
2235
+ type: "text",
2236
+ onInput: s[23] || (s[23] = (y) => ye("ca_certificates"))
2237
+ }, {
2238
+ "label-tooltip": m(() => [
2239
+ u(l(Q), {
2240
+ keypath: "gateway_services.form.fields.ca_certificates.tooltip",
2241
+ scope: "global"
2242
+ }, {
2243
+ code1: m(() => [
2244
+ I("code", null, P(l(r)("gateway_services.form.fields.ca_certificates.code1")), 1)
2245
+ ]),
2246
+ code2: m(() => [
2247
+ I("code", null, P(l(r)("gateway_services.form.fields.ca_certificates.code2")), 1)
2248
+ ]),
2249
+ _: 1
2250
+ })
2251
+ ]),
2252
+ _: 1
2253
+ }, 8, ["modelValue", "error", "label", "placeholder", "readonly"])
2254
+ ])) : M("", !0),
2255
+ B.value ? (S(), F("div", gl, [
2256
+ u(d, {
2257
+ modelValue: e.fields.tls_verify_enabled,
2258
+ "onUpdate:modelValue": s[24] || (s[24] = (y) => e.fields.tls_verify_enabled = y),
2259
+ "data-testid": "gateway-service-tls-verify-checkbox",
2260
+ description: l(r)("gateway_services.form.fields.tls_verify_enabled.help"),
2261
+ label: l(r)("gateway_services.form.fields.tls_verify_enabled.label"),
2262
+ "label-attributes": { tooltipAttributes: { maxWidth: "400" } }
2263
+ }, {
2264
+ tooltip: m(() => [
2265
+ u(l(Q), {
2266
+ keypath: "gateway_services.form.fields.tls_verify_enabled.tooltip",
2267
+ scope: "global"
2268
+ }, {
2269
+ code1: m(() => [
2270
+ I("code", null, P(l(r)("gateway_services.form.fields.tls_verify_enabled.code1")), 1)
2271
+ ]),
2272
+ _: 1
2273
+ })
2274
+ ]),
2275
+ _: 1
2276
+ }, 8, ["modelValue", "description", "label"]),
2277
+ e.fields.tls_verify_enabled ? (S(), F("div", yl, [
2278
+ u(E, {
2279
+ modelValue: e.fields.tls_verify_value,
2280
+ "onUpdate:modelValue": s[25] || (s[25] = (y) => e.fields.tls_verify_value = y),
2281
+ "data-testid": "gateway-service-tls-verify-true-option",
2282
+ label: l(r)("gateway_services.form.fields.tls_verify_option.true.label"),
2283
+ "selected-value": !0
2284
+ }, null, 8, ["modelValue", "label"])
2285
+ ])) : M("", !0),
2286
+ e.fields.tls_verify_enabled ? (S(), F("div", _l, [
2287
+ u(E, {
2288
+ modelValue: e.fields.tls_verify_value,
2289
+ "onUpdate:modelValue": s[26] || (s[26] = (y) => e.fields.tls_verify_value = y),
2290
+ "data-testid": "gateway-service-tls-verify-false-option",
2291
+ label: l(r)("gateway_services.form.fields.tls_verify_option.false.label"),
2292
+ "selected-value": !1
2293
+ }, null, 8, ["modelValue", "label"])
2294
+ ])) : M("", !0)
2295
+ ])) : M("", !0)
2296
+ ]))
2297
+ ]),
2298
+ _: 1
2299
+ })
2300
+ ]),
2301
+ _: 1
2302
+ }, 8, ["modelValue", "trigger-label"])
2303
+ ]),
2304
+ _: 1
2305
+ }, 8, ["description", "hide-info-header", "title"]),
2306
+ u(l(Ke), {
2307
+ description: l(r)("gateway_services.form.sections.general.description"),
2308
+ "hide-info-header": n.hideSectionsInfo,
2309
+ title: l(r)("gateway_services.form.sections.general.title")
2310
+ }, {
2311
+ default: m(() => [
2312
+ u(U, {
2313
+ modelValue: e.fields.name,
2314
+ "onUpdate:modelValue": s[28] || (s[28] = (y) => e.fields.name = y),
2315
+ modelModifiers: { trim: !0 },
2316
+ autocomplete: "off",
2317
+ "data-testid": "gateway-service-name-input",
2318
+ error: we.value,
2319
+ "error-message": ve.value,
2320
+ label: l(r)("gateway_services.form.fields.name.label"),
2321
+ "label-attributes": {
2322
+ info: l(r)("gateway_services.form.fields.name.tooltip"),
2323
+ tooltipAttributes: { maxWidth: "400" }
2324
+ },
2325
+ name: "name",
2326
+ placeholder: l(r)("gateway_services.form.fields.name.placeholder"),
2327
+ readonly: e.isReadonly,
2328
+ type: "text",
2329
+ onInput: R
2330
+ }, null, 8, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder", "readonly"]),
2331
+ u(_e, {
2332
+ "data-testid": "tags-collapse",
2333
+ "trigger-alignment": "leading",
2334
+ "trigger-label": l(r)("gateway_services.form.fields.tags.collapse")
2335
+ }, {
2336
+ default: m(() => [
2337
+ I("div", bl, [
2338
+ u(U, {
2339
+ modelValue: e.fields.tags,
2340
+ "onUpdate:modelValue": s[29] || (s[29] = (y) => e.fields.tags = y),
2341
+ modelModifiers: { trim: !0 },
2342
+ autocomplete: "off",
2343
+ "data-testid": "gateway-service-tags-input",
2344
+ help: l(r)("gateway_services.form.fields.tags.help"),
2345
+ label: l(r)("gateway_services.form.fields.tags.label"),
2346
+ "label-attributes": {
2347
+ info: l(r)("gateway_services.form.fields.tags.tooltip"),
2348
+ tooltipAttributes: { maxWidth: "400" }
2349
+ },
2350
+ name: "tags",
2351
+ placeholder: l(r)("gateway_services.form.fields.tags.placeholder"),
2352
+ readonly: e.isReadonly,
2353
+ type: "text"
2354
+ }, null, 8, ["modelValue", "help", "label", "label-attributes", "placeholder", "readonly"])
2355
+ ])
2356
+ ]),
2357
+ _: 1
2358
+ }, 8, ["trigger-label"])
2359
+ ]),
2360
+ _: 1
2361
+ }, 8, ["description", "hide-info-header", "title"]),
2362
+ e.errorMessages.length ? (S(), $e(Ce, {
2363
+ key: 0,
2364
+ appearance: "danger",
2365
+ "data-testid": "form-error"
2366
+ }, {
2367
+ default: m(() => [
2368
+ I("ul", hl, [
2369
+ (S(!0), F(lt, null, ot(e.errorMessages, (y) => (S(), F("li", { key: y }, P(y), 1))), 128))
2370
+ ])
2371
+ ]),
2372
+ _: 1
2373
+ })) : M("", !0)
2374
+ ]),
2375
+ _: 3
2376
+ }, 8, ["can-submit", "config", "edit-id", "entity-type", "fetch-url", "form-fields", "is-readonly"])
2377
+ ]);
2378
+ };
2379
+ }
2380
+ }), Rl = /* @__PURE__ */ Ne(wl, [["__scopeId", "data-v-ce7f08af"]]), { validateHost: kl, validatePort: Vl, validateProtocol: Cl, validatePath: Sl } = se.useUrlValidators(), Tl = () => ({
2381
+ validateHost: kl,
2382
+ validatePort: Vl,
2383
+ validateProtocol: Cl,
2384
+ validatePath: Sl
2385
+ });
2386
+ export {
2387
+ xl as GatewayServiceConfigCard,
2388
+ Rl as GatewayServiceForm,
2389
+ Fl as GatewayServiceList,
2390
+ Al as LegacyGatewayServiceForm,
2391
+ Tl as useUrlValidator
2392
+ };