@kong-ui-public/entities-keys 3.9.1 → 3.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/entities-keys.es.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { defineComponent as
|
|
2
|
-
import { useRouter as
|
|
3
|
-
import { BookIcon as
|
|
4
|
-
import { createI18n as
|
|
5
|
-
import { useAxios as
|
|
6
|
-
const
|
|
1
|
+
import { defineComponent as me, ref as w, computed as h, watch as ee, onBeforeMount as Ce, resolveComponent as B, createElementBlock as N, openBlock as S, createVNode as u, unref as l, createSlots as pe, withCtx as k, createTextVNode as Y, toDisplayString as x, createElementVNode as M, createBlock as R, Teleport as Ee, createCommentVNode as Q, reactive as be, Fragment as _e, renderList as Se } from "vue";
|
|
2
|
+
import { useRouter as xe } from "vue-router";
|
|
3
|
+
import { BookIcon as Ve, AddIcon as Me, KeyIcon as Re } from "@kong/icons";
|
|
4
|
+
import { createI18n as De, i18nTComponent as Te } from "@kong-ui-public/i18n";
|
|
5
|
+
import { useAxios as ge, useTableState as Fe, useFetcher as Ae, useDeleteUrlBuilder as Ue, FetcherStatus as Be, EntityBaseTable as Oe, PermissionsWrapper as ae, TableTags as Pe, EntityFilter as qe, EntityEmptyState as Ne, EntityDeleteModal as Je, EntityTypes as We, useErrors as Le, EntityBaseFormType as se, useDebouncedFilter as He, EntityBaseForm as Qe, SupportedEntityType as Ke, EntityFormSection as Ie, useStringHelpers as ze, ConfigurationSchemaType as ue, ConfigurationSchemaSection as ke, EntityBaseConfigCard as Ge, InternalLinkItem as Xe, ConfigCardItem as we } from "@kong-ui-public/entities-shared";
|
|
6
|
+
const Ze = {
|
|
7
7
|
title: "Keys",
|
|
8
8
|
list: {
|
|
9
9
|
toolbar_actions: {
|
|
@@ -127,24 +127,24 @@ const Ye = {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
}
|
|
130
|
-
},
|
|
131
|
-
keys:
|
|
130
|
+
}, Ye = {
|
|
131
|
+
keys: Ze
|
|
132
132
|
};
|
|
133
|
-
function
|
|
134
|
-
const
|
|
133
|
+
function et() {
|
|
134
|
+
const i = De("en-us", Ye);
|
|
135
135
|
return {
|
|
136
|
-
i18n:
|
|
137
|
-
i18nT:
|
|
136
|
+
i18n: i,
|
|
137
|
+
i18nT: Te(i)
|
|
138
138
|
// Translation component <i18n-t>
|
|
139
139
|
};
|
|
140
140
|
}
|
|
141
|
-
const
|
|
142
|
-
useI18n:
|
|
143
|
-
},
|
|
141
|
+
const ve = {
|
|
142
|
+
useI18n: et
|
|
143
|
+
}, A = "/v2/control-planes/{controlPlaneId}/core-entities", U = "/{workspace}", O = {
|
|
144
144
|
list: {
|
|
145
145
|
konnect: {
|
|
146
|
-
all: `${
|
|
147
|
-
forKeySet: `${
|
|
146
|
+
all: `${A}/keys`,
|
|
147
|
+
forKeySet: `${A}/key-sets/{keySetId}/keys`
|
|
148
148
|
},
|
|
149
149
|
kongManager: {
|
|
150
150
|
all: `${U}/keys`,
|
|
@@ -154,15 +154,15 @@ const he = {
|
|
|
154
154
|
form: {
|
|
155
155
|
konnect: {
|
|
156
156
|
create: {
|
|
157
|
-
all: `${
|
|
158
|
-
forKeySet: `${
|
|
157
|
+
all: `${A}/keys`,
|
|
158
|
+
forKeySet: `${A}/key-sets/{keySetId}/keys`
|
|
159
159
|
},
|
|
160
160
|
edit: {
|
|
161
|
-
all: `${
|
|
162
|
-
forKeySet: `${
|
|
161
|
+
all: `${A}/keys/{id}`,
|
|
162
|
+
forKeySet: `${A}/key-sets/{keySetId}/keys/{id}`
|
|
163
163
|
},
|
|
164
|
-
keySets: `${
|
|
165
|
-
getKeySet: `${
|
|
164
|
+
keySets: `${A}/key-sets`,
|
|
165
|
+
getKeySet: `${A}/key-sets/{keySetId}`
|
|
166
166
|
},
|
|
167
167
|
kongManager: {
|
|
168
168
|
create: {
|
|
@@ -177,14 +177,14 @@ const he = {
|
|
|
177
177
|
getKeySet: `${U}/key-sets/{keySetId}`
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
|
-
},
|
|
180
|
+
}, tt = "#00abd2", lt = "24px", it = { class: "kong-ui-entities-keys-list" }, ot = { class: "button-row" }, at = { class: "empty-state-icon-gateway" }, st = /* @__PURE__ */ me({
|
|
181
181
|
__name: "KeyList",
|
|
182
182
|
props: {
|
|
183
183
|
/** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
|
|
184
184
|
config: {
|
|
185
185
|
type: Object,
|
|
186
186
|
required: !0,
|
|
187
|
-
validator: (
|
|
187
|
+
validator: (i) => !(!i || !["konnect", "kongManager"].includes(i == null ? void 0 : i.app) || !i.createRoute || !i.getViewRoute || !i.getEditRoute || i.app === "kongManager" && !i.isExactMatch && !i.filterSchema)
|
|
188
188
|
},
|
|
189
189
|
// used to override the default identifier for the cache entry
|
|
190
190
|
cacheIdentifier: {
|
|
@@ -219,187 +219,179 @@ const he = {
|
|
|
219
219
|
useActionOutside: {
|
|
220
220
|
type: Boolean,
|
|
221
221
|
default: !1
|
|
222
|
-
},
|
|
223
|
-
/**
|
|
224
|
-
* Enables the new empty state design, this prop can be removed when
|
|
225
|
-
* the khcp-14756-empty-states-m2 FF is removed.
|
|
226
|
-
*/
|
|
227
|
-
enableV2EmptyStates: {
|
|
228
|
-
type: Boolean,
|
|
229
|
-
default: !1
|
|
230
222
|
}
|
|
231
223
|
},
|
|
232
224
|
emits: ["error", "click:learn-more", "copy:success", "copy:error", "delete:success"],
|
|
233
|
-
setup(
|
|
234
|
-
var
|
|
235
|
-
const
|
|
225
|
+
setup(i, { emit: P }) {
|
|
226
|
+
var b;
|
|
227
|
+
const _ = P, t = i, { i18n: { t: f } } = ve.useI18n(), r = xe(), { axiosInstance: K } = ge((b = t.config) == null ? void 0 : b.axiosRequestConfig), { hasRecords: q, handleStateChange: z } = Fe(() => E.value), $ = h(() => q.value && t.config.app === "konnect"), e = h(() => !!t.config.keySetId), C = h(() => t.config.app !== "kongManager" || !!t.config.disableSorting), D = {
|
|
236
228
|
// the Name column is non-hidable
|
|
237
|
-
name: { label:
|
|
238
|
-
kid: { label:
|
|
239
|
-
tags: { label:
|
|
240
|
-
id: { label:
|
|
241
|
-
},
|
|
242
|
-
var
|
|
243
|
-
let
|
|
244
|
-
return t.config.app === "konnect" ?
|
|
245
|
-
}),
|
|
246
|
-
const
|
|
247
|
-
if (
|
|
229
|
+
name: { label: f("keys.list.table_headers.name"), searchable: !0, sortable: !0, hidable: !1 },
|
|
230
|
+
kid: { label: f("keys.list.table_headers.key_id"), sortable: !0 },
|
|
231
|
+
tags: { label: f("keys.list.table_headers.tags") },
|
|
232
|
+
id: { label: f("keys.list.table_headers.id"), sortable: !0 }
|
|
233
|
+
}, T = D, J = h(() => {
|
|
234
|
+
var c, s, d, F;
|
|
235
|
+
let a = `${t.config.apiBaseUrl}${O.list[t.config.app][t.config.keySetId ? "forKeySet" : "all"]}`;
|
|
236
|
+
return t.config.app === "konnect" ? a = a.replace(/{controlPlaneId}/gi, ((c = t.config) == null ? void 0 : c.controlPlaneId) || "").replace(/{keySetId}/gi, ((s = t.config) == null ? void 0 : s.keySetId) || "") : t.config.app === "kongManager" && (a = a.replace(/\/{workspace}/gi, (d = t.config) != null && d.workspace ? `/${t.config.workspace}` : "").replace(/{keySetId}/gi, ((F = t.config) == null ? void 0 : F.keySetId) || "")), a;
|
|
237
|
+
}), E = w(""), G = h(() => {
|
|
238
|
+
const a = t.config.app === "konnect" || t.config.isExactMatch;
|
|
239
|
+
if (a)
|
|
248
240
|
return {
|
|
249
|
-
isExactMatch:
|
|
250
|
-
placeholder:
|
|
241
|
+
isExactMatch: a,
|
|
242
|
+
placeholder: f("keys.search.placeholder")
|
|
251
243
|
};
|
|
252
|
-
const
|
|
244
|
+
const c = { name: D.name };
|
|
253
245
|
return {
|
|
254
|
-
isExactMatch:
|
|
255
|
-
fields:
|
|
246
|
+
isExactMatch: a,
|
|
247
|
+
fields: c,
|
|
256
248
|
schema: t.config.filterSchema
|
|
257
249
|
};
|
|
258
250
|
}), {
|
|
259
|
-
fetcher:
|
|
260
|
-
fetcherState:
|
|
261
|
-
fetcherCacheKey:
|
|
262
|
-
} =
|
|
263
|
-
|
|
264
|
-
},
|
|
265
|
-
|
|
266
|
-
},
|
|
267
|
-
const
|
|
268
|
-
if (!await
|
|
269
|
-
|
|
251
|
+
fetcher: W,
|
|
252
|
+
fetcherState: y,
|
|
253
|
+
fetcherCacheKey: g
|
|
254
|
+
} = Ae(h(() => ({ ...t.config, cacheIdentifier: t.cacheIdentifier })), J), j = () => {
|
|
255
|
+
E.value = "";
|
|
256
|
+
}, v = () => {
|
|
257
|
+
g.value++;
|
|
258
|
+
}, I = w(null), p = async (a, c) => {
|
|
259
|
+
const s = a.id;
|
|
260
|
+
if (!await c(s)) {
|
|
261
|
+
re(a, "id");
|
|
270
262
|
return;
|
|
271
263
|
}
|
|
272
|
-
|
|
273
|
-
},
|
|
274
|
-
const
|
|
275
|
-
if (!await
|
|
276
|
-
|
|
277
|
-
entity:
|
|
278
|
-
message:
|
|
264
|
+
ne(a, "id");
|
|
265
|
+
}, te = async (a, c) => {
|
|
266
|
+
const s = JSON.stringify(a);
|
|
267
|
+
if (!await c(s)) {
|
|
268
|
+
_("copy:error", {
|
|
269
|
+
entity: a,
|
|
270
|
+
message: f("keys.errors.copy")
|
|
279
271
|
});
|
|
280
272
|
return;
|
|
281
273
|
}
|
|
282
|
-
|
|
283
|
-
entity:
|
|
284
|
-
message:
|
|
274
|
+
_("copy:success", {
|
|
275
|
+
entity: a,
|
|
276
|
+
message: f("keys.copy.success_brief")
|
|
285
277
|
});
|
|
286
|
-
},
|
|
287
|
-
|
|
288
|
-
entity:
|
|
289
|
-
field:
|
|
290
|
-
message:
|
|
278
|
+
}, ne = (a, c) => {
|
|
279
|
+
_("copy:success", {
|
|
280
|
+
entity: a,
|
|
281
|
+
field: c,
|
|
282
|
+
message: f("keys.copy.success", { val: a[c] })
|
|
291
283
|
});
|
|
292
|
-
},
|
|
293
|
-
|
|
294
|
-
entity:
|
|
295
|
-
field:
|
|
296
|
-
message:
|
|
284
|
+
}, re = (a, c) => {
|
|
285
|
+
_("copy:error", {
|
|
286
|
+
entity: a,
|
|
287
|
+
field: c,
|
|
288
|
+
message: f("keys.errors.copy")
|
|
297
289
|
});
|
|
298
|
-
},
|
|
299
|
-
var
|
|
300
|
-
await ((
|
|
301
|
-
},
|
|
302
|
-
label:
|
|
303
|
-
to: t.config.getViewRoute(
|
|
304
|
-
}),
|
|
305
|
-
label:
|
|
306
|
-
to: t.config.getEditRoute(
|
|
307
|
-
}),
|
|
308
|
-
|
|
309
|
-
},
|
|
310
|
-
|
|
311
|
-
},
|
|
312
|
-
var
|
|
313
|
-
if ((
|
|
314
|
-
|
|
290
|
+
}, de = async (a) => {
|
|
291
|
+
var s;
|
|
292
|
+
await ((s = t.canRetrieve) == null ? void 0 : s.call(t, a)) && r.push(t.config.getViewRoute(a.id));
|
|
293
|
+
}, ce = (a) => ({
|
|
294
|
+
label: f("keys.actions.view"),
|
|
295
|
+
to: t.config.getViewRoute(a)
|
|
296
|
+
}), ye = (a) => ({
|
|
297
|
+
label: f("keys.actions.edit"),
|
|
298
|
+
to: t.config.getEditRoute(a)
|
|
299
|
+
}), V = w(void 0), L = w(!1), H = w(!1), le = w(""), X = Ue(t.config, J.value), ie = (a) => {
|
|
300
|
+
V.value = a, L.value = !0;
|
|
301
|
+
}, fe = () => {
|
|
302
|
+
L.value = !1;
|
|
303
|
+
}, oe = async () => {
|
|
304
|
+
var a, c, s;
|
|
305
|
+
if ((a = V.value) != null && a.id) {
|
|
306
|
+
H.value = !0;
|
|
315
307
|
try {
|
|
316
|
-
await
|
|
317
|
-
} catch (
|
|
318
|
-
|
|
308
|
+
await K.delete(X(V.value.id)), H.value = !1, L.value = !1, g.value++, _("delete:success", V.value);
|
|
309
|
+
} catch (d) {
|
|
310
|
+
le.value = ((s = (c = d.response) == null ? void 0 : c.data) == null ? void 0 : s.message) || d.message || f("keys.errors.delete"), _("error", d);
|
|
319
311
|
} finally {
|
|
320
|
-
|
|
312
|
+
H.value = !1;
|
|
321
313
|
}
|
|
322
314
|
}
|
|
323
|
-
},
|
|
324
|
-
|
|
315
|
+
}, o = () => {
|
|
316
|
+
r.push(t.config.createRoute);
|
|
325
317
|
};
|
|
326
|
-
|
|
327
|
-
var
|
|
328
|
-
if (
|
|
329
|
-
|
|
330
|
-
title:
|
|
331
|
-
}, (
|
|
318
|
+
ee(y, (a) => {
|
|
319
|
+
var c, s, d;
|
|
320
|
+
if (a.status === Be.Error) {
|
|
321
|
+
I.value = {
|
|
322
|
+
title: f("keys.errors.general")
|
|
323
|
+
}, (d = (s = (c = a.error) == null ? void 0 : c.response) == null ? void 0 : s.data) != null && d.message && (I.value.message = a.error.response.data.message), _("error", a.error);
|
|
332
324
|
return;
|
|
333
325
|
}
|
|
334
|
-
|
|
326
|
+
I.value = null;
|
|
335
327
|
});
|
|
336
|
-
const
|
|
328
|
+
const n = w({
|
|
337
329
|
ctaPath: t.config.createRoute,
|
|
338
330
|
ctaText: void 0,
|
|
339
|
-
message: `${
|
|
340
|
-
title:
|
|
331
|
+
message: `${f("keys.list.empty_state.description")}${t.config.additionMessageForEmptyState ? ` ${t.config.additionMessageForEmptyState}` : ""}`,
|
|
332
|
+
title: f("keys.title")
|
|
341
333
|
});
|
|
342
|
-
return
|
|
343
|
-
await t.canCreate() && (
|
|
344
|
-
}), (
|
|
345
|
-
const
|
|
346
|
-
return
|
|
347
|
-
|
|
348
|
-
"cache-identifier":
|
|
349
|
-
"disable-sorting":
|
|
350
|
-
"empty-state-options":
|
|
334
|
+
return Ce(async () => {
|
|
335
|
+
await t.canCreate() && (n.value.title = f("keys.list.empty_state.title"), n.value.ctaText = f("keys.actions.create"));
|
|
336
|
+
}), (a, c) => {
|
|
337
|
+
const s = B("KButton"), d = B("KCopy"), F = B("KDropdownItem"), he = B("KClipboardProvider");
|
|
338
|
+
return S(), N("div", it, [
|
|
339
|
+
u(l(Oe), {
|
|
340
|
+
"cache-identifier": i.cacheIdentifier,
|
|
341
|
+
"disable-sorting": C.value,
|
|
342
|
+
"empty-state-options": n.value,
|
|
351
343
|
"enable-entity-actions": "",
|
|
352
|
-
"error-message":
|
|
353
|
-
fetcher: l(
|
|
354
|
-
"fetcher-cache-key": l(
|
|
344
|
+
"error-message": I.value,
|
|
345
|
+
fetcher: l(W),
|
|
346
|
+
"fetcher-cache-key": l(g),
|
|
355
347
|
"pagination-type": "offset",
|
|
356
348
|
"preferences-storage-key": "kong-ui-entities-keys-list",
|
|
357
|
-
query:
|
|
358
|
-
"table-headers": l(
|
|
359
|
-
onClearSearchInput:
|
|
360
|
-
"onClick:row":
|
|
361
|
-
onSort:
|
|
362
|
-
onState: l(
|
|
363
|
-
},
|
|
364
|
-
"toolbar-filter":
|
|
365
|
-
|
|
366
|
-
modelValue:
|
|
367
|
-
"onUpdate:modelValue":
|
|
368
|
-
config:
|
|
349
|
+
query: E.value,
|
|
350
|
+
"table-headers": l(T),
|
|
351
|
+
onClearSearchInput: j,
|
|
352
|
+
"onClick:row": c[3] || (c[3] = (m) => de(m)),
|
|
353
|
+
onSort: v,
|
|
354
|
+
onState: l(z)
|
|
355
|
+
}, pe({
|
|
356
|
+
"toolbar-filter": k(() => [
|
|
357
|
+
u(l(qe), {
|
|
358
|
+
modelValue: E.value,
|
|
359
|
+
"onUpdate:modelValue": c[0] || (c[0] = (m) => E.value = m),
|
|
360
|
+
config: G.value
|
|
369
361
|
}, null, 8, ["modelValue", "config"])
|
|
370
362
|
]),
|
|
371
|
-
"toolbar-button":
|
|
372
|
-
(
|
|
373
|
-
disabled: !
|
|
363
|
+
"toolbar-button": k(() => [
|
|
364
|
+
(S(), R(Ee, {
|
|
365
|
+
disabled: !i.useActionOutside,
|
|
374
366
|
to: "#kong-ui-app-page-header-action-button"
|
|
375
367
|
}, [
|
|
376
|
-
|
|
377
|
-
!
|
|
368
|
+
M("div", ot, [
|
|
369
|
+
!e.value && $.value ? (S(), R(s, {
|
|
378
370
|
key: 0,
|
|
379
371
|
appearance: "secondary",
|
|
380
372
|
class: "open-learning-hub",
|
|
381
373
|
"data-testid": "keys-learn-more-button",
|
|
382
374
|
icon: "",
|
|
383
|
-
onClick:
|
|
375
|
+
onClick: c[1] || (c[1] = (m) => a.$emit("click:learn-more"))
|
|
384
376
|
}, {
|
|
385
|
-
default:
|
|
386
|
-
|
|
377
|
+
default: k(() => [
|
|
378
|
+
u(l(Ve), { decorative: "" })
|
|
387
379
|
]),
|
|
388
380
|
_: 1
|
|
389
|
-
})) :
|
|
390
|
-
|
|
391
|
-
"auth-function": () =>
|
|
381
|
+
})) : Q("", !0),
|
|
382
|
+
u(l(ae), {
|
|
383
|
+
"auth-function": () => i.canCreate()
|
|
392
384
|
}, {
|
|
393
|
-
default:
|
|
394
|
-
|
|
385
|
+
default: k(() => [
|
|
386
|
+
u(s, {
|
|
395
387
|
appearance: "primary",
|
|
396
388
|
"data-testid": "toolbar-add-key",
|
|
397
|
-
size:
|
|
398
|
-
to:
|
|
389
|
+
size: i.useActionOutside ? "medium" : "large",
|
|
390
|
+
to: i.config.createRoute
|
|
399
391
|
}, {
|
|
400
|
-
default:
|
|
401
|
-
|
|
402
|
-
|
|
392
|
+
default: k(() => [
|
|
393
|
+
u(l(Me)),
|
|
394
|
+
Y(" " + x(l(f)("keys.list.toolbar_actions.new_key")), 1)
|
|
403
395
|
]),
|
|
404
396
|
_: 1
|
|
405
397
|
}, 8, ["size", "to"])
|
|
@@ -409,85 +401,85 @@ const he = {
|
|
|
409
401
|
])
|
|
410
402
|
], 8, ["disabled"]))
|
|
411
403
|
]),
|
|
412
|
-
name:
|
|
413
|
-
|
|
404
|
+
name: k(({ rowValue: m }) => [
|
|
405
|
+
M("b", null, x(m ?? "-"), 1)
|
|
414
406
|
]),
|
|
415
|
-
kid:
|
|
416
|
-
|
|
407
|
+
kid: k(({ rowValue: m }) => [
|
|
408
|
+
u(d, { text: m }, null, 8, ["text"])
|
|
417
409
|
]),
|
|
418
|
-
tags:
|
|
419
|
-
|
|
410
|
+
tags: k(({ rowValue: m }) => [
|
|
411
|
+
u(l(Pe), { tags: m }, null, 8, ["tags"])
|
|
420
412
|
]),
|
|
421
|
-
id:
|
|
422
|
-
|
|
423
|
-
text:
|
|
413
|
+
id: k(({ rowValue: m }) => [
|
|
414
|
+
u(d, {
|
|
415
|
+
text: m,
|
|
424
416
|
truncate: ""
|
|
425
417
|
}, null, 8, ["text"])
|
|
426
418
|
]),
|
|
427
|
-
actions:
|
|
428
|
-
|
|
429
|
-
default:
|
|
430
|
-
|
|
419
|
+
actions: k(({ row: m }) => [
|
|
420
|
+
u(he, null, {
|
|
421
|
+
default: k(({ copyToClipboard: Z }) => [
|
|
422
|
+
u(F, {
|
|
431
423
|
"data-testid": "action-entity-copy-id",
|
|
432
|
-
onClick: (
|
|
424
|
+
onClick: (je) => p(m, Z)
|
|
433
425
|
}, {
|
|
434
|
-
default:
|
|
435
|
-
|
|
426
|
+
default: k(() => [
|
|
427
|
+
Y(x(l(f)("keys.actions.copy_id")), 1)
|
|
436
428
|
]),
|
|
437
429
|
_: 2
|
|
438
430
|
}, 1032, ["onClick"])
|
|
439
431
|
]),
|
|
440
432
|
_: 2
|
|
441
433
|
}, 1024),
|
|
442
|
-
|
|
443
|
-
default:
|
|
444
|
-
|
|
434
|
+
u(he, null, {
|
|
435
|
+
default: k(({ copyToClipboard: Z }) => [
|
|
436
|
+
u(F, {
|
|
445
437
|
"data-testid": "action-entity-copy-json",
|
|
446
|
-
onClick: (
|
|
438
|
+
onClick: (je) => te(m, Z)
|
|
447
439
|
}, {
|
|
448
|
-
default:
|
|
449
|
-
|
|
440
|
+
default: k(() => [
|
|
441
|
+
Y(x(l(f)("keys.actions.copy_json")), 1)
|
|
450
442
|
]),
|
|
451
443
|
_: 2
|
|
452
444
|
}, 1032, ["onClick"])
|
|
453
445
|
]),
|
|
454
446
|
_: 2
|
|
455
447
|
}, 1024),
|
|
456
|
-
|
|
457
|
-
"auth-function": () =>
|
|
448
|
+
u(l(ae), {
|
|
449
|
+
"auth-function": () => i.canRetrieve(m)
|
|
458
450
|
}, {
|
|
459
|
-
default:
|
|
460
|
-
|
|
451
|
+
default: k(() => [
|
|
452
|
+
u(F, {
|
|
461
453
|
"data-testid": "action-entity-view",
|
|
462
454
|
"has-divider": "",
|
|
463
|
-
item:
|
|
455
|
+
item: ce(m.id)
|
|
464
456
|
}, null, 8, ["item"])
|
|
465
457
|
]),
|
|
466
458
|
_: 2
|
|
467
459
|
}, 1032, ["auth-function"]),
|
|
468
|
-
|
|
469
|
-
"auth-function": () =>
|
|
460
|
+
u(l(ae), {
|
|
461
|
+
"auth-function": () => i.canEdit(m)
|
|
470
462
|
}, {
|
|
471
|
-
default:
|
|
472
|
-
|
|
463
|
+
default: k(() => [
|
|
464
|
+
u(F, {
|
|
473
465
|
"data-testid": "action-entity-edit",
|
|
474
|
-
item:
|
|
466
|
+
item: ye(m.id)
|
|
475
467
|
}, null, 8, ["item"])
|
|
476
468
|
]),
|
|
477
469
|
_: 2
|
|
478
470
|
}, 1032, ["auth-function"]),
|
|
479
|
-
|
|
480
|
-
"auth-function": () =>
|
|
471
|
+
u(l(ae), {
|
|
472
|
+
"auth-function": () => i.canDelete(m)
|
|
481
473
|
}, {
|
|
482
|
-
default:
|
|
483
|
-
|
|
474
|
+
default: k(() => [
|
|
475
|
+
u(F, {
|
|
484
476
|
danger: "",
|
|
485
477
|
"data-testid": "action-entity-delete",
|
|
486
478
|
"has-divider": "",
|
|
487
|
-
onClick: (
|
|
479
|
+
onClick: (Z) => ie(m)
|
|
488
480
|
}, {
|
|
489
|
-
default:
|
|
490
|
-
|
|
481
|
+
default: k(() => [
|
|
482
|
+
Y(x(l(f)("keys.actions.delete")), 1)
|
|
491
483
|
]),
|
|
492
484
|
_: 2
|
|
493
485
|
}, 1032, ["onClick"])
|
|
@@ -497,100 +489,77 @@ const he = {
|
|
|
497
489
|
]),
|
|
498
490
|
_: 2
|
|
499
491
|
}, [
|
|
500
|
-
!
|
|
501
|
-
name: "outside-actions",
|
|
502
|
-
fn: u(() => [
|
|
503
|
-
(b(), V(Se, {
|
|
504
|
-
disabled: !a.useActionOutside,
|
|
505
|
-
to: "#kong-ui-app-page-header-action-button"
|
|
506
|
-
}, [
|
|
507
|
-
f(n, {
|
|
508
|
-
appearance: "secondary",
|
|
509
|
-
class: "open-learning-hub",
|
|
510
|
-
"data-testid": "keys-learn-more-button",
|
|
511
|
-
icon: "",
|
|
512
|
-
onClick: i[2] || (i[2] = (p) => s.$emit("click:learn-more"))
|
|
513
|
-
}, {
|
|
514
|
-
default: u(() => [
|
|
515
|
-
f(l(Ce), { decorative: "" })
|
|
516
|
-
]),
|
|
517
|
-
_: 1
|
|
518
|
-
})
|
|
519
|
-
], 8, ["disabled"]))
|
|
520
|
-
]),
|
|
521
|
-
key: "0"
|
|
522
|
-
} : void 0,
|
|
523
|
-
!M.value && a.enableV2EmptyStates && a.config.app === "konnect" ? {
|
|
492
|
+
!E.value && i.config.app === "konnect" ? {
|
|
524
493
|
name: "empty-state",
|
|
525
|
-
fn:
|
|
526
|
-
var
|
|
494
|
+
fn: k(() => {
|
|
495
|
+
var m;
|
|
527
496
|
return [
|
|
528
|
-
|
|
529
|
-
"action-button-text": l(
|
|
497
|
+
u(l(Ne), {
|
|
498
|
+
"action-button-text": l(f)("keys.list.empty_state_v2.create_cta"),
|
|
530
499
|
appearance: "secondary",
|
|
531
|
-
"can-create": () =>
|
|
532
|
-
"data-testid":
|
|
533
|
-
description: l(
|
|
534
|
-
"learn-more":
|
|
535
|
-
title: l(
|
|
536
|
-
"onClick:create":
|
|
537
|
-
"onClick:learnMore":
|
|
538
|
-
},
|
|
539
|
-
image:
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
color: l(
|
|
543
|
-
size: l(
|
|
500
|
+
"can-create": () => i.canCreate(),
|
|
501
|
+
"data-testid": i.config.keySetId ? "nested-keys-entity-empty-state" : "keys-entity-empty-state",
|
|
502
|
+
description: l(f)("keys.list.empty_state_v2.description"),
|
|
503
|
+
"learn-more": i.config.app === "konnect",
|
|
504
|
+
title: l(f)("keys.list.empty_state_v2.title"),
|
|
505
|
+
"onClick:create": o,
|
|
506
|
+
"onClick:learnMore": c[2] || (c[2] = (Z) => a.$emit("click:learn-more"))
|
|
507
|
+
}, pe({
|
|
508
|
+
image: k(() => [
|
|
509
|
+
M("div", at, [
|
|
510
|
+
u(l(Re), {
|
|
511
|
+
color: l(tt),
|
|
512
|
+
size: l(lt)
|
|
544
513
|
}, null, 8, ["color", "size"])
|
|
545
514
|
])
|
|
546
515
|
]),
|
|
547
516
|
_: 2
|
|
548
517
|
}, [
|
|
549
|
-
(
|
|
518
|
+
(m = i.config) != null && m.isControlPlaneGroup ? {
|
|
550
519
|
name: "message",
|
|
551
|
-
fn:
|
|
552
|
-
|
|
520
|
+
fn: k(() => [
|
|
521
|
+
Y(x(l(f)("keys.list.empty_state_v2.group")), 1)
|
|
553
522
|
]),
|
|
554
523
|
key: "0"
|
|
555
524
|
} : void 0
|
|
556
525
|
]), 1032, ["action-button-text", "can-create", "data-testid", "description", "learn-more", "title"])
|
|
557
526
|
];
|
|
558
527
|
}),
|
|
559
|
-
key: "
|
|
528
|
+
key: "0"
|
|
560
529
|
} : void 0
|
|
561
530
|
]), 1032, ["cache-identifier", "disable-sorting", "empty-state-options", "error-message", "fetcher", "fetcher-cache-key", "query", "table-headers", "onState"]),
|
|
562
|
-
|
|
563
|
-
"action-pending":
|
|
564
|
-
description: l(
|
|
565
|
-
"entity-name":
|
|
531
|
+
u(l(Je), {
|
|
532
|
+
"action-pending": H.value,
|
|
533
|
+
description: l(f)("keys.delete.description"),
|
|
534
|
+
"entity-name": V.value && (V.value.name || V.value.id),
|
|
566
535
|
"entity-type": l(We).Key,
|
|
567
|
-
error:
|
|
536
|
+
error: le.value,
|
|
568
537
|
"need-confirm": !1,
|
|
569
|
-
title: l(
|
|
570
|
-
visible:
|
|
571
|
-
onCancel:
|
|
572
|
-
onProceed:
|
|
538
|
+
title: l(f)("keys.delete.title"),
|
|
539
|
+
visible: L.value,
|
|
540
|
+
onCancel: fe,
|
|
541
|
+
onProceed: oe
|
|
573
542
|
}, null, 8, ["action-pending", "description", "entity-name", "entity-type", "error", "title", "visible"])
|
|
574
543
|
]);
|
|
575
544
|
};
|
|
576
545
|
}
|
|
577
|
-
}),
|
|
578
|
-
const
|
|
579
|
-
for (const [t,
|
|
580
|
-
|
|
581
|
-
return
|
|
582
|
-
},
|
|
546
|
+
}), $e = (i, P) => {
|
|
547
|
+
const _ = i.__vccOpts || i;
|
|
548
|
+
for (const [t, f] of P)
|
|
549
|
+
_[t] = f;
|
|
550
|
+
return _;
|
|
551
|
+
}, St = /* @__PURE__ */ $e(st, [["__scopeId", "data-v-5f1a04fb"]]), nt = { class: "kong-ui-entities-keys-form" }, rt = { "data-testid": "no-search-results" }, dt = { class: "select-item-container" }, ct = { class: "select-item-label" }, yt = { class: "select-item-description" }, ft = {
|
|
583
552
|
key: 1,
|
|
584
553
|
class: "invalid-key-set-message",
|
|
585
554
|
"data-testid": "invalid-key-set-message"
|
|
586
|
-
},
|
|
555
|
+
}, ut = { "data-testid": "key-format-container" }, kt = /* @__PURE__ */ me({
|
|
587
556
|
__name: "KeyForm",
|
|
588
557
|
props: {
|
|
589
558
|
/** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
|
|
590
559
|
config: {
|
|
591
560
|
type: Object,
|
|
592
561
|
required: !0,
|
|
593
|
-
validator: (
|
|
562
|
+
validator: (i) => !(!i || !["konnect", "kongManager"].includes(i == null ? void 0 : i.app) || i.app === "konnect" && !i.controlPlaneId || i.app === "kongManager" && typeof i.workspace != "string" || !i.cancelRoute)
|
|
594
563
|
},
|
|
595
564
|
/** If a valid Key ID is provided, it will put the form in Edit mode instead of Create */
|
|
596
565
|
keyId: {
|
|
@@ -618,9 +587,9 @@ const he = {
|
|
|
618
587
|
}
|
|
619
588
|
},
|
|
620
589
|
emits: ["update", "error", "loading"],
|
|
621
|
-
setup(
|
|
590
|
+
setup(i, { emit: P }) {
|
|
622
591
|
var oe;
|
|
623
|
-
const
|
|
592
|
+
const _ = P, t = i, f = xe(), { i18n: { t: r } } = ve.useI18n(), { getMessageFromError: K } = Le(), { axiosInstance: q } = ge((oe = t.config) == null ? void 0 : oe.axiosRequestConfig), z = h(() => t.keySetId ? O.form[t.config.app].edit.forKeySet.replace(/{keySetId}/gi, t.keySetId) : O.form[t.config.app].edit.all), $ = h(() => t.keyId ? se.Edit : se.Create), e = be({
|
|
624
593
|
fields: {
|
|
625
594
|
name: "",
|
|
626
595
|
tags: "",
|
|
@@ -634,7 +603,7 @@ const he = {
|
|
|
634
603
|
},
|
|
635
604
|
isReadonly: !1,
|
|
636
605
|
errorMessage: ""
|
|
637
|
-
}),
|
|
606
|
+
}), C = be({
|
|
638
607
|
name: "",
|
|
639
608
|
tags: "",
|
|
640
609
|
key_id: "",
|
|
@@ -643,271 +612,271 @@ const he = {
|
|
|
643
612
|
jwk: "",
|
|
644
613
|
private_key: "",
|
|
645
614
|
public_key: ""
|
|
646
|
-
}),
|
|
615
|
+
}), D = [
|
|
647
616
|
{
|
|
648
|
-
label:
|
|
617
|
+
label: r("keys.form.fields.key_format.options.jwk"),
|
|
649
618
|
value: "jwk"
|
|
650
619
|
},
|
|
651
620
|
{
|
|
652
|
-
label:
|
|
621
|
+
label: r("keys.form.fields.key_format.options.pem"),
|
|
653
622
|
value: "pem"
|
|
654
623
|
}
|
|
655
|
-
],
|
|
656
|
-
|
|
657
|
-
|
|
624
|
+
], T = h(() => e.isReadonly || $.value === se.Create && !!t.fixedKeySetId), J = h(() => !T.value);
|
|
625
|
+
ee(() => t.fixedKeySetId, (o) => {
|
|
626
|
+
$.value === se.Create && (e.fields.key_set = o);
|
|
658
627
|
}, { immediate: !0 });
|
|
659
|
-
const
|
|
660
|
-
var
|
|
661
|
-
e.fields.key_id = (o == null ? void 0 : o.kid) || "", e.fields.name = (o == null ? void 0 : o.name) || "", e.fields.tags = ((
|
|
628
|
+
const E = h(() => JSON.stringify(e.fields) !== JSON.stringify(C) && !!e.fields.key_id && !!e.fields.key_format && (e.fields.key_format === "jwk" && !!e.fields.jwk || e.fields.key_format === "pem" && !!e.fields.private_key && !!e.fields.public_key)), G = (o) => {
|
|
629
|
+
var n, b, a, c;
|
|
630
|
+
e.fields.key_id = (o == null ? void 0 : o.kid) || "", e.fields.name = (o == null ? void 0 : o.name) || "", e.fields.tags = ((n = o == null ? void 0 : o.tags) == null ? void 0 : n.join(", ")) || "", e.fields.key_set = ((b = o == null ? void 0 : o.set) == null ? void 0 : b.id) || "", e.fields.key_format = o != null && o.pem ? "pem" : "jwk", e.fields.jwk = (o == null ? void 0 : o.jwk) || "", e.fields.private_key = ((a = o == null ? void 0 : o.pem) == null ? void 0 : a.private_key) || "", e.fields.public_key = ((c = o == null ? void 0 : o.pem) == null ? void 0 : c.public_key) || "", t.showx5t && (e.fields.x5t = (o == null ? void 0 : o.x5t) || ""), Object.assign(C, e.fields);
|
|
662
631
|
}, W = () => {
|
|
663
|
-
|
|
664
|
-
},
|
|
665
|
-
var
|
|
666
|
-
let o = `${t.config.apiBaseUrl}${
|
|
667
|
-
return t.config.app === "konnect" ? o = o.replace(/{controlPlaneId}/gi, ((
|
|
668
|
-
}), g =
|
|
669
|
-
var o,
|
|
632
|
+
f.push(t.config.cancelRoute);
|
|
633
|
+
}, y = h(() => {
|
|
634
|
+
var n, b;
|
|
635
|
+
let o = `${t.config.apiBaseUrl}${O.form[t.config.app][$.value][t.keySetId ? "forKeySet" : "all"]}`;
|
|
636
|
+
return t.config.app === "konnect" ? o = o.replace(/{controlPlaneId}/gi, ((n = t.config) == null ? void 0 : n.controlPlaneId) || "") : t.config.app === "kongManager" && (o = o.replace(/\/{workspace}/gi, (b = t.config) != null && b.workspace ? `/${t.config.workspace}` : "")), o = o.replace(/{id}/gi, t.keyId).replace(/{keySetId}/gi, t.keySetId || ""), o;
|
|
637
|
+
}), g = h(() => {
|
|
638
|
+
var o, n, b;
|
|
670
639
|
return {
|
|
671
640
|
kid: e.fields.key_id,
|
|
672
641
|
...t.showx5t ? { x5t: e.fields.x5t || null } : {},
|
|
673
642
|
name: e.fields.name || null,
|
|
674
|
-
tags: ((
|
|
643
|
+
tags: ((b = (n = (o = e.fields.tags) == null ? void 0 : o.split(",")) == null ? void 0 : n.map((a) => String(a || "").trim())) == null ? void 0 : b.filter((a) => a !== "")) || [],
|
|
675
644
|
set: e.fields.key_set ? { id: e.fields.key_set } : null,
|
|
676
645
|
jwk: e.fields.key_format === "jwk" ? e.fields.jwk : null,
|
|
677
646
|
pem: e.fields.key_format === "pem" ? { private_key: e.fields.private_key, public_key: e.fields.public_key } : null
|
|
678
647
|
};
|
|
679
|
-
}),
|
|
680
|
-
var o,
|
|
648
|
+
}), j = async () => {
|
|
649
|
+
var o, n, b, a, c;
|
|
681
650
|
try {
|
|
682
651
|
e.isReadonly = !0;
|
|
683
|
-
let
|
|
684
|
-
if (
|
|
685
|
-
const { data:
|
|
686
|
-
e.fields.key_id = (
|
|
652
|
+
let s;
|
|
653
|
+
if ($.value === "create" ? s = await q.post(y.value, g.value) : $.value === "edit" && (s = ((o = t.config) == null ? void 0 : o.app) === "konnect" ? await q.put(y.value, g.value) : await q.patch(y.value, g.value)), s) {
|
|
654
|
+
const { data: d } = s;
|
|
655
|
+
e.fields.key_id = (d == null ? void 0 : d.kid) || "", e.fields.name = (d == null ? void 0 : d.name) || "", e.fields.tags = ((n = d == null ? void 0 : d.tags) == null ? void 0 : n.join(", ")) || "", e.fields.key_set = ((b = d == null ? void 0 : d.set) == null ? void 0 : b.id) || "", e.fields.key_format = d != null && d.pem ? "pem" : "jwk", e.fields.jwk = (d == null ? void 0 : d.jwk) || "", e.fields.private_key = ((a = d == null ? void 0 : d.pem) == null ? void 0 : a.private_key) || "", e.fields.public_key = ((c = d == null ? void 0 : d.pem) == null ? void 0 : c.public_key) || "", t.showx5t && (e.fields.x5t = (d == null ? void 0 : d.x5t) || ""), Object.assign(C, e.fields), _("update", s == null ? void 0 : s.data);
|
|
687
656
|
}
|
|
688
|
-
} catch (
|
|
689
|
-
e.errorMessage =
|
|
657
|
+
} catch (s) {
|
|
658
|
+
e.errorMessage = K(s), _("error", s);
|
|
690
659
|
} finally {
|
|
691
660
|
e.isReadonly = !1;
|
|
692
661
|
}
|
|
693
662
|
}, {
|
|
694
663
|
debouncedQueryChange: v,
|
|
695
|
-
loading:
|
|
696
|
-
allRecords:
|
|
697
|
-
error:
|
|
698
|
-
validationError:
|
|
699
|
-
loadItems:
|
|
700
|
-
results:
|
|
701
|
-
} =
|
|
664
|
+
loading: I,
|
|
665
|
+
allRecords: p,
|
|
666
|
+
error: te,
|
|
667
|
+
validationError: ne,
|
|
668
|
+
loadItems: re,
|
|
669
|
+
results: de
|
|
670
|
+
} = He(t.config, O.form[t.config.app].keySets, void 0, {
|
|
702
671
|
fetchedItemsKey: "data",
|
|
703
672
|
searchKeys: ["id", "name"]
|
|
704
|
-
}),
|
|
705
|
-
(!o || o !== e.fields.key_set && o !==
|
|
706
|
-
},
|
|
673
|
+
}), ce = (o) => {
|
|
674
|
+
(!o || o !== e.fields.key_set && o !== C.key_set) && v(o);
|
|
675
|
+
}, ye = h(() => te.value ? r("keys.errors.key_sets.fetch") : ""), V = h(() => ne.value ? r("keys.errors.key_sets.invalid") : ""), L = w(0), H = h(() => p.value === void 0), le = h(() => {
|
|
707
676
|
if (H.value)
|
|
708
|
-
return t.config.app === "konnect" ?
|
|
709
|
-
}),
|
|
710
|
-
name:
|
|
677
|
+
return t.config.app === "konnect" ? r("keys.form.fields.key_set.footer") : void 0;
|
|
678
|
+
}), X = w(/* @__PURE__ */ new Set()), ie = h(() => Array.from(X.value).map((n) => ({
|
|
679
|
+
name: n.name || "",
|
|
711
680
|
// can't use name for label or it tries to search => 404
|
|
712
681
|
label: "",
|
|
713
682
|
// leave it blank so no flicker when used with selected-item-template
|
|
714
|
-
value:
|
|
715
|
-
selected: e.fields.key_set ===
|
|
716
|
-
}))),
|
|
717
|
-
|
|
718
|
-
let
|
|
719
|
-
for (
|
|
720
|
-
|
|
683
|
+
value: n.id,
|
|
684
|
+
selected: e.fields.key_set === n.id
|
|
685
|
+
}))), fe = (o) => {
|
|
686
|
+
X.value.clear();
|
|
687
|
+
let n;
|
|
688
|
+
for (n of o)
|
|
689
|
+
X.value.add(n);
|
|
721
690
|
};
|
|
722
|
-
return
|
|
723
|
-
|
|
724
|
-
}, { immediate: !0, deep: !0 }),
|
|
725
|
-
|
|
726
|
-
}, { immediate: !0, deep: !0 }),
|
|
727
|
-
await
|
|
728
|
-
}), (o,
|
|
729
|
-
const
|
|
730
|
-
return
|
|
731
|
-
|
|
732
|
-
"can-submit":
|
|
733
|
-
config:
|
|
734
|
-
"edit-id":
|
|
735
|
-
"entity-type": l(
|
|
736
|
-
"error-message": e.errorMessage ||
|
|
737
|
-
"fetch-url":
|
|
691
|
+
return ee(de, (o) => {
|
|
692
|
+
fe(o);
|
|
693
|
+
}, { immediate: !0, deep: !0 }), ee(ie, () => {
|
|
694
|
+
L.value++;
|
|
695
|
+
}, { immediate: !0, deep: !0 }), Ce(async () => {
|
|
696
|
+
await re();
|
|
697
|
+
}), (o, n) => {
|
|
698
|
+
const b = B("KInput"), a = B("KSelect"), c = B("KTextArea");
|
|
699
|
+
return S(), N("div", nt, [
|
|
700
|
+
u(l(Qe), {
|
|
701
|
+
"can-submit": E.value,
|
|
702
|
+
config: i.config,
|
|
703
|
+
"edit-id": i.keyId,
|
|
704
|
+
"entity-type": l(Ke).Key,
|
|
705
|
+
"error-message": e.errorMessage || ye.value,
|
|
706
|
+
"fetch-url": z.value,
|
|
738
707
|
"form-fields": g.value,
|
|
739
708
|
"is-readonly": e.isReadonly,
|
|
740
709
|
onCancel: W,
|
|
741
|
-
"onFetch:error":
|
|
742
|
-
"onFetch:success":
|
|
743
|
-
onLoading:
|
|
744
|
-
onSubmit:
|
|
710
|
+
"onFetch:error": n[9] || (n[9] = (s) => o.$emit("error", s)),
|
|
711
|
+
"onFetch:success": G,
|
|
712
|
+
onLoading: n[10] || (n[10] = (s) => o.$emit("loading", s)),
|
|
713
|
+
onSubmit: j
|
|
745
714
|
}, {
|
|
746
|
-
default:
|
|
747
|
-
|
|
748
|
-
description: l(
|
|
749
|
-
title: l(
|
|
715
|
+
default: k(() => [
|
|
716
|
+
u(l(Ie), {
|
|
717
|
+
description: l(r)("keys.form.sections.general.description"),
|
|
718
|
+
title: l(r)("keys.form.sections.general.title")
|
|
750
719
|
}, {
|
|
751
|
-
default:
|
|
752
|
-
|
|
720
|
+
default: k(() => [
|
|
721
|
+
u(b, {
|
|
753
722
|
modelValue: e.fields.key_id,
|
|
754
|
-
"onUpdate:modelValue":
|
|
723
|
+
"onUpdate:modelValue": n[0] || (n[0] = (s) => e.fields.key_id = s),
|
|
755
724
|
modelModifiers: { trim: !0 },
|
|
756
725
|
autocomplete: "off",
|
|
757
726
|
"data-testid": "key-form-id",
|
|
758
|
-
help: l(
|
|
759
|
-
label: l(
|
|
727
|
+
help: l(r)("keys.form.fields.id.help"),
|
|
728
|
+
label: l(r)("keys.form.fields.id.label"),
|
|
760
729
|
"label-attributes": {
|
|
761
|
-
info: l(
|
|
730
|
+
info: l(r)("keys.form.fields.id.tooltip"),
|
|
762
731
|
tooltipAttributes: { maxWidth: "400" }
|
|
763
732
|
},
|
|
764
|
-
placeholder: l(
|
|
733
|
+
placeholder: l(r)("keys.form.fields.id.placeholder"),
|
|
765
734
|
readonly: e.isReadonly,
|
|
766
735
|
required: "",
|
|
767
736
|
type: "text"
|
|
768
737
|
}, null, 8, ["modelValue", "help", "label", "label-attributes", "placeholder", "readonly"]),
|
|
769
|
-
|
|
738
|
+
i.showx5t ? (S(), R(b, {
|
|
770
739
|
key: 0,
|
|
771
740
|
modelValue: e.fields.x5t,
|
|
772
|
-
"onUpdate:modelValue":
|
|
741
|
+
"onUpdate:modelValue": n[1] || (n[1] = (s) => e.fields.x5t = s),
|
|
773
742
|
modelModifiers: { trim: !0 },
|
|
774
743
|
autocomplete: "off",
|
|
775
744
|
"data-testid": "key-form-x5t",
|
|
776
|
-
help: l(
|
|
777
|
-
label: l(
|
|
745
|
+
help: l(r)("keys.form.fields.x5t.help"),
|
|
746
|
+
label: l(r)("keys.form.fields.x5t.label"),
|
|
778
747
|
"label-attributes": {
|
|
779
|
-
info: l(
|
|
748
|
+
info: l(r)("keys.form.fields.x5t.tooltip"),
|
|
780
749
|
tooltipAttributes: { maxWidth: "400" }
|
|
781
750
|
},
|
|
782
|
-
placeholder: l(
|
|
751
|
+
placeholder: l(r)("keys.form.fields.x5t.placeholder"),
|
|
783
752
|
readonly: e.isReadonly,
|
|
784
753
|
type: "text"
|
|
785
|
-
}, null, 8, ["modelValue", "help", "label", "label-attributes", "placeholder", "readonly"])) :
|
|
786
|
-
|
|
754
|
+
}, null, 8, ["modelValue", "help", "label", "label-attributes", "placeholder", "readonly"])) : Q("", !0),
|
|
755
|
+
u(b, {
|
|
787
756
|
modelValue: e.fields.name,
|
|
788
|
-
"onUpdate:modelValue":
|
|
757
|
+
"onUpdate:modelValue": n[2] || (n[2] = (s) => e.fields.name = s),
|
|
789
758
|
modelModifiers: { trim: !0 },
|
|
790
759
|
autocomplete: "off",
|
|
791
760
|
"data-testid": "key-form-name",
|
|
792
|
-
label: l(
|
|
793
|
-
placeholder: l(
|
|
761
|
+
label: l(r)("keys.form.fields.name.label"),
|
|
762
|
+
placeholder: l(r)("keys.form.fields.name.placeholder"),
|
|
794
763
|
readonly: e.isReadonly,
|
|
795
764
|
type: "text"
|
|
796
765
|
}, null, 8, ["modelValue", "label", "placeholder", "readonly"]),
|
|
797
|
-
|
|
766
|
+
u(a, {
|
|
798
767
|
modelValue: e.fields.key_set,
|
|
799
|
-
"onUpdate:modelValue":
|
|
800
|
-
clearable:
|
|
768
|
+
"onUpdate:modelValue": n[3] || (n[3] = (s) => e.fields.key_set = s),
|
|
769
|
+
clearable: J.value,
|
|
801
770
|
"data-testid": "key-form-key-set",
|
|
802
|
-
"dropdown-footer-text":
|
|
771
|
+
"dropdown-footer-text": le.value,
|
|
803
772
|
"enable-filtering": "",
|
|
804
773
|
"filter-function": () => !0,
|
|
805
|
-
items:
|
|
806
|
-
label: l(
|
|
807
|
-
loading: l(
|
|
808
|
-
placeholder: l(
|
|
809
|
-
readonly:
|
|
774
|
+
items: ie.value,
|
|
775
|
+
label: l(r)("keys.form.fields.key_set.label"),
|
|
776
|
+
loading: l(I),
|
|
777
|
+
placeholder: l(r)("keys.form.fields.key_set.placeholder"),
|
|
778
|
+
readonly: T.value,
|
|
810
779
|
width: "100%",
|
|
811
|
-
onQueryChange:
|
|
780
|
+
onQueryChange: ce
|
|
812
781
|
}, {
|
|
813
|
-
loading:
|
|
814
|
-
|
|
782
|
+
loading: k(() => [
|
|
783
|
+
M("div", null, x(l(r)("keys.actions.loading")), 1)
|
|
815
784
|
]),
|
|
816
|
-
empty:
|
|
817
|
-
|
|
785
|
+
empty: k(() => [
|
|
786
|
+
M("div", rt, x(l(r)("keys.search.no_results")), 1)
|
|
818
787
|
]),
|
|
819
|
-
"selected-item-template":
|
|
820
|
-
|
|
788
|
+
"selected-item-template": k(({ item: s }) => [
|
|
789
|
+
M("div", null, x(s.name), 1)
|
|
821
790
|
]),
|
|
822
|
-
"item-template":
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
791
|
+
"item-template": k(({ item: s }) => [
|
|
792
|
+
M("div", dt, [
|
|
793
|
+
M("div", ct, x(s.name), 1),
|
|
794
|
+
M("div", yt, x(s.value), 1)
|
|
826
795
|
])
|
|
827
796
|
]),
|
|
828
797
|
_: 1
|
|
829
798
|
}, 8, ["modelValue", "clearable", "dropdown-footer-text", "items", "label", "loading", "placeholder", "readonly"]),
|
|
830
|
-
|
|
831
|
-
|
|
799
|
+
V.value ? (S(), N("p", ft, x(V.value), 1)) : Q("", !0),
|
|
800
|
+
u(b, {
|
|
832
801
|
modelValue: e.fields.tags,
|
|
833
|
-
"onUpdate:modelValue":
|
|
802
|
+
"onUpdate:modelValue": n[4] || (n[4] = (s) => e.fields.tags = s),
|
|
834
803
|
modelModifiers: { trim: !0 },
|
|
835
804
|
autocomplete: "off",
|
|
836
805
|
"data-testid": "key-form-tags",
|
|
837
|
-
help: l(
|
|
838
|
-
label: l(
|
|
806
|
+
help: l(r)("keys.form.fields.tags.help"),
|
|
807
|
+
label: l(r)("keys.form.fields.tags.label"),
|
|
839
808
|
"label-attributes": {
|
|
840
|
-
info: l(
|
|
809
|
+
info: l(r)("keys.form.fields.tags.tooltip"),
|
|
841
810
|
tooltipAttributes: { maxWidth: "400" }
|
|
842
811
|
},
|
|
843
|
-
placeholder: l(
|
|
812
|
+
placeholder: l(r)("keys.form.fields.tags.placeholder"),
|
|
844
813
|
readonly: e.isReadonly,
|
|
845
814
|
type: "text"
|
|
846
815
|
}, null, 8, ["modelValue", "help", "label", "label-attributes", "placeholder", "readonly"])
|
|
847
816
|
]),
|
|
848
817
|
_: 1
|
|
849
818
|
}, 8, ["description", "title"]),
|
|
850
|
-
|
|
851
|
-
description: l(
|
|
819
|
+
u(l(Ie), {
|
|
820
|
+
description: l(r)("keys.form.sections.keys.description"),
|
|
852
821
|
"has-divider": "",
|
|
853
|
-
title: l(
|
|
822
|
+
title: l(r)("keys.form.sections.keys.title")
|
|
854
823
|
}, {
|
|
855
|
-
default:
|
|
856
|
-
|
|
857
|
-
|
|
824
|
+
default: k(() => [
|
|
825
|
+
M("div", ut, [
|
|
826
|
+
u(a, {
|
|
858
827
|
modelValue: e.fields.key_format,
|
|
859
|
-
"onUpdate:modelValue":
|
|
828
|
+
"onUpdate:modelValue": n[5] || (n[5] = (s) => e.fields.key_format = s),
|
|
860
829
|
"data-testid": "key-form-key-format",
|
|
861
|
-
items:
|
|
862
|
-
label: l(
|
|
830
|
+
items: D,
|
|
831
|
+
label: l(r)("keys.form.fields.key_format.label"),
|
|
863
832
|
readonly: e.isReadonly,
|
|
864
833
|
required: "",
|
|
865
834
|
width: "100%"
|
|
866
835
|
}, null, 8, ["modelValue", "label", "readonly"])
|
|
867
836
|
]),
|
|
868
|
-
e.fields.key_format === "jwk" ? (
|
|
837
|
+
e.fields.key_format === "jwk" ? (S(), R(c, {
|
|
869
838
|
key: 0,
|
|
870
839
|
modelValue: e.fields.jwk,
|
|
871
|
-
"onUpdate:modelValue":
|
|
840
|
+
"onUpdate:modelValue": n[6] || (n[6] = (s) => e.fields.jwk = s),
|
|
872
841
|
modelModifiers: { trim: !0 },
|
|
873
842
|
"character-limit": !1,
|
|
874
843
|
class: "key-form-textarea",
|
|
875
844
|
"data-testid": "key-form-jwk",
|
|
876
|
-
label: l(
|
|
845
|
+
label: l(r)("keys.form.fields.jwk.label"),
|
|
877
846
|
"label-attributes": {
|
|
878
|
-
info: l(
|
|
847
|
+
info: l(r)("keys.form.fields.jwk.tooltip"),
|
|
879
848
|
tooltipAttributes: { maxWidth: "400" }
|
|
880
849
|
},
|
|
881
|
-
placeholder: l(
|
|
850
|
+
placeholder: l(r)("keys.form.fields.jwk.placeholder"),
|
|
882
851
|
readonly: e.isReadonly,
|
|
883
852
|
required: ""
|
|
884
|
-
}, null, 8, ["modelValue", "label", "label-attributes", "placeholder", "readonly"])) :
|
|
885
|
-
e.fields.key_format === "pem" ? (
|
|
853
|
+
}, null, 8, ["modelValue", "label", "label-attributes", "placeholder", "readonly"])) : Q("", !0),
|
|
854
|
+
e.fields.key_format === "pem" ? (S(), R(c, {
|
|
886
855
|
key: 1,
|
|
887
856
|
modelValue: e.fields.private_key,
|
|
888
|
-
"onUpdate:modelValue":
|
|
857
|
+
"onUpdate:modelValue": n[7] || (n[7] = (s) => e.fields.private_key = s),
|
|
889
858
|
modelModifiers: { trim: !0 },
|
|
890
859
|
"character-limit": !1,
|
|
891
860
|
class: "key-form-textarea",
|
|
892
861
|
"data-testid": "key-form-private-key",
|
|
893
|
-
label: l(
|
|
894
|
-
placeholder: l(
|
|
862
|
+
label: l(r)("keys.form.fields.private_key.label"),
|
|
863
|
+
placeholder: l(r)("keys.form.fields.private_key.placeholder"),
|
|
895
864
|
readonly: e.isReadonly,
|
|
896
865
|
required: ""
|
|
897
|
-
}, null, 8, ["modelValue", "label", "placeholder", "readonly"])) :
|
|
898
|
-
e.fields.key_format === "pem" ? (
|
|
866
|
+
}, null, 8, ["modelValue", "label", "placeholder", "readonly"])) : Q("", !0),
|
|
867
|
+
e.fields.key_format === "pem" ? (S(), R(c, {
|
|
899
868
|
key: 2,
|
|
900
869
|
modelValue: e.fields.public_key,
|
|
901
|
-
"onUpdate:modelValue":
|
|
870
|
+
"onUpdate:modelValue": n[8] || (n[8] = (s) => e.fields.public_key = s),
|
|
902
871
|
modelModifiers: { trim: !0 },
|
|
903
872
|
"character-limit": !1,
|
|
904
873
|
class: "key-form-textarea",
|
|
905
874
|
"data-testid": "key-form-public-key",
|
|
906
|
-
label: l(
|
|
907
|
-
placeholder: l(
|
|
875
|
+
label: l(r)("keys.form.fields.public_key.label"),
|
|
876
|
+
placeholder: l(r)("keys.form.fields.public_key.placeholder"),
|
|
908
877
|
readonly: e.isReadonly,
|
|
909
878
|
required: ""
|
|
910
|
-
}, null, 8, ["modelValue", "label", "placeholder", "readonly"])) :
|
|
879
|
+
}, null, 8, ["modelValue", "label", "placeholder", "readonly"])) : Q("", !0)
|
|
911
880
|
]),
|
|
912
881
|
_: 1
|
|
913
882
|
}, 8, ["description", "title"])
|
|
@@ -917,14 +886,14 @@ const he = {
|
|
|
917
886
|
]);
|
|
918
887
|
};
|
|
919
888
|
}
|
|
920
|
-
}),
|
|
889
|
+
}), It = /* @__PURE__ */ $e(kt, [["__scopeId", "data-v-d5baf85a"]]), pt = { class: "kong-ui-entities-keys-entity-config-card" }, mt = { key: 2 }, wt = /* @__PURE__ */ me({
|
|
921
890
|
__name: "KeyConfigCard",
|
|
922
891
|
props: {
|
|
923
892
|
/** The base konnect or kongManger config. Pass additional config props in the shared entity component as needed. */
|
|
924
893
|
config: {
|
|
925
894
|
type: Object,
|
|
926
895
|
required: !0,
|
|
927
|
-
validator: (
|
|
896
|
+
validator: (i) => !(!i || !["konnect", "kongManager"].includes(i == null ? void 0 : i.app) || i.app === "konnect" && !i.controlPlaneId || i.app === "kongManager" && typeof i.workspace != "string" || !i.entityId)
|
|
928
897
|
},
|
|
929
898
|
/**
|
|
930
899
|
* External link for documentation that determines visibility of Documentation button
|
|
@@ -950,143 +919,143 @@ const he = {
|
|
|
950
919
|
}
|
|
951
920
|
},
|
|
952
921
|
emits: ["loading", "fetch:error", "fetch:success", "navigation-click"],
|
|
953
|
-
setup(
|
|
922
|
+
setup(i, { emit: P }) {
|
|
954
923
|
var W;
|
|
955
|
-
const
|
|
956
|
-
var
|
|
957
|
-
return (
|
|
958
|
-
}),
|
|
924
|
+
const _ = P, t = i, { axiosInstance: f } = ge((W = t.config) == null ? void 0 : W.axiosRequestConfig), { convertKeyToTitle: r } = ze(), { i18n: { t: K } } = ve.useI18n(), q = h(() => t.keySetId ? `${O.form[t.config.app].edit.forKeySet}`.replace(/{keySetId}/gi, t.keySetId) : O.form[t.config.app].edit.all), z = h(() => {
|
|
925
|
+
var y;
|
|
926
|
+
return (y = O.form[t.config.app]) == null ? void 0 : y.getKeySet;
|
|
927
|
+
}), $ = w(), e = w({}), C = w(t.keySetId || ""), D = w(""), T = w(!1), J = async (y) => {
|
|
959
928
|
var g;
|
|
960
|
-
|
|
929
|
+
$.value = y, C.value = (g = y == null ? void 0 : y.set) == null ? void 0 : g.id, _("fetch:success", y), E(y);
|
|
961
930
|
};
|
|
962
|
-
|
|
963
|
-
var g,
|
|
964
|
-
if (!
|
|
931
|
+
ee(C, async () => {
|
|
932
|
+
var g, j;
|
|
933
|
+
if (!C.value)
|
|
965
934
|
return;
|
|
966
|
-
let
|
|
967
|
-
t.config.app === "konnect" ?
|
|
935
|
+
let y = `${t.config.apiBaseUrl}${z.value}`;
|
|
936
|
+
t.config.app === "konnect" ? y = y.replace(/{controlPlaneId}/gi, ((g = t.config) == null ? void 0 : g.controlPlaneId) || "").replace(/{keySetId}/gi, C.value || "") : t.config.app === "kongManager" && (y = y.replace(/\/{workspace}/gi, (j = t.config) != null && j.workspace ? `/${t.config.workspace}` : "").replace(/{keySetId}/gi, C.value || ""));
|
|
968
937
|
try {
|
|
969
|
-
|
|
970
|
-
const { data: v } = await
|
|
971
|
-
validateStatus: (
|
|
938
|
+
T.value = !0;
|
|
939
|
+
const { data: v } = await f.get(y, {
|
|
940
|
+
validateStatus: (I) => I === 404 || I >= 200 && I < 300
|
|
972
941
|
// in case KeySet is deleted
|
|
973
942
|
});
|
|
974
|
-
|
|
943
|
+
D.value = (v == null ? void 0 : v.name) || (v == null ? void 0 : v.id);
|
|
975
944
|
} catch (v) {
|
|
976
|
-
|
|
945
|
+
_("fetch:error", v);
|
|
977
946
|
} finally {
|
|
978
|
-
|
|
947
|
+
T.value = !1;
|
|
979
948
|
}
|
|
980
949
|
}, { immediate: !0 });
|
|
981
|
-
const
|
|
982
|
-
var g,
|
|
950
|
+
const E = (y) => {
|
|
951
|
+
var g, j;
|
|
983
952
|
try {
|
|
984
|
-
if (
|
|
985
|
-
const v = JSON.parse(
|
|
986
|
-
Object.keys(v).forEach((
|
|
953
|
+
if (y.jwk) {
|
|
954
|
+
const v = JSON.parse(y.jwk);
|
|
955
|
+
Object.keys(v).forEach((I) => {
|
|
987
956
|
e.value = {
|
|
988
957
|
...e.value,
|
|
989
|
-
[`jwk.${
|
|
958
|
+
[`jwk.${I}`]: v[I]
|
|
990
959
|
};
|
|
991
960
|
});
|
|
992
961
|
} else
|
|
993
962
|
e.value = {
|
|
994
|
-
"pem.public_key": (g =
|
|
995
|
-
"pem.private_key": (
|
|
963
|
+
"pem.public_key": (g = y == null ? void 0 : y.pem) == null ? void 0 : g.public_key,
|
|
964
|
+
"pem.private_key": (j = y == null ? void 0 : y.pem) == null ? void 0 : j.private_key
|
|
996
965
|
};
|
|
997
966
|
} catch (v) {
|
|
998
|
-
|
|
967
|
+
_("fetch:error", v);
|
|
999
968
|
}
|
|
1000
969
|
return e;
|
|
1001
|
-
},
|
|
970
|
+
}, G = w({
|
|
1002
971
|
id: {},
|
|
1003
972
|
name: {
|
|
1004
|
-
tooltip:
|
|
973
|
+
tooltip: K("keys.form.fields.name.tooltip")
|
|
1005
974
|
},
|
|
1006
975
|
last_updated: {},
|
|
1007
976
|
created: {},
|
|
1008
977
|
set: {
|
|
1009
|
-
label:
|
|
1010
|
-
section:
|
|
1011
|
-
tooltip:
|
|
978
|
+
label: K("keys.form.fields.set.label"),
|
|
979
|
+
section: ke.Basic,
|
|
980
|
+
tooltip: K("keys.form.fields.set.tooltip"),
|
|
1012
981
|
order: 5
|
|
1013
982
|
},
|
|
1014
983
|
kid: {
|
|
1015
|
-
label:
|
|
1016
|
-
section:
|
|
1017
|
-
tooltip:
|
|
984
|
+
label: K("keys.form.fields.kid.label"),
|
|
985
|
+
section: ke.Basic,
|
|
986
|
+
tooltip: K("keys.form.fields.kid.tooltip")
|
|
1018
987
|
},
|
|
1019
988
|
tags: {
|
|
1020
|
-
tooltip:
|
|
989
|
+
tooltip: K("keys.form.fields.tags.tooltip")
|
|
1021
990
|
},
|
|
1022
991
|
// advanced fields
|
|
1023
992
|
jwk: {
|
|
1024
|
-
label:
|
|
1025
|
-
type:
|
|
993
|
+
label: K("keys.form.fields.jwk.label"),
|
|
994
|
+
type: ue.Json
|
|
1026
995
|
},
|
|
1027
996
|
pem: {
|
|
1028
|
-
section:
|
|
1029
|
-
label:
|
|
1030
|
-
type:
|
|
997
|
+
section: ke.Advanced,
|
|
998
|
+
label: K("keys.form.fields.key_format.options.pem"),
|
|
999
|
+
type: ue.Json
|
|
1031
1000
|
}
|
|
1032
1001
|
});
|
|
1033
|
-
return (
|
|
1034
|
-
var v,
|
|
1035
|
-
const
|
|
1036
|
-
return
|
|
1037
|
-
|
|
1038
|
-
config:
|
|
1039
|
-
"config-card-doc":
|
|
1040
|
-
"config-schema":
|
|
1041
|
-
"entity-type": l(
|
|
1042
|
-
"fetch-url":
|
|
1043
|
-
"hide-title":
|
|
1044
|
-
"onFetch:error": g[0] || (g[0] = (
|
|
1045
|
-
"onFetch:success":
|
|
1046
|
-
onLoading: g[1] || (g[1] = (
|
|
1047
|
-
},
|
|
1048
|
-
set:
|
|
1049
|
-
|
|
1002
|
+
return (y, g) => {
|
|
1003
|
+
var v, I;
|
|
1004
|
+
const j = B("KSkeleton");
|
|
1005
|
+
return S(), N("div", pt, [
|
|
1006
|
+
u(l(Ge), {
|
|
1007
|
+
config: i.config,
|
|
1008
|
+
"config-card-doc": i.configCardDoc,
|
|
1009
|
+
"config-schema": G.value,
|
|
1010
|
+
"entity-type": l(Ke).Key,
|
|
1011
|
+
"fetch-url": q.value,
|
|
1012
|
+
"hide-title": i.hideTitle,
|
|
1013
|
+
"onFetch:error": g[0] || (g[0] = (p) => y.$emit("fetch:error", p)),
|
|
1014
|
+
"onFetch:success": J,
|
|
1015
|
+
onLoading: g[1] || (g[1] = (p) => y.$emit("loading", p))
|
|
1016
|
+
}, pe({
|
|
1017
|
+
set: k(({ row: p }) => [
|
|
1018
|
+
T.value ? (S(), R(j, {
|
|
1050
1019
|
key: 0,
|
|
1051
1020
|
"data-testid": "key-set-name-loader",
|
|
1052
1021
|
type: "spinner"
|
|
1053
|
-
})) :
|
|
1022
|
+
})) : p.value && p.value.id === C.value && D.value ? (S(), R(l(Xe), {
|
|
1054
1023
|
key: 1,
|
|
1055
1024
|
item: {
|
|
1056
|
-
key:
|
|
1057
|
-
value:
|
|
1058
|
-
type: l(
|
|
1025
|
+
key: p.value.id,
|
|
1026
|
+
value: D.value,
|
|
1027
|
+
type: l(ue).LinkInternal
|
|
1059
1028
|
},
|
|
1060
|
-
onClick: (
|
|
1061
|
-
}, null, 8, ["item", "onClick"])) : (
|
|
1029
|
+
onClick: (te) => y.$emit("navigation-click", p.value.id, "key-sets")
|
|
1030
|
+
}, null, 8, ["item", "onClick"])) : (S(), N("div", mt, x("–")))
|
|
1062
1031
|
]),
|
|
1063
1032
|
_: 2
|
|
1064
1033
|
}, [
|
|
1065
|
-
(v =
|
|
1034
|
+
(v = $.value) != null && v.jwk ? {
|
|
1066
1035
|
name: "jwk",
|
|
1067
|
-
fn:
|
|
1068
|
-
(
|
|
1069
|
-
key:
|
|
1070
|
-
"data-testid": `${
|
|
1036
|
+
fn: k(() => [
|
|
1037
|
+
(S(!0), N(_e, null, Se(Object.keys(e.value), (p) => (S(), R(l(we), {
|
|
1038
|
+
key: p,
|
|
1039
|
+
"data-testid": `${p}`,
|
|
1071
1040
|
item: {
|
|
1072
|
-
key:
|
|
1073
|
-
label: l(
|
|
1074
|
-
value: e.value[
|
|
1041
|
+
key: p,
|
|
1042
|
+
label: l(r)(p),
|
|
1043
|
+
value: e.value[p]
|
|
1075
1044
|
}
|
|
1076
1045
|
}, null, 8, ["data-testid", "item"]))), 128))
|
|
1077
1046
|
]),
|
|
1078
1047
|
key: "0"
|
|
1079
1048
|
} : void 0,
|
|
1080
|
-
(
|
|
1049
|
+
(I = $.value) != null && I.pem ? {
|
|
1081
1050
|
name: "pem",
|
|
1082
|
-
fn:
|
|
1083
|
-
(
|
|
1084
|
-
key:
|
|
1085
|
-
"data-testid": `${
|
|
1051
|
+
fn: k(() => [
|
|
1052
|
+
(S(!0), N(_e, null, Se(Object.keys(e.value), (p) => (S(), R(l(we), {
|
|
1053
|
+
key: p,
|
|
1054
|
+
"data-testid": `${p}`,
|
|
1086
1055
|
item: {
|
|
1087
|
-
key:
|
|
1088
|
-
label: l(
|
|
1089
|
-
value: e.value[
|
|
1056
|
+
key: p,
|
|
1057
|
+
label: l(r)(p),
|
|
1058
|
+
value: e.value[p]
|
|
1090
1059
|
}
|
|
1091
1060
|
}, null, 8, ["data-testid", "item"]))), 128))
|
|
1092
1061
|
]),
|
|
@@ -1098,7 +1067,7 @@ const he = {
|
|
|
1098
1067
|
}
|
|
1099
1068
|
});
|
|
1100
1069
|
export {
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1070
|
+
wt as KeyConfigCard,
|
|
1071
|
+
It as KeyForm,
|
|
1072
|
+
St as KeyList
|
|
1104
1073
|
};
|