@idp.global/catalog 3.3.0 → 3.5.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.
@@ -8,6 +8,7 @@ export interface IIdpSsoConnectionItem {
8
8
  displayName: string;
9
9
  status: 'active' | 'disabled';
10
10
  emailDomains: string[];
11
+ domainVerifications?: IIdpSsoDomainVerificationItem[];
11
12
  entityId: string;
12
13
  ssoUrl: string;
13
14
  certificateCount: number;
@@ -18,6 +19,14 @@ export interface IIdpSsoConnectionItem {
18
19
  orgRoles: string[];
19
20
  }[];
20
21
  }
22
+ export interface IIdpSsoDomainVerificationItem {
23
+ domain: string;
24
+ status: 'pending' | 'verified';
25
+ dnsTxtName: string;
26
+ dnsTxtValue: string;
27
+ lastCheckedAt?: number;
28
+ verifiedAt?: number;
29
+ }
21
30
  export interface IIdpSsoSpDetails {
22
31
  spEntityId: string;
23
32
  acsUrl: string;
@@ -47,6 +56,10 @@ export interface IIdpSsoStatusEventDetail {
47
56
  export interface IIdpSsoDeleteEventDetail {
48
57
  connectionId: string;
49
58
  }
59
+ export interface IIdpSsoVerifyDomainEventDetail {
60
+ connectionId: string;
61
+ domain: string;
62
+ }
50
63
  declare global {
51
64
  interface HTMLElementTagNameMap {
52
65
  'idp-sso-connection-form': IdpSsoConnectionForm;
@@ -137,6 +137,21 @@ let IdpSsoConnectionForm = (() => {
137
137
  displayName: 'Okta (acme.com)',
138
138
  status: 'active',
139
139
  emailDomains: ['acme.com', 'acme.io'],
140
+ domainVerifications: [
141
+ {
142
+ domain: 'acme.com',
143
+ status: 'verified',
144
+ dnsTxtName: '_idp-global-verification.acme.com',
145
+ dnsTxtValue: 'idp-global-verification=verified-example',
146
+ verifiedAt: Date.now(),
147
+ },
148
+ {
149
+ domain: 'acme.io',
150
+ status: 'pending',
151
+ dnsTxtName: '_idp-global-verification.acme.io',
152
+ dnsTxtValue: 'idp-global-verification=pending-example',
153
+ },
154
+ ],
140
155
  entityId: 'http://www.okta.com/exk9examples',
141
156
  ssoUrl: 'https://acme.okta.com/app/xyz/sso/saml',
142
157
  certificateCount: 1,
@@ -273,6 +288,40 @@ let IdpSsoConnectionForm = (() => {
273
288
  gap: 6px;
274
289
  margin-top: 8px;
275
290
  }
291
+ .domain-list {
292
+ display: flex;
293
+ flex-direction: column;
294
+ gap: 8px;
295
+ margin-top: 10px;
296
+ }
297
+ .domain-proof {
298
+ padding: 10px 12px;
299
+ border: 1px solid var(--idp-border);
300
+ border-radius: 9px;
301
+ background: var(--idp-muted);
302
+ }
303
+ .domain-proof-head {
304
+ display: flex;
305
+ align-items: center;
306
+ gap: 8px;
307
+ }
308
+ .domain-proof-head .table-action {
309
+ margin-left: auto;
310
+ }
311
+ .dns-record {
312
+ display: grid;
313
+ grid-template-columns: minmax(72px, auto) 1fr;
314
+ gap: 4px 10px;
315
+ margin-top: 8px;
316
+ font-size: 11px;
317
+ }
318
+ .dns-record-key {
319
+ color: var(--idp-muted-fg);
320
+ }
321
+ .dns-record-value {
322
+ font-family: var(--idp-mono, ui-monospace, monospace);
323
+ overflow-wrap: anywhere;
324
+ }
276
325
  .row-actions {
277
326
  display: flex;
278
327
  gap: 6px;
@@ -457,6 +506,7 @@ let IdpSsoConnectionForm = (() => {
457
506
  return target?.value ?? '';
458
507
  }
459
508
  renderConnectionRow(connectionArg) {
509
+ const domainVerifications = connectionArg.domainVerifications;
460
510
  return html `
461
511
  <div class="row">
462
512
  <div class="row-head">
@@ -492,8 +542,51 @@ let IdpSsoConnectionForm = (() => {
492
542
  </div>
493
543
  </div>
494
544
  <div class="row-meta">${connectionArg.entityId} · ${connectionArg.ssoUrl} · ${connectionArg.certificateCount} cert${connectionArg.certificateCount === 1 ? '' : 's'}</div>
545
+ ${domainVerifications
546
+ ? html `
547
+ <div class="domain-list">
548
+ ${domainVerifications.map((verificationArg) => html `
549
+ <div class="domain-proof">
550
+ <div class="domain-proof-head">
551
+ <idp-badge variant=${verificationArg.status === 'verified' ? 'ok' : 'outline'}>
552
+ @${verificationArg.domain} ${verificationArg.status}
553
+ </idp-badge>
554
+ ${verificationArg.status === 'pending'
555
+ ? html `
556
+ <button
557
+ class="table-action"
558
+ aria-label=${`Verify DNS for ${verificationArg.domain}`}
559
+ @click=${() => this.dispatchEvent(new CustomEvent('idp-sso-verify-domain', {
560
+ detail: { connectionId: connectionArg.id, domain: verificationArg.domain },
561
+ bubbles: true,
562
+ composed: true,
563
+ }))}
564
+ >
565
+ Verify DNS
566
+ </button>
567
+ `
568
+ : html ``}
569
+ </div>
570
+ ${verificationArg.status === 'pending' && verificationArg.dnsTxtName && verificationArg.dnsTxtValue
571
+ ? html `
572
+ <div class="dns-record">
573
+ <span class="dns-record-key">TXT name</span>
574
+ <span class="dns-record-value">${verificationArg.dnsTxtName}</span>
575
+ <span class="dns-record-key">TXT value</span>
576
+ <span class="dns-record-value">${verificationArg.dnsTxtValue}</span>
577
+ </div>
578
+ `
579
+ : html ``}
580
+ </div>
581
+ `)}
582
+ </div>
583
+ `
584
+ : html `
585
+ <div class="chip-row">
586
+ ${connectionArg.emailDomains.map((domainArg) => html `<idp-badge variant="accent">@${domainArg}</idp-badge>`)}
587
+ </div>
588
+ `}
495
589
  <div class="chip-row">
496
- ${connectionArg.emailDomains.map((domainArg) => html `<idp-badge variant="accent">@${domainArg}</idp-badge>`)}
497
590
  ${connectionArg.groupMappings.map((mappingArg) => html `<idp-badge variant="outline">${mappingArg.idpGroup} → ${mappingArg.orgRoles.join(', ')}</idp-badge>`)}
498
591
  </div>
499
592
  </div>
@@ -600,7 +693,8 @@ let IdpSsoConnectionForm = (() => {
600
693
  <div class="title">SAML single sign-on</div>
601
694
  <div class="muted">
602
695
  Let members sign in through your organisation's identity provider. Users entering a
603
- matching email domain are routed to your IdP automatically.
696
+ verified email domain are routed to your IdP automatically. Add the shown DNS TXT
697
+ record and verify ownership before account linking or just-in-time provisioning starts.
604
698
  </div>
605
699
  </div>
606
700
  ${!this.formOpen
@@ -634,4 +728,4 @@ let IdpSsoConnectionForm = (() => {
634
728
  return IdpSsoConnectionForm = _classThis;
635
729
  })();
636
730
  export { IdpSsoConnectionForm };
637
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLXNzby1jb25uZWN0aW9uLWZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaWRwLXNzby1jb25uZWN0aW9uLWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMxSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sZ0JBQWdCLENBQUM7SUFnRFgsb0JBQW9COzRCQURoQyxhQUFhLENBQUMseUJBQXlCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQ0FBbkIsU0FBUSxXQUFXOzs7O3VDQTZCbEQsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO3FDQUd6QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0NBRzFCLEtBQUssRUFBRTtxQ0FHUCxLQUFLLEVBQUU7MkNBR1AsS0FBSyxFQUFFOzRDQUdQLEtBQUssRUFBRTsyQ0FHUCxLQUFLLEVBQUU7d0NBR1AsS0FBSyxFQUFFO3NDQUdQLEtBQUssRUFBRTsyQ0FHUCxLQUFLLEVBQUU7Z0RBR1AsS0FBSyxFQUFFOzRDQUdQLEtBQUssRUFBRTs2Q0FHUCxLQUFLLEVBQUU7cUNBR1AsS0FBSyxFQUFFO1lBdENSLHNMQUFnQixXQUFXLDZCQUFYLFdBQVcsaUdBQStCO1lBRzFELGdMQUFnQixTQUFTLDZCQUFULFNBQVMsNkZBQWlDO1lBRzFELDZLQUFp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
731
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRwLXNzby1jb25uZWN0aW9uLWZvcm0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c193ZWIvZWxlbWVudHMvaWRwLXNzby1jb25uZWN0aW9uLWZvcm0udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBdUIsTUFBTSw2QkFBNkIsQ0FBQztBQUMxSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sZ0JBQWdCLENBQUM7SUErRFgsb0JBQW9COzRCQURoQyxhQUFhLENBQUMseUJBQXlCLENBQUM7Ozs7c0JBQ0MsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQ0FBbkIsU0FBUSxXQUFXOzs7O3VDQTRDbEQsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO3FDQUd6QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7b0NBRzFCLEtBQUssRUFBRTtxQ0FHUCxLQUFLLEVBQUU7MkNBR1AsS0FBSyxFQUFFOzRDQUdQLEtBQUssRUFBRTsyQ0FHUCxLQUFLLEVBQUU7d0NBR1AsS0FBSyxFQUFFO3NDQUdQLEtBQUssRUFBRTsyQ0FHUCxLQUFLLEVBQUU7Z0RBR1AsS0FBSyxFQUFFOzRDQUdQLEtBQUssRUFBRTs2Q0FHUCxLQUFLLEVBQUU7cUNBR1AsS0FBSyxFQUFFO1lBdENSLHNMQUFnQixXQUFXLDZCQUFYLFdBQVcsaUdBQStCO1lBRzFELGdMQUFnQixTQUFTLDZCQUFULFNBQVMsNkZBQWlDO1lBRzFELDZLQUFp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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@idp.global/catalog",
3
- "version": "3.3.0",
3
+ "version": "3.5.0",
4
4
  "private": false,
5
5
  "description": "Web component catalog for idp.global, based on the v5 Apple-system design language.",
6
6
  "exports": {
@@ -23,7 +23,7 @@
23
23
  "@git.zone/tsbundle": "^2.11.0",
24
24
  "@git.zone/tswatch": "^3.3.5",
25
25
  "@push.rocks/projectinfo": "^5.1.0",
26
- "@types/node": "^25.9.0"
26
+ "@types/node": "^25.9.4"
27
27
  },
28
28
  "files": [
29
29
  "ts_web/**/*",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/catalog',
6
- version: '3.3.0',
6
+ version: '3.5.0',
7
7
  description: 'Web component catalog for idp.global, based on the v5 Apple-system design language.'
8
8
  }
@@ -94,6 +94,19 @@ export interface IIdpAdminGaUserActionEventDetail {
94
94
  action: 'suspend' | 'unsuspend';
95
95
  }
96
96
 
97
+ export interface IIdpAdminGaUserDeleteEventDetail {
98
+ userId: string;
99
+ }
100
+
101
+ export interface IIdpAdminAccountDeleteEventDetail {
102
+ password: string;
103
+ confirmEmail: string;
104
+ }
105
+
106
+ export interface IIdpAdminOrgExportEventDetail {
107
+ orgId: string;
108
+ }
109
+
97
110
  export interface IIdpAdminProfileUpdateEventDetail {
98
111
  name: string;
99
112
  username: string;
@@ -1036,6 +1049,23 @@ export class IdpAdminShell extends DeesElement {
1036
1049
  @property({ type: Boolean })
1037
1050
  public accessor profileSaving = false;
1038
1051
 
1052
+ /** shows the account danger zone (delete account) on the profile page */
1053
+ @property({ type: Boolean })
1054
+ public accessor dangerZoneEnabled = false;
1055
+
1056
+ /** host sets this while the delete-account request is in flight */
1057
+ @property({ type: Boolean })
1058
+ public accessor accountDeleting = false;
1059
+
1060
+ @state()
1061
+ private accessor deleteAccountOpen = false;
1062
+
1063
+ @state()
1064
+ private accessor deleteAccountPassword = '';
1065
+
1066
+ @state()
1067
+ private accessor deleteAccountConfirmEmail = '';
1068
+
1039
1069
  @state()
1040
1070
  private accessor profileDraft: { name: string; username: string; mobileNumber: string } | null = null;
1041
1071
 
@@ -1943,6 +1973,20 @@ export class IdpAdminShell extends DeesElement {
1943
1973
  : html``}
1944
1974
  `)}
1945
1975
  ${this.renderSectionCard('Account status', '', html`<div class="split-row"><div><div class="section-title">Status</div><div class="muted">Your account is currently ${status}.</div></div><idp-badge variant=${status === 'active' ? 'ok' : status === 'suspended' ? 'error' : 'warn'}>${status}</idp-badge></div>${this.globalAdmin ? html`<div class="divider"></div><div class="split-row"><div><div class="section-title">Global admin</div><div class="muted">You have platform-wide administrative access.</div></div><idp-badge variant="accent">Admin</idp-badge></div>` : html``}`)}
1976
+ ${this.dangerZoneEnabled
1977
+ ? this.renderSectionCard('Danger zone', 'Deleting your account locks it immediately and permanently erases it after a 7-day grace period.', html`
1978
+ ${this.deleteAccountOpen
1979
+ ? html`
1980
+ ${this.renderFormRow('Confirm your email', 'Type your account email to confirm', html`<input class="input" .value=${this.deleteAccountConfirmEmail} ?disabled=${this.accountDeleting} @input=${(eventArg: Event) => { this.deleteAccountConfirmEmail = (eventArg.target as HTMLInputElement).value; }} />`, true)}
1981
+ ${this.renderFormRow('Password', 'Required when your account has one', html`<input class="input" type="password" autocomplete="current-password" .value=${this.deleteAccountPassword} ?disabled=${this.accountDeleting} @input=${(eventArg: Event) => { this.deleteAccountPassword = (eventArg.target as HTMLInputElement).value; }} />`)}
1982
+ <div class="split-row" style="justify-content:flex-end;gap:10px;margin-top:14px">
1983
+ <idp-button variant="outline" shape="rect" ?disabled=${this.accountDeleting} @click=${() => { this.deleteAccountOpen = false; this.deleteAccountPassword = ''; this.deleteAccountConfirmEmail = ''; }}>Cancel</idp-button>
1984
+ <idp-button variant="accent" shape="rect" ?loading=${this.accountDeleting} ?disabled=${this.deleteAccountConfirmEmail.trim().toLowerCase() !== (this.user?.email || '').trim().toLowerCase()} @click=${() => this.dispatchShellEvent<IIdpAdminAccountDeleteEventDetail>('idp-admin-account-delete', { password: this.deleteAccountPassword, confirmEmail: this.deleteAccountConfirmEmail.trim() })}>Delete my account</idp-button>
1985
+ </div>
1986
+ `
1987
+ : html`<div class="split-row"><div><div class="section-title">Delete this account</div><div class="muted">Organisations you own must be transferred or deleted first.</div></div><idp-button variant="outline" shape="rect" @click=${() => { this.deleteAccountOpen = true; }}>Delete account…</idp-button></div>`}
1988
+ `)
1989
+ : html``}
1946
1990
  ${this.delegationApps.length
1947
1991
  ? html`<idp-delegation-section .apps=${this.delegationApps} .delegations=${this.delegations}></idp-delegation-section>`
1948
1992
  : html``}
@@ -2214,6 +2258,7 @@ export class IdpAdminShell extends DeesElement {
2214
2258
  <button class="plain-button primary" ?disabled=${!identityChanged} @click=${() => this.submitOrgSettingsUpdate()}>Apply identity changes</button>
2215
2259
  `)}
2216
2260
  ${this.renderSectionCard('Organisation ID', 'Use this identifier when making API calls.', this.renderCodeBlock(org.id))}
2261
+ ${this.renderSectionCard('Data export', 'Download all organisation data (members, invitations, SSO configuration, activity) as JSON. Owner only.', html`<div class="split-row"><div><div class="section-title">Export organisation data</div><div class="muted">Streams every record; token secrets and credentials are never included.</div></div><idp-button variant="outline" shape="rect" @click=${() => this.dispatchShellEvent<IIdpAdminOrgExportEventDetail>('idp-admin-org-export', { orgId: org.id })}>Export JSON</idp-button></div>`)}
2217
2262
  ${this.renderSectionCard('Transfer ownership', `Owner-only operation. Type ${transferConfirmText} to confirm.`, html`
2218
2263
  ${transferCandidates.length ? html`
2219
2264
  ${this.renderFormRow('New owner', 'The target user must already be an organisation member.', html`
@@ -2447,7 +2492,12 @@ export class IdpAdminShell extends DeesElement {
2447
2492
  html`<idp-badge variant=${statusVariant(userArg.status)}>${userArg.status}</idp-badge>`,
2448
2493
  userArg.isGlobalAdmin ? html`<idp-badge variant="accent">Admin</idp-badge>` : '-',
2449
2494
  this.formatTimeAgo(userArg.createdAt),
2450
- html`<button class="plain-button ghost" style="font-size:11px" @click=${() => this.dispatchShellEvent<IIdpAdminGaUserActionEventDetail>('idp-admin-ga-user-action', { userId: userArg.id, action: userArg.status === 'suspended' ? 'unsuspend' : 'suspend' })}>${userArg.status === 'suspended' ? 'Unsuspend' : 'Suspend'}</button>`,
2495
+ html`<span style="display:inline-flex;gap:8px">
2496
+ <button class="plain-button ghost" style="font-size:11px" @click=${() => this.dispatchShellEvent<IIdpAdminGaUserActionEventDetail>('idp-admin-ga-user-action', { userId: userArg.id, action: userArg.status === 'suspended' ? 'unsuspend' : 'suspend' })}>${userArg.status === 'suspended' ? 'Unsuspend' : 'Suspend'}</button>
2497
+ ${userArg.status === 'suspended'
2498
+ ? html`<button class="plain-button ghost" style="font-size:11px;color:#d70015" @click=${() => this.dispatchShellEvent<IIdpAdminGaUserDeleteEventDetail>('idp-admin-ga-user-delete', { userId: userArg.id })}>Delete permanently</button>`
2499
+ : html``}
2500
+ </span>`,
2451
2501
  ],
2452
2502
  }));
2453
2503
 
@@ -10,6 +10,7 @@ export interface IIdpSsoConnectionItem {
10
10
  displayName: string;
11
11
  status: 'active' | 'disabled';
12
12
  emailDomains: string[];
13
+ domainVerifications?: IIdpSsoDomainVerificationItem[];
13
14
  entityId: string;
14
15
  ssoUrl: string;
15
16
  certificateCount: number;
@@ -18,6 +19,15 @@ export interface IIdpSsoConnectionItem {
18
19
  groupMappings: { idpGroup: string; orgRoles: string[] }[];
19
20
  }
20
21
 
22
+ export interface IIdpSsoDomainVerificationItem {
23
+ domain: string;
24
+ status: 'pending' | 'verified';
25
+ dnsTxtName: string;
26
+ dnsTxtValue: string;
27
+ lastCheckedAt?: number;
28
+ verifiedAt?: number;
29
+ }
30
+
21
31
  export interface IIdpSsoSpDetails {
22
32
  spEntityId: string;
23
33
  acsUrl: string;
@@ -44,6 +54,11 @@ export interface IIdpSsoDeleteEventDetail {
44
54
  connectionId: string;
45
55
  }
46
56
 
57
+ export interface IIdpSsoVerifyDomainEventDetail {
58
+ connectionId: string;
59
+ domain: string;
60
+ }
61
+
47
62
  declare global {
48
63
  interface HTMLElementTagNameMap {
49
64
  'idp-sso-connection-form': IdpSsoConnectionForm;
@@ -67,6 +82,21 @@ export class IdpSsoConnectionForm extends DeesElement {
67
82
  displayName: 'Okta (acme.com)',
68
83
  status: 'active',
69
84
  emailDomains: ['acme.com', 'acme.io'],
85
+ domainVerifications: [
86
+ {
87
+ domain: 'acme.com',
88
+ status: 'verified',
89
+ dnsTxtName: '_idp-global-verification.acme.com',
90
+ dnsTxtValue: 'idp-global-verification=verified-example',
91
+ verifiedAt: Date.now(),
92
+ },
93
+ {
94
+ domain: 'acme.io',
95
+ status: 'pending',
96
+ dnsTxtName: '_idp-global-verification.acme.io',
97
+ dnsTxtValue: 'idp-global-verification=pending-example',
98
+ },
99
+ ],
70
100
  entityId: 'http://www.okta.com/exk9examples',
71
101
  ssoUrl: 'https://acme.okta.com/app/xyz/sso/saml',
72
102
  certificateCount: 1,
@@ -204,6 +234,40 @@ export class IdpSsoConnectionForm extends DeesElement {
204
234
  gap: 6px;
205
235
  margin-top: 8px;
206
236
  }
237
+ .domain-list {
238
+ display: flex;
239
+ flex-direction: column;
240
+ gap: 8px;
241
+ margin-top: 10px;
242
+ }
243
+ .domain-proof {
244
+ padding: 10px 12px;
245
+ border: 1px solid var(--idp-border);
246
+ border-radius: 9px;
247
+ background: var(--idp-muted);
248
+ }
249
+ .domain-proof-head {
250
+ display: flex;
251
+ align-items: center;
252
+ gap: 8px;
253
+ }
254
+ .domain-proof-head .table-action {
255
+ margin-left: auto;
256
+ }
257
+ .dns-record {
258
+ display: grid;
259
+ grid-template-columns: minmax(72px, auto) 1fr;
260
+ gap: 4px 10px;
261
+ margin-top: 8px;
262
+ font-size: 11px;
263
+ }
264
+ .dns-record-key {
265
+ color: var(--idp-muted-fg);
266
+ }
267
+ .dns-record-value {
268
+ font-family: var(--idp-mono, ui-monospace, monospace);
269
+ overflow-wrap: anywhere;
270
+ }
207
271
  .row-actions {
208
272
  display: flex;
209
273
  gap: 6px;
@@ -395,6 +459,7 @@ export class IdpSsoConnectionForm extends DeesElement {
395
459
  }
396
460
 
397
461
  private renderConnectionRow(connectionArg: IIdpSsoConnectionItem): TemplateResult {
462
+ const domainVerifications = connectionArg.domainVerifications;
398
463
  return html`
399
464
  <div class="row">
400
465
  <div class="row-head">
@@ -436,8 +501,53 @@ export class IdpSsoConnectionForm extends DeesElement {
436
501
  </div>
437
502
  </div>
438
503
  <div class="row-meta">${connectionArg.entityId} · ${connectionArg.ssoUrl} · ${connectionArg.certificateCount} cert${connectionArg.certificateCount === 1 ? '' : 's'}</div>
504
+ ${domainVerifications
505
+ ? html`
506
+ <div class="domain-list">
507
+ ${domainVerifications.map((verificationArg) => html`
508
+ <div class="domain-proof">
509
+ <div class="domain-proof-head">
510
+ <idp-badge variant=${verificationArg.status === 'verified' ? 'ok' : 'outline'}>
511
+ @${verificationArg.domain} ${verificationArg.status}
512
+ </idp-badge>
513
+ ${verificationArg.status === 'pending'
514
+ ? html`
515
+ <button
516
+ class="table-action"
517
+ aria-label=${`Verify DNS for ${verificationArg.domain}`}
518
+ @click=${() => this.dispatchEvent(
519
+ new CustomEvent<IIdpSsoVerifyDomainEventDetail>('idp-sso-verify-domain', {
520
+ detail: { connectionId: connectionArg.id, domain: verificationArg.domain },
521
+ bubbles: true,
522
+ composed: true,
523
+ }),
524
+ )}
525
+ >
526
+ Verify DNS
527
+ </button>
528
+ `
529
+ : html``}
530
+ </div>
531
+ ${verificationArg.status === 'pending' && verificationArg.dnsTxtName && verificationArg.dnsTxtValue
532
+ ? html`
533
+ <div class="dns-record">
534
+ <span class="dns-record-key">TXT name</span>
535
+ <span class="dns-record-value">${verificationArg.dnsTxtName}</span>
536
+ <span class="dns-record-key">TXT value</span>
537
+ <span class="dns-record-value">${verificationArg.dnsTxtValue}</span>
538
+ </div>
539
+ `
540
+ : html``}
541
+ </div>
542
+ `)}
543
+ </div>
544
+ `
545
+ : html`
546
+ <div class="chip-row">
547
+ ${connectionArg.emailDomains.map((domainArg) => html`<idp-badge variant="accent">@${domainArg}</idp-badge>`)}
548
+ </div>
549
+ `}
439
550
  <div class="chip-row">
440
- ${connectionArg.emailDomains.map((domainArg) => html`<idp-badge variant="accent">@${domainArg}</idp-badge>`)}
441
551
  ${connectionArg.groupMappings.map(
442
552
  (mappingArg) => html`<idp-badge variant="outline">${mappingArg.idpGroup} → ${mappingArg.orgRoles.join(', ')}</idp-badge>`,
443
553
  )}
@@ -548,7 +658,8 @@ export class IdpSsoConnectionForm extends DeesElement {
548
658
  <div class="title">SAML single sign-on</div>
549
659
  <div class="muted">
550
660
  Let members sign in through your organisation's identity provider. Users entering a
551
- matching email domain are routed to your IdP automatically.
661
+ verified email domain are routed to your IdP automatically. Add the shown DNS TXT
662
+ record and verify ownership before account linking or just-in-time provisioning starts.
552
663
  </div>
553
664
  </div>
554
665
  ${!this.formOpen