@structured-id/ui-core 0.1.5 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -11010,6 +11010,14 @@ var CreateProfileRequest$Type = class extends _runtime.MessageType {
11010
11010
  T: 9
11011
11011
  /*ScalarType.STRING*/
11012
11012
  },
11013
+ {
11014
+ no: 17,
11015
+ name: "phone",
11016
+ kind: "scalar",
11017
+ opt: true,
11018
+ T: 9
11019
+ /*ScalarType.STRING*/
11020
+ },
11013
11021
  {
11014
11022
  no: 3,
11015
11023
  name: "given_name",
@@ -11090,6 +11098,10 @@ var CreateProfileRequest$Type = class extends _runtime.MessageType {
11090
11098
  2:
11091
11099
  message.email = reader.string();
11092
11100
  break;
11101
+ case /* optional string phone */
11102
+ 17:
11103
+ message.phone = reader.string();
11104
+ break;
11093
11105
  case /* optional string given_name */
11094
11106
  3:
11095
11107
  message.givenName = reader.string();
@@ -11160,6 +11172,8 @@ var CreateProfileRequest$Type = class extends _runtime.MessageType {
11160
11172
  writer.tag(15, _runtime.WireType.LengthDelimited).string(message.honorificPrefix);
11161
11173
  if (message.honorificSuffix !== void 0)
11162
11174
  writer.tag(16, _runtime.WireType.LengthDelimited).string(message.honorificSuffix);
11175
+ if (message.phone !== void 0)
11176
+ writer.tag(17, _runtime.WireType.LengthDelimited).string(message.phone);
11163
11177
  let u = options.writeUnknownFields;
11164
11178
  if (u !== false)
11165
11179
  (u == true ? _runtime.UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
package/dist/index.d.cts CHANGED
@@ -5588,18 +5588,34 @@ declare class CreateProfileRequest$Type extends MessageType<CreateProfileRequest
5588
5588
  internalBinaryWrite(message: CreateProfileRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
5589
5589
  }
5590
5590
  /**
5591
+ * Primary identifier — user provides exactly ONE at signup.
5592
+ * Additional identifiers can be added later via profile settings.
5593
+ * Username is a valuable identity — never auto-generated.
5594
+ *
5591
5595
  * @generated from protobuf message sid.v1.identity.CreateProfileRequest
5592
5596
  */
5593
5597
  interface CreateProfileRequest {
5594
5598
  /**
5599
+ * Login handle (no '@', no '+'). Global ('alice') or federated ('alice#acme.corp').
5600
+ *
5595
5601
  * @generated from protobuf field: optional string username = 1
5596
5602
  */
5597
5603
  username?: string;
5598
5604
  /**
5605
+ * Email address. Requires OTP/magic-link verification after signup.
5606
+ *
5599
5607
  * @generated from protobuf field: optional string email = 2
5600
5608
  */
5601
5609
  email?: string;
5602
5610
  /**
5611
+ * Phone number in E.164 format (+380501234567). Requires OTP verification after signup.
5612
+ *
5613
+ * @generated from protobuf field: optional string phone = 17
5614
+ */
5615
+ phone?: string;
5616
+ /**
5617
+ * Structured name components (OIDC + SCIM compliant). All optional.
5618
+ *
5603
5619
  * @generated from protobuf field: optional string given_name = 3
5604
5620
  */
5605
5621
  givenName?: string;
package/dist/index.d.ts CHANGED
@@ -5588,18 +5588,34 @@ declare class CreateProfileRequest$Type extends MessageType<CreateProfileRequest
5588
5588
  internalBinaryWrite(message: CreateProfileRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter;
5589
5589
  }
5590
5590
  /**
5591
+ * Primary identifier — user provides exactly ONE at signup.
5592
+ * Additional identifiers can be added later via profile settings.
5593
+ * Username is a valuable identity — never auto-generated.
5594
+ *
5591
5595
  * @generated from protobuf message sid.v1.identity.CreateProfileRequest
5592
5596
  */
5593
5597
  interface CreateProfileRequest {
5594
5598
  /**
5599
+ * Login handle (no '@', no '+'). Global ('alice') or federated ('alice#acme.corp').
5600
+ *
5595
5601
  * @generated from protobuf field: optional string username = 1
5596
5602
  */
5597
5603
  username?: string;
5598
5604
  /**
5605
+ * Email address. Requires OTP/magic-link verification after signup.
5606
+ *
5599
5607
  * @generated from protobuf field: optional string email = 2
5600
5608
  */
5601
5609
  email?: string;
5602
5610
  /**
5611
+ * Phone number in E.164 format (+380501234567). Requires OTP verification after signup.
5612
+ *
5613
+ * @generated from protobuf field: optional string phone = 17
5614
+ */
5615
+ phone?: string;
5616
+ /**
5617
+ * Structured name components (OIDC + SCIM compliant). All optional.
5618
+ *
5603
5619
  * @generated from protobuf field: optional string given_name = 3
5604
5620
  */
5605
5621
  givenName?: string;
package/dist/index.js CHANGED
@@ -11010,6 +11010,14 @@ var CreateProfileRequest$Type = class extends MessageType5 {
11010
11010
  T: 9
11011
11011
  /*ScalarType.STRING*/
11012
11012
  },
11013
+ {
11014
+ no: 17,
11015
+ name: "phone",
11016
+ kind: "scalar",
11017
+ opt: true,
11018
+ T: 9
11019
+ /*ScalarType.STRING*/
11020
+ },
11013
11021
  {
11014
11022
  no: 3,
11015
11023
  name: "given_name",
@@ -11090,6 +11098,10 @@ var CreateProfileRequest$Type = class extends MessageType5 {
11090
11098
  2:
11091
11099
  message.email = reader.string();
11092
11100
  break;
11101
+ case /* optional string phone */
11102
+ 17:
11103
+ message.phone = reader.string();
11104
+ break;
11093
11105
  case /* optional string given_name */
11094
11106
  3:
11095
11107
  message.givenName = reader.string();
@@ -11160,6 +11172,8 @@ var CreateProfileRequest$Type = class extends MessageType5 {
11160
11172
  writer.tag(15, WireType4.LengthDelimited).string(message.honorificPrefix);
11161
11173
  if (message.honorificSuffix !== void 0)
11162
11174
  writer.tag(16, WireType4.LengthDelimited).string(message.honorificSuffix);
11175
+ if (message.phone !== void 0)
11176
+ writer.tag(17, WireType4.LengthDelimited).string(message.phone);
11163
11177
  let u = options.writeUnknownFields;
11164
11178
  if (u !== false)
11165
11179
  (u == true ? UnknownFieldHandler5.onWrite : u)(this.typeName, message, writer);
package/package.json CHANGED
@@ -1,12 +1,18 @@
1
1
  {
2
2
  "name": "@structured-id/ui-core",
3
- "version": "0.1.5",
3
+ "version": "1.0.1",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public",
7
7
  "registry": "https://registry.npmjs.org"
8
8
  },
9
9
  "description": "Shared UI package for StructuredID — proto clients, Vue 3 composables, Pinia stores, components.",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "git+https://github.com/structured-id/ui-core.git"
13
+ },
14
+ "homepage": "https://github.com/structured-id/ui-core",
15
+ "bugs": "https://github.com/structured-id/ui-core/issues",
10
16
  "main": "dist/index.cjs",
11
17
  "module": "dist/index.js",
12
18
  "types": "dist/index.d.ts",
@@ -2,7 +2,7 @@
2
2
  // @generated from protobuf file "google/api/http.proto" (package "google.api", syntax proto3)
3
3
  // tslint:disable
4
4
  //
5
- // Copyright 2025 Google LLC
5
+ // Copyright 2026 Google LLC
6
6
  //
7
7
  // Licensed under the Apache License, Version 2.0 (the "License");
8
8
  // you may not use this file except in compliance with the License.
@@ -288,43 +288,103 @@ export interface SetFeatureRequest {
288
288
  */
289
289
  export interface EmailSettings {
290
290
  /**
291
+ * SMTP server hostname (e.g. "smtp.office365.com").
292
+ *
291
293
  * @generated from protobuf field: string smtp_host = 1
292
294
  */
293
295
  smtpHost: string;
294
296
  /**
297
+ * SMTP port. Canonical defaults: 587 (STARTTLS), 465 (SSL/TLS), 25 (none).
298
+ *
295
299
  * @generated from protobuf field: uint32 smtp_port = 2
296
300
  */
297
301
  smtpPort: number;
298
302
  /**
303
+ * Envelope From / From header address (e.g. "noreply@example.com").
304
+ *
299
305
  * @generated from protobuf field: string from_address = 3
300
306
  */
301
307
  fromAddress: string;
302
308
  /**
309
+ * Display name in From header (e.g. "Example IdP").
310
+ *
303
311
  * @generated from protobuf field: string from_display_name = 4
304
312
  */
305
313
  fromDisplayName: string;
306
314
  /**
315
+ * Optional Reply-To address. Empty = none.
316
+ *
307
317
  * @generated from protobuf field: string reply_to = 5
308
318
  */
309
319
  replyTo: string;
310
320
  /**
321
+ * TLS/encryption mode for the SMTP connection.
322
+ *
311
323
  * @generated from protobuf field: sid.v1.admin.SmtpEncryptionType encryption = 6
312
324
  */
313
325
  encryption: SmtpEncryptionType;
314
326
  /**
327
+ * Authentication method.
328
+ *
315
329
  * @generated from protobuf field: sid.v1.admin.SmtpAuthType auth_type = 7
316
330
  */
317
331
  authType: SmtpAuthType;
318
332
  /**
319
- * Credentials (only set on update, never returned in get).
333
+ * SMTP username for PLAIN/LOGIN or the email address for XOAUTH2.
334
+ * Only set on update; never returned in GetEmailSettings.
320
335
  *
321
336
  * @generated from protobuf field: string username = 8
322
337
  */
323
338
  username: string;
324
339
  /**
340
+ * SMTP password for PLAIN/LOGIN. Write-only — never returned in GetEmailSettings.
341
+ *
325
342
  * @generated from protobuf field: string password = 9
326
343
  */
327
344
  password: string;
345
+ // ── XOAUTH2 fields (auth_type == SMTP_AUTH_TYPE_XOAUTH2 only) ──────────
346
+
347
+ /**
348
+ * OAuth2 provider: "m365" (Microsoft 365) or "google" (Google Workspace).
349
+ *
350
+ * @generated from protobuf field: sid.v1.admin.XOAuth2ProviderType xoauth2_provider = 10
351
+ */
352
+ xoauth2Provider: XOAuth2ProviderType;
353
+ /**
354
+ * Microsoft 365: Azure AD tenant ID (GUID or domain name).
355
+ * Required when xoauth2_provider == M365.
356
+ *
357
+ * @generated from protobuf field: string xoauth2_tenant_id = 11
358
+ */
359
+ xoauth2TenantId: string;
360
+ /**
361
+ * OAuth2 client ID (app registration). Required for both M365 and Google.
362
+ *
363
+ * @generated from protobuf field: string xoauth2_client_id = 12
364
+ */
365
+ xoauth2ClientId: string;
366
+ /**
367
+ * OAuth2 client secret. Write-only — never returned in GetEmailSettings.
368
+ * M365: Azure AD client secret. Google: not used (service account key instead).
369
+ *
370
+ * @generated from protobuf field: string xoauth2_client_secret = 13
371
+ */
372
+ xoauth2ClientSecret: string;
373
+ /**
374
+ * Google Workspace: service account key JSON. Write-only.
375
+ * Contains private key used to sign JWT assertions for the token exchange.
376
+ *
377
+ * @generated from protobuf field: string xoauth2_service_account_key = 14
378
+ */
379
+ xoauth2ServiceAccountKey: string;
380
+ /**
381
+ * Optional override for the OAuth2 token endpoint URL.
382
+ * Defaults: M365 = https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
383
+ * Google = https://oauth2.googleapis.com/token
384
+ *
385
+ * @generated from protobuf field: string xoauth2_token_endpoint = 15
386
+ */
387
+ xoauth2TokenEndpoint: string;
328
388
  }
329
389
  /**
330
390
  * @generated from protobuf message sid.v1.admin.TestEmailResponse
@@ -607,7 +667,42 @@ export enum SmtpAuthType {
607
667
  /**
608
668
  * @generated from protobuf enum value: SMTP_AUTH_TYPE_USERNAME_PASSWORD = 2;
609
669
  */
610
- USERNAME_PASSWORD = 2
670
+ USERNAME_PASSWORD = 2,
671
+ /**
672
+ * OAuth2 bearer token via XOAUTH2 SASL mechanism.
673
+ * Required for Microsoft 365 (App Password deprecated Oct 2022) and
674
+ * Google Workspace SMTP relay. Credentials: OAuth2 client credentials flow
675
+ * (M365) or service account JWT exchange (Google).
676
+ *
677
+ * @generated from protobuf enum value: SMTP_AUTH_TYPE_XOAUTH2 = 3;
678
+ */
679
+ XOAUTH2 = 3
680
+ }
681
+ /**
682
+ * OAuth2 provider for XOAUTH2 SMTP authentication.
683
+ *
684
+ * @generated from protobuf enum sid.v1.admin.XOAuth2ProviderType
685
+ */
686
+ export enum XOAuth2ProviderType {
687
+ /**
688
+ * @generated from protobuf enum value: XOAUTH2_PROVIDER_TYPE_UNSPECIFIED = 0;
689
+ */
690
+ XOAUTH2_PROVIDER_TYPE_UNSPECIFIED = 0,
691
+ /**
692
+ * Microsoft 365 via Azure AD OAuth2 client credentials flow.
693
+ * Required config: xoauth2_tenant_id, xoauth2_client_id, xoauth2_client_secret.
694
+ *
695
+ * @generated from protobuf enum value: XOAUTH2_PROVIDER_TYPE_M365 = 1;
696
+ */
697
+ XOAUTH2_PROVIDER_TYPE_M365 = 1,
698
+ /**
699
+ * Google Workspace via service account JWT bearer token exchange.
700
+ * Required config: xoauth2_client_id (service account email),
701
+ * xoauth2_service_account_key (JSON key file content).
702
+ *
703
+ * @generated from protobuf enum value: XOAUTH2_PROVIDER_TYPE_GOOGLE = 2;
704
+ */
705
+ XOAUTH2_PROVIDER_TYPE_GOOGLE = 2
611
706
  }
612
707
  /**
613
708
  * @generated from protobuf enum sid.v1.admin.ImportConflictStrategy
@@ -1483,7 +1578,13 @@ class EmailSettings$Type extends MessageType<EmailSettings> {
1483
1578
  { no: 6, name: "encryption", kind: "enum", T: () => ["sid.v1.admin.SmtpEncryptionType", SmtpEncryptionType, "SMTP_ENCRYPTION_TYPE_"] },
1484
1579
  { no: 7, name: "auth_type", kind: "enum", T: () => ["sid.v1.admin.SmtpAuthType", SmtpAuthType, "SMTP_AUTH_TYPE_"] },
1485
1580
  { no: 8, name: "username", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
1486
- { no: 9, name: "password", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
1581
+ { no: 9, name: "password", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
1582
+ { no: 10, name: "xoauth2_provider", kind: "enum", T: () => ["sid.v1.admin.XOAuth2ProviderType", XOAuth2ProviderType] },
1583
+ { no: 11, name: "xoauth2_tenant_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
1584
+ { no: 12, name: "xoauth2_client_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
1585
+ { no: 13, name: "xoauth2_client_secret", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
1586
+ { no: 14, name: "xoauth2_service_account_key", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
1587
+ { no: 15, name: "xoauth2_token_endpoint", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
1487
1588
  ]);
1488
1589
  }
1489
1590
  create(value?: PartialMessage<EmailSettings>): EmailSettings {
@@ -1497,6 +1598,12 @@ class EmailSettings$Type extends MessageType<EmailSettings> {
1497
1598
  message.authType = 0;
1498
1599
  message.username = "";
1499
1600
  message.password = "";
1601
+ message.xoauth2Provider = 0;
1602
+ message.xoauth2TenantId = "";
1603
+ message.xoauth2ClientId = "";
1604
+ message.xoauth2ClientSecret = "";
1605
+ message.xoauth2ServiceAccountKey = "";
1606
+ message.xoauth2TokenEndpoint = "";
1500
1607
  if (value !== undefined)
1501
1608
  reflectionMergePartial<EmailSettings>(this, message, value);
1502
1609
  return message;
@@ -1533,6 +1640,24 @@ class EmailSettings$Type extends MessageType<EmailSettings> {
1533
1640
  case /* string password */ 9:
1534
1641
  message.password = reader.string();
1535
1642
  break;
1643
+ case /* sid.v1.admin.XOAuth2ProviderType xoauth2_provider */ 10:
1644
+ message.xoauth2Provider = reader.int32();
1645
+ break;
1646
+ case /* string xoauth2_tenant_id */ 11:
1647
+ message.xoauth2TenantId = reader.string();
1648
+ break;
1649
+ case /* string xoauth2_client_id */ 12:
1650
+ message.xoauth2ClientId = reader.string();
1651
+ break;
1652
+ case /* string xoauth2_client_secret */ 13:
1653
+ message.xoauth2ClientSecret = reader.string();
1654
+ break;
1655
+ case /* string xoauth2_service_account_key */ 14:
1656
+ message.xoauth2ServiceAccountKey = reader.string();
1657
+ break;
1658
+ case /* string xoauth2_token_endpoint */ 15:
1659
+ message.xoauth2TokenEndpoint = reader.string();
1660
+ break;
1536
1661
  default:
1537
1662
  let u = options.readUnknownField;
1538
1663
  if (u === "throw")
@@ -1572,6 +1697,24 @@ class EmailSettings$Type extends MessageType<EmailSettings> {
1572
1697
  /* string password = 9; */
1573
1698
  if (message.password !== "")
1574
1699
  writer.tag(9, WireType.LengthDelimited).string(message.password);
1700
+ /* sid.v1.admin.XOAuth2ProviderType xoauth2_provider = 10; */
1701
+ if (message.xoauth2Provider !== 0)
1702
+ writer.tag(10, WireType.Varint).int32(message.xoauth2Provider);
1703
+ /* string xoauth2_tenant_id = 11; */
1704
+ if (message.xoauth2TenantId !== "")
1705
+ writer.tag(11, WireType.LengthDelimited).string(message.xoauth2TenantId);
1706
+ /* string xoauth2_client_id = 12; */
1707
+ if (message.xoauth2ClientId !== "")
1708
+ writer.tag(12, WireType.LengthDelimited).string(message.xoauth2ClientId);
1709
+ /* string xoauth2_client_secret = 13; */
1710
+ if (message.xoauth2ClientSecret !== "")
1711
+ writer.tag(13, WireType.LengthDelimited).string(message.xoauth2ClientSecret);
1712
+ /* string xoauth2_service_account_key = 14; */
1713
+ if (message.xoauth2ServiceAccountKey !== "")
1714
+ writer.tag(14, WireType.LengthDelimited).string(message.xoauth2ServiceAccountKey);
1715
+ /* string xoauth2_token_endpoint = 15; */
1716
+ if (message.xoauth2TokenEndpoint !== "")
1717
+ writer.tag(15, WireType.LengthDelimited).string(message.xoauth2TokenEndpoint);
1575
1718
  let u = options.writeUnknownFields;
1576
1719
  if (u !== false)
1577
1720
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -223,6 +223,10 @@ export interface OpaqueLoginFinishResponse {
223
223
  // Graceful degradation: if client lacks WASM capability, zkpp_proof is empty.
224
224
  // Server sets zkpp_verified=false and starts a 24h deferred verification window
225
225
  // (see SubmitDeferredZkProof RPC).
226
+ //
227
+ // Reference: Prudnikov, D. (2026). "Zero-Knowledge Proof System for Password Policy
228
+ // Verification in Asymmetric Password-Authenticated Key Exchange."
229
+ // doi:10.5281/zenodo.19387561 — https://doi.org/10.5281/zenodo.19387561
226
230
  // ══════════════════════════════════════════════════════════════════════════
227
231
 
228
232
  /**
@@ -444,18 +444,34 @@ export interface Session {
444
444
  // Request/Response messages.
445
445
 
446
446
  /**
447
+ * Primary identifier — user provides exactly ONE at signup.
448
+ * Additional identifiers can be added later via profile settings.
449
+ * Username is a valuable identity — never auto-generated.
450
+ *
447
451
  * @generated from protobuf message sid.v1.identity.CreateProfileRequest
448
452
  */
449
453
  export interface CreateProfileRequest {
450
454
  /**
455
+ * Login handle (no '@', no '+'). Global ('alice') or federated ('alice#acme.corp').
456
+ *
451
457
  * @generated from protobuf field: optional string username = 1
452
458
  */
453
459
  username?: string;
454
460
  /**
461
+ * Email address. Requires OTP/magic-link verification after signup.
462
+ *
455
463
  * @generated from protobuf field: optional string email = 2
456
464
  */
457
465
  email?: string;
458
466
  /**
467
+ * Phone number in E.164 format (+380501234567). Requires OTP verification after signup.
468
+ *
469
+ * @generated from protobuf field: optional string phone = 17
470
+ */
471
+ phone?: string;
472
+ /**
473
+ * Structured name components (OIDC + SCIM compliant). All optional.
474
+ *
459
475
  * @generated from protobuf field: optional string given_name = 3
460
476
  */
461
477
  givenName?: string;
@@ -2515,6 +2531,7 @@ class CreateProfileRequest$Type extends MessageType<CreateProfileRequest> {
2515
2531
  super("sid.v1.identity.CreateProfileRequest", [
2516
2532
  { no: 1, name: "username", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
2517
2533
  { no: 2, name: "email", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
2534
+ { no: 17, name: "phone", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
2518
2535
  { no: 3, name: "given_name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
2519
2536
  { no: 13, name: "family_name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
2520
2537
  { no: 14, name: "middle_name", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ },
@@ -2544,6 +2561,9 @@ class CreateProfileRequest$Type extends MessageType<CreateProfileRequest> {
2544
2561
  case /* optional string email */ 2:
2545
2562
  message.email = reader.string();
2546
2563
  break;
2564
+ case /* optional string phone */ 17:
2565
+ message.phone = reader.string();
2566
+ break;
2547
2567
  case /* optional string given_name */ 3:
2548
2568
  message.givenName = reader.string();
2549
2569
  break;
@@ -2616,6 +2636,9 @@ class CreateProfileRequest$Type extends MessageType<CreateProfileRequest> {
2616
2636
  /* optional string honorific_suffix = 16; */
2617
2637
  if (message.honorificSuffix !== undefined)
2618
2638
  writer.tag(16, WireType.LengthDelimited).string(message.honorificSuffix);
2639
+ /* optional string phone = 17; */
2640
+ if (message.phone !== undefined)
2641
+ writer.tag(17, WireType.LengthDelimited).string(message.phone);
2619
2642
  let u = options.writeUnknownFields;
2620
2643
  if (u !== false)
2621
2644
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -127,6 +127,17 @@ export interface Application {
127
127
  * @generated from protobuf field: bool dynamically_registered = 17
128
128
  */
129
129
  dynamicallyRegistered: boolean;
130
+ /**
131
+ * Organization this client belongs to. Used as the binding grouping
132
+ * key for pairwise sub derivation (org-model.md §Binding Grouping):
133
+ * sub = HMAC(salt, profile_id || org_id || "sid-pairwise-sub-v1")
134
+ * All clients within the same org produce the same BindingId for a
135
+ * given profile — domain changes don't affect sub stability.
136
+ * Empty = no org association (legacy CE clients before org model).
137
+ *
138
+ * @generated from protobuf field: optional string org_id = 18
139
+ */
140
+ orgId?: string;
130
141
  }
131
142
  /**
132
143
  * Initial Access Token constrains DCR registrations.
@@ -289,6 +300,13 @@ export interface CreateApplicationRequest {
289
300
  * @generated from protobuf field: repeated string grant_types = 6
290
301
  */
291
302
  grantTypes: string[];
303
+ /**
304
+ * Organization to associate this client with (for pairwise sub derivation).
305
+ * Empty = inherit from project's org (if any).
306
+ *
307
+ * @generated from protobuf field: optional string org_id = 7
308
+ */
309
+ orgId?: string;
292
310
  }
293
311
  /**
294
312
  * Returns client_secret in plaintext (only on creation, never stored).
@@ -829,7 +847,8 @@ class Application$Type extends MessageType<Application> {
829
847
  { no: 14, name: "contacts", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
830
848
  { no: 15, name: "client_id_issued_at", kind: "message", T: () => Timestamp },
831
849
  { no: 16, name: "client_secret_expires_at", kind: "message", T: () => Timestamp },
832
- { no: 17, name: "dynamically_registered", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
850
+ { no: 17, name: "dynamically_registered", kind: "scalar", T: 8 /*ScalarType.BOOL*/ },
851
+ { no: 18, name: "org_id", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }
833
852
  ]);
834
853
  }
835
854
  create(value?: PartialMessage<Application>): Application {
@@ -907,6 +926,9 @@ class Application$Type extends MessageType<Application> {
907
926
  case /* bool dynamically_registered */ 17:
908
927
  message.dynamicallyRegistered = reader.bool();
909
928
  break;
929
+ case /* optional string org_id */ 18:
930
+ message.orgId = reader.string();
931
+ break;
910
932
  default:
911
933
  let u = options.readUnknownField;
912
934
  if (u === "throw")
@@ -970,6 +992,9 @@ class Application$Type extends MessageType<Application> {
970
992
  /* bool dynamically_registered = 17; */
971
993
  if (message.dynamicallyRegistered !== false)
972
994
  writer.tag(17, WireType.Varint).bool(message.dynamicallyRegistered);
995
+ /* optional string org_id = 18; */
996
+ if (message.orgId !== undefined)
997
+ writer.tag(18, WireType.LengthDelimited).string(message.orgId);
973
998
  let u = options.writeUnknownFields;
974
999
  if (u !== false)
975
1000
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -1442,7 +1467,8 @@ class CreateApplicationRequest$Type extends MessageType<CreateApplicationRequest
1442
1467
  { no: 3, name: "type", kind: "enum", T: () => ["sid.v1.projects.ApplicationType", ApplicationType, "APPLICATION_TYPE_"] },
1443
1468
  { no: 4, name: "redirect_uris", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
1444
1469
  { no: 5, name: "allowed_scopes", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
1445
- { no: 6, name: "grant_types", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }
1470
+ { no: 6, name: "grant_types", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ },
1471
+ { no: 7, name: "org_id", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }
1446
1472
  ]);
1447
1473
  }
1448
1474
  create(value?: PartialMessage<CreateApplicationRequest>): CreateApplicationRequest {
@@ -1480,6 +1506,9 @@ class CreateApplicationRequest$Type extends MessageType<CreateApplicationRequest
1480
1506
  case /* repeated string grant_types */ 6:
1481
1507
  message.grantTypes.push(reader.string());
1482
1508
  break;
1509
+ case /* optional string org_id */ 7:
1510
+ message.orgId = reader.string();
1511
+ break;
1483
1512
  default:
1484
1513
  let u = options.readUnknownField;
1485
1514
  if (u === "throw")
@@ -1510,6 +1539,9 @@ class CreateApplicationRequest$Type extends MessageType<CreateApplicationRequest
1510
1539
  /* repeated string grant_types = 6; */
1511
1540
  for (let i = 0; i < message.grantTypes.length; i++)
1512
1541
  writer.tag(6, WireType.LengthDelimited).string(message.grantTypes[i]);
1542
+ /* optional string org_id = 7; */
1543
+ if (message.orgId !== undefined)
1544
+ writer.tag(7, WireType.LengthDelimited).string(message.orgId);
1513
1545
  let u = options.writeUnknownFields;
1514
1546
  if (u !== false)
1515
1547
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);