@idp.global/catalog 2.2.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changelog.md +21 -0
- package/dist_bundle/bundle.js +1175 -436
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/idp-admin-shell.d.ts +30 -1
- package/dist_ts_web/elements/idp-admin-shell.js +261 -28
- package/dist_ts_web/elements/idp-admin-sidebar.js +6 -5
- package/dist_ts_web/elements/idp-invite-card.d.ts +39 -0
- package/dist_ts_web/elements/idp-invite-card.js +303 -0
- package/dist_ts_web/elements/idp-scim-token-panel.d.ts +43 -0
- package/dist_ts_web/elements/idp-scim-token-panel.js +361 -0
- package/dist_ts_web/elements/idp-sso-connection-form.d.ts +81 -0
- package/dist_ts_web/elements/idp-sso-connection-form.js +637 -0
- package/dist_ts_web/elements/index.d.ts +3 -0
- package/dist_ts_web/elements/index.js +4 -1
- package/package.json +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/idp-admin-shell.ts +237 -25
- package/ts_web/elements/idp-admin-sidebar.ts +5 -4
- package/ts_web/elements/idp-invite-card.ts +229 -0
- package/ts_web/elements/idp-scim-token-panel.ts +311 -0
- package/ts_web/elements/idp-sso-connection-form.ts +574 -0
- package/ts_web/elements/index.ts +3 -0
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
2
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
3
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
4
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
5
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
6
|
+
var _, done = false;
|
|
7
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
8
|
+
var context = {};
|
|
9
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
10
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
11
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
12
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
13
|
+
if (kind === "accessor") {
|
|
14
|
+
if (result === void 0) continue;
|
|
15
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
16
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
17
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
18
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
19
|
+
}
|
|
20
|
+
else if (_ = accept(result)) {
|
|
21
|
+
if (kind === "field") initializers.unshift(_);
|
|
22
|
+
else descriptor[key] = _;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
26
|
+
done = true;
|
|
27
|
+
};
|
|
28
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
29
|
+
var useValue = arguments.length > 2;
|
|
30
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
31
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
32
|
+
}
|
|
33
|
+
return useValue ? value : void 0;
|
|
34
|
+
};
|
|
35
|
+
import { DeesElement, html, property, state, customElement, css } from '@design.estate/dees-element';
|
|
36
|
+
import { idpElementStyles } from './tokens.js';
|
|
37
|
+
import './idp-badge.js';
|
|
38
|
+
import './idp-button.js';
|
|
39
|
+
import './idp-icon.js';
|
|
40
|
+
import './idp-input.js';
|
|
41
|
+
let IdpScimTokenPanel = (() => {
|
|
42
|
+
let _classDecorators = [customElement('idp-scim-token-panel')];
|
|
43
|
+
let _classDescriptor;
|
|
44
|
+
let _classExtraInitializers = [];
|
|
45
|
+
let _classThis;
|
|
46
|
+
let _classSuper = DeesElement;
|
|
47
|
+
let _tokens_decorators;
|
|
48
|
+
let _tokens_initializers = [];
|
|
49
|
+
let _tokens_extraInitializers = [];
|
|
50
|
+
let _createdToken_decorators;
|
|
51
|
+
let _createdToken_initializers = [];
|
|
52
|
+
let _createdToken_extraInitializers = [];
|
|
53
|
+
let _scimBaseUrl_decorators;
|
|
54
|
+
let _scimBaseUrl_initializers = [];
|
|
55
|
+
let _scimBaseUrl_extraInitializers = [];
|
|
56
|
+
let _newLabel_decorators;
|
|
57
|
+
let _newLabel_initializers = [];
|
|
58
|
+
let _newLabel_extraInitializers = [];
|
|
59
|
+
let _copied_decorators;
|
|
60
|
+
let _copied_initializers = [];
|
|
61
|
+
let _copied_extraInitializers = [];
|
|
62
|
+
var IdpScimTokenPanel = class extends _classSuper {
|
|
63
|
+
static { _classThis = this; }
|
|
64
|
+
static {
|
|
65
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
66
|
+
_tokens_decorators = [property({ type: Array })];
|
|
67
|
+
_createdToken_decorators = [property({ type: Object })];
|
|
68
|
+
_scimBaseUrl_decorators = [property({ type: String })];
|
|
69
|
+
_newLabel_decorators = [state()];
|
|
70
|
+
_copied_decorators = [state()];
|
|
71
|
+
__esDecorate(this, null, _tokens_decorators, { kind: "accessor", name: "tokens", static: false, private: false, access: { has: obj => "tokens" in obj, get: obj => obj.tokens, set: (obj, value) => { obj.tokens = value; } }, metadata: _metadata }, _tokens_initializers, _tokens_extraInitializers);
|
|
72
|
+
__esDecorate(this, null, _createdToken_decorators, { kind: "accessor", name: "createdToken", static: false, private: false, access: { has: obj => "createdToken" in obj, get: obj => obj.createdToken, set: (obj, value) => { obj.createdToken = value; } }, metadata: _metadata }, _createdToken_initializers, _createdToken_extraInitializers);
|
|
73
|
+
__esDecorate(this, null, _scimBaseUrl_decorators, { kind: "accessor", name: "scimBaseUrl", static: false, private: false, access: { has: obj => "scimBaseUrl" in obj, get: obj => obj.scimBaseUrl, set: (obj, value) => { obj.scimBaseUrl = value; } }, metadata: _metadata }, _scimBaseUrl_initializers, _scimBaseUrl_extraInitializers);
|
|
74
|
+
__esDecorate(this, null, _newLabel_decorators, { kind: "accessor", name: "newLabel", static: false, private: false, access: { has: obj => "newLabel" in obj, get: obj => obj.newLabel, set: (obj, value) => { obj.newLabel = value; } }, metadata: _metadata }, _newLabel_initializers, _newLabel_extraInitializers);
|
|
75
|
+
__esDecorate(this, null, _copied_decorators, { kind: "accessor", name: "copied", static: false, private: false, access: { has: obj => "copied" in obj, get: obj => obj.copied, set: (obj, value) => { obj.copied = value; } }, metadata: _metadata }, _copied_initializers, _copied_extraInitializers);
|
|
76
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
77
|
+
IdpScimTokenPanel = _classThis = _classDescriptor.value;
|
|
78
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
79
|
+
}
|
|
80
|
+
static demo = () => html `
|
|
81
|
+
<div style="max-width: 720px;">
|
|
82
|
+
<idp-scim-token-panel
|
|
83
|
+
scimBaseUrl="https://idp.global/scim/v2"
|
|
84
|
+
.tokens=${[
|
|
85
|
+
{ id: 't1', label: 'Okta production', tokenPrefix: 'idp_scim', createdAt: Date.now() - 86400000 * 30, lastUsedAt: Date.now() - 3600000, revoked: false },
|
|
86
|
+
{ id: 't2', label: 'Entra staging', tokenPrefix: 'idp_scim', createdAt: Date.now() - 86400000 * 90, expiresAt: Date.now() + 86400000 * 30, revoked: true },
|
|
87
|
+
]}
|
|
88
|
+
.createdToken=${{ label: 'Okta production', plaintextToken: 'idp_scim_2f8Qb1x0demoTokenValueOnlyShownOnce' }}
|
|
89
|
+
></idp-scim-token-panel>
|
|
90
|
+
</div>
|
|
91
|
+
`;
|
|
92
|
+
static demoGroups = ['idp.global v5 admin console'];
|
|
93
|
+
#tokens_accessor_storage = __runInitializers(this, _tokens_initializers, []);
|
|
94
|
+
get tokens() { return this.#tokens_accessor_storage; }
|
|
95
|
+
set tokens(value) { this.#tokens_accessor_storage = value; }
|
|
96
|
+
#createdToken_accessor_storage = (__runInitializers(this, _tokens_extraInitializers), __runInitializers(this, _createdToken_initializers, null));
|
|
97
|
+
/** One-time reveal payload after a createScimToken round trip */
|
|
98
|
+
get createdToken() { return this.#createdToken_accessor_storage; }
|
|
99
|
+
set createdToken(value) { this.#createdToken_accessor_storage = value; }
|
|
100
|
+
#scimBaseUrl_accessor_storage = (__runInitializers(this, _createdToken_extraInitializers), __runInitializers(this, _scimBaseUrl_initializers, ''));
|
|
101
|
+
get scimBaseUrl() { return this.#scimBaseUrl_accessor_storage; }
|
|
102
|
+
set scimBaseUrl(value) { this.#scimBaseUrl_accessor_storage = value; }
|
|
103
|
+
#newLabel_accessor_storage = (__runInitializers(this, _scimBaseUrl_extraInitializers), __runInitializers(this, _newLabel_initializers, ''));
|
|
104
|
+
get newLabel() { return this.#newLabel_accessor_storage; }
|
|
105
|
+
set newLabel(value) { this.#newLabel_accessor_storage = value; }
|
|
106
|
+
#copied_accessor_storage = (__runInitializers(this, _newLabel_extraInitializers), __runInitializers(this, _copied_initializers, false));
|
|
107
|
+
get copied() { return this.#copied_accessor_storage; }
|
|
108
|
+
set copied(value) { this.#copied_accessor_storage = value; }
|
|
109
|
+
static styles = [
|
|
110
|
+
...idpElementStyles,
|
|
111
|
+
css `
|
|
112
|
+
:host {
|
|
113
|
+
display: block;
|
|
114
|
+
font-family: var(--idp-font);
|
|
115
|
+
color: var(--idp-fg);
|
|
116
|
+
}
|
|
117
|
+
.section {
|
|
118
|
+
background: var(--idp-card);
|
|
119
|
+
border: 1px solid var(--idp-border);
|
|
120
|
+
border-radius: var(--idp-radius);
|
|
121
|
+
padding: 20px;
|
|
122
|
+
}
|
|
123
|
+
.title {
|
|
124
|
+
font-size: 14px;
|
|
125
|
+
font-weight: 600;
|
|
126
|
+
}
|
|
127
|
+
.muted {
|
|
128
|
+
font-size: 12.5px;
|
|
129
|
+
color: var(--idp-muted-fg);
|
|
130
|
+
line-height: 1.5;
|
|
131
|
+
margin-top: 3px;
|
|
132
|
+
}
|
|
133
|
+
.endpoint {
|
|
134
|
+
display: flex;
|
|
135
|
+
align-items: center;
|
|
136
|
+
gap: 8px;
|
|
137
|
+
margin-top: 12px;
|
|
138
|
+
padding: 8px 10px;
|
|
139
|
+
background: var(--idp-muted);
|
|
140
|
+
border: 1px solid var(--idp-border);
|
|
141
|
+
border-radius: 8px;
|
|
142
|
+
font-family: var(--idp-mono, ui-monospace, monospace);
|
|
143
|
+
font-size: 12px;
|
|
144
|
+
overflow-wrap: anywhere;
|
|
145
|
+
}
|
|
146
|
+
.reveal {
|
|
147
|
+
margin-top: 14px;
|
|
148
|
+
padding: 12px;
|
|
149
|
+
border: 1px solid var(--idp-info-border, var(--idp-border));
|
|
150
|
+
border-radius: 10px;
|
|
151
|
+
background: var(--idp-accent-soft);
|
|
152
|
+
}
|
|
153
|
+
.reveal-title {
|
|
154
|
+
font-size: 12.5px;
|
|
155
|
+
font-weight: 600;
|
|
156
|
+
color: var(--idp-accent);
|
|
157
|
+
display: flex;
|
|
158
|
+
align-items: center;
|
|
159
|
+
gap: 6px;
|
|
160
|
+
}
|
|
161
|
+
.reveal-token {
|
|
162
|
+
margin-top: 8px;
|
|
163
|
+
display: flex;
|
|
164
|
+
align-items: center;
|
|
165
|
+
gap: 8px;
|
|
166
|
+
font-family: var(--idp-mono, ui-monospace, monospace);
|
|
167
|
+
font-size: 12.5px;
|
|
168
|
+
overflow-wrap: anywhere;
|
|
169
|
+
}
|
|
170
|
+
.copy-button {
|
|
171
|
+
flex: 0 0 auto;
|
|
172
|
+
border: 1px solid var(--idp-border);
|
|
173
|
+
background: var(--idp-card);
|
|
174
|
+
border-radius: 7px;
|
|
175
|
+
font-family: inherit;
|
|
176
|
+
font-size: 11px;
|
|
177
|
+
padding: 4px 10px;
|
|
178
|
+
cursor: pointer;
|
|
179
|
+
}
|
|
180
|
+
.copy-button:hover {
|
|
181
|
+
background: var(--idp-muted);
|
|
182
|
+
}
|
|
183
|
+
.row {
|
|
184
|
+
display: flex;
|
|
185
|
+
align-items: center;
|
|
186
|
+
gap: 12px;
|
|
187
|
+
padding: 12px 0;
|
|
188
|
+
border-bottom: 1px solid var(--idp-border);
|
|
189
|
+
}
|
|
190
|
+
.row:last-of-type {
|
|
191
|
+
border-bottom: none;
|
|
192
|
+
}
|
|
193
|
+
.row-main {
|
|
194
|
+
flex: 1;
|
|
195
|
+
min-width: 0;
|
|
196
|
+
}
|
|
197
|
+
.row-name {
|
|
198
|
+
font-size: 13px;
|
|
199
|
+
font-weight: 500;
|
|
200
|
+
display: flex;
|
|
201
|
+
align-items: center;
|
|
202
|
+
gap: 8px;
|
|
203
|
+
}
|
|
204
|
+
.row-meta {
|
|
205
|
+
font-size: 11px;
|
|
206
|
+
color: var(--idp-muted-fg);
|
|
207
|
+
margin-top: 2px;
|
|
208
|
+
}
|
|
209
|
+
.revoke {
|
|
210
|
+
background: none;
|
|
211
|
+
border: none;
|
|
212
|
+
cursor: pointer;
|
|
213
|
+
font-family: inherit;
|
|
214
|
+
font-size: 11px;
|
|
215
|
+
font-weight: 500;
|
|
216
|
+
color: var(--idp-destructive);
|
|
217
|
+
padding: 4px 8px;
|
|
218
|
+
border-radius: 6px;
|
|
219
|
+
}
|
|
220
|
+
.revoke:hover {
|
|
221
|
+
background: var(--idp-error-bg);
|
|
222
|
+
}
|
|
223
|
+
.create-row {
|
|
224
|
+
display: flex;
|
|
225
|
+
gap: 10px;
|
|
226
|
+
align-items: flex-end;
|
|
227
|
+
margin-top: 16px;
|
|
228
|
+
padding-top: 16px;
|
|
229
|
+
border-top: 1px solid var(--idp-border);
|
|
230
|
+
}
|
|
231
|
+
.create-row idp-input {
|
|
232
|
+
flex: 1;
|
|
233
|
+
}
|
|
234
|
+
.empty {
|
|
235
|
+
padding: 18px 0;
|
|
236
|
+
font-size: 12.5px;
|
|
237
|
+
color: var(--idp-muted-fg);
|
|
238
|
+
}
|
|
239
|
+
`,
|
|
240
|
+
];
|
|
241
|
+
formatTimeAgo(timestampArg) {
|
|
242
|
+
const deltaMs = Date.now() - timestampArg;
|
|
243
|
+
const days = Math.floor(deltaMs / 86400000);
|
|
244
|
+
if (days > 0)
|
|
245
|
+
return `${days}d ago`;
|
|
246
|
+
const hours = Math.floor(deltaMs / 3600000);
|
|
247
|
+
if (hours > 0)
|
|
248
|
+
return `${hours}h ago`;
|
|
249
|
+
return 'just now';
|
|
250
|
+
}
|
|
251
|
+
async copyToken() {
|
|
252
|
+
if (!this.createdToken)
|
|
253
|
+
return;
|
|
254
|
+
try {
|
|
255
|
+
await navigator.clipboard.writeText(this.createdToken.plaintextToken);
|
|
256
|
+
this.copied = true;
|
|
257
|
+
setTimeout(() => (this.copied = false), 2000);
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
// clipboard unavailable; the token stays selectable
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
submitCreate() {
|
|
264
|
+
const label = this.newLabel.trim();
|
|
265
|
+
if (!label)
|
|
266
|
+
return;
|
|
267
|
+
this.dispatchEvent(new CustomEvent('idp-scim-token-create', {
|
|
268
|
+
detail: { label },
|
|
269
|
+
bubbles: true,
|
|
270
|
+
composed: true,
|
|
271
|
+
}));
|
|
272
|
+
this.newLabel = '';
|
|
273
|
+
}
|
|
274
|
+
render() {
|
|
275
|
+
return html `
|
|
276
|
+
<div class="section">
|
|
277
|
+
<div class="title">SCIM provisioning</div>
|
|
278
|
+
<div class="muted">
|
|
279
|
+
Let your identity provider create, update and deactivate accounts automatically.
|
|
280
|
+
Configure the endpoint below with a bearer token in Okta or Microsoft Entra.
|
|
281
|
+
</div>
|
|
282
|
+
${this.scimBaseUrl
|
|
283
|
+
? html `<div class="endpoint"><idp-icon name="globe" size="14"></idp-icon>${this.scimBaseUrl}</div>`
|
|
284
|
+
: html ``}
|
|
285
|
+
${this.createdToken
|
|
286
|
+
? html `
|
|
287
|
+
<div class="reveal">
|
|
288
|
+
<div class="reveal-title">
|
|
289
|
+
<idp-icon name="key" size="14"></idp-icon>
|
|
290
|
+
Token for "${this.createdToken.label}" — copy it now, it won't be shown again
|
|
291
|
+
</div>
|
|
292
|
+
<div class="reveal-token">
|
|
293
|
+
<span>${this.createdToken.plaintextToken}</span>
|
|
294
|
+
<button class="copy-button" @click=${() => this.copyToken()}>
|
|
295
|
+
${this.copied ? 'Copied' : 'Copy'}
|
|
296
|
+
</button>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
`
|
|
300
|
+
: html ``}
|
|
301
|
+
${this.tokens.length
|
|
302
|
+
? this.tokens.map((tokenArg) => html `
|
|
303
|
+
<div class="row">
|
|
304
|
+
<div class="row-main">
|
|
305
|
+
<div class="row-name">
|
|
306
|
+
${tokenArg.label}
|
|
307
|
+
${tokenArg.revoked
|
|
308
|
+
? html `<idp-badge variant="error">revoked</idp-badge>`
|
|
309
|
+
: tokenArg.expiresAt && tokenArg.expiresAt < Date.now()
|
|
310
|
+
? html `<idp-badge variant="warn">expired</idp-badge>`
|
|
311
|
+
: html `<idp-badge variant="ok">active</idp-badge>`}
|
|
312
|
+
</div>
|
|
313
|
+
<div class="row-meta">
|
|
314
|
+
${tokenArg.tokenPrefix}… · created ${this.formatTimeAgo(tokenArg.createdAt)}
|
|
315
|
+
${tokenArg.lastUsedAt ? ` · last used ${this.formatTimeAgo(tokenArg.lastUsedAt)}` : ' · never used'}
|
|
316
|
+
</div>
|
|
317
|
+
</div>
|
|
318
|
+
${!tokenArg.revoked
|
|
319
|
+
? html `
|
|
320
|
+
<button
|
|
321
|
+
class="revoke"
|
|
322
|
+
@click=${() => this.dispatchEvent(new CustomEvent('idp-scim-token-revoke', {
|
|
323
|
+
detail: { tokenId: tokenArg.id },
|
|
324
|
+
bubbles: true,
|
|
325
|
+
composed: true,
|
|
326
|
+
}))}
|
|
327
|
+
>
|
|
328
|
+
Revoke
|
|
329
|
+
</button>
|
|
330
|
+
`
|
|
331
|
+
: html ``}
|
|
332
|
+
</div>
|
|
333
|
+
`)
|
|
334
|
+
: html `<div class="empty">No SCIM tokens yet. Create one to connect your IdP's provisioning.</div>`}
|
|
335
|
+
<div class="create-row">
|
|
336
|
+
<idp-input
|
|
337
|
+
label="New token label"
|
|
338
|
+
placeholder="e.g. Okta production"
|
|
339
|
+
.value=${this.newLabel}
|
|
340
|
+
@input=${(eventArg) => {
|
|
341
|
+
const target = eventArg.composedPath()[0];
|
|
342
|
+
this.newLabel = target?.value ?? '';
|
|
343
|
+
}}
|
|
344
|
+
></idp-input>
|
|
345
|
+
<idp-button variant="accent" size="sm" @click=${() => this.submitCreate()}>Create token</idp-button>
|
|
346
|
+
</div>
|
|
347
|
+
</div>
|
|
348
|
+
`;
|
|
349
|
+
}
|
|
350
|
+
constructor() {
|
|
351
|
+
super(...arguments);
|
|
352
|
+
__runInitializers(this, _copied_extraInitializers);
|
|
353
|
+
}
|
|
354
|
+
static {
|
|
355
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
356
|
+
}
|
|
357
|
+
};
|
|
358
|
+
return IdpScimTokenPanel = _classThis;
|
|
359
|
+
})();
|
|
360
|
+
export { IdpScimTokenPanel };
|
|
361
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLXNjaW0tdG9rZW4tcGFuZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaWRwLXNjaW0tdG9rZW4tcGFuZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMxSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sZ0JBQWdCLENBQUM7SUEyQlgsaUJBQWlCOzRCQUQ3QixhQUFhLENBQUMsc0JBQXNCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7OztpQ0FBbkIsU0FBUSxXQUFXOzs7O2tDQWUvQyxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7d0NBSXpCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQzt1Q0FHMUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO29DQUcxQixLQUFLLEVBQUU7a0NBR1AsS0FBSyxFQUFFO1lBWlIsdUtBQWdCLE1BQU0sNkJBQU4sTUFBTSx1RkFBMkI7WUFJakQseUxBQWdCLFlBQVksNkJBQVosWUFBWSxtR0FBMEQ7WUFHdEYsc0xBQWdCLFdBQVcsNkJBQVgsV0FBVyxpR0FBTTtZQUdqQyw2S0FBaUIsUUFBUSw2QkFBUixRQUFRLDJGQUFNO1lBRy9CLHVLQUFpQixNQUFNLDZCQUFOLE1BQU0sdUZBQVM7WUE3QmxDLDZLQXNSQzs7OztRQXJSUSxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsRUFBRSxD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
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
|
|
2
|
+
import './idp-badge.js';
|
|
3
|
+
import './idp-button.js';
|
|
4
|
+
import './idp-icon.js';
|
|
5
|
+
import './idp-input.js';
|
|
6
|
+
export interface IIdpSsoConnectionItem {
|
|
7
|
+
id: string;
|
|
8
|
+
displayName: string;
|
|
9
|
+
status: 'active' | 'disabled';
|
|
10
|
+
emailDomains: string[];
|
|
11
|
+
entityId: string;
|
|
12
|
+
ssoUrl: string;
|
|
13
|
+
certificateCount: number;
|
|
14
|
+
provisioningMode: 'jit' | 'scim-only' | 'jit-and-scim';
|
|
15
|
+
defaultOrgRoles: string[];
|
|
16
|
+
groupMappings: {
|
|
17
|
+
idpGroup: string;
|
|
18
|
+
orgRoles: string[];
|
|
19
|
+
}[];
|
|
20
|
+
}
|
|
21
|
+
export interface IIdpSsoSpDetails {
|
|
22
|
+
spEntityId: string;
|
|
23
|
+
acsUrl: string;
|
|
24
|
+
metadataUrl: string;
|
|
25
|
+
scimBaseUrl: string;
|
|
26
|
+
}
|
|
27
|
+
export interface IIdpSsoCreateEventDetail {
|
|
28
|
+
displayName: string;
|
|
29
|
+
emailDomains: string[];
|
|
30
|
+
metadataXml?: string;
|
|
31
|
+
idp?: {
|
|
32
|
+
entityId: string;
|
|
33
|
+
ssoUrl: string;
|
|
34
|
+
signingCertificates: string[];
|
|
35
|
+
};
|
|
36
|
+
provisioningMode: 'jit' | 'scim-only' | 'jit-and-scim';
|
|
37
|
+
defaultOrgRoles: string[];
|
|
38
|
+
groupMappings: {
|
|
39
|
+
idpGroup: string;
|
|
40
|
+
orgRoles: string[];
|
|
41
|
+
}[];
|
|
42
|
+
}
|
|
43
|
+
export interface IIdpSsoStatusEventDetail {
|
|
44
|
+
connectionId: string;
|
|
45
|
+
status: 'active' | 'disabled';
|
|
46
|
+
}
|
|
47
|
+
export interface IIdpSsoDeleteEventDetail {
|
|
48
|
+
connectionId: string;
|
|
49
|
+
}
|
|
50
|
+
declare global {
|
|
51
|
+
interface HTMLElementTagNameMap {
|
|
52
|
+
'idp-sso-connection-form': IdpSsoConnectionForm;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export declare class IdpSsoConnectionForm extends DeesElement {
|
|
56
|
+
static demo: () => TemplateResult<1>;
|
|
57
|
+
static demoGroups: string[];
|
|
58
|
+
accessor connections: IIdpSsoConnectionItem[];
|
|
59
|
+
accessor spDetails: IIdpSsoSpDetails | null;
|
|
60
|
+
private accessor formOpen;
|
|
61
|
+
private accessor manualIdp;
|
|
62
|
+
private accessor formDisplayName;
|
|
63
|
+
private accessor formEmailDomains;
|
|
64
|
+
private accessor formMetadataXml;
|
|
65
|
+
private accessor formEntityId;
|
|
66
|
+
private accessor formSsoUrl;
|
|
67
|
+
private accessor formCertificate;
|
|
68
|
+
private accessor formProvisioningMode;
|
|
69
|
+
private accessor formDefaultRoles;
|
|
70
|
+
private accessor formGroupMappings;
|
|
71
|
+
private accessor formError;
|
|
72
|
+
static styles: import("@design.estate/dees-element").CSSResult[];
|
|
73
|
+
private parseGroupMappings;
|
|
74
|
+
private parseList;
|
|
75
|
+
private submitCreate;
|
|
76
|
+
private resetForm;
|
|
77
|
+
private readInput;
|
|
78
|
+
private renderConnectionRow;
|
|
79
|
+
private renderForm;
|
|
80
|
+
render(): TemplateResult;
|
|
81
|
+
}
|