@kong-ui-public/entities-gateway-services 3.13.0 → 3.13.1-pr.2439.0fd184c0e.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 (36) hide show
  1. package/package.json +3 -3
  2. package/dist/entities-gateway-services.es.js +0 -1734
  3. package/dist/entities-gateway-services.umd.js +0 -1
  4. package/dist/style.css +0 -1
  5. package/dist/types/components/GatewayServiceConfigCard.vue.d.ts +0 -62
  6. package/dist/types/components/GatewayServiceConfigCard.vue.d.ts.map +0 -1
  7. package/dist/types/components/GatewayServiceForm.vue.d.ts +0 -97
  8. package/dist/types/components/GatewayServiceForm.vue.d.ts.map +0 -1
  9. package/dist/types/components/GatewayServiceList.vue.d.ts +0 -119
  10. package/dist/types/components/GatewayServiceList.vue.d.ts.map +0 -1
  11. package/dist/types/composables/getPortFromProtocol.d.ts +0 -4
  12. package/dist/types/composables/getPortFromProtocol.d.ts.map +0 -1
  13. package/dist/types/composables/index.d.ts +0 -10
  14. package/dist/types/composables/index.d.ts.map +0 -1
  15. package/dist/types/composables/useI18n.d.ts +0 -9
  16. package/dist/types/composables/useI18n.d.ts.map +0 -1
  17. package/dist/types/composables/useUrlValidators.d.ts +0 -8
  18. package/dist/types/composables/useUrlValidators.d.ts.map +0 -1
  19. package/dist/types/constants.d.ts +0 -15
  20. package/dist/types/constants.d.ts.map +0 -1
  21. package/dist/types/gateway-services-endpoints.d.ts +0 -24
  22. package/dist/types/gateway-services-endpoints.d.ts.map +0 -1
  23. package/dist/types/index.d.ts +0 -7
  24. package/dist/types/index.d.ts.map +0 -1
  25. package/dist/types/types/gateway-service-config-card.d.ts +0 -28
  26. package/dist/types/types/gateway-service-config-card.d.ts.map +0 -1
  27. package/dist/types/types/gateway-service-form.d.ts +0 -68
  28. package/dist/types/types/gateway-service-form.d.ts.map +0 -1
  29. package/dist/types/types/gateway-service-list.d.ts +0 -36
  30. package/dist/types/types/gateway-service-list.d.ts.map +0 -1
  31. package/dist/types/types/index.d.ts +0 -4
  32. package/dist/types/types/index.d.ts.map +0 -1
  33. package/dist/types/utils/index.d.ts +0 -2
  34. package/dist/types/utils/index.d.ts.map +0 -1
  35. package/dist/types/utils/urlValidator.d.ts +0 -4
  36. package/dist/types/utils/urlValidator.d.ts.map +0 -1
