valtech-components 2.0.1023 → 2.0.1025
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/esm2022/lib/components/molecules/pill/pill.component.mjs +3 -3
- package/esm2022/lib/components/molecules/ticket-card/ticket-card.component.mjs +183 -0
- package/esm2022/lib/components/molecules/ticket-card/ticket-card.i18n.mjs +23 -0
- package/esm2022/lib/components/molecules/ticket-card/types.mjs +2 -0
- package/esm2022/lib/components/molecules/update-banner/update-banner.component.mjs +3 -3
- package/esm2022/lib/components/organisms/api-key-create-modal/api-key-create-modal.component.mjs +290 -0
- package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.component.mjs +316 -0
- package/esm2022/lib/components/organisms/api-keys-view/api-keys-view.i18n.mjs +59 -0
- package/esm2022/lib/components/organisms/api-keys-view/api-keys.routes.mjs +27 -0
- package/esm2022/lib/components/organisms/api-keys-view/types.mjs +2 -0
- package/esm2022/lib/components/organisms/organization-view/organization-view.component.mjs +6 -12
- package/esm2022/lib/components/organisms/organization-view/organization-view.i18n.mjs +3 -3
- package/esm2022/lib/components/organisms/organization-view/types.mjs +1 -1
- package/esm2022/lib/components/organisms/qr-scanner/qr-scanner.component.mjs +310 -0
- package/esm2022/lib/components/organisms/qr-scanner/qr-scanner.i18n.mjs +28 -0
- package/esm2022/lib/components/organisms/qr-scanner/types.mjs +2 -0
- package/esm2022/lib/components/organisms/settings-hub/settings.routes.mjs +4 -1
- package/esm2022/lib/version.mjs +2 -2
- package/esm2022/public-api.mjs +10 -1
- package/fesm2022/valtech-components.mjs +3611 -2434
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/molecules/ticket-card/ticket-card.component.d.ts +42 -0
- package/lib/components/molecules/ticket-card/ticket-card.i18n.d.ts +22 -0
- package/lib/components/molecules/ticket-card/types.d.ts +45 -0
- package/lib/components/organisms/api-key-create-modal/api-key-create-modal.component.d.ts +56 -0
- package/lib/components/organisms/api-keys-view/api-keys-view.component.d.ts +58 -0
- package/lib/components/organisms/api-keys-view/api-keys-view.i18n.d.ts +6 -0
- package/lib/components/organisms/api-keys-view/api-keys.routes.d.ts +22 -0
- package/lib/components/organisms/api-keys-view/types.d.ts +8 -0
- package/lib/components/organisms/organization-view/types.d.ts +6 -0
- package/lib/components/organisms/qr-scanner/qr-scanner.component.d.ts +51 -0
- package/lib/components/organisms/qr-scanner/qr-scanner.i18n.d.ts +27 -0
- package/lib/components/organisms/qr-scanner/types.d.ts +31 -0
- package/lib/components/organisms/settings-hub/settings.routes.d.ts +5 -0
- package/lib/version.d.ts +1 -1
- package/package.json +3 -1
- package/public-api.d.ts +8 -0
|
@@ -0,0 +1,316 @@
|
|
|
1
|
+
import { Component, computed, inject, Input, signal } from '@angular/core';
|
|
2
|
+
import { ActivatedRoute } from '@angular/router';
|
|
3
|
+
import { Firestore, doc, getDoc } from '@angular/fire/firestore';
|
|
4
|
+
import { ButtonComponent } from '../../atoms/button/button.component';
|
|
5
|
+
import { DisplayComponent } from '../../atoms/display/display.component';
|
|
6
|
+
import { TextComponent } from '../../atoms/text/text.component';
|
|
7
|
+
import { TitleComponent } from '../../atoms/title/title.component';
|
|
8
|
+
import { UserAvatarComponent } from '../../atoms/user-avatar/user-avatar.component';
|
|
9
|
+
import { EmptyStateComponent } from '../../molecules/empty-state/empty-state.component';
|
|
10
|
+
import { createErrorStateProps } from '../../molecules/empty-state/factory';
|
|
11
|
+
import { SkeletonLayoutComponent } from '../skeleton-layout/skeleton-layout.component';
|
|
12
|
+
import { ComponentStates } from '../../types';
|
|
13
|
+
import { I18nService } from '../../../services/i18n';
|
|
14
|
+
import { AuthService } from '../../../services/auth/auth.service';
|
|
15
|
+
import { ApiKeyService } from '../../../services/apikeys/api-keys.service';
|
|
16
|
+
import { NavigationService } from '../../../services/navigation/navigation.service';
|
|
17
|
+
import { ModalService } from '../../../services/modal/modal.service';
|
|
18
|
+
import { ToastService } from '../../../services/toast.service';
|
|
19
|
+
import { ConfirmationDialogService } from '../../../services/confirmation-dialog/confirmation-dialog.service';
|
|
20
|
+
import { ValtechErrorService } from '../../../services/errors/valtech-error.service';
|
|
21
|
+
import { interpretError } from '../../../services/errors/interpret-error';
|
|
22
|
+
import { connectPageRefresh } from '../../../services/page-refresh/page-refresh.service';
|
|
23
|
+
import { ApiKeyCreateModalComponent } from '../api-key-create-modal/api-key-create-modal.component';
|
|
24
|
+
import { API_KEYS_VIEW_I18N } from './api-keys-view.i18n';
|
|
25
|
+
import * as i0 from "@angular/core";
|
|
26
|
+
const DEFAULT_NAMESPACE = 'Settings.ApiKeys';
|
|
27
|
+
/**
|
|
28
|
+
* `val-api-keys-view` — vista full-feature de gestión de Client API Keys (ADR-021).
|
|
29
|
+
*
|
|
30
|
+
* Reemplaza al `val-api-keys-modal` como pantalla propia: ofrece **crear** arriba
|
|
31
|
+
* (CTA que abre `val-api-key-create-modal`) y **lista** abajo, con quién la creó
|
|
32
|
+
* (avatar + handle, resuelto de `/profiles`) y la fecha de creación. Revocar con
|
|
33
|
+
* confirmación destructiva. Estados loading / error / empty (Capa 4).
|
|
34
|
+
*
|
|
35
|
+
* NO renderiza ion-content — vive dentro de `val-page-wrapper`. Header vía
|
|
36
|
+
* `NavigationService.setBackHeader`. i18n auto-registrado bajo `i18nNamespace`.
|
|
37
|
+
*/
|
|
38
|
+
export class ApiKeysViewComponent {
|
|
39
|
+
get ns() {
|
|
40
|
+
return this.resolvedConfig().i18nNamespace;
|
|
41
|
+
}
|
|
42
|
+
constructor() {
|
|
43
|
+
this.i18n = inject(I18nService);
|
|
44
|
+
this.auth = inject(AuthService);
|
|
45
|
+
this.apiKeys = inject(ApiKeyService);
|
|
46
|
+
this.firestore = inject(Firestore);
|
|
47
|
+
this.nav = inject(NavigationService);
|
|
48
|
+
this.modalService = inject(ModalService);
|
|
49
|
+
this.toast = inject(ToastService);
|
|
50
|
+
this.confirmDialog = inject(ConfirmationDialogService);
|
|
51
|
+
this.errors = inject(ValtechErrorService);
|
|
52
|
+
this.route = inject(ActivatedRoute, { optional: true });
|
|
53
|
+
this.resolvedConfig = computed(() => {
|
|
54
|
+
const fromRoute = (this.route?.snapshot.data['apiKeysConfig'] ?? {});
|
|
55
|
+
const merged = { ...fromRoute, ...(this.config ?? {}) };
|
|
56
|
+
return { i18nNamespace: merged.i18nNamespace ?? DEFAULT_NAMESPACE };
|
|
57
|
+
});
|
|
58
|
+
this.keys = signal([]);
|
|
59
|
+
this.loading = signal(false);
|
|
60
|
+
this.loadError = signal(null);
|
|
61
|
+
this.activeOrgId = computed(() => {
|
|
62
|
+
const u = this.auth.user();
|
|
63
|
+
return u?.activeOrgId ?? u?.activeOrg ?? '';
|
|
64
|
+
});
|
|
65
|
+
this.newKeyButton = computed(() => ({
|
|
66
|
+
text: this.tt('newKey'),
|
|
67
|
+
color: 'dark',
|
|
68
|
+
fill: 'solid',
|
|
69
|
+
shape: 'round',
|
|
70
|
+
size: 'small',
|
|
71
|
+
type: 'button',
|
|
72
|
+
state: ComponentStates.ENABLED,
|
|
73
|
+
}));
|
|
74
|
+
this.errorState = computed(() => {
|
|
75
|
+
this.i18n.lang();
|
|
76
|
+
const err = this.loadError();
|
|
77
|
+
if (!err)
|
|
78
|
+
return null;
|
|
79
|
+
return createErrorStateProps(err, {
|
|
80
|
+
title: { offline: this.tt('offlineTitle'), error: this.tt('errorTitle') },
|
|
81
|
+
description: { offline: this.tt('offlineHint'), error: interpretError(err).message },
|
|
82
|
+
retryLabel: this.tt('retry'),
|
|
83
|
+
onRetry: () => this.load(),
|
|
84
|
+
retrying: this.loading(),
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
this.emptyState = computed(() => {
|
|
88
|
+
this.i18n.lang();
|
|
89
|
+
return { variant: 'empty', title: this.tt('empty'), description: this.tt('emptyHint') };
|
|
90
|
+
});
|
|
91
|
+
if (!this.i18n.hasNamespace(this.ns)) {
|
|
92
|
+
this.i18n.registerContent(this.ns, API_KEYS_VIEW_I18N);
|
|
93
|
+
}
|
|
94
|
+
this.nav.setBackHeader('pageTitle', this.ns, { withMenu: true });
|
|
95
|
+
this.load();
|
|
96
|
+
connectPageRefresh(() => this.load());
|
|
97
|
+
}
|
|
98
|
+
revokeButton(k) {
|
|
99
|
+
return {
|
|
100
|
+
text: this.tt('revoke'),
|
|
101
|
+
color: 'danger',
|
|
102
|
+
fill: 'clear',
|
|
103
|
+
size: 'small',
|
|
104
|
+
type: 'button',
|
|
105
|
+
state: ComponentStates.ENABLED,
|
|
106
|
+
token: k.keyId,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
load() {
|
|
110
|
+
if (!this.activeOrgId())
|
|
111
|
+
return;
|
|
112
|
+
this.loading.set(true);
|
|
113
|
+
this.loadError.set(null);
|
|
114
|
+
this.apiKeys.list().subscribe({
|
|
115
|
+
next: async (keys) => {
|
|
116
|
+
this.keys.set(await this.enrichWithCreators(keys));
|
|
117
|
+
this.loading.set(false);
|
|
118
|
+
},
|
|
119
|
+
error: err => {
|
|
120
|
+
this.loadError.set(err);
|
|
121
|
+
this.loading.set(false);
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
/** Resuelve handle/avatar/name del creador (`createdBy`) desde `/profiles`. */
|
|
126
|
+
async enrichWithCreators(keys) {
|
|
127
|
+
const ids = Array.from(new Set(keys.map(k => k.createdBy).filter(Boolean)));
|
|
128
|
+
const profiles = new Map();
|
|
129
|
+
await Promise.allSettled(ids.map(async (id) => {
|
|
130
|
+
try {
|
|
131
|
+
const snap = await getDoc(doc(this.firestore, `profiles/${id}`));
|
|
132
|
+
const p = snap.exists() ? snap.data() : {};
|
|
133
|
+
profiles.set(id, {
|
|
134
|
+
name: p['name'],
|
|
135
|
+
handle: p['handle'],
|
|
136
|
+
avatar: (p['avatarUrl'] ?? p['avatar']),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
// perfil no accesible → se cae al fallback (unknownUser/createdBy)
|
|
141
|
+
}
|
|
142
|
+
}));
|
|
143
|
+
return keys.map(k => {
|
|
144
|
+
const p = profiles.get(k.createdBy);
|
|
145
|
+
return { ...k, creatorName: p?.name, creatorHandle: p?.handle, creatorAvatar: p?.avatar };
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
creatorLabel(k) {
|
|
149
|
+
if (k.creatorHandle)
|
|
150
|
+
return '@' + k.creatorHandle;
|
|
151
|
+
if (k.creatorName)
|
|
152
|
+
return k.creatorName;
|
|
153
|
+
return this.tt('unknownUser');
|
|
154
|
+
}
|
|
155
|
+
formatDate(iso) {
|
|
156
|
+
if (!iso)
|
|
157
|
+
return '';
|
|
158
|
+
const d = new Date(iso);
|
|
159
|
+
if (isNaN(d.getTime()))
|
|
160
|
+
return '';
|
|
161
|
+
return d.toLocaleDateString(this.i18n.lang(), { year: 'numeric', month: 'short', day: 'numeric' });
|
|
162
|
+
}
|
|
163
|
+
openCreate() {
|
|
164
|
+
void this.modalService.open({
|
|
165
|
+
component: ApiKeyCreateModalComponent,
|
|
166
|
+
componentProps: {
|
|
167
|
+
onCreated: () => this.load(),
|
|
168
|
+
},
|
|
169
|
+
breakpoints: { breakpoints: [0, 0.92], initialBreakpoint: 0.92, showHandle: true },
|
|
170
|
+
backdropDismiss: true,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
async revoke(k) {
|
|
174
|
+
const result = await this.confirmDialog.confirmDestructive({
|
|
175
|
+
title: this.tt('revokeConfirmTitle'),
|
|
176
|
+
message: this.tt('revokeConfirmMessage'),
|
|
177
|
+
confirmButton: { text: this.tt('revokeConfirmOk') },
|
|
178
|
+
cancelButton: { text: this.tt('cancel') },
|
|
179
|
+
});
|
|
180
|
+
if (!result.confirmed)
|
|
181
|
+
return;
|
|
182
|
+
this.apiKeys.revoke(k.keyId).subscribe({
|
|
183
|
+
next: () => {
|
|
184
|
+
this.toast.show({ message: this.tt('revokeSuccess'), color: 'dark', duration: 3000 });
|
|
185
|
+
this.load();
|
|
186
|
+
},
|
|
187
|
+
error: err => {
|
|
188
|
+
this.errors.handle(err, { context: 'apiKeys.revoke', fallbackKey: 'errorTitle', i18nNamespace: this.ns });
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
tt(key) {
|
|
193
|
+
return this.i18n.t(key, this.ns);
|
|
194
|
+
}
|
|
195
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ApiKeysViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
196
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ApiKeysViewComponent, isStandalone: true, selector: "val-api-keys-view", inputs: { config: "config" }, ngImport: i0, template: `
|
|
197
|
+
<div class="apikeys">
|
|
198
|
+
<header class="apikeys__header">
|
|
199
|
+
<div class="apikeys__text">
|
|
200
|
+
<val-display [props]="{ content: tt('title'), size: 'small', color: 'dark' }" />
|
|
201
|
+
<val-title [props]="{ content: tt('subtitle'), size: 'large', color: 'dark', bold: false }" />
|
|
202
|
+
</div>
|
|
203
|
+
<val-button class="apikeys__cta" [props]="newKeyButton()" (onClick)="openCreate()" />
|
|
204
|
+
</header>
|
|
205
|
+
|
|
206
|
+
@if (loading()) {
|
|
207
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
208
|
+
} @else if (errorState()) {
|
|
209
|
+
<val-empty-state [props]="errorState()!" />
|
|
210
|
+
} @else if (keys().length === 0) {
|
|
211
|
+
<val-empty-state [props]="emptyState()" />
|
|
212
|
+
} @else {
|
|
213
|
+
<div class="apikeys__list">
|
|
214
|
+
@for (k of keys(); track k.keyId) {
|
|
215
|
+
<div class="apikey-row">
|
|
216
|
+
<div class="apikey-row__main">
|
|
217
|
+
<span class="apikey-row__name">{{ k.name }}</span>
|
|
218
|
+
<span class="apikey-row__meta">
|
|
219
|
+
{{ k.permissions.length }} {{ tt('permsCount') }} ·
|
|
220
|
+
{{ k.status === 'revoked' ? tt('statusRevoked') : tt('statusActive') }} · {{ tt('lastUsed') }}:
|
|
221
|
+
{{ formatDate(k.lastUsedAt) || tt('never') }}
|
|
222
|
+
</span>
|
|
223
|
+
<span class="apikey-row__creator">
|
|
224
|
+
<val-user-avatar
|
|
225
|
+
[props]="{
|
|
226
|
+
name: k.creatorName || k.creatorHandle || '',
|
|
227
|
+
avatarUrl: k.creatorAvatar,
|
|
228
|
+
size: 'xsmall',
|
|
229
|
+
}"
|
|
230
|
+
/>
|
|
231
|
+
<span class="apikey-row__creator-text">
|
|
232
|
+
{{ tt('createdBy') }}
|
|
233
|
+
{{ creatorLabel(k) }}
|
|
234
|
+
@if (formatDate(k.createdAt); as d) {
|
|
235
|
+
· {{ tt('createdOn') }} {{ d }}
|
|
236
|
+
}
|
|
237
|
+
</span>
|
|
238
|
+
</span>
|
|
239
|
+
</div>
|
|
240
|
+
@if (k.status !== 'revoked') {
|
|
241
|
+
<val-button [props]="revokeButton(k)" (onClick)="revoke(k)" />
|
|
242
|
+
}
|
|
243
|
+
</div>
|
|
244
|
+
}
|
|
245
|
+
</div>
|
|
246
|
+
}
|
|
247
|
+
</div>
|
|
248
|
+
`, isInline: true, styles: [".apikeys{max-width:720px;margin:0 auto;padding:8px 0 24px}.apikeys__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}.apikeys__text{flex:1;min-width:0}.apikeys__text val-display{display:block;margin-bottom:4px}.apikeys__cta{flex-shrink:0}.apikeys__list{display:flex;flex-direction:column;gap:10px}.apikey-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:12px;border:1px solid var(--val-border-color, rgba(0, 0, 0, .1))}.apikey-row__main{display:flex;flex-direction:column;gap:4px;min-width:0}.apikey-row__name{font-weight:600;color:var(--ion-color-dark)}.apikey-row__meta{font-size:.78rem;color:var(--ion-color-medium)}.apikey-row__creator{display:flex;align-items:center;gap:6px;font-size:.78rem;color:var(--ion-color-medium)}.apikey-row__creator-text{min-width:0}\n"], dependencies: [{ kind: "component", type: ButtonComponent, selector: "val-button", inputs: ["preset", "props"], outputs: ["onClick"] }, { kind: "component", type: DisplayComponent, selector: "val-display", inputs: ["props"] }, { kind: "component", type: TitleComponent, selector: "val-title", inputs: ["props"] }, { kind: "component", type: UserAvatarComponent, selector: "val-user-avatar", inputs: ["props"], outputs: ["onClick"] }, { kind: "component", type: EmptyStateComponent, selector: "val-empty-state", inputs: ["props"] }, { kind: "component", type: SkeletonLayoutComponent, selector: "val-skeleton-layout", inputs: ["props"] }] }); }
|
|
249
|
+
}
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ApiKeysViewComponent, decorators: [{
|
|
251
|
+
type: Component,
|
|
252
|
+
args: [{ selector: 'val-api-keys-view', standalone: true, imports: [
|
|
253
|
+
ButtonComponent,
|
|
254
|
+
DisplayComponent,
|
|
255
|
+
TextComponent,
|
|
256
|
+
TitleComponent,
|
|
257
|
+
UserAvatarComponent,
|
|
258
|
+
EmptyStateComponent,
|
|
259
|
+
SkeletonLayoutComponent,
|
|
260
|
+
], template: `
|
|
261
|
+
<div class="apikeys">
|
|
262
|
+
<header class="apikeys__header">
|
|
263
|
+
<div class="apikeys__text">
|
|
264
|
+
<val-display [props]="{ content: tt('title'), size: 'small', color: 'dark' }" />
|
|
265
|
+
<val-title [props]="{ content: tt('subtitle'), size: 'large', color: 'dark', bold: false }" />
|
|
266
|
+
</div>
|
|
267
|
+
<val-button class="apikeys__cta" [props]="newKeyButton()" (onClick)="openCreate()" />
|
|
268
|
+
</header>
|
|
269
|
+
|
|
270
|
+
@if (loading()) {
|
|
271
|
+
<val-skeleton-layout [props]="{ preset: 'list', rows: 3 }" />
|
|
272
|
+
} @else if (errorState()) {
|
|
273
|
+
<val-empty-state [props]="errorState()!" />
|
|
274
|
+
} @else if (keys().length === 0) {
|
|
275
|
+
<val-empty-state [props]="emptyState()" />
|
|
276
|
+
} @else {
|
|
277
|
+
<div class="apikeys__list">
|
|
278
|
+
@for (k of keys(); track k.keyId) {
|
|
279
|
+
<div class="apikey-row">
|
|
280
|
+
<div class="apikey-row__main">
|
|
281
|
+
<span class="apikey-row__name">{{ k.name }}</span>
|
|
282
|
+
<span class="apikey-row__meta">
|
|
283
|
+
{{ k.permissions.length }} {{ tt('permsCount') }} ·
|
|
284
|
+
{{ k.status === 'revoked' ? tt('statusRevoked') : tt('statusActive') }} · {{ tt('lastUsed') }}:
|
|
285
|
+
{{ formatDate(k.lastUsedAt) || tt('never') }}
|
|
286
|
+
</span>
|
|
287
|
+
<span class="apikey-row__creator">
|
|
288
|
+
<val-user-avatar
|
|
289
|
+
[props]="{
|
|
290
|
+
name: k.creatorName || k.creatorHandle || '',
|
|
291
|
+
avatarUrl: k.creatorAvatar,
|
|
292
|
+
size: 'xsmall',
|
|
293
|
+
}"
|
|
294
|
+
/>
|
|
295
|
+
<span class="apikey-row__creator-text">
|
|
296
|
+
{{ tt('createdBy') }}
|
|
297
|
+
{{ creatorLabel(k) }}
|
|
298
|
+
@if (formatDate(k.createdAt); as d) {
|
|
299
|
+
· {{ tt('createdOn') }} {{ d }}
|
|
300
|
+
}
|
|
301
|
+
</span>
|
|
302
|
+
</span>
|
|
303
|
+
</div>
|
|
304
|
+
@if (k.status !== 'revoked') {
|
|
305
|
+
<val-button [props]="revokeButton(k)" (onClick)="revoke(k)" />
|
|
306
|
+
}
|
|
307
|
+
</div>
|
|
308
|
+
}
|
|
309
|
+
</div>
|
|
310
|
+
}
|
|
311
|
+
</div>
|
|
312
|
+
`, styles: [".apikeys{max-width:720px;margin:0 auto;padding:8px 0 24px}.apikeys__header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:20px}.apikeys__text{flex:1;min-width:0}.apikeys__text val-display{display:block;margin-bottom:4px}.apikeys__cta{flex-shrink:0}.apikeys__list{display:flex;flex-direction:column;gap:10px}.apikey-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border-radius:12px;border:1px solid var(--val-border-color, rgba(0, 0, 0, .1))}.apikey-row__main{display:flex;flex-direction:column;gap:4px;min-width:0}.apikey-row__name{font-weight:600;color:var(--ion-color-dark)}.apikey-row__meta{font-size:.78rem;color:var(--ion-color-medium)}.apikey-row__creator{display:flex;align-items:center;gap:6px;font-size:.78rem;color:var(--ion-color-medium)}.apikey-row__creator-text{min-width:0}\n"] }]
|
|
313
|
+
}], ctorParameters: () => [], propDecorators: { config: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}] } });
|
|
316
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleXMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2FwaS1rZXlzLXZpZXcvYXBpLWtleXMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRXhGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzVFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBQ3ZGLE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRDQUE0QyxD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ZUFBZSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDdEYsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsQ0FBQztZQUNELEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDWCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUcsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxFQUFFLENBQUMsR0FBVztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQzsrR0F6S1Usb0JBQW9CO21HQUFwQixvQkFBb0IsMkdBdkhyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9EVCx1N0JBNURDLGVBQWUsMEdBQ2YsZ0JBQWdCLDJFQUVoQixjQUFjLHlFQUNkLG1CQUFtQixxR0FDbkIsbUJBQW1CLCtFQUNuQix1QkFBdUI7OzRGQXlIZCxvQkFBb0I7a0JBbkloQyxTQUFTOytCQUNFLG1CQUFtQixjQUNqQixJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLG1CQUFtQjt3QkFDbkIsdUJBQXVCO3FCQUN4QixZQUNTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0RUO3dEQWdGUSxNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIElucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IEZpcmVzdG9yZSwgZG9jLCBnZXREb2MgfSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5cbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL2J1dHRvbi9idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90ZXh0L3RleHQuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy91c2VyLWF2YXRhci91c2VyLWF2YXRhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW1wdHlTdGF0ZU1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2VtcHR5LXN0YXRlL3R5cGVzJztcbmltcG9ydCB7IGNyZWF0ZUVycm9yU3RhdGVQcm9wcyB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9lbXB0eS1zdGF0ZS9mYWN0b3J5JztcbmltcG9ydCB7IFNrZWxldG9uTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2tlbGV0b24tbGF5b3V0L3NrZWxldG9uLWxheW91dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9pMThuJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBpS2V5U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwaWtleXMvYXBpLWtleXMuc2VydmljZSc7XG5pbXBvcnQgeyBDbGllbnRBcGlLZXkgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcGlrZXlzL3R5cGVzJztcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kYWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbW9kYWwvbW9kYWwuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90b2FzdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9jb25maXJtYXRpb24tZGlhbG9nL2NvbmZpcm1hdGlvbi1kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBWYWx0ZWNoRXJyb3JTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZXJyb3JzL3ZhbHRlY2gtZXJyb3Iuc2VydmljZSc7XG5pbXBvcnQgeyBpbnRlcnByZXRFcnJvciB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2Vycm9ycy9pbnRlcnByZXQtZXJyb3InO1xuaW1wb3J0IHsgY29ubmVjdFBhZ2VSZWZyZXNoIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcGFnZS1yZWZyZXNoL3BhZ2UtcmVmcmVzaC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgQXBpS2V5Q3JlYXRlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9hcGkta2V5LWNyZWF0ZS1tb2RhbC9hcGkta2V5LWNyZWF0ZS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQVBJX0tFWVNfVklFV19JMThOIH0gZnJvbSAnLi9hcGkta2V5cy12aWV3LmkxOG4nO1xuaW1wb3J0IHsgQXBpS2V5c1ZpZXdDb25maWcgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuQXBpS2V5cyc7XG5cbi8qKiBLZXkgZW5yaXF1ZWNpZGEgY29uIGVsIHBlcmZpbCBww7pibGljbyAoaGFuZGxlL2F2YXRhci9uYW1lKSBkZSBzdSBjcmVhZG9yLiAqL1xuaW50ZXJmYWNlIEFwaUtleVJvdyBleHRlbmRzIENsaWVudEFwaUtleSB7XG4gIGNyZWF0b3JOYW1lPzogc3RyaW5nO1xuICBjcmVhdG9ySGFuZGxlPzogc3RyaW5nO1xuICBjcmVhdG9yQXZhdGFyPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIGB2YWwtYXBpLWtleXMtdmlld2Ag4oCUIHZpc3RhIGZ1bGwtZmVhdHVyZSBkZSBnZXN0acOzbiBkZSBDbGllbnQgQVBJIEtleXMgKEFEUi0wMjEpLlxuICpcbiAqIFJlZW1wbGF6YSBhbCBgdmFsLWFwaS1rZXlzLW1vZGFsYCBjb21vIHBhbnRhbGxhIHByb3BpYTogb2ZyZWNlICoqY3JlYXIqKiBhcnJpYmFcbiAqIChDVEEgcXVlIGFicmUgYHZhbC1hcGkta2V5LWNyZWF0ZS1tb2RhbGApIHkgKipsaXN0YSoqIGFiYWpvLCBjb24gcXVpw6luIGxhIGNyZcOzXG4gKiAoYXZhdGFyICsgaGFuZGxlLCByZXN1ZWx0byBkZSBgL3Byb2ZpbGVzYCkgeSBsYSBmZWNoYSBkZSBjcmVhY2nDs24uIFJldm9jYXIgY29uXG4gKiBjb25maXJtYWNpw7NuIGRlc3RydWN0aXZhLiBFc3RhZG9zIGxvYWRpbmcgLyBlcnJvciAvIGVtcHR5IChDYXBhIDQpLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgYHZhbC1wYWdlLXdyYXBwZXJgLiBIZWFkZXIgdsOtYVxuICogYE5hdmlnYXRpb25TZXJ2aWNlLnNldEJhY2tIZWFkZXJgLiBpMThuIGF1dG8tcmVnaXN0cmFkbyBiYWpvIGBpMThuTmFtZXNwYWNlYC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWFwaS1rZXlzLXZpZXcnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQnV0dG9uQ29tcG9uZW50LFxuICAgIERpc3BsYXlDb21wb25lbnQsXG4gICAgVGV4dENvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBVc2VyQXZhdGFyQ29tcG9uZW50LFxuICAgIEVtcHR5U3RhdGVDb21wb25lbnQsXG4gICAgU2tlbGV0b25MYXlvdXRDb21wb25lbnQsXG4gIF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cImFwaWtleXNcIj5cbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJhcGlrZXlzX19oZWFkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwaWtleXNfX3RleHRcIj5cbiAgICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgY29udGVudDogdHQoJ3RpdGxlJyksIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycgfVwiIC8+XG4gICAgICAgICAgPHZhbC10aXRsZSBbcHJvcHNdPVwieyBjb250ZW50OiB0dCgnc3VidGl0bGUnKSwgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICdkYXJrJywgYm9sZDogZmFsc2UgfVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dmFsLWJ1dHRvbiBjbGFzcz1cImFwaWtleXNfX2N0YVwiIFtwcm9wc109XCJuZXdLZXlCdXR0b24oKVwiIChvbkNsaWNrKT1cIm9wZW5DcmVhdGUoKVwiIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnbGlzdCcsIHJvd3M6IDMgfVwiIC8+XG4gICAgICB9IEBlbHNlIGlmIChlcnJvclN0YXRlKCkpIHtcbiAgICAgICAgPHZhbC1lbXB0eS1zdGF0ZSBbcHJvcHNdPVwiZXJyb3JTdGF0ZSgpIVwiIC8+XG4gICAgICB9IEBlbHNlIGlmIChrZXlzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDx2YWwtZW1wdHktc3RhdGUgW3Byb3BzXT1cImVtcHR5U3RhdGUoKVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImFwaWtleXNfX2xpc3RcIj5cbiAgICAgICAgICBAZm9yIChrIG9mIGtleXMoKTsgdHJhY2sgay5rZXlJZCkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwaWtleS1yb3dcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFwaWtleS1yb3dfX21haW5cIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwaWtleS1yb3dfX25hbWVcIj57eyBrLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcGlrZXktcm93X19tZXRhXCI+XG4gICAgICAgICAgICAgICAgICB7eyBrLnBlcm1pc3Npb25zLmxlbmd0aCB9fSB7eyB0dCgncGVybXNDb3VudCcpIH19IMK3XG4gICAgICAgICAgICAgICAgICB7eyBrLnN0YXR1cyA9PT0gJ3Jldm9rZWQnID8gdHQoJ3N0YXR1c1Jldm9rZWQnKSA6IHR0KCdzdGF0dXNBY3RpdmUnKSB9fSDCtyB7eyB0dCgnbGFzdFVzZWQnKSB9fTpcbiAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdERhdGUoay5sYXN0VXNlZEF0KSB8fCB0dCgnbmV2ZXInKSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFwaWtleS1yb3dfX2NyZWF0b3JcIj5cbiAgICAgICAgICAgICAgICAgIDx2YWwtdXNlci1hdmF0YXJcbiAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBrLmNyZWF0b3JOYW1lIHx8IGsuY3JlYXRvckhhbmRsZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgICAgICBhdmF0YXJVcmw6IGsuY3JlYXRvckF2YXRhcixcbiAgICAgICAgICAgICAgICAgICAgICBzaXplOiAneHNtYWxsJyxcbiAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhcGlrZXktcm93X19jcmVhdG9yLXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdHQoJ2NyZWF0ZWRCeScpIH19XG4gICAgICAgICAgICAgICAgICAgIHt7IGNyZWF0b3JMYWJlbChrKSB9fVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGZvcm1hdERhdGUoay5jcmVhdGVkQXQpOyBhcyBkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgwrcge3sgdHQoJ2NyZWF0ZWRPbicpIH19IHt7IGQgfX1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIEBpZiAoay5zdGF0dXMgIT09ICdyZXZva2VkJykge1xuICAgICAgICAgICAgICAgIDx2YWwtYnV0dG9uIFtwcm9wc109XCJyZXZva2VCdXR0b24oaylcIiAob25DbGljayk9XCJyZXZva2UoaylcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAuYXBpa2V5cyB7XG4gICAgICAgIG1heC13aWR0aDogNzIwcHg7XG4gICAgICAgIG1hcmdpbjogMCBhdXRvO1xuICAgICAgICBwYWRkaW5nOiA4cHggMCAyNHB4O1xuICAgICAgfVxuICAgICAgLmFwaWtleXNfX2hlYWRlciB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICAgIH1cbiAgICAgIC5hcGlrZXlzX190ZXh0IHtcbiAgICAgICAgZmxleDogMTtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuICAgICAgLmFwaWtleXNfX3RleHQgdmFsLWRpc3BsYXkge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgICAgfVxuICAgICAgLmFwaWtleXNfX2N0YSB7XG4gICAgICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgICAgfVxuICAgICAgLmFwaWtleXNfX2xpc3Qge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICB9XG4gICAgICAuYXBpa2V5LXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgZ2FwOiAxMnB4O1xuICAgICAgICBwYWRkaW5nOiAxMnB4IDE0cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXZhbC1ib3JkZXItY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4xKSk7XG4gICAgICB9XG4gICAgICAuYXBpa2V5LXJvd19fbWFpbiB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNHB4O1xuICAgICAgICBtaW4td2lkdGg6IDA7XG4gICAgICB9XG4gICAgICAuYXBpa2V5LXJvd19fbmFtZSB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG4gICAgICAuYXBpa2V5LXJvd19fbWV0YSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgfVxuICAgICAgLmFwaWtleS1yb3dfX2NyZWF0b3Ige1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICB9XG4gICAgICAuYXBpa2V5LXJvd19fY3JlYXRvci10ZXh0IHtcbiAgICAgICAgbWluLXdpZHRoOiAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIEFwaUtleXNWaWV3Q29tcG9uZW50IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhcGlLZXlzID0gaW5qZWN0KEFwaUtleVNlcnZpY2UpO1xuICBwcml2YXRlIGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmUpO1xuICBwcml2YXRlIG5hdiA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gIHByaXZhdGUgbW9kYWxTZXJ2aWNlID0gaW5qZWN0KE1vZGFsU2VydmljZSk7XG4gIHByaXZhdGUgdG9hc3QgPSBpbmplY3QoVG9hc3RTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjb25maXJtRGlhbG9nID0gaW5qZWN0KENvbmZpcm1hdGlvbkRpYWxvZ1NlcnZpY2UpO1xuICBwcml2YXRlIGVycm9ycyA9IGluamVjdChWYWx0ZWNoRXJyb3JTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogQ29uZmlnIHbDrWEgQElucHV0IChvYmplY3QtZmlyc3QpOyBmYWxsYmFjayBhbCByb3V0ZSBkYXRhIGBhcGlLZXlzQ29uZmlnYC4gKi9cbiAgQElucHV0KCkgY29uZmlnPzogQXBpS2V5c1ZpZXdDb25maWc7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRDb25maWcgPSBjb21wdXRlZDxSZXF1aXJlZDxBcGlLZXlzVmlld0NvbmZpZz4+KCgpID0+IHtcbiAgICBjb25zdCBmcm9tUm91dGUgPSAodGhpcy5yb3V0ZT8uc25hcHNob3QuZGF0YVsnYXBpS2V5c0NvbmZpZyddID8/IHt9KSBhcyBBcGlLZXlzVmlld0NvbmZpZztcbiAgICBjb25zdCBtZXJnZWQ6IEFwaUtleXNWaWV3Q29uZmlnID0geyAuLi5mcm9tUm91dGUsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICByZXR1cm4geyBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSB9O1xuICB9KTtcblxuICBwcml2YXRlIGdldCBucygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlc29sdmVkQ29uZmlnKCkuaTE4bk5hbWVzcGFjZTtcbiAgfVxuXG4gIHJlYWRvbmx5IGtleXMgPSBzaWduYWw8QXBpS2V5Um93W10+KFtdKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duIHwgbnVsbD4obnVsbCk7XG5cbiAgcmVhZG9ubHkgYWN0aXZlT3JnSWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgdSA9IHRoaXMuYXV0aC51c2VyKCkgYXMgeyBhY3RpdmVPcmdJZD86IHN0cmluZzsgYWN0aXZlT3JnPzogc3RyaW5nIH0gfCBudWxsO1xuICAgIHJldHVybiB1Py5hY3RpdmVPcmdJZCA/PyB1Py5hY3RpdmVPcmcgPz8gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IG5ld0tleUJ1dHRvbiA9IGNvbXB1dGVkPFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+PigoKSA9PiAoe1xuICAgIHRleHQ6IHRoaXMudHQoJ25ld0tleScpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ3NvbGlkJyxcbiAgICBzaGFwZTogJ3JvdW5kJyxcbiAgICBzaXplOiAnc21hbGwnLFxuICAgIHR5cGU6ICdidXR0b24nLFxuICAgIHN0YXRlOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIHJlYWRvbmx5IGVycm9yU3RhdGUgPSBjb21wdXRlZDxFbXB0eVN0YXRlTWV0YWRhdGEgfCBudWxsPigoKSA9PiB7XG4gICAgdGhpcy5pMThuLmxhbmcoKTtcbiAgICBjb25zdCBlcnIgPSB0aGlzLmxvYWRFcnJvcigpO1xuICAgIGlmICghZXJyKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gY3JlYXRlRXJyb3JTdGF0ZVByb3BzKGVyciwge1xuICAgICAgdGl0bGU6IHsgb2ZmbGluZTogdGhpcy50dCgnb2ZmbGluZVRpdGxlJyksIGVycm9yOiB0aGlzLnR0KCdlcnJvclRpdGxlJykgfSxcbiAgICAgIGRlc2NyaXB0aW9uOiB7IG9mZmxpbmU6IHRoaXMudHQoJ29mZmxpbmVIaW50JyksIGVycm9yOiBpbnRlcnByZXRFcnJvcihlcnIpLm1lc3NhZ2UgfSxcbiAgICAgIHJldHJ5TGFiZWw6IHRoaXMudHQoJ3JldHJ5JyksXG4gICAgICBvblJldHJ5OiAoKSA9PiB0aGlzLmxvYWQoKSxcbiAgICAgIHJldHJ5aW5nOiB0aGlzLmxvYWRpbmcoKSxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZW1wdHlTdGF0ZSA9IGNvbXB1dGVkPEVtcHR5U3RhdGVNZXRhZGF0YT4oKCkgPT4ge1xuICAgIHRoaXMuaTE4bi5sYW5nKCk7XG4gICAgcmV0dXJuIHsgdmFyaWFudDogJ2VtcHR5JywgdGl0bGU6IHRoaXMudHQoJ2VtcHR5JyksIGRlc2NyaXB0aW9uOiB0aGlzLnR0KCdlbXB0eUhpbnQnKSB9O1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaTE4bi5oYXNOYW1lc3BhY2UodGhpcy5ucykpIHtcbiAgICAgIHRoaXMuaTE4bi5yZWdpc3RlckNvbnRlbnQodGhpcy5ucywgQVBJX0tFWVNfVklFV19JMThOKTtcbiAgICB9XG4gICAgdGhpcy5uYXYuc2V0QmFja0hlYWRlcigncGFnZVRpdGxlJywgdGhpcy5ucywgeyB3aXRoTWVudTogdHJ1ZSB9KTtcbiAgICB0aGlzLmxvYWQoKTtcbiAgICBjb25uZWN0UGFnZVJlZnJlc2goKCkgPT4gdGhpcy5sb2FkKCkpO1xuICB9XG5cbiAgcmV2b2tlQnV0dG9uKGs6IEFwaUtleVJvdyk6IFBhcnRpYWw8QnV0dG9uTWV0YWRhdGE+IHtcbiAgICByZXR1cm4ge1xuICAgICAgdGV4dDogdGhpcy50dCgncmV2b2tlJyksXG4gICAgICBjb2xvcjogJ2RhbmdlcicsXG4gICAgICBmaWxsOiAnY2xlYXInLFxuICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgc3RhdGU6IENvbXBvbmVudFN0YXRlcy5FTkFCTEVELFxuICAgICAgdG9rZW46IGsua2V5SWQsXG4gICAgfTtcbiAgfVxuXG4gIGxvYWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmFjdGl2ZU9yZ0lkKCkpIHJldHVybjtcbiAgICB0aGlzLmxvYWRpbmcuc2V0KHRydWUpO1xuICAgIHRoaXMubG9hZEVycm9yLnNldChudWxsKTtcbiAgICB0aGlzLmFwaUtleXMubGlzdCgpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBhc3luYyBrZXlzID0+IHtcbiAgICAgICAgdGhpcy5rZXlzLnNldChhd2FpdCB0aGlzLmVucmljaFdpdGhDcmVhdG9ycyhrZXlzKSk7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICB0aGlzLmxvYWRFcnJvci5zZXQoZXJyKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJlc3VlbHZlIGhhbmRsZS9hdmF0YXIvbmFtZSBkZWwgY3JlYWRvciAoYGNyZWF0ZWRCeWApIGRlc2RlIGAvcHJvZmlsZXNgLiAqL1xuICBwcml2YXRlIGFzeW5jIGVucmljaFdpdGhDcmVhdG9ycyhrZXlzOiBDbGllbnRBcGlLZXlbXSk6IFByb21pc2U8QXBpS2V5Um93W10+IHtcbiAgICBjb25zdCBpZHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoa2V5cy5tYXAoayA9PiBrLmNyZWF0ZWRCeSkuZmlsdGVyKEJvb2xlYW4pKSk7XG4gICAgY29uc3QgcHJvZmlsZXMgPSBuZXcgTWFwPHN0cmluZywgeyBuYW1lPzogc3RyaW5nOyBoYW5kbGU/OiBzdHJpbmc7IGF2YXRhcj86IHN0cmluZyB9PigpO1xuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIGlkcy5tYXAoYXN5bmMgaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHNuYXAgPSBhd2FpdCBnZXREb2MoZG9jKHRoaXMuZmlyZXN0b3JlLCBgcHJvZmlsZXMvJHtpZH1gKSk7XG4gICAgICAgICAgY29uc3QgcCA9IHNuYXAuZXhpc3RzKCkgPyBzbmFwLmRhdGEoKSA6IHt9O1xuICAgICAgICAgIHByb2ZpbGVzLnNldChpZCwge1xuICAgICAgICAgICAgbmFtZTogcFsnbmFtZSddIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGhhbmRsZTogcFsnaGFuZGxlJ10gYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXZhdGFyOiAocFsnYXZhdGFyVXJsJ10gPz8gcFsnYXZhdGFyJ10pIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgLy8gcGVyZmlsIG5vIGFjY2VzaWJsZSDihpIgc2UgY2FlIGFsIGZhbGxiYWNrICh1bmtub3duVXNlci9jcmVhdGVkQnkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4ga2V5cy5tYXAoayA9PiB7XG4gICAgICBjb25zdCBwID0gcHJvZmlsZXMuZ2V0KGsuY3JlYXRlZEJ5KTtcbiAgICAgIHJldHVybiB7IC4uLmssIGNyZWF0b3JOYW1lOiBwPy5uYW1lLCBjcmVhdG9ySGFuZGxlOiBwPy5oYW5kbGUsIGNyZWF0b3JBdmF0YXI6IHA/LmF2YXRhciB9O1xuICAgIH0pO1xuICB9XG5cbiAgY3JlYXRvckxhYmVsKGs6IEFwaUtleVJvdyk6IHN0cmluZyB7XG4gICAgaWYgKGsuY3JlYXRvckhhbmRsZSkgcmV0dXJuICdAJyArIGsuY3JlYXRvckhhbmRsZTtcbiAgICBpZiAoay5jcmVhdG9yTmFtZSkgcmV0dXJuIGsuY3JlYXRvck5hbWU7XG4gICAgcmV0dXJuIHRoaXMudHQoJ3Vua25vd25Vc2VyJyk7XG4gIH1cblxuICBmb3JtYXREYXRlKGlzbz86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFpc28pIHJldHVybiAnJztcbiAgICBjb25zdCBkID0gbmV3IERhdGUoaXNvKTtcbiAgICBpZiAoaXNOYU4oZC5nZXRUaW1lKCkpKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGQudG9Mb2NhbGVEYXRlU3RyaW5nKHRoaXMuaTE4bi5sYW5nKCksIHsgeWVhcjogJ251bWVyaWMnLCBtb250aDogJ3Nob3J0JywgZGF5OiAnbnVtZXJpYycgfSk7XG4gIH1cblxuICBvcGVuQ3JlYXRlKCk6IHZvaWQge1xuICAgIHZvaWQgdGhpcy5tb2RhbFNlcnZpY2Uub3Blbih7XG4gICAgICBjb21wb25lbnQ6IEFwaUtleUNyZWF0ZU1vZGFsQ29tcG9uZW50LFxuICAgICAgY29tcG9uZW50UHJvcHM6IHtcbiAgICAgICAgb25DcmVhdGVkOiAoKSA9PiB0aGlzLmxvYWQoKSxcbiAgICAgIH0sXG4gICAgICBicmVha3BvaW50czogeyBicmVha3BvaW50czogWzAsIDAuOTJdLCBpbml0aWFsQnJlYWtwb2ludDogMC45Miwgc2hvd0hhbmRsZTogdHJ1ZSB9LFxuICAgICAgYmFja2Ryb3BEaXNtaXNzOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmV2b2tlKGs6IEFwaUtleVJvdyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY29uZmlybURpYWxvZy5jb25maXJtRGVzdHJ1Y3RpdmUoe1xuICAgICAgdGl0bGU6IHRoaXMudHQoJ3Jldm9rZUNvbmZpcm1UaXRsZScpLFxuICAgICAgbWVzc2FnZTogdGhpcy50dCgncmV2b2tlQ29uZmlybU1lc3NhZ2UnKSxcbiAgICAgIGNvbmZpcm1CdXR0b246IHsgdGV4dDogdGhpcy50dCgncmV2b2tlQ29uZmlybU9rJykgfSxcbiAgICAgIGNhbmNlbEJ1dHRvbjogeyB0ZXh0OiB0aGlzLnR0KCdjYW5jZWwnKSB9LFxuICAgIH0pO1xuICAgIGlmICghcmVzdWx0LmNvbmZpcm1lZCkgcmV0dXJuO1xuICAgIHRoaXMuYXBpS2V5cy5yZXZva2Uoay5rZXlJZCkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdC5zaG93KHsgbWVzc2FnZTogdGhpcy50dCgncmV2b2tlU3VjY2VzcycpLCBjb2xvcjogJ2RhcmsnLCBkdXJhdGlvbjogMzAwMCB9KTtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMuZXJyb3JzLmhhbmRsZShlcnIsIHsgY29udGV4dDogJ2FwaUtleXMucmV2b2tlJywgZmFsbGJhY2tLZXk6ICdlcnJvclRpdGxlJywgaTE4bk5hbWVzcGFjZTogdGhpcy5ucyB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defaults i18n (es/en) de `val-api-keys-view`. Auto-registrados si el consumer no
|
|
3
|
+
* proveyó el namespace `Settings.ApiKeys`.
|
|
4
|
+
*/
|
|
5
|
+
export const API_KEYS_VIEW_I18N = {
|
|
6
|
+
es: {
|
|
7
|
+
pageTitle: 'API Keys',
|
|
8
|
+
title: 'Client API Keys',
|
|
9
|
+
subtitle: 'Llaves M2M org-scopeadas para integraciones (p. ej. importar miembros).',
|
|
10
|
+
newKey: 'Crear API key',
|
|
11
|
+
empty: 'Aún no hay API keys en esta organización.',
|
|
12
|
+
emptyHint: 'Crea la primera para habilitar integraciones máquina-a-máquina.',
|
|
13
|
+
revoke: 'Revocar',
|
|
14
|
+
revokeConfirmTitle: 'Revocar API key',
|
|
15
|
+
revokeConfirmMessage: 'Las integraciones que la usen dejarán de funcionar. Esta acción no se puede deshacer.',
|
|
16
|
+
revokeConfirmOk: 'Revocar',
|
|
17
|
+
cancel: 'Cancelar',
|
|
18
|
+
revokeSuccess: 'API key revocada.',
|
|
19
|
+
permsCount: 'permisos',
|
|
20
|
+
lastUsed: 'Último uso',
|
|
21
|
+
never: 'nunca',
|
|
22
|
+
statusActive: 'Activa',
|
|
23
|
+
statusRevoked: 'Revocada',
|
|
24
|
+
createdBy: 'Creada por',
|
|
25
|
+
createdOn: 'el',
|
|
26
|
+
unknownUser: 'Usuario',
|
|
27
|
+
retry: 'Reintentar',
|
|
28
|
+
errorTitle: 'No se pudieron cargar las API keys',
|
|
29
|
+
offlineTitle: 'Sin conexión',
|
|
30
|
+
offlineHint: 'Revisa tu conexión e intenta de nuevo.',
|
|
31
|
+
},
|
|
32
|
+
en: {
|
|
33
|
+
pageTitle: 'API Keys',
|
|
34
|
+
title: 'Client API Keys',
|
|
35
|
+
subtitle: 'Org-scoped M2M keys for integrations (e.g. member import).',
|
|
36
|
+
newKey: 'Create API key',
|
|
37
|
+
empty: 'No API keys in this organization yet.',
|
|
38
|
+
emptyHint: 'Create the first one to enable machine-to-machine integrations.',
|
|
39
|
+
revoke: 'Revoke',
|
|
40
|
+
revokeConfirmTitle: 'Revoke API key',
|
|
41
|
+
revokeConfirmMessage: 'Integrations using it will stop working. This action cannot be undone.',
|
|
42
|
+
revokeConfirmOk: 'Revoke',
|
|
43
|
+
cancel: 'Cancel',
|
|
44
|
+
revokeSuccess: 'API key revoked.',
|
|
45
|
+
permsCount: 'permissions',
|
|
46
|
+
lastUsed: 'Last used',
|
|
47
|
+
never: 'never',
|
|
48
|
+
statusActive: 'Active',
|
|
49
|
+
statusRevoked: 'Revoked',
|
|
50
|
+
createdBy: 'Created by',
|
|
51
|
+
createdOn: 'on',
|
|
52
|
+
unknownUser: 'User',
|
|
53
|
+
retry: 'Retry',
|
|
54
|
+
errorTitle: "Couldn't load API keys",
|
|
55
|
+
offlineTitle: 'Offline',
|
|
56
|
+
offlineHint: 'Check your connection and try again.',
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleXMtdmlldy5pMThuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9hcGkta2V5cy12aWV3L2FwaS1rZXlzLXZpZXcuaTE4bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBcUI7SUFDbEQsRUFBRSxFQUFFO1FBQ0YsU0FBUyxFQUFFLFVBQVU7UUFDckIsS0FBSyxFQUFFLGlCQUFpQjtRQUN4QixRQUFRLEVBQUUseUVBQXlFO1FBQ25GLE1BQU0sRUFBRSxlQUFlO1FBQ3ZCLEtBQUssRUFBRSwyQ0FBMkM7UUFDbEQsU0FBUyxFQUFFLGlFQUFpRTtRQUM1RSxNQUFNLEVBQUUsU0FBUztRQUNqQixrQkFBa0IsRUFBRSxpQkFBaUI7UUFDckMsb0JBQW9CLEVBQ2xCLHVGQUF1RjtRQUN6RixlQUFlLEVBQUUsU0FBUztRQUMxQixNQUFNLEVBQUUsVUFBVTtRQUNsQixhQUFhLEVBQUUsbUJBQW1CO1FBQ2xDLFVBQVUsRUFBRSxVQUFVO1FBQ3RCLFFBQVEsRUFBRSxZQUFZO1FBQ3RCLEtBQUssRUFBRSxPQUFPO1FBQ2QsWUFBWSxFQUFFLFFBQVE7UUFDdEIsYUFBYSxFQUFFLFVBQVU7UUFDekIsU0FBUyxFQUFFLFlBQVk7UUFDdkIsU0FBUyxFQUFFLElBQUk7UUFDZixXQUFXLEVBQUUsU0FBUztRQUN0QixLQUFLLEVBQUUsWUFBWTtRQUNuQixVQUFVLEVBQUUsb0NBQW9DO1FBQ2hELFlBQVksRUFBRSxjQUFjO1FBQzVCLFdBQVcsRUFBRSx3Q0FBd0M7S0FDdEQ7SUFDRCxFQUFFLEVBQUU7UUFDRixTQUFTLEVBQUUsVUFBVTtRQUNyQixLQUFLLEVBQUUsaUJBQWlCO1FBQ3hCLFFBQVEsRUFBRSw0REFBNEQ7UUFDdEUsTUFBTSxFQUFFLGdCQUFnQjtRQUN4QixLQUFLLEVBQUUsdUNBQXVDO1FBQzlDLFNBQVMsRUFBRSxpRUFBaUU7UUFDNUUsTUFBTSxFQUFFLFFBQVE7UUFDaEIsa0JBQWtCLEVBQUUsZ0JBQWdCO1FBQ3BDLG9CQUFvQixFQUFFLHdFQUF3RTtRQUM5RixlQUFlLEVBQUUsUUFBUTtRQUN6QixNQUFNLEVBQUUsUUFBUTtRQUNoQixhQUFhLEVBQUUsa0JBQWtCO1FBQ2pDLFVBQVUsRUFBRSxhQUFhO1FBQ3pCLFFBQVEsRUFBRSxXQUFXO1FBQ3JCLEtBQUssRUFBRSxPQUFPO1FBQ2QsWUFBWSxFQUFFLFFBQVE7UUFDdEIsYUFBYSxFQUFFLFNBQVM7UUFDeEIsU0FBUyxFQUFFLFlBQVk7UUFDdkIsU0FBUyxFQUFFLElBQUk7UUFDZixXQUFXLEVBQUUsTUFBTTtRQUNuQixLQUFLLEVBQUUsT0FBTztRQUNkLFVBQVUsRUFBRSx3QkFBd0I7UUFDcEMsWUFBWSxFQUFFLFNBQVM7UUFDdkIsV0FBVyxFQUFFLHNDQUFzQztLQUNwRDtDQUNGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMYW5ndWFnZXNDb250ZW50IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvaTE4bi90eXBlcyc7XG5cbi8qKlxuICogRGVmYXVsdHMgaTE4biAoZXMvZW4pIGRlIGB2YWwtYXBpLWtleXMtdmlld2AuIEF1dG8tcmVnaXN0cmFkb3Mgc2kgZWwgY29uc3VtZXIgbm9cbiAqIHByb3ZlecOzIGVsIG5hbWVzcGFjZSBgU2V0dGluZ3MuQXBpS2V5c2AuXG4gKi9cbmV4cG9ydCBjb25zdCBBUElfS0VZU19WSUVXX0kxOE46IExhbmd1YWdlc0NvbnRlbnQgPSB7XG4gIGVzOiB7XG4gICAgcGFnZVRpdGxlOiAnQVBJIEtleXMnLFxuICAgIHRpdGxlOiAnQ2xpZW50IEFQSSBLZXlzJyxcbiAgICBzdWJ0aXRsZTogJ0xsYXZlcyBNMk0gb3JnLXNjb3BlYWRhcyBwYXJhIGludGVncmFjaW9uZXMgKHAuIGVqLiBpbXBvcnRhciBtaWVtYnJvcykuJyxcbiAgICBuZXdLZXk6ICdDcmVhciBBUEkga2V5JyxcbiAgICBlbXB0eTogJ0HDum4gbm8gaGF5IEFQSSBrZXlzIGVuIGVzdGEgb3JnYW5pemFjacOzbi4nLFxuICAgIGVtcHR5SGludDogJ0NyZWEgbGEgcHJpbWVyYSBwYXJhIGhhYmlsaXRhciBpbnRlZ3JhY2lvbmVzIG3DoXF1aW5hLWEtbcOhcXVpbmEuJyxcbiAgICByZXZva2U6ICdSZXZvY2FyJyxcbiAgICByZXZva2VDb25maXJtVGl0bGU6ICdSZXZvY2FyIEFQSSBrZXknLFxuICAgIHJldm9rZUNvbmZpcm1NZXNzYWdlOlxuICAgICAgJ0xhcyBpbnRlZ3JhY2lvbmVzIHF1ZSBsYSB1c2VuIGRlamFyw6FuIGRlIGZ1bmNpb25hci4gRXN0YSBhY2Npw7NuIG5vIHNlIHB1ZWRlIGRlc2hhY2VyLicsXG4gICAgcmV2b2tlQ29uZmlybU9rOiAnUmV2b2NhcicsXG4gICAgY2FuY2VsOiAnQ2FuY2VsYXInLFxuICAgIHJldm9rZVN1Y2Nlc3M6ICdBUEkga2V5IHJldm9jYWRhLicsXG4gICAgcGVybXNDb3VudDogJ3Blcm1pc29zJyxcbiAgICBsYXN0VXNlZDogJ8OabHRpbW8gdXNvJyxcbiAgICBuZXZlcjogJ251bmNhJyxcbiAgICBzdGF0dXNBY3RpdmU6ICdBY3RpdmEnLFxuICAgIHN0YXR1c1Jldm9rZWQ6ICdSZXZvY2FkYScsXG4gICAgY3JlYXRlZEJ5OiAnQ3JlYWRhIHBvcicsXG4gICAgY3JlYXRlZE9uOiAnZWwnLFxuICAgIHVua25vd25Vc2VyOiAnVXN1YXJpbycsXG4gICAgcmV0cnk6ICdSZWludGVudGFyJyxcbiAgICBlcnJvclRpdGxlOiAnTm8gc2UgcHVkaWVyb24gY2FyZ2FyIGxhcyBBUEkga2V5cycsXG4gICAgb2ZmbGluZVRpdGxlOiAnU2luIGNvbmV4acOzbicsXG4gICAgb2ZmbGluZUhpbnQ6ICdSZXZpc2EgdHUgY29uZXhpw7NuIGUgaW50ZW50YSBkZSBudWV2by4nLFxuICB9LFxuICBlbjoge1xuICAgIHBhZ2VUaXRsZTogJ0FQSSBLZXlzJyxcbiAgICB0aXRsZTogJ0NsaWVudCBBUEkgS2V5cycsXG4gICAgc3VidGl0bGU6ICdPcmctc2NvcGVkIE0yTSBrZXlzIGZvciBpbnRlZ3JhdGlvbnMgKGUuZy4gbWVtYmVyIGltcG9ydCkuJyxcbiAgICBuZXdLZXk6ICdDcmVhdGUgQVBJIGtleScsXG4gICAgZW1wdHk6ICdObyBBUEkga2V5cyBpbiB0aGlzIG9yZ2FuaXphdGlvbiB5ZXQuJyxcbiAgICBlbXB0eUhpbnQ6ICdDcmVhdGUgdGhlIGZpcnN0IG9uZSB0byBlbmFibGUgbWFjaGluZS10by1tYWNoaW5lIGludGVncmF0aW9ucy4nLFxuICAgIHJldm9rZTogJ1Jldm9rZScsXG4gICAgcmV2b2tlQ29uZmlybVRpdGxlOiAnUmV2b2tlIEFQSSBrZXknLFxuICAgIHJldm9rZUNvbmZpcm1NZXNzYWdlOiAnSW50ZWdyYXRpb25zIHVzaW5nIGl0IHdpbGwgc3RvcCB3b3JraW5nLiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLicsXG4gICAgcmV2b2tlQ29uZmlybU9rOiAnUmV2b2tlJyxcbiAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgIHJldm9rZVN1Y2Nlc3M6ICdBUEkga2V5IHJldm9rZWQuJyxcbiAgICBwZXJtc0NvdW50OiAncGVybWlzc2lvbnMnLFxuICAgIGxhc3RVc2VkOiAnTGFzdCB1c2VkJyxcbiAgICBuZXZlcjogJ25ldmVyJyxcbiAgICBzdGF0dXNBY3RpdmU6ICdBY3RpdmUnLFxuICAgIHN0YXR1c1Jldm9rZWQ6ICdSZXZva2VkJyxcbiAgICBjcmVhdGVkQnk6ICdDcmVhdGVkIGJ5JyxcbiAgICBjcmVhdGVkT246ICdvbicsXG4gICAgdW5rbm93blVzZXI6ICdVc2VyJyxcbiAgICByZXRyeTogJ1JldHJ5JyxcbiAgICBlcnJvclRpdGxlOiBcIkNvdWxkbid0IGxvYWQgQVBJIGtleXNcIixcbiAgICBvZmZsaW5lVGl0bGU6ICdPZmZsaW5lJyxcbiAgICBvZmZsaW5lSGludDogJ0NoZWNrIHlvdXIgY29ubmVjdGlvbiBhbmQgdHJ5IGFnYWluLicsXG4gIH0sXG59O1xuIl19
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { ApiKeysViewComponent } from './api-keys-view.component';
|
|
2
|
+
/**
|
|
3
|
+
* Helper para montar la vista de Client API Keys (`val-api-keys-view`) como ruta
|
|
4
|
+
* en una app del factory. El `config` se pasa por route `data` (`apiKeysConfig`) y
|
|
5
|
+
* el componente lo lee como fallback de su `@Input() config`.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```ts
|
|
9
|
+
* // settings.routes.ts
|
|
10
|
+
* import { provideValtechApiKeysRoutes } from 'valtech-components';
|
|
11
|
+
*
|
|
12
|
+
* export const settingsRoutes: Routes = [
|
|
13
|
+
* ...provideValtechApiKeysRoutes(), // → /app/settings/api-keys
|
|
14
|
+
* // ...provideValtechApiKeysRoutes({ path: 'integrations/keys' }),
|
|
15
|
+
* ];
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export function provideValtechApiKeysRoutes(opts) {
|
|
19
|
+
return [
|
|
20
|
+
{
|
|
21
|
+
path: opts?.path ?? 'api-keys',
|
|
22
|
+
component: ApiKeysViewComponent,
|
|
23
|
+
data: { apiKeysConfig: opts?.config },
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWtleXMucm91dGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL29yZ2FuaXNtcy9hcGkta2V5cy12aWV3L2FwaS1rZXlzLnJvdXRlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUdqRTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsSUFHM0M7SUFDQyxPQUFPO1FBQ0w7WUFDRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxVQUFVO1lBQzlCLFNBQVMsRUFBRSxvQkFBb0I7WUFDL0IsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7U0FDdEM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJvdXRlcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7IEFwaUtleXNWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi9hcGkta2V5cy12aWV3LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBcGlLZXlzVmlld0NvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEhlbHBlciBwYXJhIG1vbnRhciBsYSB2aXN0YSBkZSBDbGllbnQgQVBJIEtleXMgKGB2YWwtYXBpLWtleXMtdmlld2ApIGNvbW8gcnV0YVxuICogZW4gdW5hIGFwcCBkZWwgZmFjdG9yeS4gRWwgYGNvbmZpZ2Agc2UgcGFzYSBwb3Igcm91dGUgYGRhdGFgIChgYXBpS2V5c0NvbmZpZ2ApIHlcbiAqIGVsIGNvbXBvbmVudGUgbG8gbGVlIGNvbW8gZmFsbGJhY2sgZGUgc3UgYEBJbnB1dCgpIGNvbmZpZ2AuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiAvLyBzZXR0aW5ncy5yb3V0ZXMudHNcbiAqIGltcG9ydCB7IHByb3ZpZGVWYWx0ZWNoQXBpS2V5c1JvdXRlcyB9IGZyb20gJ3ZhbHRlY2gtY29tcG9uZW50cyc7XG4gKlxuICogZXhwb3J0IGNvbnN0IHNldHRpbmdzUm91dGVzOiBSb3V0ZXMgPSBbXG4gKiAgIC4uLnByb3ZpZGVWYWx0ZWNoQXBpS2V5c1JvdXRlcygpLCAgICAgICAgICAgICAgICAgIC8vIOKGkiAvYXBwL3NldHRpbmdzL2FwaS1rZXlzXG4gKiAgIC8vIC4uLnByb3ZpZGVWYWx0ZWNoQXBpS2V5c1JvdXRlcyh7IHBhdGg6ICdpbnRlZ3JhdGlvbnMva2V5cycgfSksXG4gKiBdO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVmFsdGVjaEFwaUtleXNSb3V0ZXMob3B0cz86IHtcbiAgcGF0aD86IHN0cmluZztcbiAgY29uZmlnPzogQXBpS2V5c1ZpZXdDb25maWc7XG59KTogUm91dGVzIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBwYXRoOiBvcHRzPy5wYXRoID8/ICdhcGkta2V5cycsXG4gICAgICBjb21wb25lbnQ6IEFwaUtleXNWaWV3Q29tcG9uZW50LFxuICAgICAgZGF0YTogeyBhcGlLZXlzQ29uZmlnOiBvcHRzPy5jb25maWcgfSxcbiAgICB9LFxuICBdO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2FwaS1rZXlzLXZpZXcvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uZmlnIGFjb3RhZGEgZGUgYHZhbC1hcGkta2V5cy12aWV3YCAoQURSLTAyMTogdW5hIHZpc3RhIGZ1bGwtZmVhdHVyZSBubyBhYnJlXG4gKiBzbG90cyBhcmJpdHJhcmlvczsgc2kgZmFsdGEgYWxnbywgc2UgcHJvbXVldmUgdW4gbnVldm8gcHVudG8gZGUgZXh0ZW5zacOzbikuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXBpS2V5c1ZpZXdDb25maWcge1xuICAvKiogTmFtZXNwYWNlIGkxOG4gZGUgbG9zIHRleHRvcyBkZSBsYSB2aXN0YS4gRGVmYXVsdCBgU2V0dGluZ3MuQXBpS2V5c2AuICovXG4gIGkxOG5OYW1lc3BhY2U/OiBzdHJpbmc7XG59XG4iXX0=
|