@structured-id/ui-core 1.2.0 → 2.0.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.
Files changed (101) hide show
  1. package/README.md +9 -5
  2. package/dist/browser-vp/index.d.cts +0 -11
  3. package/dist/browser-vp/index.d.ts +0 -11
  4. package/dist/index.cjs +13721 -9514
  5. package/dist/index.d.cts +4362 -2375
  6. package/dist/index.d.ts +4362 -2375
  7. package/dist/index.js +13937 -9730
  8. package/package.json +3 -3
  9. package/src/browser-vp/crypto.ts +0 -1
  10. package/src/browser-vp/index.ts +0 -2
  11. package/src/browser-vp/prf.ts +0 -2
  12. package/src/browser-vp/storage.ts +0 -2
  13. package/src/browser-vp/types.ts +0 -2
  14. package/src/browser-vp/vp.ts +0 -2
  15. package/src/composables/index.ts +6 -1
  16. package/src/composables/useAccountTransport.test.ts +121 -0
  17. package/src/composables/useAccountTransport.ts +69 -0
  18. package/src/composables/useBffAuth.ts +44 -34
  19. package/src/generated/google/api/httpbody.ts +159 -0
  20. package/src/generated/google/protobuf/any.ts +326 -0
  21. package/src/generated/google/rpc/error_details.ts +1386 -0
  22. package/src/generated/google/rpc/status.ts +127 -0
  23. package/src/generated/sid/v1/account/account.ts +1 -1
  24. package/src/generated/sid/v1/admin/admin.client.ts +15 -12
  25. package/src/generated/sid/v1/admin/admin.ts +24 -89
  26. package/src/generated/sid/v1/admin/enrollment.client.ts +24 -12
  27. package/src/generated/sid/v1/admin/enrollment.ts +65 -3
  28. package/src/generated/sid/v1/admin/events.client.ts +8 -8
  29. package/src/generated/sid/v1/admin/flow.ts +1 -1
  30. package/src/generated/sid/v1/admin/keys.ts +1 -1
  31. package/src/generated/sid/v1/admin/notifications.client.ts +12 -6
  32. package/src/generated/sid/v1/admin/notifications.ts +11 -70
  33. package/src/generated/sid/v1/admin/operations.ts +20 -35
  34. package/src/generated/sid/v1/admin/organizations.client.ts +2 -2
  35. package/src/generated/sid/v1/admin/organizations.ts +15 -32
  36. package/src/generated/sid/v1/admin/provisioning.client.ts +232 -0
  37. package/src/generated/sid/v1/admin/provisioning.ts +1383 -0
  38. package/src/generated/sid/v1/admin/scopes.ts +1 -1
  39. package/src/generated/sid/v1/admin/security.client.ts +22 -24
  40. package/src/generated/sid/v1/admin/security.ts +13 -22
  41. package/src/generated/sid/v1/admin/settings.client.ts +29 -18
  42. package/src/generated/sid/v1/admin/settings.ts +2 -82
  43. package/src/generated/sid/v1/attestation/attestation.client.ts +6 -6
  44. package/src/generated/sid/v1/attestation/attestation.ts +8 -8
  45. package/src/generated/sid/v1/authn/auth.client.ts +101 -58
  46. package/src/generated/sid/v1/authn/auth.ts +842 -414
  47. package/src/generated/sid/v1/authn/flows.ts +0 -12
  48. package/src/generated/sid/v1/authn/issuer.client.ts +489 -0
  49. package/src/generated/sid/v1/authn/issuer.ts +1600 -0
  50. package/src/generated/sid/v1/authn/password_history.client.ts +57 -0
  51. package/src/generated/sid/v1/authn/password_history.ts +578 -0
  52. package/src/generated/sid/v1/authn/system_integration.client.ts +73 -0
  53. package/src/generated/sid/v1/authn/system_integration.ts +218 -0
  54. package/src/generated/sid/v1/authz/authz.ts +1498 -317
  55. package/src/generated/sid/v1/authz/forward_auth.client.ts +97 -0
  56. package/src/generated/sid/v1/authz/forward_auth.ts +79 -0
  57. package/src/generated/sid/v1/authz/governance.client.ts +2 -2
  58. package/src/generated/sid/v1/authz/governance.ts +61 -4
  59. package/src/generated/sid/v1/common/errors.ts +532 -6
  60. package/src/generated/sid/v1/events/event_stream.client.ts +2 -2
  61. package/src/generated/sid/v1/events/event_stream.ts +2 -1
  62. package/src/generated/sid/v1/identity/identity.ts +98 -58
  63. package/src/generated/sid/v1/ids/ids.ts +395 -0
  64. package/src/generated/sid/v1/machine/machine_user.ts +0 -36
  65. package/src/generated/sid/v1/machine/pat.client.ts +2 -19
  66. package/src/generated/sid/v1/machine/pat.ts +1 -186
  67. package/src/generated/sid/v1/projects/projects.client.ts +137 -19
  68. package/src/generated/sid/v1/projects/projects.ts +2105 -405
  69. package/src/generated/sid/v1/scim/scim.client.ts +248 -2
  70. package/src/generated/sid/v1/scim/scim.ts +153 -14
  71. package/src/generated/sid/v1/test/test.ts +1 -1
  72. package/src/i18n/index.ts +0 -11
  73. package/src/index.ts +36 -2
  74. package/src/package-exports.test.ts +18 -0
  75. package/src/profile/components/SidLoginForm.vue +5 -2
  76. package/src/profile/components/SidRegistrationForm.test.ts +58 -1
  77. package/src/profile/components/SidRegistrationForm.vue +110 -12
  78. package/src/profile/components/index.ts +4 -0
  79. package/src/profile/composables/index.ts +2 -1
  80. package/src/profile/composables/useAccountApi.ts +20 -7
  81. package/src/profile/composables/useAuth.test.ts +453 -0
  82. package/src/profile/composables/useAuth.ts +414 -0
  83. package/src/profile/composables/useAuthApi.opaque.test.ts +18 -0
  84. package/src/profile/composables/useAuthApi.ts +188 -20
  85. package/src/profile/composables/useEnrollmentApi.test.ts +33 -0
  86. package/src/profile/composables/useEnrollmentApi.ts +26 -0
  87. package/src/profile/composables/useIdentityApi.ts +17 -7
  88. package/src/profile/composables/useLoginSuccess.test.ts +97 -3
  89. package/src/profile/composables/useLoginSuccess.ts +80 -22
  90. package/src/profile/composables/useSecurityLevel.test.ts +10 -3
  91. package/src/profile/composables/useSecurityLevel.ts +12 -3
  92. package/src/quasar/SidPrincipalInput.vue +4 -7
  93. package/src/utils/normalizePrincipal.test.ts +19 -5
  94. package/src/utils/normalizePrincipal.ts +7 -9
  95. package/src/utils/rpcRefusal.test.ts +151 -0
  96. package/src/utils/rpcRefusal.ts +252 -0
  97. package/src/utils/validators.test.ts +9 -0
  98. package/src/utils/validators.ts +14 -2
  99. package/src/composables/useAuth.ts +0 -40
  100. package/src/profile/composables/useOpaqueAuth.test.ts +0 -290
  101. package/src/profile/composables/useOpaqueAuth.ts +0 -191