@@ -1,1734 +0,0 @@
1
- import { defineComponent as De, ref as R, computed as w, watch as Be, onBeforeMount as Ze, resolveComponent as D, createElementBlock as A, openBlock as S, createVNode as n, unref as o, createSlots as Ee, withCtx as d, createTextVNode as U, toDisplayString as b, createElementVNode as P, withModifiers as xe, createBlock as ue, Teleport as Je, createCommentVNode as B, reactive as Ke, onMounted as Qe, Transition as Me, Fragment as Xe, renderList as Ye, renderSlot as et } from "vue";
2
- import { useRouter as We } from "vue-router";
3
- import { BookIcon as Le, AddIcon as qe, ServicesIcon as tt } from "@kong/icons";
4
- import { createI18n as ot, i18nTComponent as rt } from "@kong-ui-public/i18n";
5
- import { useAxios as Oe, useTableState as it, useFetcher as lt, useDeleteUrlBuilder as st, FetcherStatus as at, EntityBaseTable as nt, PermissionsWrapper as de, TableTags as ct, EntityFilter as dt, EntityToggleModal as ut, EntityDeleteModal as ft, EntityTypes as pt, useHelpers as je, ConfigurationSchemaType as mt, ConfigurationSchemaSection as Ve, EntityBaseConfigCard as vt, SupportedEntityType as ze, useErrors as gt, useValidators as yt, EntityBaseFormType as Ge, useGatewayFeatureSupported as _t, EntityBaseForm as ht, EntityFormSection as Ne } from "@kong-ui-public/entities-shared";
6
- const bt = {
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
- }, wt = {
20
- placeholder: {
21
- konnect: "Filter by name",
22
- kongManager: "Filter by exact name or ID"
23
- }
24
- }, kt = {
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
- learn_more: "Learn more"
55
- },
56
- form: {
57
- buttons: {
58
- try_sample: "Try sample API"
59
- },
60
- errors: {
61
- host: {
62
- empty: "Host cannot be empty",
63
- invalid: "Invalid host"
64
- },
65
- port: {
66
- type: "Port must be a number",
67
- invalid: "Port must be between 0 and 65535"
68
- },
69
- path: {
70
- prefix: "Path must begin with /",
71
- invalid: "Path should not include characters outside of the reserved list of RFC 3986"
72
- },
73
- protocol: {
74
- empty: "Protocol cannot be empty",
75
- invalid: "Protocol - value must be one of http, https, grpc, grpcs, tcp, udp, tls, tls_passthrough, ws, wss"
76
- },
77
- url: {
78
- invalid: "The URL must follow a valid format. Example: https://api.kong-air.com/flights"
79
- }
80
- },
81
- sections: {
82
- general: {
83
- title: "General Information",
84
- description: "Provide a name and tags to help identify and manage this service."
85
- },
86
- keys: {
87
- title: "Service endpoint",
88
- description: "Define where this service should send requests.",
89
- checkedGroupLabel: "Choose how and where to send traffic",
90
- urlLabel: "Full URL",
91
- checkedGroupAltLabel: "Protocol, host, port and path",
92
- url: {
93
- label: "Full URL",
94
- description: "Define the service using a single, complete API URL for simple setup."
95
- },
96
- protocol: {
97
- label: "Protocol, host, port, and path",
98
- description: "Manually specify each component of the API’s URL for advanced configurations."
99
- },
100
- viewAdvancedFields: "View advanced fields"
101
- }
102
- },
103
- fields: {
104
- upstream_url: {
105
- label: "Full URL",
106
- placeholder: "e.g. https://api.kong-air.com/flights",
107
- tooltip_for_konnect: "This is the URL of the API you will manage in Konnect.",
108
- tooltip_for_km: "This is the URL of the API you will manage in Kong Gateway."
109
- },
110
- name: {
111
- label: "Name",
112
- placeholder: "Enter a unique name",
113
- tooltip: "The Service name."
114
- },
115
- protocol: {
116
- label: "Protocol",
117
- tooltip: "The protocol used to communicate with the upstream.",
118
- options: {
119
- http: "http",
120
- https: "https",
121
- tcp: "tcp",
122
- tls: "tls",
123
- tls_passthrough: "tls_passthrough",
124
- grpc: "grpc",
125
- grpcs: "grpcs",
126
- ws: "ws",
127
- wss: "wss",
128
- udp: "udp"
129
- }
130
- },
131
- host: {
132
- label: "Host",
133
- placeholder: "e.g. api.kong-air.com",
134
- tooltip: "The host of the upstream server. Note that the host value is case sensitive."
135
- },
136
- path: {
137
- label: "Path",
138
- placeholder: "e.g. /sample",
139
- tooltip: "The path to be used in request to the upstream server."
140
- },
141
- port: {
142
- label: "Port",
143
- tooltip: "The upstream server port."
144
- },
145
- retries: {
146
- label: "Retries",
147
- tooltip: "The number of retries to execute upon failure to proxy."
148
- },
149
- connect_timeout: {
150
- label: "Connection timeout",
151
- tooltip: "The timeout in milliseconds for establishing a connection to the upstream server."
152
- },
153
- write_timeout: {
154
- label: "Write timeout",
155
- tooltip: "The timeout in milliseconds between two successive write operations for transmitting a request to the upstream server."
156
- },
157
- read_timeout: {
158
- label: "Read timeout",
159
- tooltip: "The timeout in milliseconds between two successive read operations for transmitting a request to the upstream server."
160
- },
161
- client_certificate: {
162
- label: "Client certificate",
163
- placeholder: "Enter a Certificate ID",
164
- tooltip: "Certificate to be used as client certificate while TLS handshaking to the upstream server."
165
- },
166
- ca_certificates: {
167
- label: "CA certificates",
168
- placeholder: "Enter a comma separated list of CA Certificate IDs",
169
- 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).",
170
- code1: "CA Certificate",
171
- code2: "null"
172
- },
173
- tls_verify_enabled: {
174
- label: "TLS verify",
175
- help: "If unchecked, use default system setting",
176
- tooltip: "Whether to enable verification of upstream server TLS certificate. If set to {code1}, then the Nginx default is respected.",
177
- code1: "null"
178
- },
179
- tls_verify_option: {
180
- unset: {
181
- display: "Use default system setting"
182
- },
183
- true: {
184
- label: "True",
185
- display: "On"
186
- },
187
- false: {
188
- label: "False",
189
- display: "Off"
190
- }
191
- },
192
- tags: {
193
- label: "Tags",
194
- tooltip: "An optional set of strings associated with the Service for grouping and filtering.",
195
- placeholder: "Enter a list of tags separated by comma",
196
- help: "e.g. tag1, tag2, tag3",
197
- collapse: "Add tags"
198
- },
199
- enabled: {
200
- label: "Enabled",
201
- 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}.",
202
- false: "false",
203
- true: "true"
204
- }
205
- }
206
- }
207
- }, Vt = {
208
- general: "Gateway Services could not be retrieved",
209
- delete: "The gateway service could not be deleted at this time.",
210
- copy: "Failed to copy to clipboard",
211
- urlErrorMessage: "Error: invalid URL"
212
- }, Ct = {
213
- success: "Copied {val} to clipboard",
214
- success_brief: "Successfully copied to clipboard"
215
- }, St = {
216
- gateway_services: "gateway services"
217
- }, Et = {
218
- actions: bt,
219
- search: wt,
220
- gateway_services: kt,
221
- errors: Vt,
222
- copy: Ct,
223
- glossary: St
224
- };
225
- function Pt() {
226
- const a = ot("en-us", Et);
227
- return {
228
- i18n: a,
229
- i18nT: rt(a)
230
- // Translation component <i18n-t>
231
- };
232
- }
233
- function It() {
234
- return {
235
- getPortFromProtocol: (q, p) => {
236
- const c = [80, 443], s = Number(p);
237
- if ((s || s === 0) && !c.includes(s))
238
- return s;
239
- switch (q) {
240
- case "grpcs":
241
- case "tls":
242
- case "https":
243
- case "wss":
244
- return 443;
245
- case "grpc":
246
- case "tcp":
247
- case "http":
248
- case "ws":
249
- default:
250
- return 80;
251
- }
252
- }
253
- };
254
- }
255
- function Ft() {
256
- const { i18n: { t: a } } = ee.useI18n();
257
- return {
258
- validateHost: (v) => {
259
- if (!v || v.trim() === "") return a("gateway_services.form.errors.host.empty");
260
- const $ = /^(?!:\/\/)([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})?$/;
261
- 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(v) || $.test(v) ? "" : a("gateway_services.form.errors.host.invalid");
262
- },
263
- validateProtocol: (v, $) => !v || v.trim() === "" ? a("gateway_services.form.errors.protocol.empty") : (v = v.slice(0, -1), $.find((l) => {
264
- if (l.value === v) return l;
265
- }) === void 0 ? a("gateway_services.form.errors.protocol.invalid") : ""),
266
- validatePath: (v) => !v || v === "" ? "" : v.startsWith("/") ? /[^A-Za-z0-9\-._~:/?#[\]@!$&'()*+,;=%]/.test(v) ? a("gateway_services.form.errors.path.invalid") : "" : a("gateway_services.form.errors.path.prefix"),
267
- validatePort: (v) => {
268
- if (v == null || v === "")
269
- return "";
270
- const $ = typeof v == "string" ? parseInt(v, 10) : v;
271
- return isNaN($) ? a("gateway_services.form.errors.port.type") : $ < 0 || $ > 65535 ? a("gateway_services.form.errors.port.invalid") : "";
272
- }
273
- };
274
- }
275
- const ee = {
276
- useI18n: Pt,
277
- usePortFromProtocol: It,
278
- useUrlValidators: Ft
279
- }, Ce = "/v2/control-planes/{controlPlaneId}/core-entities", Se = "/{workspace}", fe = {
280
- list: {
281
- konnect: {
282
- all: `${Ce}/services`
283
- },
284
- kongManager: {
285
- all: `${Se}/services`
286
- }
287
- },
288
- form: {
289
- konnect: {
290
- create: `${Ce}/services`,
291
- validate: `${Ce}/v1/schemas/json/service/validate`,
292
- edit: `${Ce}/services/{id}`
293
- },
294
- kongManager: {
295
- create: `${Se}/services`,
296
- validate: `${Se}/schemas/services/validate`,
297
- edit: `${Se}/services/{id}`
298
- }
299
- }
300
- }, $t = { class: "kong-ui-entities-gateway-services-list" }, At = { class: "button-row" }, Tt = { key: 1 }, Ut = /* @__PURE__ */ De({
301
- __name: "GatewayServiceList",
302
- props: {
303
- /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
304
- config: {
305
- type: Object,
306
- required: !0,
307
- validator: (a) => !(!a || !["konnect", "kongManager"].includes(a == null ? void 0 : a.app) || !a.createRoute || !a.getViewRoute || !a.getEditRoute || a.app === "kongManager" && !a.isExactMatch && !a.filterSchema)
308
- },
309
- // used to override the default identifier for the cache entry
310
- cacheIdentifier: {
311
- type: String,
312
- default: ""
313
- },
314
- /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can create a new entity */
315
- canCreate: {
316
- type: Function,
317
- required: !1,
318
- default: async () => !0
319
- },
320
- /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can delete a given entity */
321
- canDelete: {
322
- type: Function,
323
- required: !1,
324
- default: async () => !0
325
- },
326
- /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can edit a given entity */
327
- canEdit: {
328
- type: Function,
329
- required: !1,
330
- default: async () => !0
331
- },
332
- /** A synchronous or asynchronous function, that returns a boolean, that evaluates if the user can retrieve (view details) a given entity */
333
- canRetrieve: {
334
- type: Function,
335
- required: !1,
336
- default: async () => !0
337
- },
338
- /** default to false, setting to true will teleport the toolbar button to the destination in the consuming app */
339
- useActionOutside: {
340
- type: Boolean,
341
- default: !1
342
- },
343
- /** user is onboarding, use onboarding text */
344
- isServerless: {
345
- type: Boolean,
346
- default: !1
347
- }
348
- },
349
- emits: ["error", "click:learn-more", "copy:success", "copy:error", "delete:success", "toggle:success"],
350
- setup(a, { emit: q }) {
351
- var ke;
352
- const p = q, c = a, { i18n: { t: s, formatUnixTimeStamp: v } } = ee.useI18n(), $ = We(), { axiosInstance: G } = Oe((ke = c.config) == null ? void 0 : ke.axiosRequestConfig), { hasRecords: l, handleStateChange: K } = it(() => j.value), E = w(() => l.value && c.config.app === "konnect"), Pe = w(() => c.config.app !== "kongManager" || !!c.config.disableSorting), se = {
353
- // the Name column is non-hidable
354
- name: { label: s("gateway_services.list.table_headers.name"), searchable: !0, sortable: !0, hidable: !1 },
355
- ...c.config.showControlPlaneColumn ? { control_plane: { label: s("gateway_services.list.table_headers.control_plane") } } : {},
356
- protocol: { label: s("gateway_services.list.table_headers.protocol"), searchable: !0, sortable: !0 },
357
- host: { label: s("gateway_services.list.table_headers.host"), searchable: !0, sortable: !0 },
358
- port: { label: s("gateway_services.list.table_headers.port"), searchable: !0, sortable: !0 },
359
- path: { label: s("gateway_services.list.table_headers.path"), searchable: !0, sortable: !0 },
360
- enabled: { label: s("gateway_services.list.table_headers.enabled"), searchable: !0, sortable: !0 },
361
- tags: { label: s("gateway_services.list.table_headers.tags"), sortable: !1 },
362
- updated_at: { label: s("gateway_services.list.table_headers.updated_at"), sortable: !0 },
363
- created_at: { label: s("gateway_services.list.table_headers.created_at"), sortable: !0 }
364
- }, pe = {
365
- columnVisibility: {
366
- created_at: !1
367
- }
368
- }, me = se, te = w(() => {
369
- var g, y;
370
- let f = `${c.config.apiBaseUrl}${fe.list[c.config.app].all}`;
371
- return c.config.app === "konnect" ? f = f.replace(/{controlPlaneId}/gi, ((g = c.config) == null ? void 0 : g.controlPlaneId) || "") : c.config.app === "kongManager" && (f = f.replace(/\/{workspace}/gi, (y = c.config) != null && y.workspace ? `/${c.config.workspace}` : "")), f;
372
- }), Ie = w(() => c.config.apiBaseUrl.startsWith("/") ? new URL(`${window.location.origin}${te.value}`) : new URL(te.value)), j = R(""), H = w(() => {
373
- const f = c.config.app === "konnect" || c.config.isExactMatch;
374
- if (f)
375
- return {
376
- isExactMatch: f,
377
- placeholder: s(`search.placeholder.${c.config.app}`)
378
- };
379
- const { name: g, enabled: y, protocol: I, host: W, port: O, path: M } = se;
380
- return {
381
- isExactMatch: f,
382
- fields: { name: g, enabled: y, protocol: I, host: W, port: O, path: M },
383
- schema: c.config.filterSchema
384
- };
385
- }), {
386
- fetcher: Fe,
387
- fetcherState: Z,
388
- fetcherCacheKey: C
389
- } = lt(w(() => ({ ...c.config, cacheIdentifier: c.cacheIdentifier })), te), ae = () => {
390
- j.value = "";
391
- }, ne = () => {
392
- C.value++;
393
- }, oe = R(null), e = w(() => ({
394
- ctaPath: c.config.createRoute,
395
- ctaText: ie.value ? c.isServerless ? s("actions.serverless_create") : s("actions.create") : void 0,
396
- message: `${s("gateway_services.list.empty_state.description")}${c.config.additionMessageForEmptyState ? ` ${c.config.additionMessageForEmptyState}` : ""}`,
397
- title: ie.value ? c.isServerless ? s("gateway_services.list.empty_state.serverless_title") : s("gateway_services.list.empty_state.title") : s("gateway_services.title")
398
- })), k = R(!1), x = R(null), re = w(() => {
399
- const f = {
400
- action: "disable",
401
- id: "",
402
- name: ""
403
- };
404
- if (x.value) {
405
- const { enabled: g, id: y, name: I } = x.value;
406
- f.action = g ? "disable" : "enable", f.id = y, f.name = I || y;
407
- }
408
- return f;
409
- }), ve = (f) => {
410
- k.value = !0, x.value = f;
411
- }, ge = () => {
412
- k.value = !1, x.value = null;
413
- }, J = async () => {
414
- var I, W;
415
- if (!await ((I = c.canEdit) == null ? void 0 : I.call(c, x.value)) || !x.value)
416
- return;
417
- const g = `${Ie.value.href}/${x.value.id}`, y = !x.value.enabled;
418
- try {
419
- const { data: O } = ((W = c.config) == null ? void 0 : W.app) === "konnect" ? await G.put(g, { ...x.value, enabled: y }) : await G.patch(g, { ...x.value, enabled: y });
420
- p("toggle:success", O), x.value.enabled = y;
421
- } catch (O) {
422
- p("error", O);
423
- }
424
- }, ye = (f) => {
425
- c.config.getControlPlaneRoute && $.push(c.config.getControlPlaneRoute(f));
426
- }, _e = async (f, g) => {
427
- const y = f.id;
428
- if (!await g(y)) {
429
- p("copy:error", {
430
- entity: f,
431
- field: "id",
432
- message: s("errors.copy")
433
- });
434
- return;
435
- }
436
- p("copy:success", {
437
- entity: f,
438
- field: "id",
439
- message: s("copy.success", { val: y })
440
- });
441
- }, he = async (f, g) => {
442
- const y = JSON.stringify(f);
443
- if (!await g(y)) {
444
- p("copy:error", {
445
- entity: f,
446
- message: s("errors.copy")
447
- });
448
- return;
449
- }
450
- p("copy:success", {
451
- entity: f,
452
- message: s("copy.success_brief")
453
- });
454
- }, be = async (f) => {
455
- var y;
456
- await ((y = c.canRetrieve) == null ? void 0 : y.call(c, f)) && $.push(c.config.getViewRoute(f.id));
457
- }, we = (f) => ({
458
- label: s("actions.view"),
459
- to: c.config.getViewRoute(f)
460
- }), $e = (f) => ({
461
- label: s("actions.edit"),
462
- to: c.config.getEditRoute(f)
463
- }), T = R(void 0), z = R(!1), N = R(!1), Q = R(""), Ae = st(c.config, te.value), Te = (f) => {
464
- T.value = f, z.value = !0, Q.value = "";
465
- }, ce = () => {
466
- z.value = !1, T.value = void 0;
467
- }, Ue = async () => {
468
- var f, g, y;
469
- if ((f = T.value) != null && f.id) {
470
- N.value = !0;
471
- try {
472
- await G.delete(Ae(T.value.id)), p("delete:success", T.value), ce(), C.value++;
473
- } catch (I) {
474
- Q.value = ((y = (g = I.response) == null ? void 0 : g.data) == null ? void 0 : y.message) || I.message || s("errors.delete"), p("error", I);
475
- } finally {
476
- N.value = !1;
477
- }
478
- }
479
- }, Re = () => {
480
- $.push(c.config.createRoute);
481
- };
482
- Be(Z, (f) => {
483
- var g, y, I;
484
- if (f.status === at.Error) {
485
- oe.value = {
486
- title: s("errors.general")
487
- }, (I = (y = (g = f.error) == null ? void 0 : g.response) == null ? void 0 : y.data) != null && I.message && (oe.value.message = f.error.response.data.message), p("error", f.error);
488
- return;
489
- }
490
- oe.value = null;
491
- });
492
- const ie = R(!1);
493
- return Ze(async () => {
494
- ie.value = await c.canCreate();
495
- }), (f, g) => {
496
- const y = D("KButton"), I = D("KEmptyState"), W = D("KBadge"), O = D("KInputSwitch"), M = D("KDropdownItem"), X = D("KClipboardProvider");
497
- return S(), A("div", $t, [
498
- n(o(nt), {
499
- "cache-identifier": a.cacheIdentifier,
500
- "default-table-preferences": pe,
501
- "disable-sorting": Pe.value,
502
- "empty-state-options": e.value,
503
- "enable-entity-actions": "",
504
- "error-message": oe.value,
505
- fetcher: o(Fe),
506
- "fetcher-cache-key": o(C),
507
- "pagination-type": "offset",
508
- "preferences-storage-key": "kong-ui-entities-gateway-services-list",
509
- query: j.value,
510
- "table-headers": o(me),
511
- onClearSearchInput: ae,
512
- "onClick:row": g[4] || (g[4] = (m) => be(m)),
513
- onSort: ne,
514
- onState: o(K)
515
- }, Ee({
516
- "toolbar-filter": d(() => [
517
- n(o(dt), {
518
- modelValue: j.value,
519
- "onUpdate:modelValue": g[0] || (g[0] = (m) => j.value = m),
520
- config: H.value
521
- }, null, 8, ["modelValue", "config"])
522
- ]),
523
- "toolbar-button": d(() => [
524
- (S(), ue(Je, {
525
- disabled: !a.useActionOutside,
526
- to: "#kong-ui-app-page-header-action-button"
527
- }, [
528
- P("div", At, [
529
- E.value ? (S(), ue(y, {
530
- key: 0,
531
- appearance: "secondary",
532
- class: "open-learning-hub",
533
- "data-testid": "gateway-services-learn-more-button",
534
- icon: "",
535
- onClick: g[1] || (g[1] = (m) => f.$emit("click:learn-more"))
536
- }, {
537
- default: d(() => [
538
- n(o(Le), { decorative: "" })
539
- ]),
540
- _: 1
541
- })) : B("", !0),
542
- n(o(de), {
543
- "auth-function": () => a.canCreate()
544
- }, {
545
- default: d(() => [
546
- n(y, {
547
- appearance: "primary",
548
- "data-testid": "toolbar-add-gateway-service",
549
- size: a.useActionOutside ? "medium" : "large",
550
- to: a.config.createRoute
551
- }, {
552
- default: d(() => [
553
- n(o(qe)),
554
- U(" " + b(o(s)("gateway_services.list.toolbar_actions.new_gateway_service")), 1)
555
- ]),
556
- _: 1
557
- }, 8, ["size", "to"])
558
- ]),
559
- _: 1
560
- }, 8, ["auth-function"])
561
- ])
562
- ], 8, ["disabled"]))
563
- ]),
564
- name: d(({ rowValue: m }) => [
565
- P("b", null, b(m ?? "-"), 1)
566
- ]),
567
- control_plane: d(({ row: m }) => {
568
- var t;
569
- return [
570
- (t = m.x_meta) != null && t.cluster_id ? (S(), ue(W, {
571
- key: 0,
572
- tooltip: m.x_meta.cluster_id,
573
- "truncation-tooltip": "",
574
- onClick: xe((r) => ye(m.x_meta.cluster_id), ["stop"])
575
- }, {
576
- default: d(() => [
577
- U(b(m.x_meta.cluster_id), 1)
578
- ]),
579
- _: 2
580
- }, 1032, ["tooltip", "onClick"])) : (S(), A("b", Tt, "-"))
581
- ];
582
- }),
583
- enabled: d(({ row: m }) => [
584
- n(o(de), {
585
- "auth-function": () => a.canEdit(m),
586
- "force-show": ""
587
- }, {
588
- default: d(({ isAllowed: t }) => [
589
- P("div", {
590
- onClick: g[3] || (g[3] = xe(() => {
591
- }, ["stop"]))
592
- }, [
593
- n(O, {
594
- modelValue: m.enabled,
595
- "onUpdate:modelValue": (r) => m.enabled = r,
596
- "data-testid": `row-${m.id}-toggle-input`,
597
- disabled: !t,
598
- onClick: xe((r) => ve(m), ["prevent"])
599
- }, null, 8, ["modelValue", "onUpdate:modelValue", "data-testid", "disabled", "onClick"])
600
- ])
601
- ]),
602
- _: 2
603
- }, 1032, ["auth-function"])
604
- ]),
605
- tags: d(({ rowValue: m }) => [
606
- n(o(ct), { tags: m }, null, 8, ["tags"])
607
- ]),
608
- created_at: d(({ rowValue: m }) => [
609
- U(b(o(v)(m)), 1)
610
- ]),
611
- updated_at: d(({ row: m, rowValue: t }) => [
612
- U(b(o(v)(t ?? m.created_at)), 1)
613
- ]),
614
- actions: d(({ row: m }) => [
615
- n(X, null, {
616
- default: d(({ copyToClipboard: t }) => [
617
- n(M, {
618
- "data-testid": "action-entity-copy-id",
619
- onClick: (r) => _e(m, t)
620
- }, {
621
- default: d(() => [
622
- U(b(o(s)("actions.copy_id")), 1)
623
- ]),
624
- _: 2
625
- }, 1032, ["onClick"])
626
- ]),
627
- _: 2
628
- }, 1024),
629
- n(X, null, {
630
- default: d(({ copyToClipboard: t }) => [
631
- n(M, {
632
- "data-testid": "action-entity-copy-json",
633
- onClick: (r) => he(m, t)
634
- }, {
635
- default: d(() => [
636
- U(b(o(s)("actions.copy_json")), 1)
637
- ]),
638
- _: 2
639
- }, 1032, ["onClick"])
640
- ]),
641
- _: 2
642
- }, 1024),
643
- n(o(de), {
644
- "auth-function": () => a.canRetrieve(m)
645
- }, {
646
- default: d(() => [
647
- n(M, {
648
- "data-testid": "action-entity-view",
649
- "has-divider": "",
650
- item: we(m.id)
651
- }, null, 8, ["item"])
652
- ]),
653
- _: 2
654
- }, 1032, ["auth-function"]),
655
- n(o(de), {
656
- "auth-function": () => a.canEdit(m)
657
- }, {
658
- default: d(() => [
659
- n(M, {
660
- "data-testid": "action-entity-edit",
661
- item: $e(m.id)
662
- }, null, 8, ["item"])
663
- ]),
664
- _: 2
665
- }, 1032, ["auth-function"]),
666
- n(o(de), {
667
- "auth-function": () => a.canDelete(m)
668
- }, {
669
- default: d(() => [
670
- n(M, {
671
- danger: "",
672
- "data-testid": "action-entity-delete",
673
- "has-divider": "",
674
- onClick: (t) => Te(m)
675
- }, {
676
- default: d(() => [
677
- U(b(o(s)("actions.delete.menu_label")), 1)
678
- ]),
679
- _: 2
680
- }, 1032, ["onClick"])
681
- ]),
682
- _: 2
683
- }, 1032, ["auth-function"])
684
- ]),
685
- _: 2
686
- }, [
687
- !j.value && a.config.app === "konnect" ? {
688
- name: "empty-state",
689
- fn: d(() => {
690
- var m;
691
- return [
692
- n(I, {
693
- "data-testid": "gateway-services-entity-empty-state",
694
- "icon-background": "",
695
- message: o(s)("gateway_services.empty_state_v2.description"),
696
- title: o(s)("gateway_services.empty_state_v2.title")
697
- }, Ee({
698
- icon: d(() => [
699
- n(o(tt), { decorative: "" })
700
- ]),
701
- action: d(() => [
702
- ie.value ? (S(), ue(y, {
703
- key: 0,
704
- "data-testid": "entity-create-button",
705
- onClick: Re
706
- }, {
707
- default: d(() => [
708
- n(o(qe), { decorative: "" }),
709
- U(" " + b(o(s)("gateway_services.empty_state_v2.create")), 1)
710
- ]),
711
- _: 1
712
- })) : B("", !0),
713
- n(y, {
714
- appearance: "secondary",
715
- "data-testid": "entity-learn-more-button",
716
- onClick: g[2] || (g[2] = (t) => f.$emit("click:learn-more"))
717
- }, {
718
- default: d(() => [
719
- n(o(Le), { decorative: "" }),
720
- U(" " + b(o(s)("gateway_services.empty_state_v2.learn_more")), 1)
721
- ]),
722
- _: 1
723
- })
724
- ]),
725
- _: 2
726
- }, [
727
- (m = a.config) != null && m.isControlPlaneGroup ? {
728
- name: "default",
729
- fn: d(() => [
730
- U(b(o(s)("gateway_services.empty_state_v2.group")), 1)
731
- ]),
732
- key: "0"
733
- } : void 0
734
- ]), 1032, ["message", "title"])
735
- ];
736
- }),
737
- key: "0"
738
- } : void 0
739
- ]), 1032, ["cache-identifier", "disable-sorting", "empty-state-options", "error-message", "fetcher", "fetcher-cache-key", "query", "table-headers", "onState"]),
740
- n(o(ut), {
741
- action: re.value.action,
742
- "entity-id": re.value.id,
743
- "entity-name": re.value.name,
744
- "entity-type": o(s)("glossary.gateway_services"),
745
- "on-confirm": J,
746
- visible: k.value,
747
- onCancel: ge,
748
- onProceed: ge
749
- }, null, 8, ["action", "entity-id", "entity-name", "entity-type", "visible"]),
750
- n(o(ft), {
751
- "action-pending": N.value,
752
- description: o(s)("actions.delete.description"),
753
- "entity-name": T.value && (T.value.name || T.value.id),
754
- "entity-type": o(pt).GatewayService,
755
- error: Q.value,
756
- title: o(s)("actions.delete.title"),
757
- visible: z.value,
758
- onCancel: ce,
759
- onProceed: Ue
760
- }, null, 8, ["action-pending", "description", "entity-name", "entity-type", "error", "title", "visible"])
761
- ]);
762
- };
763
- }
764
- }), He = (a, q) => {
765
- const p = a.__vccOpts || a;
766
- for (const [c, s] of q)
767
- p[c] = s;
768
- return p;
769
- }, co = /* @__PURE__ */ He(Ut, [["__scopeId", "data-v-0ab33d23"]]), Rt = { class: "kong-ui-gateway-service-entity-config-card" }, uo = /* @__PURE__ */ De({
770
- __name: "GatewayServiceConfigCard",
771
- props: {
772
- /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
773
- config: {
774
- type: Object,
775
- required: !0,
776
- validator: (a) => !(!a || !["konnect", "kongManager"].includes(a == null ? void 0 : a.app) || a.app === "konnect" && !a.controlPlaneId || a.app === "kongManager" && typeof a.workspace != "string" || !a.entityId)
777
- },
778
- /**
779
- * External link for documentation that determines visibility of Documentation button
780
- */
781
- configCardDoc: {
782
- type: String,
783
- default: "",
784
- required: !1
785
- },
786
- /**
787
- * Control visibility of card title content
788
- */
789
- hideTitle: {
790
- type: Boolean,
791
- default: !1
792
- }
793
- },
794
- emits: ["loading", "fetch:error", "fetch:success"],
795
- setup(a) {
796
- const q = a, { i18n: { t: p }, i18nT: c } = ee.useI18n(), s = w(() => fe.form[q.config.app].edit), { getPropValue: v } = je(), $ = (l, K) => v(l, K) === !0 ? p("gateway_services.form.fields.tls_verify_option.true.display") : p("gateway_services.form.fields.tls_verify_option.false.display"), G = R({
797
- id: {},
798
- name: {
799
- tooltip: p("gateway_services.form.fields.name.tooltip")
800
- },
801
- enabled: {},
802
- updated_at: {},
803
- created_at: {},
804
- protocol: {
805
- section: Ve.Basic,
806
- tooltip: p("gateway_services.form.fields.protocol.tooltip")
807
- },
808
- host: {
809
- section: Ve.Basic,
810
- tooltip: p("gateway_services.form.fields.host.tooltip")
811
- },
812
- path: {
813
- section: Ve.Basic,
814
- tooltip: p("gateway_services.form.fields.path.tooltip")
815
- },
816
- port: {
817
- section: Ve.Basic,
818
- tooltip: p("gateway_services.form.fields.port.tooltip")
819
- },
820
- tags: {
821
- tooltip: p("gateway_services.form.fields.tags.tooltip")
822
- },
823
- // advanced fields
824
- retries: {
825
- order: 1,
826
- tooltip: p("gateway_services.form.fields.retries.tooltip")
827
- },
828
- connect_timeout: {
829
- order: 2,
830
- tooltip: p("gateway_services.form.fields.connect_timeout.tooltip")
831
- },
832
- write_timeout: {
833
- order: 3,
834
- tooltip: p("gateway_services.form.fields.write_timeout.tooltip")
835
- },
836
- read_timeout: {
837
- order: 4,
838
- tooltip: p("gateway_services.form.fields.read_timeout.tooltip")
839
- },
840
- client_certificate: {
841
- order: 5,
842
- tooltip: p("gateway_services.form.fields.client_certificate.tooltip")
843
- },
844
- ca_certificates: {
845
- type: mt.BadgeTag,
846
- label: p("gateway_services.form.fields.ca_certificates.label"),
847
- order: 6
848
- },
849
- tls_verify: {
850
- label: p("gateway_services.form.fields.tls_verify_enabled.label")
851
- },
852
- tls_verify_depth: {
853
- hidden: !0
854
- }
855
- });
856
- return (l, K) => (S(), A("div", Rt, [
857
- n(o(vt), {
858
- config: a.config,
859
- "config-card-doc": a.configCardDoc,
860
- "config-schema": G.value,
861
- "entity-type": o(ze).GatewayService,
862
- "fetch-url": s.value,
863
- "hide-title": a.hideTitle,
864
- "onFetch:error": K[0] || (K[0] = (E) => l.$emit("fetch:error", E)),
865
- "onFetch:success": K[1] || (K[1] = (E) => l.$emit("fetch:success", E)),
866
- onLoading: K[2] || (K[2] = (E) => l.$emit("loading", E))
867
- }, {
868
- "enabled-label-tooltip": d(() => [
869
- n(o(c), {
870
- keypath: "gateway_services.form.fields.enabled.tooltip",
871
- scope: "global"
872
- }, {
873
- false: d(() => [
874
- P("code", null, b(o(p)("gateway_services.form.fields.enabled.false")), 1)
875
- ]),
876
- true: d(() => [
877
- P("code", null, b(o(p)("gateway_services.form.fields.enabled.true")), 1)
878
- ]),
879
- _: 1
880
- })
881
- ]),
882
- "ca_certificates-label-tooltip": d(() => [
883
- n(o(c), {
884
- keypath: "gateway_services.form.fields.ca_certificates.tooltip",
885
- scope: "global"
886
- }, {
887
- code1: d(() => [
888
- P("code", null, b(o(p)("gateway_services.form.fields.ca_certificates.code1")), 1)
889
- ]),
890
- code2: d(() => [
891
- P("code", null, b(o(p)("gateway_services.form.fields.ca_certificates.code2")), 1)
892
- ]),
893
- _: 1
894
- })
895
- ]),
896
- "tls_verify-label-tooltip": d(() => [
897
- n(o(c), {
898
- keypath: "gateway_services.form.fields.tls_verify_enabled.tooltip",
899
- scope: "global"
900
- }, {
901
- code1: d(() => [
902
- P("code", null, b(o(p)("gateway_services.form.fields.tls_verify_enabled.code1")), 1)
903
- ]),
904
- _: 1
905
- })
906
- ]),
907
- tls_verify: d((E) => [
908
- U(b(typeof o(v)("rowValue", E) == "boolean" ? $("rowValue", E) : o(p)("gateway_services.form.fields.tls_verify_option.unset.display")), 1)
909
- ]),
910
- client_certificate: d((E) => [
911
- U(b(o(v)("rowValue", E) ? o(v)("rowValue", E).id : "–"), 1)
912
- ]),
913
- _: 1
914
- }, 8, ["config", "config-card-doc", "config-schema", "entity-type", "fetch-url", "hide-title"])
915
- ]));
916
- }
917
- }), L = {
918
- name: "Kong-Air-Flights-API",
919
- protocol: "https",
920
- path: "/flights",
921
- host: "api.kong-air.com",
922
- port: 443
923
- }, xt = { class: "kong-ui-entities-gateway-service-form" }, Mt = {
924
- key: 0,
925
- class: "gateway-service-form-general-info"
926
- }, Bt = { class: "gateway-service-form-group-selection-wrapper" }, Dt = {
927
- key: 0,
928
- class: "gateway-service-form-group-fields"
929
- }, Kt = {
930
- key: 0,
931
- class: "gateway-service-form-group-fields"
932
- }, Lt = { key: 0 }, qt = {
933
- key: 0,
934
- class: "gateway-service-form-advanced-fields"
935
- }, Gt = { class: "gateway-service-form-margin-bottom" }, Nt = { class: "gateway-service-form-margin-bottom" }, Wt = { class: "gateway-service-form-margin-bottom" }, Ot = { class: "gateway-service-form-margin-bottom" }, jt = {
936
- key: 0,
937
- class: "gateway-service-form-margin-bottom"
938
- }, zt = {
939
- key: 1,
940
- class: "gateway-service-form-margin-bottom"
941
- }, Ht = {
942
- key: 2,
943
- class: "gateway-service-form-margin-bottom"
944
- }, Zt = {
945
- key: 0,
946
- class: "checkbox-aligned-radio"
947
- }, Jt = {
948
- key: 1,
949
- class: "checkbox-aligned-radio"
950
- }, Qt = { class: "gateway-service-form-tags" }, Xt = { class: "form-error-list" }, Yt = /* @__PURE__ */ De({
951
- __name: "GatewayServiceForm",
952
- props: {
953
- /** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
954
- config: {
955
- type: Object,
956
- required: !0,
957
- validator: (a) => !(!a || !["konnect", "kongManager"].includes(a == null ? void 0 : a.app) || a.app === "konnect" && !a.controlPlaneId || a.app === "kongManager" && typeof a.workspace != "string" || !a.cancelRoute)
958
- },
959
- /** If a valid Gateway Service ID is provided, it will put the form in Edit mode instead of Create */
960
- gatewayServiceId: {
961
- type: String,
962
- required: !1,
963
- default: ""
964
- },
965
- /** Whether show or hide EntityFormSection info column */
966
- hideSectionsInfo: {
967
- type: Boolean,
968
- required: !1,
969
- default: !1
970
- },
971
- /** Whether show or hide Try sample API button */
972
- hideTrySampleApiButton: {
973
- type: Boolean,
974
- required: !1,
975
- default: !1
976
- }
977
- },
978
- emits: ["update", "error", "url-valid:success", "url-valid:error", "loading", "model-updated", "try-sample-api"],
979
- setup(a, { expose: q, emit: p }) {
980
- var m;
981
- const c = p, s = a, v = R(!0), $ = We(), { i18nT: G, i18n: { t: l } } = ee.useI18n(), { getErrorFieldsFromError: K } = gt(), { axiosInstance: E } = Oe((m = s.config) == null ? void 0 : m.axiosRequestConfig), Pe = yt(), { validateHost: se, validatePath: pe, validatePort: me, validateProtocol: te } = ee.useUrlValidators(), { objectsAreEqual: Ie } = je(), j = w(() => fe.form[s.config.app].edit), H = w(() => s.gatewayServiceId ? Ge.Edit : Ge.Create), Fe = R(!1), Z = w(() => !!s.gatewayServiceId), C = R(Z.value ? "protocol" : "url"), ae = ee.usePortFromProtocol(), ne = R(""), oe = w(() => !!ne.value || !!T("name")), e = Ke({
982
- fields: {
983
- name: "",
984
- protocol: "http",
985
- host: "",
986
- path: "",
987
- port: 80,
988
- url: "",
989
- retries: 5,
990
- connect_timeout: 6e4,
991
- write_timeout: 6e4,
992
- read_timeout: 6e4,
993
- client_certificate: "",
994
- ca_certificates: "",
995
- tls_verify_enabled: !1,
996
- tls_verify_value: !1,
997
- tags: "",
998
- enabled: !0
999
- },
1000
- isReadonly: !1,
1001
- errorMessages: [],
1002
- formFieldErrors: {
1003
- host: "",
1004
- port: "",
1005
- path: "",
1006
- name: "",
1007
- url: "",
1008
- tags: "",
1009
- retries: "",
1010
- connect_timeout: "",
1011
- write_timeout: "",
1012
- read_timeout: "",
1013
- client_certificate: "",
1014
- ca_certificates: "",
1015
- tls_verify_enabled: "",
1016
- tls_verify_value: ""
1017
- }
1018
- }), k = Ke({
1019
- name: "",
1020
- protocol: "http",
1021
- host: "",
1022
- path: "",
1023
- port: 80,
1024
- url: "",
1025
- retries: 5,
1026
- connect_timeout: 6e4,
1027
- write_timeout: 6e4,
1028
- read_timeout: 6e4,
1029
- client_certificate: "",
1030
- ca_certificates: "",
1031
- tls_verify_enabled: !1,
1032
- tls_verify_value: !1,
1033
- tags: "",
1034
- enabled: !0
1035
- }), x = s.config.app === "konnect" || _t({
1036
- gatewayInfo: s.config.gatewayInfo,
1037
- // 'ws' and 'wss' are not valid values for the protocol field in Gateway Community Edition or before Gateway Enterprise Edition 3.0
1038
- supportedRange: {
1039
- enterprise: ["3.0"]
1040
- }
1041
- }), re = [
1042
- {
1043
- label: l("gateway_services.form.fields.protocol.options.http"),
1044
- value: "http",
1045
- group: "http"
1046
- },
1047
- {
1048
- label: l("gateway_services.form.fields.protocol.options.https"),
1049
- value: "https",
1050
- group: "http"
1051
- },
1052
- {
1053
- label: l("gateway_services.form.fields.protocol.options.tcp"),
1054
- value: "tcp",
1055
- group: "tcp"
1056
- },
1057
- {
1058
- label: l("gateway_services.form.fields.protocol.options.tls"),
1059
- value: "tls",
1060
- group: "tcp"
1061
- },
1062
- {
1063
- label: l("gateway_services.form.fields.protocol.options.tls_passthrough"),
1064
- value: "tls_passthrough",
1065
- group: "tcp"
1066
- },
1067
- {
1068
- label: l("gateway_services.form.fields.protocol.options.grpc"),
1069
- value: "grpc",
1070
- group: "grpc"
1071
- },
1072
- {
1073
- label: l("gateway_services.form.fields.protocol.options.grpcs"),
1074
- value: "grpcs",
1075
- group: "grpc"
1076
- },
1077
- ...x ? [
1078
- {
1079
- label: l("gateway_services.form.fields.protocol.options.ws"),
1080
- value: "ws",
1081
- group: "websocket"
1082
- },
1083
- {
1084
- label: l("gateway_services.form.fields.protocol.options.wss"),
1085
- value: "wss",
1086
- group: "websocket"
1087
- }
1088
- ] : [],
1089
- {
1090
- label: l("gateway_services.form.fields.protocol.options.udp"),
1091
- value: "udp",
1092
- group: "udp"
1093
- }
1094
- ], ve = { url: "url", protocol: "protocol" }, ge = (t, r) => {
1095
- r.value;
1096
- }, J = (t) => t ? parseFloat(t) : 0, ye = () => {
1097
- e.fields.host = k.host, e.fields.path = k.path, e.fields.port = k.port, e.fields.protocol = k.protocol, e.fields.url = k.url, e.fields.retries = k.retries, e.fields.connect_timeout = k.connect_timeout, e.fields.write_timeout = k.write_timeout, e.fields.read_timeout = k.read_timeout, e.fields.client_certificate = k.client_certificate, e.fields.ca_certificates = k.ca_certificates, e.fields.tls_verify_enabled = k.tls_verify_enabled, e.fields.tls_verify_value = k.tls_verify_value, e.fields.enabled = k.enabled;
1098
- }, _e = () => {
1099
- v.value = !0, N(), e.errorMessages = [], ye();
1100
- }, he = () => {
1101
- switch (ye(), e.fields.name = `${L.name}-${(/* @__PURE__ */ new Date()).toISOString().replace(/\D/g, "").slice(0, 17)}`, C.value) {
1102
- case "url":
1103
- e.fields.url = `${L.protocol}://${L.host}${L.path}`;
1104
- break;
1105
- case "protocol":
1106
- e.fields.host = L.host, e.fields.path = L.path, e.fields.protocol = L.protocol, e.fields.port = L.port;
1107
- break;
1108
- default:
1109
- e.fields.url = `${L.protocol}://${L.host}${L.path}`;
1110
- }
1111
- }, be = () => {
1112
- if (N(), e.fields.url.length)
1113
- try {
1114
- const t = new URL(e.fields.url), r = te(t.protocol, re);
1115
- if (r) throw new Error(r);
1116
- e.fields.protocol = t.protocol.slice(0, -1);
1117
- const _ = se(t.hostname);
1118
- if (_) throw new Error(_);
1119
- e.fields.host = t.hostname;
1120
- const F = pe(t.pathname);
1121
- if (F) throw new Error(F);
1122
- e.fields.path = t.pathname;
1123
- const h = me(t.port);
1124
- if (h) throw new Error(h);
1125
- const V = Number(t.port);
1126
- Fe.value = !!V, e.fields.port = V || ae.getPortFromProtocol(e.fields.protocol), c("url-valid:success");
1127
- } catch {
1128
- c("url-valid:error", l("gateway_services.form.errors.url.invalid")), e.formFieldErrors.url = l("gateway_services.form.errors.url.invalid");
1129
- }
1130
- }, we = (t) => {
1131
- N(t);
1132
- }, $e = w(() => !!e.formFieldErrors.url || !!e.formFieldErrors.host || !!e.formFieldErrors.port), T = (t) => {
1133
- if (e.errorMessages.length) return "";
1134
- const r = e.formFieldErrors;
1135
- return r[t] ? r[t] : "";
1136
- }, z = (t) => {
1137
- N(t ?? void 0);
1138
- const r = se(e.fields.host);
1139
- r && (e.formFieldErrors.host = r);
1140
- const _ = pe(e.fields.path);
1141
- _ && (e.formFieldErrors.path = _);
1142
- const F = me(e.fields.port);
1143
- F && (e.formFieldErrors.port = F), Q.value ? c("url-valid:success") : c("url-valid:error", e.errorMessages.join(",") || l("gateway_services.form.errors.url.invalid"));
1144
- }, N = (t) => {
1145
- if (t)
1146
- e.formFieldErrors[t] = "";
1147
- else
1148
- for (let r in e.formFieldErrors)
1149
- e.formFieldErrors[r] = "";
1150
- e.errorMessages = [];
1151
- }, Q = w(() => {
1152
- for (let t in e.formFieldErrors)
1153
- if (e.formFieldErrors[t].length)
1154
- return !1;
1155
- return !0;
1156
- }), Ae = () => {
1157
- e.fields.url && C.value === "url" ? be() : z();
1158
- }, Te = () => `new-service-${(/* @__PURE__ */ new Date()).toISOString().replace(/\D/g, "").slice(0, 17)}`, ce = w(() => !["tcp", "tls", "tls_passthrough", "grpc", "grpcs", "udp"].includes(e.fields.protocol)), Ue = w(() => {
1159
- if (C.value === "url")
1160
- return !0;
1161
- const t = ["https", "wss", "tls"].includes(e.fields.protocol);
1162
- return C.value === "protocol" && t;
1163
- }), Re = w(() => {
1164
- if (C.value === "url")
1165
- return !0;
1166
- const t = ["https", "tls"].includes(e.fields.protocol);
1167
- return C.value === "protocol" && t;
1168
- }), ie = w(() => {
1169
- if (C.value === "url")
1170
- return !0;
1171
- const t = ["https", "wss", "tls"].includes(e.fields.protocol);
1172
- return C.value === "protocol" && t;
1173
- }), ke = (t) => {
1174
- N("name"), ne.value = Pe.utf8Name(t);
1175
- }, f = w(() => {
1176
- const t = !Z.value || !Ie(e.fields, k), r = C.value === "url" && !!e.fields.url && Q.value, _ = C.value === "protocol" && !!e.fields.host && Q.value;
1177
- return t && (r || _);
1178
- }), g = (t) => {
1179
- var r, _, F;
1180
- e.fields.name = (t == null ? void 0 : t.name) || "", e.fields.tags = ((r = t == null ? void 0 : t.tags) == null ? void 0 : r.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 = ((_ = t == null ? void 0 : t.ca_certificates) == null ? void 0 : _.join(",")) || "", e.fields.client_certificate = ((F = t == null ? void 0 : t.client_certificate) == null ? void 0 : F.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(k, e.fields);
1181
- }, y = () => {
1182
- $.push(s.config.cancelRoute);
1183
- }, I = w(() => {
1184
- var r, _;
1185
- let t = `${s.config.apiBaseUrl}${fe.form[s.config.app].validate}`;
1186
- return s.config.app === "konnect" ? t = t.replace(/{controlPlaneId}/gi, ((r = s.config) == null ? void 0 : r.controlPlaneId) || "") : s.config.app === "kongManager" && (t = t.replace(/\/{workspace}/gi, (_ = s.config) != null && _.workspace ? `/${s.config.workspace}` : "")), t = t.replace(/{id}/gi, s.gatewayServiceId), t;
1187
- }), W = w(() => {
1188
- var r, _;
1189
- let t = `${s.config.apiBaseUrl}${fe.form[s.config.app][H.value]}`;
1190
- return s.config.app === "konnect" ? t = t.replace(/{controlPlaneId}/gi, ((r = s.config) == null ? void 0 : r.controlPlaneId) || "") : s.config.app === "kongManager" && (t = t.replace(/\/{workspace}/gi, (_ = s.config) != null && _.workspace ? `/${s.config.workspace}` : "")), t = t.replace(/{id}/gi, s.gatewayServiceId), t;
1191
- }), O = (t) => {
1192
- let r = "";
1193
- t.url && (r = new URL(t.url).protocol), (["https", "wss", "tls"].includes(t.protocol) || ["https", "wss", "tls"].includes(r)) && (t.tls_verify = t.tls_verify_enabled ? t.tls_verify_value : null), delete t.tls_verify_enabled, delete t.tls_verify_value;
1194
- }, M = w(() => {
1195
- var r, _, F, h;
1196
- const t = {
1197
- name: e.fields.name || null,
1198
- tags: e.fields.tags ? (F = (_ = (r = e.fields.tags) == null ? void 0 : r.split(",")) == null ? void 0 : _.map((V) => String(V || "").trim())) == null ? void 0 : F.filter((V) => V !== "") : null,
1199
- protocol: e.fields.protocol,
1200
- path: e.fields.path || null,
1201
- read_timeout: e.fields.read_timeout,
1202
- retries: e.fields.retries,
1203
- host: e.fields.host,
1204
- connect_timeout: e.fields.connect_timeout,
1205
- tls_verify_value: e.fields.tls_verify_value,
1206
- tls_verify_enabled: e.fields.tls_verify_enabled,
1207
- ca_certificates: e.fields.ca_certificates ? (h = e.fields.ca_certificates) == null ? void 0 : h.split(",").filter((V) => V !== "") : null,
1208
- client_certificate: e.fields.client_certificate ? { id: e.fields.client_certificate } : null,
1209
- write_timeout: e.fields.write_timeout,
1210
- port: e.fields.port,
1211
- url: e.fields.url,
1212
- enabled: e.fields.enabled
1213
- };
1214
- 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), ce.value || (t.path = null), H.value === "create" ? C.value === "url" ? (delete t.protocol, delete t.host, delete t.path, s.config.app === "konnect" && delete t.port) : delete t.url : H.value === "edit" && delete t.url, t;
1215
- }), X = async () => {
1216
- var t, r, _, F;
1217
- try {
1218
- e.isReadonly = !0;
1219
- const h = M.value;
1220
- O(h);
1221
- let V;
1222
- if (await E.post(I.value, h), H.value === "create" ? V = await E.post(W.value, h) : H.value === "edit" && (V = ((t = s.config) == null ? void 0 : t.app) === "konnect" ? await E.put(W.value, h) : await E.patch(W.value, h)), V) {
1223
- const { data: i } = V;
1224
- e.fields.name = (i == null ? void 0 : i.name) || "", e.fields.port = i.port || ae.getPortFromProtocol(i.protocol), e.fields.protocol = (i == null ? void 0 : i.protocol) || "http", e.fields.host = (i == null ? void 0 : i.host) || "", e.fields.path = (i == null ? void 0 : i.path) || "", e.fields.url = (i == null ? void 0 : i.url) || "", e.fields.retries = i != null && i.retries || (i == null ? void 0 : i.retries) === 0 ? i == null ? void 0 : i.retries : 5, e.fields.connect_timeout = i != null && i.connect_timeout || (i == null ? void 0 : i.connect_timeout) === 0 ? i == null ? void 0 : i.connect_timeout : 6e4, e.fields.write_timeout = i != null && i.write_timeout || (i == null ? void 0 : i.write_timeout) === 0 ? i == null ? void 0 : i.write_timeout : 6e4, e.fields.read_timeout = i != null && i.read_timeout || (i == null ? void 0 : i.read_timeout) === 0 ? i == null ? void 0 : i.read_timeout : 6e4, e.fields.client_certificate = ((r = i == null ? void 0 : i.client_certificate) == null ? void 0 : r.id) || "", e.fields.ca_certificates = (_ = i == null ? void 0 : i.ca_certificates) != null && _.length ? i == null ? void 0 : i.ca_certificates.join(",") : "", e.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, e.fields.tls_verify_value = e.fields.tls_verify_enabled && (i == null ? void 0 : i.tls_verify), e.fields.tags = (F = i == null ? void 0 : i.tags) != null && F.length ? i.tags.join(", ") : "", e.fields.enabled = (i == null ? void 0 : i.enabled) ?? !0, Object.assign(k, e.fields), c("update", V == null ? void 0 : V.data);
1225
- }
1226
- return V;
1227
- } catch (h) {
1228
- const { fields: V, messages: i } = K(h);
1229
- e.errorMessages = i, V.length && V.forEach((Y) => {
1230
- const le = Y.field;
1231
- le === "client_certificate.id" ? e.formFieldErrors.client_certificate = Y.message : le.startsWith("ca_certificates") ? e.formFieldErrors.ca_certificates = Y.message : Object.keys(e.formFieldErrors).includes(le) && (e.formFieldErrors = {
1232
- ...e.formFieldErrors,
1233
- [le]: Y.message
1234
- });
1235
- }), c("error", h);
1236
- } finally {
1237
- e.isReadonly = !1;
1238
- }
1239
- };
1240
- return Be(() => s.gatewayServiceId, () => {
1241
- Object.assign(e.fields, k);
1242
- }), Be(e.fields, (t) => {
1243
- e.fields.port = ae.getPortFromProtocol(t.protocol, String(t.port)), c("model-updated", M.value);
1244
- }), Qe(() => {
1245
- c("model-updated", M.value), Z.value || (e.fields.name = Te());
1246
- }), q({
1247
- validateUrl: Ae,
1248
- getPayload: M,
1249
- saveFormData: X,
1250
- canSubmit: f,
1251
- initForm: g
1252
- }), (t, r) => {
1253
- const _ = D("KRadio"), F = D("KButton"), h = D("KInput"), V = D("KSelect"), i = D("KCheckbox"), Y = D("KCollapse"), le = D("KAlert");
1254
- return S(), A("div", xt, [
1255
- n(o(ht), {
1256
- "can-submit": f.value,
1257
- config: a.config,
1258
- "edit-id": a.gatewayServiceId,
1259
- "entity-type": o(ze).GatewayService,
1260
- "fetch-url": j.value,
1261
- "form-fields": M.value,
1262
- "is-readonly": e.isReadonly,
1263
- onCancel: y,
1264
- "onFetch:error": r[31] || (r[31] = (u) => t.$emit("error", u)),
1265
- "onFetch:success": g,
1266
- onLoading: r[32] || (r[32] = (u) => t.$emit("loading", u)),
1267
- onSubmit: X
1268
- }, {
1269
- "form-actions": d(() => [
1270
- et(t.$slots, "form-actions", {
1271
- canSubmit: f.value,
1272
- cancel: y,
1273
- submit: X
1274
- }, void 0, !0)
1275
- ]),
1276
- default: d(() => [
1277
- n(o(Ne), {
1278
- description: o(l)("gateway_services.form.sections.keys.description"),
1279
- "hide-info-header": a.hideSectionsInfo,
1280
- title: o(l)("gateway_services.form.sections.keys.title")
1281
- }, {
1282
- default: d(() => [
1283
- Z.value ? B("", !0) : (S(), A("div", Mt, [
1284
- P("div", Bt, [
1285
- n(_, {
1286
- modelValue: C.value,
1287
- "onUpdate:modelValue": r[0] || (r[0] = (u) => C.value = u),
1288
- card: "",
1289
- "card-orientation": "horizontal",
1290
- "data-testid": "gateway-service-url-radio",
1291
- description: o(l)("gateway_services.form.sections.keys.url.description"),
1292
- label: o(l)("gateway_services.form.sections.keys.url.label"),
1293
- "selected-value": ve.url,
1294
- onChange: _e
1295
- }, null, 8, ["modelValue", "description", "label", "selected-value"]),
1296
- n(_, {
1297
- modelValue: C.value,
1298
- "onUpdate:modelValue": r[1] || (r[1] = (u) => C.value = u),
1299
- card: "",
1300
- "card-orientation": "horizontal",
1301
- "checked-group": "protocol",
1302
- "data-testid": "gateway-service-protocol-radio",
1303
- description: o(l)("gateway_services.form.sections.keys.protocol.description"),
1304
- label: o(l)("gateway_services.form.sections.keys.protocol.label"),
1305
- "selected-value": ve.protocol,
1306
- onChange: _e
1307
- }, null, 8, ["modelValue", "description", "label", "selected-value"])
1308
- ]),
1309
- n(Me, { name: "slide-fade" }, {
1310
- default: d(() => [
1311
- C.value === "url" ? (S(), A("div", Dt, [
1312
- n(h, {
1313
- modelValue: e.fields.url,
1314
- "onUpdate:modelValue": r[2] || (r[2] = (u) => e.fields.url = u),
1315
- modelModifiers: { trim: !0 },
1316
- class: "gateway-service-url-input gateway-service-form-margin-bottom",
1317
- "data-testid": "gateway-service-url-input",
1318
- error: $e.value,
1319
- "error-message": T("url"),
1320
- label: o(l)("gateway_services.form.fields.upstream_url.label"),
1321
- "label-attributes": {
1322
- info: a.config.app === "konnect" ? o(l)("gateway_services.form.fields.upstream_url.tooltip_for_konnect") : o(l)("gateway_services.form.fields.upstream_url.tooltip_for_km"),
1323
- tooltipAttributes: { maxWidth: "400" }
1324
- },
1325
- name: "url",
1326
- placeholder: o(l)("gateway_services.form.fields.upstream_url.placeholder"),
1327
- required: "",
1328
- onInput: be
1329
- }, Ee({ _: 2 }, [
1330
- a.hideTrySampleApiButton ? void 0 : {
1331
- name: "after",
1332
- fn: d(() => [
1333
- n(F, {
1334
- appearance: "tertiary",
1335
- "data-testid": "try-sample-api",
1336
- size: "small",
1337
- onClick: he
1338
- }, {
1339
- default: d(() => [
1340
- U(b(o(l)("gateway_services.form.buttons.try_sample")), 1)
1341
- ]),
1342
- _: 1
1343
- })
1344
- ]),
1345
- key: "0"
1346
- }
1347
- ]), 1032, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder"])
1348
- ])) : B("", !0)
1349
- ]),
1350
- _: 1
1351
- })
1352
- ])),
1353
- n(Me, { name: "slide-fade" }, {
1354
- default: d(() => [
1355
- C.value === "protocol" || Z.value ? (S(), A("div", Kt, [
1356
- n(V, {
1357
- modelValue: e.fields.protocol,
1358
- "onUpdate:modelValue": r[3] || (r[3] = (u) => e.fields.protocol = u),
1359
- "data-testid": "gateway-service-protocol-select",
1360
- items: re,
1361
- label: o(l)("gateway_services.form.fields.protocol.label"),
1362
- "label-attributes": {
1363
- info: o(l)("gateway_services.form.fields.protocol.tooltip"),
1364
- tooltipAttributes: { maxWidth: "400" }
1365
- },
1366
- readonly: e.isReadonly,
1367
- required: "",
1368
- width: "100%",
1369
- onSelected: r[4] || (r[4] = (u) => ge(e.fields.protocol, u))
1370
- }, null, 8, ["modelValue", "label", "label-attributes", "readonly"]),
1371
- n(h, {
1372
- modelValue: e.fields.host,
1373
- "onUpdate:modelValue": r[5] || (r[5] = (u) => e.fields.host = u),
1374
- modelModifiers: { trim: !0 },
1375
- class: "gateway-service-form-margin-top",
1376
- "data-testid": "gateway-service-host-input",
1377
- error: !!e.formFieldErrors.host,
1378
- "error-message": T("host"),
1379
- label: o(l)("gateway_services.form.fields.host.label"),
1380
- "label-attributes": {
1381
- info: o(l)("gateway_services.form.fields.host.tooltip"),
1382
- tooltipAttributes: { maxWidth: "400" }
1383
- },
1384
- name: "host",
1385
- placeholder: o(l)("gateway_services.form.fields.host.placeholder"),
1386
- required: "",
1387
- onInput: r[6] || (r[6] = (u) => z("host"))
1388
- }, Ee({ _: 2 }, [
1389
- a.hideTrySampleApiButton ? void 0 : {
1390
- name: "after",
1391
- fn: d(() => [
1392
- n(F, {
1393
- appearance: "tertiary",
1394
- size: "small",
1395
- onClick: he
1396
- }, {
1397
- default: d(() => [
1398
- U(b(o(l)("gateway_services.form.buttons.try_sample")), 1)
1399
- ]),
1400
- _: 1
1401
- })
1402
- ]),
1403
- key: "0"
1404
- }
1405
- ]), 1032, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder"]),
1406
- ce.value ? (S(), A("div", Lt, [
1407
- n(h, {
1408
- modelValue: e.fields.path,
1409
- "onUpdate:modelValue": r[7] || (r[7] = (u) => e.fields.path = u),
1410
- modelModifiers: { trim: !0 },
1411
- class: "gateway-service-form-margin-top",
1412
- "data-testid": "gateway-service-path-input",
1413
- error: !!e.formFieldErrors.path,
1414
- "error-message": T("path"),
1415
- label: o(l)("gateway_services.form.fields.path.label"),
1416
- "label-attributes": {
1417
- info: o(l)("gateway_services.form.fields.path.tooltip"),
1418
- tooltipAttributes: { maxWidth: "400" }
1419
- },
1420
- name: "path",
1421
- placeholder: o(l)("gateway_services.form.fields.path.placeholder"),
1422
- onInput: r[8] || (r[8] = (u) => z("path"))
1423
- }, null, 8, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder"])
1424
- ])) : B("", !0),
1425
- n(h, {
1426
- modelValue: e.fields.port,
1427
- "onUpdate:modelValue": [
1428
- r[9] || (r[9] = (u) => e.fields.port = u),
1429
- r[11] || (r[11] = () => {
1430
- e.fields.port = J(e.fields.port + "");
1431
- })
1432
- ],
1433
- class: "gateway-service-form-margin-top",
1434
- "data-testid": "gateway-service-port-input",
1435
- error: !!e.formFieldErrors.port,
1436
- "error-message": T("port"),
1437
- label: o(l)("gateway_services.form.fields.port.label"),
1438
- "label-attributes": {
1439
- info: o(l)("gateway_services.form.fields.port.tooltip"),
1440
- tooltipAttributes: { maxWidth: "400" }
1441
- },
1442
- name: "port",
1443
- type: "number",
1444
- onInput: r[10] || (r[10] = (u) => z("port"))
1445
- }, null, 8, ["modelValue", "error", "error-message", "label", "label-attributes"])
1446
- ])) : B("", !0)
1447
- ]),
1448
- _: 1
1449
- }),
1450
- n(Y, {
1451
- modelValue: v.value,
1452
- "onUpdate:modelValue": r[27] || (r[27] = (u) => v.value = u),
1453
- "data-testid": "advanced-fields-collapse",
1454
- "trigger-alignment": "leading",
1455
- "trigger-label": o(l)("gateway_services.form.sections.keys.viewAdvancedFields")
1456
- }, {
1457
- default: d(() => [
1458
- n(Me, { name: "slide-fade" }, {
1459
- default: d(() => [
1460
- v.value ? B("", !0) : (S(), A("div", qt, [
1461
- P("div", Gt, [
1462
- n(h, {
1463
- modelValue: e.fields.retries,
1464
- "onUpdate:modelValue": [
1465
- r[12] || (r[12] = (u) => e.fields.retries = u),
1466
- r[13] || (r[13] = () => {
1467
- e.fields.retries = J(e.fields.retries + "");
1468
- })
1469
- ],
1470
- autocomplete: "off",
1471
- "data-testid": "gateway-service-retries-input",
1472
- label: o(l)("gateway_services.form.fields.retries.label"),
1473
- "label-attributes": {
1474
- info: o(l)("gateway_services.form.fields.retries.tooltip"),
1475
- tooltipAttributes: { maxWidth: "400" }
1476
- },
1477
- name: "retries",
1478
- readonly: e.isReadonly,
1479
- type: "number"
1480
- }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
1481
- ]),
1482
- P("div", Nt, [
1483
- n(h, {
1484
- modelValue: e.fields.connect_timeout,
1485
- "onUpdate:modelValue": [
1486
- r[14] || (r[14] = (u) => e.fields.connect_timeout = u),
1487
- r[15] || (r[15] = () => {
1488
- e.fields.connect_timeout = J(e.fields.connect_timeout + "");
1489
- })
1490
- ],
1491
- autocomplete: "off",
1492
- "data-testid": "gateway-service-connTimeout-input",
1493
- label: o(l)("gateway_services.form.fields.connect_timeout.label"),
1494
- "label-attributes": {
1495
- info: o(l)("gateway_services.form.fields.connect_timeout.tooltip"),
1496
- tooltipAttributes: { maxWidth: "400" }
1497
- },
1498
- name: "connTimeout",
1499
- readonly: e.isReadonly,
1500
- type: "number"
1501
- }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
1502
- ]),
1503
- P("div", Wt, [
1504
- n(h, {
1505
- modelValue: e.fields.write_timeout,
1506
- "onUpdate:modelValue": [
1507
- r[16] || (r[16] = (u) => e.fields.write_timeout = u),
1508
- r[17] || (r[17] = () => {
1509
- e.fields.write_timeout = J(e.fields.write_timeout + "");
1510
- })
1511
- ],
1512
- autocomplete: "off",
1513
- "data-testid": "gateway-service-writeTimeout-input",
1514
- label: o(l)("gateway_services.form.fields.write_timeout.label"),
1515
- "label-attributes": {
1516
- info: o(l)("gateway_services.form.fields.write_timeout.tooltip"),
1517
- tooltipAttributes: { maxWidth: "400" }
1518
- },
1519
- name: "writeTimeout",
1520
- readonly: e.isReadonly,
1521
- type: "number"
1522
- }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
1523
- ]),
1524
- P("div", Ot, [
1525
- n(h, {
1526
- modelValue: e.fields.read_timeout,
1527
- "onUpdate:modelValue": [
1528
- r[18] || (r[18] = (u) => e.fields.read_timeout = u),
1529
- r[19] || (r[19] = () => {
1530
- e.fields.read_timeout = J(e.fields.read_timeout + "");
1531
- })
1532
- ],
1533
- autocomplete: "off",
1534
- "data-testid": "gateway-service-readTimeout-input",
1535
- label: o(l)("gateway_services.form.fields.read_timeout.label"),
1536
- "label-attributes": {
1537
- info: o(l)("gateway_services.form.fields.read_timeout.tooltip"),
1538
- tooltipAttributes: { maxWidth: "400" }
1539
- },
1540
- name: "readTimeout",
1541
- readonly: e.isReadonly,
1542
- type: "number"
1543
- }, null, 8, ["modelValue", "label", "label-attributes", "readonly"])
1544
- ]),
1545
- Ue.value ? (S(), A("div", jt, [
1546
- n(h, {
1547
- modelValue: e.fields.client_certificate,
1548
- "onUpdate:modelValue": r[20] || (r[20] = (u) => e.fields.client_certificate = u),
1549
- modelModifiers: { trim: !0 },
1550
- autocomplete: "off",
1551
- "data-testid": "gateway-service-clientCert-input",
1552
- error: !!e.formFieldErrors.client_certificate,
1553
- label: o(l)("gateway_services.form.fields.client_certificate.label"),
1554
- "label-attributes": {
1555
- info: o(l)("gateway_services.form.fields.client_certificate.tooltip"),
1556
- tooltipAttributes: { maxWidth: "400" }
1557
- },
1558
- name: "clientCert",
1559
- placeholder: o(l)("gateway_services.form.fields.client_certificate.placeholder"),
1560
- readonly: e.isReadonly,
1561
- type: "text",
1562
- onInput: r[21] || (r[21] = (u) => we("client_certificate"))
1563
- }, null, 8, ["modelValue", "error", "label", "label-attributes", "placeholder", "readonly"])
1564
- ])) : B("", !0),
1565
- Re.value ? (S(), A("div", zt, [
1566
- n(h, {
1567
- modelValue: e.fields.ca_certificates,
1568
- "onUpdate:modelValue": r[22] || (r[22] = (u) => e.fields.ca_certificates = u),
1569
- modelModifiers: { trim: !0 },
1570
- autocomplete: "off",
1571
- "data-testid": "gateway-service-ca-certs-input",
1572
- error: !!e.formFieldErrors.ca_certificates,
1573
- label: o(l)("gateway_services.form.fields.ca_certificates.label"),
1574
- "label-attributes": { tooltipAttributes: { maxWidth: "400" } },
1575
- placeholder: o(l)("gateway_services.form.fields.ca_certificates.placeholder"),
1576
- readonly: e.isReadonly,
1577
- type: "text",
1578
- onInput: r[23] || (r[23] = (u) => we("ca_certificates"))
1579
- }, {
1580
- "label-tooltip": d(() => [
1581
- n(o(G), {
1582
- keypath: "gateway_services.form.fields.ca_certificates.tooltip",
1583
- scope: "global"
1584
- }, {
1585
- code1: d(() => [
1586
- P("code", null, b(o(l)("gateway_services.form.fields.ca_certificates.code1")), 1)
1587
- ]),
1588
- code2: d(() => [
1589
- P("code", null, b(o(l)("gateway_services.form.fields.ca_certificates.code2")), 1)
1590
- ]),
1591
- _: 1
1592
- })
1593
- ]),
1594
- _: 1
1595
- }, 8, ["modelValue", "error", "label", "placeholder", "readonly"])
1596
- ])) : B("", !0),
1597
- ie.value ? (S(), A("div", Ht, [
1598
- n(i, {
1599
- modelValue: e.fields.tls_verify_enabled,
1600
- "onUpdate:modelValue": r[24] || (r[24] = (u) => e.fields.tls_verify_enabled = u),
1601
- "data-testid": "gateway-service-tls-verify-checkbox",
1602
- description: o(l)("gateway_services.form.fields.tls_verify_enabled.help"),
1603
- label: o(l)("gateway_services.form.fields.tls_verify_enabled.label"),
1604
- "label-attributes": { tooltipAttributes: { maxWidth: "400" } }
1605
- }, {
1606
- tooltip: d(() => [
1607
- n(o(G), {
1608
- keypath: "gateway_services.form.fields.tls_verify_enabled.tooltip",
1609
- scope: "global"
1610
- }, {
1611
- code1: d(() => [
1612
- P("code", null, b(o(l)("gateway_services.form.fields.tls_verify_enabled.code1")), 1)
1613
- ]),
1614
- _: 1
1615
- })
1616
- ]),
1617
- _: 1
1618
- }, 8, ["modelValue", "description", "label"]),
1619
- e.fields.tls_verify_enabled ? (S(), A("div", Zt, [
1620
- n(_, {
1621
- modelValue: e.fields.tls_verify_value,
1622
- "onUpdate:modelValue": r[25] || (r[25] = (u) => e.fields.tls_verify_value = u),
1623
- "data-testid": "gateway-service-tls-verify-true-option",
1624
- label: o(l)("gateway_services.form.fields.tls_verify_option.true.label"),
1625
- "selected-value": !0
1626
- }, null, 8, ["modelValue", "label"])
1627
- ])) : B("", !0),
1628
- e.fields.tls_verify_enabled ? (S(), A("div", Jt, [
1629
- n(_, {
1630
- modelValue: e.fields.tls_verify_value,
1631
- "onUpdate:modelValue": r[26] || (r[26] = (u) => e.fields.tls_verify_value = u),
1632
- "data-testid": "gateway-service-tls-verify-false-option",
1633
- label: o(l)("gateway_services.form.fields.tls_verify_option.false.label"),
1634
- "selected-value": !1
1635
- }, null, 8, ["modelValue", "label"])
1636
- ])) : B("", !0)
1637
- ])) : B("", !0)
1638
- ]))
1639
- ]),
1640
- _: 1
1641
- })
1642
- ]),
1643
- _: 1
1644
- }, 8, ["modelValue", "trigger-label"])
1645
- ]),
1646
- _: 1
1647
- }, 8, ["description", "hide-info-header", "title"]),
1648
- n(o(Ne), {
1649
- description: o(l)("gateway_services.form.sections.general.description"),
1650
- "hide-info-header": a.hideSectionsInfo,
1651
- title: o(l)("gateway_services.form.sections.general.title")
1652
- }, {
1653
- default: d(() => [
1654
- n(h, {
1655
- modelValue: e.fields.name,
1656
- "onUpdate:modelValue": r[28] || (r[28] = (u) => e.fields.name = u),
1657
- modelModifiers: { trim: !0 },
1658
- autocomplete: "off",
1659
- "data-testid": "gateway-service-name-input",
1660
- error: oe.value,
1661
- "error-message": ne.value,
1662
- label: o(l)("gateway_services.form.fields.name.label"),
1663
- "label-attributes": {
1664
- info: o(l)("gateway_services.form.fields.name.tooltip"),
1665
- tooltipAttributes: { maxWidth: "400" }
1666
- },
1667
- name: "name",
1668
- placeholder: o(l)("gateway_services.form.fields.name.placeholder"),
1669
- readonly: e.isReadonly,
1670
- type: "text",
1671
- onInput: ke
1672
- }, null, 8, ["modelValue", "error", "error-message", "label", "label-attributes", "placeholder", "readonly"]),
1673
- n(Y, {
1674
- "data-testid": "tags-collapse",
1675
- "trigger-alignment": "leading",
1676
- "trigger-label": o(l)("gateway_services.form.fields.tags.collapse")
1677
- }, {
1678
- default: d(() => [
1679
- P("div", Qt, [
1680
- n(h, {
1681
- modelValue: e.fields.tags,
1682
- "onUpdate:modelValue": r[29] || (r[29] = (u) => e.fields.tags = u),
1683
- modelModifiers: { trim: !0 },
1684
- autocomplete: "off",
1685
- "data-testid": "gateway-service-tags-input",
1686
- help: o(l)("gateway_services.form.fields.tags.help"),
1687
- label: o(l)("gateway_services.form.fields.tags.label"),
1688
- "label-attributes": {
1689
- info: o(l)("gateway_services.form.fields.tags.tooltip"),
1690
- tooltipAttributes: { maxWidth: "400" }
1691
- },
1692
- name: "tags",
1693
- placeholder: o(l)("gateway_services.form.fields.tags.placeholder"),
1694
- readonly: e.isReadonly,
1695
- type: "text",
1696
- onInput: r[30] || (r[30] = (u) => N("tags"))
1697
- }, null, 8, ["modelValue", "help", "label", "label-attributes", "placeholder", "readonly"])
1698
- ])
1699
- ]),
1700
- _: 1
1701
- }, 8, ["trigger-label"])
1702
- ]),
1703
- _: 1
1704
- }, 8, ["description", "hide-info-header", "title"]),
1705
- e.errorMessages.length ? (S(), ue(le, {
1706
- key: 0,
1707
- appearance: "danger",
1708
- "data-testid": "form-error"
1709
- }, {
1710
- default: d(() => [
1711
- P("ul", Xt, [
1712
- (S(!0), A(Xe, null, Ye(e.errorMessages, (u) => (S(), A("li", { key: u }, b(u), 1))), 128))
1713
- ])
1714
- ]),
1715
- _: 1
1716
- })) : B("", !0)
1717
- ]),
1718
- _: 3
1719
- }, 8, ["can-submit", "config", "edit-id", "entity-type", "fetch-url", "form-fields", "is-readonly"])
1720
- ]);
1721
- };
1722
- }
1723
- }), fo = /* @__PURE__ */ He(Yt, [["__scopeId", "data-v-84fd56e4"]]), { validateHost: eo, validatePort: to, validateProtocol: oo, validatePath: ro } = ee.useUrlValidators(), po = () => ({
1724
- validateHost: eo,
1725
- validatePort: to,
1726
- validateProtocol: oo,
1727
- validatePath: ro
1728
- });
1729
- export {
1730
- uo as GatewayServiceConfigCard,
1731
- fo as GatewayServiceForm,
1732
- co as GatewayServiceList,
1733
- po as useUrlValidator
1734
- };