@@ -0,0 +1,127 @@
1
+ // @generated by protobuf-ts 2.11.1 with parameter client_generic,generate_dependencies
2
+ // @generated from protobuf file "google/rpc/status.proto" (package "google.rpc", syntax proto3)
3
+ // tslint:disable
4
+ //
5
+ // Copyright 2025 Google LLC
6
+ //
7
+ // Licensed under the Apache License, Version 2.0 (the "License");
8
+ // you may not use this file except in compliance with the License.
9
+ // You may obtain a copy of the License at
10
+ //
11
+ // http://www.apache.org/licenses/LICENSE-2.0
12
+ //
13
+ // Unless required by applicable law or agreed to in writing, software
14
+ // distributed under the License is distributed on an "AS IS" BASIS,
15
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ // See the License for the specific language governing permissions and
17
+ // limitations under the License.
18
+ //
19
+ import type { BinaryWriteOptions } from "@protobuf-ts/runtime";
20
+ import type { IBinaryWriter } from "@protobuf-ts/runtime";
21
+ import { WireType } from "@protobuf-ts/runtime";
22
+ import type { BinaryReadOptions } from "@protobuf-ts/runtime";
23
+ import type { IBinaryReader } from "@protobuf-ts/runtime";
24
+ import { UnknownFieldHandler } from "@protobuf-ts/runtime";
25
+ import type { PartialMessage } from "@protobuf-ts/runtime";
26
+ import { reflectionMergePartial } from "@protobuf-ts/runtime";
27
+ import { MessageType } from "@protobuf-ts/runtime";
28
+ import { Any } from "../protobuf/any";
29
+ /**
30
+ * The `Status` type defines a logical error model that is suitable for
31
+ * different programming environments, including REST APIs and RPC APIs. It is
32
+ * used by [gRPC](https://github.com/grpc). Each `Status` message contains
33
+ * three pieces of data: error code, error message, and error details.
34
+ *
35
+ * You can find out more about this error model and how to work with it in the
36
+ * [API Design Guide](https://cloud.google.com/apis/design/errors).
37
+ *
38
+ * @generated from protobuf message google.rpc.Status
39
+ */
40
+ export interface Status {
41
+ /**
42
+ * The status code, which should be an enum value of
43
+ * [google.rpc.Code][google.rpc.Code].
44
+ *
45
+ * @generated from protobuf field: int32 code = 1
46
+ */
47
+ code: number;
48
+ /**
49
+ * A developer-facing error message, which should be in English. Any
50
+ * user-facing error message should be localized and sent in the
51
+ * [google.rpc.Status.details][google.rpc.Status.details] field, or localized
52
+ * by the client.
53
+ *
54
+ * @generated from protobuf field: string message = 2
55
+ */
56
+ message: string;
57
+ /**
58
+ * A list of messages that carry the error details. There is a common set of
59
+ * message types for APIs to use.
60
+ *
61
+ * @generated from protobuf field: repeated google.protobuf.Any details = 3
62
+ */
63
+ details: Any[];
64
+ }
65
+ // @generated message type with reflection information, may provide speed optimized methods
66
+ class Status$Type extends MessageType<Status> {
67
+ constructor() {
68
+ super("google.rpc.Status", [
69
+ { no: 1, name: "code", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
70
+ { no: 2, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
71
+ { no: 3, name: "details", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => Any }
72
+ ]);
73
+ }
74
+ create(value?: PartialMessage<Status>): Status {
75
+ const message = globalThis.Object.create((this.messagePrototype!));
76
+ message.code = 0;
77
+ message.message = "";
78
+ message.details = [];
79
+ if (value !== undefined)
80
+ reflectionMergePartial<Status>(this, message, value);
81
+ return message;
82
+ }
83
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Status): Status {
84
+ let message = target ?? this.create(), end = reader.pos + length;
85
+ while (reader.pos < end) {
86
+ let [fieldNo, wireType] = reader.tag();
87
+ switch (fieldNo) {
88
+ case /* int32 code */ 1:
89
+ message.code = reader.int32();
90
+ break;
91
+ case /* string message */ 2:
92
+ message.message = reader.string();
93
+ break;
94
+ case /* repeated google.protobuf.Any details */ 3:
95
+ message.details.push(Any.internalBinaryRead(reader, reader.uint32(), options));
96
+ break;
97
+ default:
98
+ let u = options.readUnknownField;
99
+ if (u === "throw")
100
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
101
+ let d = reader.skip(wireType);
102
+ if (u !== false)
103
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
104
+ }
105
+ }
106
+ return message;
107
+ }
108
+ internalBinaryWrite(message: Status, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
109
+ /* int32 code = 1; */
110
+ if (message.code !== 0)
111
+ writer.tag(1, WireType.Varint).int32(message.code);
112
+ /* string message = 2; */
113
+ if (message.message !== "")
114
+ writer.tag(2, WireType.LengthDelimited).string(message.message);
115
+ /* repeated google.protobuf.Any details = 3; */
116
+ for (let i = 0; i < message.details.length; i++)
117
+ Any.internalBinaryWrite(message.details[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join();
118
+ let u = options.writeUnknownFields;
119
+ if (u !== false)
120
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
121
+ return writer;
122
+ }
123
+ }
124
+ /**
125
+ * @generated MessageType for protobuf message google.rpc.Status
126
+ */
127
+ export const Status = new Status$Type();
@@ -18,7 +18,7 @@ import { ProfilePhone } from "../identity/identity";
18
18
  import { PhoneLabel } from "../identity/identity";
19
19
  import { Timestamp } from "../../../google/protobuf/timestamp";
20
20
  // ══════════════════════════════════════════════════════════════════════════
21
- // Consent management — claim-level consent control (SID differentiator)
21
+ // Consent management — claim-level consent control
22
22
  // ══════════════════════════════════════════════════════════════════════════
23
23
 
24
24
  /**
@@ -4,7 +4,6 @@
4
4
  import type { RpcTransport } from "@protobuf-ts/runtime-rpc";
5
5
  import type { ServiceInfo } from "@protobuf-ts/runtime-rpc";
6
6
  import { AdminService } from "./admin";
7
- import type { Empty } from "../../../google/protobuf/empty";
8
7
  import type { DeleteProfileMetadataRequest } from "./admin";
9
8
  import type { SetProfileMetadataRequest } from "./admin";
10
9
  import type { ProfileMetadataEntry } from "./admin";
@@ -16,8 +15,8 @@ import type { RevokeAllSessionsRequest } from "./admin";
16
15
  import type { AdminUpdateProfileResponse } from "./admin";
17
16
  import type { AdminUpdateProfileRequest } from "./admin";
18
17
  import { stackIntercept } from "@protobuf-ts/runtime-rpc";
19
- import type { BootstrapResponse } from "./admin";
20
- import type { BootstrapRequest } from "./admin";
18
+ import type { Empty } from "../../../google/protobuf/empty";
19
+ import type { ClaimInstanceRequest } from "./admin";
21
20
  import type { UnaryCall } from "@protobuf-ts/runtime-rpc";
22
21
  import type { RpcOptions } from "@protobuf-ts/runtime-rpc";
23
22
  /**
@@ -27,12 +26,14 @@ import type { RpcOptions } from "@protobuf-ts/runtime-rpc";
27
26
  */
28
27
  export interface IAdminServiceClient {
29
28
  /**
30
- * Create the first admin profile. Only works when no admin profiles exist.
31
- * No authentication required — returns ALREADY_EXISTS if admin exists.
29
+ * Make the signed-in caller the first administrator of an unclaimed
30
+ * installation, with the claim token from the service log. The token is
31
+ * consumed in the same transaction. FAILED_PRECONDITION once the installation
32
+ * is claimed; PERMISSION_DENIED for a token that does not match.
32
33
  *
33
- * @generated from protobuf rpc: Bootstrap
34
+ * @generated from protobuf rpc: ClaimInstance
34
35
  */
35
- bootstrap(input: BootstrapRequest, options?: RpcOptions): UnaryCall<BootstrapRequest, BootstrapResponse>;
36
+ claimInstance(input: ClaimInstanceRequest, options?: RpcOptions): UnaryCall<ClaimInstanceRequest, Empty>;
36
37
  /**
37
38
  * Update a profile with admin-only fields (status, roles, email verification).
38
39
  *
@@ -76,14 +77,16 @@ export class AdminServiceClient implements IAdminServiceClient, ServiceInfo {
76
77
  constructor(private readonly _transport: RpcTransport) {
77
78
  }
78
79
  /**
79
- * Create the first admin profile. Only works when no admin profiles exist.
80
- * No authentication required — returns ALREADY_EXISTS if admin exists.
80
+ * Make the signed-in caller the first administrator of an unclaimed
81
+ * installation, with the claim token from the service log. The token is
82
+ * consumed in the same transaction. FAILED_PRECONDITION once the installation
83
+ * is claimed; PERMISSION_DENIED for a token that does not match.
81
84
  *
82
- * @generated from protobuf rpc: Bootstrap
85
+ * @generated from protobuf rpc: ClaimInstance
83
86
  */
84
- bootstrap(input: BootstrapRequest, options?: RpcOptions): UnaryCall<BootstrapRequest, BootstrapResponse> {
87
+ claimInstance(input: ClaimInstanceRequest, options?: RpcOptions): UnaryCall<ClaimInstanceRequest, Empty> {
85
88
  const method = this.methods[0], opt = this._transport.mergeOptions(options);
86
- return stackIntercept<BootstrapRequest, BootstrapResponse>("unary", this._transport, method, opt, input);
89
+ return stackIntercept<ClaimInstanceRequest, Empty>("unary", this._transport, method, opt, input);
87
90
  }
88
91
  /**
89
92
  * Update a profile with admin-only fields (status, roles, email verification).
@@ -15,29 +15,19 @@ import { MessageType } from "@protobuf-ts/runtime";
15
15
  import { Timestamp } from "../../../google/protobuf/timestamp";
16
16
  import { Value } from "../../../google/protobuf/struct";
17
17
  import { ProfileStatus } from "../identity/identity";
18
- // ── Bootstrap ──
18
+ // ── Instance claim ──
19
19
 
20
20
  /**
21
- * @generated from protobuf message sid.v1.admin.BootstrapRequest
21
+ * @generated from protobuf message sid.v1.admin.ClaimInstanceRequest
22
22
  */
23
- export interface BootstrapRequest {
23
+ export interface ClaimInstanceRequest {
24
24
  /**
25
- * @generated from protobuf field: string username = 1
26
- */
27
- username: string;
28
- }
29
- /**
30
- * @generated from protobuf message sid.v1.admin.BootstrapResponse
31
- */
32
- export interface BootstrapResponse {
33
- /**
34
- * @generated from protobuf field: string profile_id = 1
35
- */
36
- profileId: string;
37
- /**
38
- * @generated from protobuf field: string message = 2
25
+ * Instance claim token (`sidclaim_...`) the operator read from the service log
26
+ * of an installation that has no administrator. Bearer secret: never logged.
27
+ *
28
+ * @generated from protobuf field: string claim_token = 1
39
29
  */
40
- message: string;
30
+ claimToken: string;
41
31
  }
42
32
  // ── Admin Update Profile ──
43
33
 
@@ -185,78 +175,26 @@ export interface DeleteProfileMetadataRequest {
185
175
  key: string;
186
176
  }
187
177
  // @generated message type with reflection information, may provide speed optimized methods
188
- class BootstrapRequest$Type extends MessageType<BootstrapRequest> {
189
- constructor() {
190
- super("sid.v1.admin.BootstrapRequest", [
191
- { no: 1, name: "username", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
192
- ]);
193
- }
194
- create(value?: PartialMessage<BootstrapRequest>): BootstrapRequest {
195
- const message = globalThis.Object.create((this.messagePrototype!));
196
- message.username = "";
197
- if (value !== undefined)
198
- reflectionMergePartial<BootstrapRequest>(this, message, value);
199
- return message;
200
- }
201
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BootstrapRequest): BootstrapRequest {
202
- let message = target ?? this.create(), end = reader.pos + length;
203
- while (reader.pos < end) {
204
- let [fieldNo, wireType] = reader.tag();
205
- switch (fieldNo) {
206
- case /* string username */ 1:
207
- message.username = reader.string();
208
- break;
209
- default:
210
- let u = options.readUnknownField;
211
- if (u === "throw")
212
- throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
213
- let d = reader.skip(wireType);
214
- if (u !== false)
215
- (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
216
- }
217
- }
218
- return message;
219
- }
220
- internalBinaryWrite(message: BootstrapRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
221
- /* string username = 1; */
222
- if (message.username !== "")
223
- writer.tag(1, WireType.LengthDelimited).string(message.username);
224
- let u = options.writeUnknownFields;
225
- if (u !== false)
226
- (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
227
- return writer;
228
- }
229
- }
230
- /**
231
- * @generated MessageType for protobuf message sid.v1.admin.BootstrapRequest
232
- */
233
- export const BootstrapRequest = new BootstrapRequest$Type();
234
- // @generated message type with reflection information, may provide speed optimized methods
235
- class BootstrapResponse$Type extends MessageType<BootstrapResponse> {
178
+ class ClaimInstanceRequest$Type extends MessageType<ClaimInstanceRequest> {
236
179
  constructor() {
237
- super("sid.v1.admin.BootstrapResponse", [
238
- { no: 1, name: "profile_id", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
239
- { no: 2, name: "message", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
180
+ super("sid.v1.admin.ClaimInstanceRequest", [
181
+ { no: 1, name: "claim_token", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
240
182
  ]);
241
183
  }
242
- create(value?: PartialMessage<BootstrapResponse>): BootstrapResponse {
184
+ create(value?: PartialMessage<ClaimInstanceRequest>): ClaimInstanceRequest {
243
185
  const message = globalThis.Object.create((this.messagePrototype!));
244
- message.profileId = "";
245
- message.message = "";
186
+ message.claimToken = "";
246
187
  if (value !== undefined)
247
- reflectionMergePartial<BootstrapResponse>(this, message, value);
188
+ reflectionMergePartial<ClaimInstanceRequest>(this, message, value);
248
189
  return message;
249
190
  }
250
- internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: BootstrapResponse): BootstrapResponse {
191
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: ClaimInstanceRequest): ClaimInstanceRequest {
251
192
  let message = target ?? this.create(), end = reader.pos + length;
252
193
  while (reader.pos < end) {
253
194
  let [fieldNo, wireType] = reader.tag();
254
195
  switch (fieldNo) {
255
- case /* string profile_id */ 1:
256
- message.profileId = reader.string();
257
- break;
258
- case /* string message */ 2:
259
- message.message = reader.string();
196
+ case /* string claim_token */ 1:
197
+ message.claimToken = reader.string();
260
198
  break;
261
199
  default:
262
200
  let u = options.readUnknownField;
@@ -269,13 +207,10 @@ class BootstrapResponse$Type extends MessageType<BootstrapResponse> {
269
207
  }
270
208
  return message;
271
209
  }
272
- internalBinaryWrite(message: BootstrapResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
273
- /* string profile_id = 1; */
274
- if (message.profileId !== "")
275
- writer.tag(1, WireType.LengthDelimited).string(message.profileId);
276
- /* string message = 2; */
277
- if (message.message !== "")
278
- writer.tag(2, WireType.LengthDelimited).string(message.message);
210
+ internalBinaryWrite(message: ClaimInstanceRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
211
+ /* string claim_token = 1; */
212
+ if (message.claimToken !== "")
213
+ writer.tag(1, WireType.LengthDelimited).string(message.claimToken);
279
214
  let u = options.writeUnknownFields;
280
215
  if (u !== false)
281
216
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -283,9 +218,9 @@ class BootstrapResponse$Type extends MessageType<BootstrapResponse> {
283
218
  }
284
219
  }
285
220
  /**
286
- * @generated MessageType for protobuf message sid.v1.admin.BootstrapResponse
221
+ * @generated MessageType for protobuf message sid.v1.admin.ClaimInstanceRequest
287
222
  */
288
- export const BootstrapResponse = new BootstrapResponse$Type();
223
+ export const ClaimInstanceRequest = new ClaimInstanceRequest$Type();
289
224
  // @generated message type with reflection information, may provide speed optimized methods
290
225
  class AdminUpdateProfileRequest$Type extends MessageType<AdminUpdateProfileRequest> {
291
226
  constructor() {
@@ -836,7 +771,7 @@ export const DeleteProfileMetadataRequest = new DeleteProfileMetadataRequest$Typ
836
771
  * @generated ServiceType for protobuf service sid.v1.admin.AdminService
837
772
  */
838
773
  export const AdminService = new ServiceType("sid.v1.admin.AdminService", [
839
- { name: "Bootstrap", options: { "google.api.http": { post: "/v1/admin/bootstrap", body: "*" } }, I: BootstrapRequest, O: BootstrapResponse },
774
+ { name: "ClaimInstance", options: { "google.api.http": { post: "/v1/admin/claim", body: "*" } }, I: ClaimInstanceRequest, O: Empty },
840
775
  { name: "AdminUpdateProfile", options: { "google.api.http": { patch: "/v1/admin/profiles/{profile_id}", body: "*" } }, I: AdminUpdateProfileRequest, O: AdminUpdateProfileResponse },
841
776
  { name: "RevokeAllSessions", idempotency: "IDEMPOTENT", options: { "google.api.http": { delete: "/v1/admin/profiles/{profile_id}/sessions" } }, I: RevokeAllSessionsRequest, O: RevokeAllSessionsResponse },
842
777
  { name: "ListProfileMetadata", idempotency: "NO_SIDE_EFFECTS", options: { "google.api.http": { get: "/v1/admin/profiles/{profile_id}/metadata" } }, I: ListProfileMetadataRequest, O: ListProfileMetadataResponse },
@@ -14,6 +14,7 @@ import type { ListInvitesRequest } from "./enrollment";
14
14
  import type { Invite } from "./enrollment";
15
15
  import type { CreateInviteRequest } from "./enrollment";
16
16
  import type { UpdateEnrollmentPolicyRequest } from "./enrollment";
17
+ import type { InstanceStatus } from "./enrollment";
17
18
  import { stackIntercept } from "@protobuf-ts/runtime-rpc";
18
19
  import type { EnrollmentPolicy } from "./enrollment";
19
20
  import type { Empty } from "../../../google/protobuf/empty";
@@ -23,9 +24,6 @@ import type { RpcOptions } from "@protobuf-ts/runtime-rpc";
23
24
  * EnrollmentService manages registration gating policies, invite codes,
24
25
  * and registration source analytics.
25
26
  *
26
- * CE ships 4 hardcoded enrollment modes (Open, InviteOnly, AdminOnly,
27
- * DomainRestricted). EE adds per-application overrides and pluggable rules.
28
- *
29
27
  * ── Enrollment Policy ──
30
28
  *
31
29
  * @generated from protobuf service sid.v1.admin.EnrollmentService
@@ -37,6 +35,13 @@ export interface IEnrollmentServiceClient {
37
35
  * @generated from protobuf rpc: GetEnrollmentPolicy
38
36
  */
39
37
  getEnrollmentPolicy(input: Empty, options?: RpcOptions): UnaryCall<Empty, EnrollmentPolicy>;
38
+ /**
39
+ * Whether the installation has been claimed by its first administrator.
40
+ * Public: while unclaimed, the registration page asks for the claim token.
41
+ *
42
+ * @generated from protobuf rpc: GetInstanceStatus
43
+ */
44
+ getInstanceStatus(input: Empty, options?: RpcOptions): UnaryCall<Empty, InstanceStatus>;
40
45
  /**
41
46
  * Update the enrollment policy (mode, domains, tracking).
42
47
  *
@@ -82,9 +87,6 @@ export interface IEnrollmentServiceClient {
82
87
  * EnrollmentService manages registration gating policies, invite codes,
83
88
  * and registration source analytics.
84
89
  *
85
- * CE ships 4 hardcoded enrollment modes (Open, InviteOnly, AdminOnly,
86
- * DomainRestricted). EE adds per-application overrides and pluggable rules.
87
- *
88
90
  * ── Enrollment Policy ──
89
91
  *
90
92
  * @generated from protobuf service sid.v1.admin.EnrollmentService
@@ -104,13 +106,23 @@ export class EnrollmentServiceClient implements IEnrollmentServiceClient, Servic
104
106
  const method = this.methods[0], opt = this._transport.mergeOptions(options);
105
107
  return stackIntercept<Empty, EnrollmentPolicy>("unary", this._transport, method, opt, input);
106
108
  }
109
+ /**
110
+ * Whether the installation has been claimed by its first administrator.
111
+ * Public: while unclaimed, the registration page asks for the claim token.
112
+ *
113
+ * @generated from protobuf rpc: GetInstanceStatus
114
+ */
115
+ getInstanceStatus(input: Empty, options?: RpcOptions): UnaryCall<Empty, InstanceStatus> {
116
+ const method = this.methods[1], opt = this._transport.mergeOptions(options);
117
+ return stackIntercept<Empty, InstanceStatus>("unary", this._transport, method, opt, input);
118
+ }
107
119
  /**
108
120
  * Update the enrollment policy (mode, domains, tracking).
109
121
  *
110
122
  * @generated from protobuf rpc: UpdateEnrollmentPolicy
111
123
  */
112
124
  updateEnrollmentPolicy(input: UpdateEnrollmentPolicyRequest, options?: RpcOptions): UnaryCall<UpdateEnrollmentPolicyRequest, EnrollmentPolicy> {
113
- const method = this.methods[1], opt = this._transport.mergeOptions(options);
125
+ const method = this.methods[2], opt = this._transport.mergeOptions(options);
114
126
  return stackIntercept<UpdateEnrollmentPolicyRequest, EnrollmentPolicy>("unary", this._transport, method, opt, input);
115
127
  }
116
128
  // ── Invite Management ──
@@ -121,7 +133,7 @@ export class EnrollmentServiceClient implements IEnrollmentServiceClient, Servic
121
133
  * @generated from protobuf rpc: CreateInvite
122
134
  */
123
135
  createInvite(input: CreateInviteRequest, options?: RpcOptions): UnaryCall<CreateInviteRequest, Invite> {
124
- const method = this.methods[2], opt = this._transport.mergeOptions(options);
136
+ const method = this.methods[3], opt = this._transport.mergeOptions(options);
125
137
  return stackIntercept<CreateInviteRequest, Invite>("unary", this._transport, method, opt, input);
126
138
  }
127
139
  /**
@@ -130,7 +142,7 @@ export class EnrollmentServiceClient implements IEnrollmentServiceClient, Servic
130
142
  * @generated from protobuf rpc: ListInvites
131
143
  */
132
144
  listInvites(input: ListInvitesRequest, options?: RpcOptions): UnaryCall<ListInvitesRequest, ListInvitesResponse> {
133
- const method = this.methods[3], opt = this._transport.mergeOptions(options);
145
+ const method = this.methods[4], opt = this._transport.mergeOptions(options);
134
146
  return stackIntercept<ListInvitesRequest, ListInvitesResponse>("unary", this._transport, method, opt, input);
135
147
  }
136
148
  /**
@@ -139,7 +151,7 @@ export class EnrollmentServiceClient implements IEnrollmentServiceClient, Servic
139
151
  * @generated from protobuf rpc: RevokeInvite
140
152
  */
141
153
  revokeInvite(input: RevokeInviteRequest, options?: RpcOptions): UnaryCall<RevokeInviteRequest, Empty> {
142
- const method = this.methods[4], opt = this._transport.mergeOptions(options);
154
+ const method = this.methods[5], opt = this._transport.mergeOptions(options);
143
155
  return stackIntercept<RevokeInviteRequest, Empty>("unary", this._transport, method, opt, input);
144
156
  }
145
157
  /**
@@ -148,7 +160,7 @@ export class EnrollmentServiceClient implements IEnrollmentServiceClient, Servic
148
160
  * @generated from protobuf rpc: BulkCreateInvites
149
161
  */
150
162
  bulkCreateInvites(input: BulkCreateInvitesRequest, options?: RpcOptions): UnaryCall<BulkCreateInvitesRequest, BulkCreateInvitesResponse> {
151
- const method = this.methods[5], opt = this._transport.mergeOptions(options);
163
+ const method = this.methods[6], opt = this._transport.mergeOptions(options);
152
164
  return stackIntercept<BulkCreateInvitesRequest, BulkCreateInvitesResponse>("unary", this._transport, method, opt, input);
153
165
  }
154
166
  // ── Registration Analytics ──
@@ -159,7 +171,7 @@ export class EnrollmentServiceClient implements IEnrollmentServiceClient, Servic
159
171
  * @generated from protobuf rpc: GetRegistrationStats
160
172
  */
161
173
  getRegistrationStats(input: GetRegistrationStatsRequest, options?: RpcOptions): UnaryCall<GetRegistrationStatsRequest, RegistrationStats> {
162
- const method = this.methods[6], opt = this._transport.mergeOptions(options);
174
+ const method = this.methods[7], opt = this._transport.mergeOptions(options);
163
175
  return stackIntercept<GetRegistrationStatsRequest, RegistrationStats>("unary", this._transport, method, opt, input);
164
176
  }
165
177
  }
@@ -13,6 +13,21 @@ import type { PartialMessage } from "@protobuf-ts/runtime";
13
13
  import { reflectionMergePartial } from "@protobuf-ts/runtime";
14
14
  import { MessageType } from "@protobuf-ts/runtime";
15
15
  import { Timestamp } from "../../../google/protobuf/timestamp";
16
+ /**
17
+ * Whether the installation has its first administrator.
18
+ *
19
+ * @generated from protobuf message sid.v1.admin.InstanceStatus
20
+ */
21
+ export interface InstanceStatus {
22
+ /**
23
+ * False while no administrator exists: self-registration then accepts only a
24
+ * registration carrying the claim token from the service log, whatever the
25
+ * enrollment mode. The token itself is never returned.
26
+ *
27
+ * @generated from protobuf field: bool claimed = 1
28
+ */
29
+ claimed: boolean;
30
+ }
16
31
  // ══════════════════════════════════════════════════════════════════════════
17
32
  // Enrollment Policy
18
33
  // ══════════════════════════════════════════════════════════════════════════
@@ -454,8 +469,7 @@ export interface GetRegistrationStatsRequest {
454
469
  // ══════════════════════════════════════════════════════════════════════════
455
470
 
456
471
  /**
457
- * Registration gating mode. CE: 4 hardcoded options.
458
- * EE adds POLICY mode for composable rules.
472
+ * Registration gating mode.
459
473
  *
460
474
  * @generated from protobuf enum sid.v1.admin.EnrollmentMode
461
475
  */
@@ -525,7 +539,7 @@ export enum RegistrationSourceType {
525
539
  */
526
540
  SCIM_PROVISIONED = 4,
527
541
  /**
528
- * Federation (person linked to this org).
542
+ * Federation (a user of another organization linked to this org).
529
543
  *
530
544
  * @generated from protobuf enum value: REGISTRATION_SOURCE_TYPE_FEDERATION = 5;
531
545
  */
@@ -573,6 +587,53 @@ export enum InviteStatus {
573
587
  EXPIRED = 4
574
588
  }
575
589
  // @generated message type with reflection information, may provide speed optimized methods
590
+ class InstanceStatus$Type extends MessageType<InstanceStatus> {
591
+ constructor() {
592
+ super("sid.v1.admin.InstanceStatus", [
593
+ { no: 1, name: "claimed", kind: "scalar", T: 8 /*ScalarType.BOOL*/ }
594
+ ]);
595
+ }
596
+ create(value?: PartialMessage<InstanceStatus>): InstanceStatus {
597
+ const message = globalThis.Object.create((this.messagePrototype!));
598
+ message.claimed = false;
599
+ if (value !== undefined)
600
+ reflectionMergePartial<InstanceStatus>(this, message, value);
601
+ return message;
602
+ }
603
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: InstanceStatus): InstanceStatus {
604
+ let message = target ?? this.create(), end = reader.pos + length;
605
+ while (reader.pos < end) {
606
+ let [fieldNo, wireType] = reader.tag();
607
+ switch (fieldNo) {
608
+ case /* bool claimed */ 1:
609
+ message.claimed = reader.bool();
610
+ break;
611
+ default:
612
+ let u = options.readUnknownField;
613
+ if (u === "throw")
614
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
615
+ let d = reader.skip(wireType);
616
+ if (u !== false)
617
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
618
+ }
619
+ }
620
+ return message;
621
+ }
622
+ internalBinaryWrite(message: InstanceStatus, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
623
+ /* bool claimed = 1; */
624
+ if (message.claimed !== false)
625
+ writer.tag(1, WireType.Varint).bool(message.claimed);
626
+ let u = options.writeUnknownFields;
627
+ if (u !== false)
628
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
629
+ return writer;
630
+ }
631
+ }
632
+ /**
633
+ * @generated MessageType for protobuf message sid.v1.admin.InstanceStatus
634
+ */
635
+ export const InstanceStatus = new InstanceStatus$Type();
636
+ // @generated message type with reflection information, may provide speed optimized methods
576
637
  class EnrollmentPolicy$Type extends MessageType<EnrollmentPolicy> {
577
638
  constructor() {
578
639
  super("sid.v1.admin.EnrollmentPolicy", [
@@ -1695,6 +1756,7 @@ export const GetRegistrationStatsRequest = new GetRegistrationStatsRequest$Type(
1695
1756
  */
1696
1757
  export const EnrollmentService = new ServiceType("sid.v1.admin.EnrollmentService", [
1697
1758
  { name: "GetEnrollmentPolicy", idempotency: "NO_SIDE_EFFECTS", options: { "google.api.http": { get: "/v1/admin/enrollment/policy" } }, I: Empty, O: EnrollmentPolicy },
1759
+ { name: "GetInstanceStatus", idempotency: "NO_SIDE_EFFECTS", options: { "google.api.http": { get: "/v1/admin/enrollment/instance-status" } }, I: Empty, O: InstanceStatus },
1698
1760
  { name: "UpdateEnrollmentPolicy", idempotency: "IDEMPOTENT", options: { "google.api.http": { put: "/v1/admin/enrollment/policy", body: "*" } }, I: UpdateEnrollmentPolicyRequest, O: EnrollmentPolicy },
1699
1761
  { name: "CreateInvite", options: { "google.api.http": { post: "/v1/admin/enrollment/invites", body: "*" } }, I: CreateInviteRequest, O: Invite },
1700
1762
  { name: "ListInvites", idempotency: "NO_SIDE_EFFECTS", options: { "google.api.http": { get: "/v1/admin/enrollment/invites" } }, I: ListInvitesRequest, O: ListInvitesResponse },
@@ -30,7 +30,7 @@ import type { RpcOptions } from "@protobuf-ts/runtime-rpc";
30
30
  // ────────────────────────────────────────────────────────────────────────────
31
31
 
32
32
  /**
33
- * ── User Events (Page 9.1) ──
33
+ * ── User Events ──
34
34
  *
35
35
  * @generated from protobuf service sid.v1.admin.EventService
36
36
  */
@@ -47,7 +47,7 @@ export interface IEventServiceClient {
47
47
  * @generated from protobuf rpc: GetUserTimeline
48
48
  */
49
49
  getUserTimeline(input: GetUserTimelineRequest, options?: RpcOptions): UnaryCall<GetUserTimelineRequest, ListEventsResponse>;
50
- // ── Admin Events (Page 9.2) ──
50
+ // ── Admin Events ──
51
51
 
52
52
  /**
53
53
  * @generated from protobuf rpc: ListAdminEvents
@@ -57,7 +57,7 @@ export interface IEventServiceClient {
57
57
  * @generated from protobuf rpc: GetAdminEvent
58
58
  */
59
59
  getAdminEvent(input: GetAdminEventRequest, options?: RpcOptions): UnaryCall<GetAdminEventRequest, AdminEvent>;
60
- // ── Event Config (Page 9.3) ──
60
+ // ── Event Config ──
61
61
 
62
62
  /**
63
63
  * @generated from protobuf rpc: GetEventConfig
@@ -73,7 +73,7 @@ export interface IEventServiceClient {
73
73
  // ────────────────────────────────────────────────────────────────────────────
74
74
 
75
75
  /**
76
- * ── User Events (Page 9.1) ──
76
+ * ── User Events ──
77
77
  *
78
78
  * @generated from protobuf service sid.v1.admin.EventService
79
79
  */
@@ -104,7 +104,7 @@ export class EventServiceClient implements IEventServiceClient, ServiceInfo {
104
104
  const method = this.methods[2], opt = this._transport.mergeOptions(options);
105
105
  return stackIntercept<GetUserTimelineRequest, ListEventsResponse>("unary", this._transport, method, opt, input);
106
106
  }
107
- // ── Admin Events (Page 9.2) ──
107
+ // ── Admin Events ──
108
108
 
109
109
  /**
110
110
  * @generated from protobuf rpc: ListAdminEvents
@@ -120,7 +120,7 @@ export class EventServiceClient implements IEventServiceClient, ServiceInfo {
120
120
  const method = this.methods[4], opt = this._transport.mergeOptions(options);
121
121
  return stackIntercept<GetAdminEventRequest, AdminEvent>("unary", this._transport, method, opt, input);
122
122
  }
123
- // ── Event Config (Page 9.3) ──
123
+ // ── Event Config ──
124
124
 
125
125
  /**
126
126
  * @generated from protobuf rpc: GetEventConfig
@@ -138,7 +138,7 @@ export class EventServiceClient implements IEventServiceClient, ServiceInfo {
138
138
  }
139
139
  }
140
140
  // ────────────────────────────────────────────────────────────────────────────
141
- // AuditService — tamper-evident audit trail (Page 23.2)
141
+ // AuditService — tamper-evident audit trail
142
142
  // ────────────────────────────────────────────────────────────────────────────
143
143
 
144
144
  /**
@@ -159,7 +159,7 @@ export interface IAuditServiceClient {
159
159
  exportAuditTrail(input: ExportAuditTrailRequest, options?: RpcOptions): UnaryCall<ExportAuditTrailRequest, ExportAuditTrailResponse>;
160
160
  }
161
161
  // ────────────────────────────────────────────────────────────────────────────
162
- // AuditService — tamper-evident audit trail (Page 23.2)
162
+ // AuditService — tamper-evident audit trail
163
163
  // ────────────────────────────────────────────────────────────────────────────
164
164
 
165
165
  /**
@@ -463,7 +463,7 @@ export enum ActionType {
463
463
  */
464
464
  UNSPECIFIED = 0,
465
465
  /**
466
- * HTTP POST to external URL (CE).
466
+ * HTTP POST to external URL.
467
467
  *
468
468
  * @generated from protobuf enum value: ACTION_TYPE_WEBHOOK = 1;
469
469
  */