@milaboratories/pl-client 3.11.4 → 3.12.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 (193) hide show
  1. package/dist/core/PromiseTracker.cjs.map +1 -1
  2. package/dist/core/PromiseTracker.d.ts.map +1 -1
  3. package/dist/core/PromiseTracker.js.map +1 -1
  4. package/dist/core/StatefulPromise.cjs +2 -0
  5. package/dist/core/StatefulPromise.cjs.map +1 -1
  6. package/dist/core/StatefulPromise.js +2 -0
  7. package/dist/core/StatefulPromise.js.map +1 -1
  8. package/dist/core/abstract_stream.d.ts +1 -1
  9. package/dist/core/advisory_locks.cjs.map +1 -1
  10. package/dist/core/advisory_locks.js.map +1 -1
  11. package/dist/core/auth.cjs.map +1 -1
  12. package/dist/core/auth.d.ts.map +1 -1
  13. package/dist/core/auth.js.map +1 -1
  14. package/dist/core/cache.d.ts.map +1 -1
  15. package/dist/core/capabilities.cjs.map +1 -1
  16. package/dist/core/capabilities.d.ts.map +1 -1
  17. package/dist/core/capabilities.js.map +1 -1
  18. package/dist/core/client.cjs +3 -3
  19. package/dist/core/client.cjs.map +1 -1
  20. package/dist/core/client.d.ts.map +1 -1
  21. package/dist/core/client.js +2 -2
  22. package/dist/core/client.js.map +1 -1
  23. package/dist/core/config.cjs.map +1 -1
  24. package/dist/core/config.d.ts.map +1 -1
  25. package/dist/core/config.js.map +1 -1
  26. package/dist/core/default_client.cjs +5 -5
  27. package/dist/core/default_client.cjs.map +1 -1
  28. package/dist/core/default_client.d.ts.map +1 -1
  29. package/dist/core/default_client.js.map +1 -1
  30. package/dist/core/driver.cjs.map +1 -1
  31. package/dist/core/driver.d.ts.map +1 -1
  32. package/dist/core/driver.js.map +1 -1
  33. package/dist/core/error_resource.cjs.map +1 -1
  34. package/dist/core/error_resource.js.map +1 -1
  35. package/dist/core/errors.cjs +10 -11
  36. package/dist/core/errors.cjs.map +1 -1
  37. package/dist/core/errors.d.ts.map +1 -1
  38. package/dist/core/errors.js +10 -10
  39. package/dist/core/errors.js.map +1 -1
  40. package/dist/core/final.cjs +2 -1
  41. package/dist/core/final.cjs.map +1 -1
  42. package/dist/core/final.d.ts.map +1 -1
  43. package/dist/core/final.js.map +1 -1
  44. package/dist/core/ll_client.cjs +14 -9
  45. package/dist/core/ll_client.cjs.map +1 -1
  46. package/dist/core/ll_client.d.ts +1 -0
  47. package/dist/core/ll_client.d.ts.map +1 -1
  48. package/dist/core/ll_client.js +15 -9
  49. package/dist/core/ll_client.js.map +1 -1
  50. package/dist/core/ll_transaction.cjs +3 -1
  51. package/dist/core/ll_transaction.cjs.map +1 -1
  52. package/dist/core/ll_transaction.d.ts +1 -1
  53. package/dist/core/ll_transaction.d.ts.map +1 -1
  54. package/dist/core/ll_transaction.js +2 -1
  55. package/dist/core/ll_transaction.js.map +1 -1
  56. package/dist/core/stat.cjs.map +1 -1
  57. package/dist/core/stat.js.map +1 -1
  58. package/dist/core/transaction.cjs +11 -5
  59. package/dist/core/transaction.cjs.map +1 -1
  60. package/dist/core/transaction.d.ts.map +1 -1
  61. package/dist/core/transaction.js +11 -4
  62. package/dist/core/transaction.js.map +1 -1
  63. package/dist/core/tree_filter.cjs +73 -18
  64. package/dist/core/tree_filter.cjs.map +1 -1
  65. package/dist/core/tree_filter.d.ts +1 -1
  66. package/dist/core/tree_filter.d.ts.map +1 -1
  67. package/dist/core/tree_filter.js +72 -19
  68. package/dist/core/tree_filter.js.map +1 -1
  69. package/dist/core/type_conversion.cjs +19 -20
  70. package/dist/core/type_conversion.cjs.map +1 -1
  71. package/dist/core/type_conversion.js +19 -19
  72. package/dist/core/type_conversion.js.map +1 -1
  73. package/dist/core/types.cjs +2 -3
  74. package/dist/core/types.cjs.map +1 -1
  75. package/dist/core/types.d.ts.map +1 -1
  76. package/dist/core/types.js +2 -2
  77. package/dist/core/types.js.map +1 -1
  78. package/dist/core/unauth_client.cjs +7 -6
  79. package/dist/core/unauth_client.cjs.map +1 -1
  80. package/dist/core/unauth_client.d.ts +9 -0
  81. package/dist/core/unauth_client.d.ts.map +1 -1
  82. package/dist/core/unauth_client.js +7 -5
  83. package/dist/core/unauth_client.js.map +1 -1
  84. package/dist/core/user_resources.cjs +3 -1
  85. package/dist/core/user_resources.cjs.map +1 -1
  86. package/dist/core/user_resources.d.ts.map +1 -1
  87. package/dist/core/user_resources.js +3 -0
  88. package/dist/core/user_resources.js.map +1 -1
  89. package/dist/core/websocket_stream.cjs +17 -20
  90. package/dist/core/websocket_stream.cjs.map +1 -1
  91. package/dist/core/websocket_stream.js +16 -19
  92. package/dist/core/websocket_stream.js.map +1 -1
  93. package/dist/core/wire.d.ts.map +1 -1
  94. package/dist/helpers/pl.cjs +25 -0
  95. package/dist/helpers/pl.cjs.map +1 -1
  96. package/dist/helpers/pl.d.ts +1 -1
  97. package/dist/helpers/pl.d.ts.map +1 -1
  98. package/dist/helpers/pl.js +1 -1
  99. package/dist/helpers/pl.js.map +1 -1
  100. package/dist/helpers/poll.cjs +5 -1
  101. package/dist/helpers/poll.cjs.map +1 -1
  102. package/dist/helpers/poll.d.ts.map +1 -1
  103. package/dist/helpers/poll.js +4 -0
  104. package/dist/helpers/poll.js.map +1 -1
  105. package/dist/helpers/retry_strategy.cjs +1 -0
  106. package/dist/helpers/retry_strategy.cjs.map +1 -1
  107. package/dist/helpers/retry_strategy.js +1 -1
  108. package/dist/helpers/retry_strategy.js.map +1 -1
  109. package/dist/helpers/tx_helpers.cjs +0 -1
  110. package/dist/helpers/tx_helpers.cjs.map +1 -1
  111. package/dist/helpers/tx_helpers.d.ts.map +1 -1
  112. package/dist/helpers/tx_helpers.js.map +1 -1
  113. package/dist/index.cjs +0 -1
  114. package/dist/index.d.ts +1 -1
  115. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs +0 -1
  116. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.cjs.map +1 -1
  117. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.d.ts.map +1 -1
  118. package/dist/proto-grpc/github.com/googleapis/googleapis/google/rpc/status.js.map +1 -1
  119. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs +531 -77
  120. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.cjs.map +1 -1
  121. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs +11 -4
  122. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.cjs.map +1 -1
  123. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts +12 -6
  124. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.d.ts.map +1 -1
  125. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js +11 -3
  126. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.js.map +1 -1
  127. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts +106 -1
  128. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.d.ts.map +1 -1
  129. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js +330 -77
  130. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.js.map +1 -1
  131. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs +23 -7
  132. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.cjs.map +1 -1
  133. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts +10 -3
  134. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.d.ts.map +1 -1
  135. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js +18 -7
  136. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.js.map +1 -1
  137. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs +1 -2
  138. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.cjs.map +1 -1
  139. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.d.ts.map +1 -1
  140. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js +1 -1
  141. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/base_types.js.map +1 -1
  142. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs +2 -2
  143. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.cjs.map +1 -1
  144. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts +1 -1
  145. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.d.ts.map +1 -1
  146. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js +2 -2
  147. package/dist/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/resource_types.js.map +1 -1
  148. package/dist/proto-grpc/google/protobuf/any.cjs +1 -2
  149. package/dist/proto-grpc/google/protobuf/any.cjs.map +1 -1
  150. package/dist/proto-grpc/google/protobuf/any.d.ts.map +1 -1
  151. package/dist/proto-grpc/google/protobuf/any.js +1 -1
  152. package/dist/proto-grpc/google/protobuf/any.js.map +1 -1
  153. package/dist/proto-grpc/google/protobuf/duration.cjs +0 -1
  154. package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -1
  155. package/dist/proto-grpc/google/protobuf/duration.d.ts.map +1 -1
  156. package/dist/proto-grpc/google/protobuf/duration.js.map +1 -1
  157. package/dist/proto-grpc/google/protobuf/timestamp.cjs +0 -1
  158. package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -1
  159. package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +1 -1
  160. package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -1
  161. package/dist/proto-grpc/google/rpc/code.d.ts.map +1 -1
  162. package/dist/proto-rest/index.cjs +1 -1
  163. package/dist/proto-rest/index.cjs.map +1 -1
  164. package/dist/proto-rest/index.d.ts +1 -1
  165. package/dist/proto-rest/index.d.ts.map +1 -1
  166. package/dist/proto-rest/index.js.map +1 -1
  167. package/dist/proto-rest/plapi.d.ts +30 -9
  168. package/dist/proto-rest/plapi.d.ts.map +1 -1
  169. package/dist/test/tcp-proxy.cjs +2 -2
  170. package/dist/test/tcp-proxy.cjs.map +1 -1
  171. package/dist/test/tcp-proxy.d.ts +1 -1
  172. package/dist/test/tcp-proxy.js.map +1 -1
  173. package/dist/test/test_config.cjs +8 -2
  174. package/dist/test/test_config.cjs.map +1 -1
  175. package/dist/test/test_config.d.ts +1 -1
  176. package/dist/test/test_config.d.ts.map +1 -1
  177. package/dist/test/test_config.js +1 -1
  178. package/dist/test/test_config.js.map +1 -1
  179. package/dist/util/pl.cjs.map +1 -1
  180. package/dist/util/pl.js.map +1 -1
  181. package/dist/util/util.cjs.map +1 -1
  182. package/dist/util/util.js.map +1 -1
  183. package/package.json +6 -6
  184. package/src/core/ll_client.ts +7 -2
  185. package/src/core/unauth_client.ts +17 -2
  186. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.client.ts +16 -3
  187. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api.ts +326 -3
  188. package/src/proto-grpc/github.com/milaboratory/pl/plapi/plapiproto/api_types.ts +21 -7
  189. package/src/proto-rest/plapi.ts +29 -8
  190. package/dist/proto-grpc/google/rpc/code.cjs +0 -224
  191. package/dist/proto-grpc/google/rpc/code.cjs.map +0 -1
  192. package/dist/proto-grpc/google/rpc/code.js +0 -224
  193. package/dist/proto-grpc/google/rpc/code.js.map +0 -1
@@ -539,6 +539,12 @@ export interface TxAPI_ClientMessage {
539
539
  * @generated from protobuf field: MiLaboratories.PL.API.AuthAPI.RevokeAccess.Request revoke_access = 411
540
540
  */
541
541
  revokeAccess: AuthAPI_RevokeAccess_Request; // revoke access to a resource within transaction
542
+ } | {
543
+ oneofKind: "listGrants";
544
+ /**
545
+ * @generated from protobuf field: MiLaboratories.PL.API.AuthAPI.ListGrants.Request list_grants = 412
546
+ */
547
+ listGrants: AuthAPI_ListGrants_Request; // list grants on a resource within transaction
542
548
  } | {
543
549
  oneofKind: undefined;
544
550
  };
@@ -928,6 +934,12 @@ export interface TxAPI_ServerMessage {
928
934
  * @generated from protobuf field: MiLaboratories.PL.API.AuthAPI.RevokeAccess.Response revoke_access = 411
929
935
  */
930
936
  revokeAccess: AuthAPI_RevokeAccess_Response;
937
+ } | {
938
+ oneofKind: "listGrants";
939
+ /**
940
+ * @generated from protobuf field: MiLaboratories.PL.API.AuthAPI.ListGrants.TxResponse list_grants = 412
941
+ */
942
+ listGrants: AuthAPI_ListGrants_TxResponse;
931
943
  } | {
932
944
  oneofKind: undefined;
933
945
  };
@@ -3593,6 +3605,10 @@ export interface AuthAPI_ListMethods_SSOAuthMethod {
3593
3605
  * @generated from protobuf field: MiLaboratories.PL.API.AuthAPI.ListMethods.SSOAuthMethod.FlowType flow_type = 10
3594
3606
  */
3595
3607
  flowType: AuthAPI_ListMethods_SSOAuthMethod_FlowType;
3608
+ /**
3609
+ * @generated from protobuf field: optional string access_type = 11
3610
+ */
3611
+ accessType?: string; // "online" | "offline"; Google-specific (offline → refresh token)
3596
3612
  }
3597
3613
  /**
3598
3614
  * @generated from protobuf enum MiLaboratories.PL.API.AuthAPI.ListMethods.SSOAuthMethod.FlowType
@@ -3672,6 +3688,17 @@ export interface AuthAPI_BeginSSOLogin_PublicPKCE {
3672
3688
  * @generated from protobuf field: google.protobuf.Timestamp expires_at = 2
3673
3689
  */
3674
3690
  expiresAt?: Timestamp; // after this, nonce is no longer valid (when enforced)
3691
+ /**
3692
+ * Confidential-client secret for the IdP token exchange; absent for public clients.
3693
+ * Rationale: Google's OIDC does not support public clients — it requires a
3694
+ * client_secret at the token endpoint even for the PKCE auth-code flow. That is a
3695
+ * gap in Google Cloud OIDC: a desktop app cannot use Google OIDC without the secret
3696
+ * leaving the server. So the backend holds the secret and forwards it here to the
3697
+ * desktop, which performs the token exchange as a confidential client.
3698
+ *
3699
+ * @generated from protobuf field: optional string client_secret = 3
3700
+ */
3701
+ clientSecret?: string;
3675
3702
  }
3676
3703
  /**
3677
3704
  * @generated from protobuf message MiLaboratories.PL.API.AuthAPI.BeginSSOLogin.Response
@@ -3991,6 +4018,15 @@ export interface AuthAPI_ListGrants_Response {
3991
4018
  */
3992
4019
  grant?: AuthAPI_Grant; // one per stream message
3993
4020
  }
4021
+ /**
4022
+ * @generated from protobuf message MiLaboratories.PL.API.AuthAPI.ListGrants.TxResponse
4023
+ */
4024
+ export interface AuthAPI_ListGrants_TxResponse {
4025
+ /**
4026
+ * @generated from protobuf field: repeated MiLaboratories.PL.API.AuthAPI.Grant grants = 1
4027
+ */
4028
+ grants: AuthAPI_Grant[]; // all grants for the resource in a single transactional response
4029
+ }
3994
4030
  /**
3995
4031
  * @generated from protobuf message MiLaboratories.PL.API.AuthAPI.Grant
3996
4032
  */
@@ -4188,6 +4224,41 @@ export interface AuthAPI_ListUserResources_SharedResource {
4188
4224
  */
4189
4225
  permissions?: AuthAPI_Grant_Permissions;
4190
4226
  }
4227
+ /**
4228
+ * @generated from protobuf message MiLaboratories.PL.API.AuthAPI.User
4229
+ */
4230
+ export interface AuthAPI_User {
4231
+ /**
4232
+ * login is the stable identifier of the user — the grant target and the
4233
+ * GetUserRoot key. Further fields (e.g. first name, last name, email) may
4234
+ * be added later without breaking compatibility.
4235
+ *
4236
+ * @generated from protobuf field: string login = 1
4237
+ */
4238
+ login: string;
4239
+ }
4240
+ /**
4241
+ * @generated from protobuf message MiLaboratories.PL.API.AuthAPI.ListUsers
4242
+ */
4243
+ export interface AuthAPI_ListUsers {
4244
+ }
4245
+ /**
4246
+ * @generated from protobuf message MiLaboratories.PL.API.AuthAPI.ListUsers.Request
4247
+ */
4248
+ export interface AuthAPI_ListUsers_Request {
4249
+ }
4250
+ /**
4251
+ * Lists users known to the server. A user becomes known on first login;
4252
+ * provisioned users who have never logged in do not appear.
4253
+ *
4254
+ * @generated from protobuf message MiLaboratories.PL.API.AuthAPI.ListUsers.Response
4255
+ */
4256
+ export interface AuthAPI_ListUsers_Response {
4257
+ /**
4258
+ * @generated from protobuf field: repeated MiLaboratories.PL.API.AuthAPI.User users = 1
4259
+ */
4260
+ users: AuthAPI_User[];
4261
+ }
4191
4262
  /**
4192
4263
  * @generated from protobuf enum MiLaboratories.PL.API.AuthAPI.Role
4193
4264
  */
@@ -4474,7 +4545,8 @@ class TxAPI_ClientMessage$Type extends MessageType<TxAPI_ClientMessage> {
4474
4545
  { no: 351, name: "controller_features_clear", kind: "message", oneof: "request", T: () => ControllerAPI_ClearFeatures_Request },
4475
4546
  { no: 400, name: "set_default_color", kind: "message", oneof: "request", T: () => TxAPI_SetDefaultColor_Request },
4476
4547
  { no: 410, name: "grant_access", kind: "message", oneof: "request", T: () => AuthAPI_GrantAccess_Request },
4477
- { no: 411, name: "revoke_access", kind: "message", oneof: "request", T: () => AuthAPI_RevokeAccess_Request }
4548
+ { no: 411, name: "revoke_access", kind: "message", oneof: "request", T: () => AuthAPI_RevokeAccess_Request },
4549
+ { no: 412, name: "list_grants", kind: "message", oneof: "request", T: () => AuthAPI_ListGrants_Request }
4478
4550
  ]);
4479
4551
  }
4480
4552
  create(value?: PartialMessage<TxAPI_ClientMessage>): TxAPI_ClientMessage {
@@ -4859,6 +4931,12 @@ class TxAPI_ClientMessage$Type extends MessageType<TxAPI_ClientMessage> {
4859
4931
  revokeAccess: AuthAPI_RevokeAccess_Request.internalBinaryRead(reader, reader.uint32(), options, (message.request as any).revokeAccess)
4860
4932
  };
4861
4933
  break;
4934
+ case /* MiLaboratories.PL.API.AuthAPI.ListGrants.Request list_grants */ 412:
4935
+ message.request = {
4936
+ oneofKind: "listGrants",
4937
+ listGrants: AuthAPI_ListGrants_Request.internalBinaryRead(reader, reader.uint32(), options, (message.request as any).listGrants)
4938
+ };
4939
+ break;
4862
4940
  default:
4863
4941
  let u = options.readUnknownField;
4864
4942
  if (u === "throw")
@@ -5057,6 +5135,9 @@ class TxAPI_ClientMessage$Type extends MessageType<TxAPI_ClientMessage> {
5057
5135
  /* MiLaboratories.PL.API.AuthAPI.RevokeAccess.Request revoke_access = 411; */
5058
5136
  if (message.request.oneofKind === "revokeAccess")
5059
5137
  AuthAPI_RevokeAccess_Request.internalBinaryWrite(message.request.revokeAccess, writer.tag(411, WireType.LengthDelimited).fork(), options).join();
5138
+ /* MiLaboratories.PL.API.AuthAPI.ListGrants.Request list_grants = 412; */
5139
+ if (message.request.oneofKind === "listGrants")
5140
+ AuthAPI_ListGrants_Request.internalBinaryWrite(message.request.listGrants, writer.tag(412, WireType.LengthDelimited).fork(), options).join();
5060
5141
  let u = options.writeUnknownFields;
5061
5142
  if (u !== false)
5062
5143
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -5134,6 +5215,7 @@ class TxAPI_ServerMessage$Type extends MessageType<TxAPI_ServerMessage> {
5134
5215
  { no: 400, name: "set_default_color", kind: "message", oneof: "response", T: () => TxAPI_SetDefaultColor_Response },
5135
5216
  { no: 410, name: "grant_access", kind: "message", oneof: "response", T: () => AuthAPI_GrantAccess_Response },
5136
5217
  { no: 411, name: "revoke_access", kind: "message", oneof: "response", T: () => AuthAPI_RevokeAccess_Response },
5218
+ { no: 412, name: "list_grants", kind: "message", oneof: "response", T: () => AuthAPI_ListGrants_TxResponse },
5137
5219
  { no: 3, name: "error", kind: "message", T: () => Status }
5138
5220
  ]);
5139
5221
  }
@@ -5522,6 +5604,12 @@ class TxAPI_ServerMessage$Type extends MessageType<TxAPI_ServerMessage> {
5522
5604
  revokeAccess: AuthAPI_RevokeAccess_Response.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).revokeAccess)
5523
5605
  };
5524
5606
  break;
5607
+ case /* MiLaboratories.PL.API.AuthAPI.ListGrants.TxResponse list_grants */ 412:
5608
+ message.response = {
5609
+ oneofKind: "listGrants",
5610
+ listGrants: AuthAPI_ListGrants_TxResponse.internalBinaryRead(reader, reader.uint32(), options, (message.response as any).listGrants)
5611
+ };
5612
+ break;
5525
5613
  case /* google.rpc.Status error */ 3:
5526
5614
  message.error = Status.internalBinaryRead(reader, reader.uint32(), options, message.error);
5527
5615
  break;
@@ -5729,6 +5817,9 @@ class TxAPI_ServerMessage$Type extends MessageType<TxAPI_ServerMessage> {
5729
5817
  /* MiLaboratories.PL.API.AuthAPI.RevokeAccess.Response revoke_access = 411; */
5730
5818
  if (message.response.oneofKind === "revokeAccess")
5731
5819
  AuthAPI_RevokeAccess_Response.internalBinaryWrite(message.response.revokeAccess, writer.tag(411, WireType.LengthDelimited).fork(), options).join();
5820
+ /* MiLaboratories.PL.API.AuthAPI.ListGrants.TxResponse list_grants = 412; */
5821
+ if (message.response.oneofKind === "listGrants")
5822
+ AuthAPI_ListGrants_TxResponse.internalBinaryWrite(message.response.listGrants, writer.tag(412, WireType.LengthDelimited).fork(), options).join();
5732
5823
  let u = options.writeUnknownFields;
5733
5824
  if (u !== false)
5734
5825
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -17476,7 +17567,8 @@ class AuthAPI_ListMethods_SSOAuthMethod$Type extends MessageType<AuthAPI_ListMet
17476
17567
  { no: 7, name: "subject_token_source", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
17477
17568
  { no: 8, name: "user_id_claim", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
17478
17569
  { no: 9, name: "groups_claim", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
17479
- { no: 10, name: "flow_type", kind: "enum", T: () => ["MiLaboratories.PL.API.AuthAPI.ListMethods.SSOAuthMethod.FlowType", AuthAPI_ListMethods_SSOAuthMethod_FlowType] }
17570
+ { no: 10, name: "flow_type", kind: "enum", T: () => ["MiLaboratories.PL.API.AuthAPI.ListMethods.SSOAuthMethod.FlowType", AuthAPI_ListMethods_SSOAuthMethod_FlowType] },
17571
+ { no: 11, name: "access_type", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }
17480
17572
  ]);
17481
17573
  }
17482
17574
  create(value?: PartialMessage<AuthAPI_ListMethods_SSOAuthMethod>): AuthAPI_ListMethods_SSOAuthMethod {
@@ -17534,6 +17626,9 @@ class AuthAPI_ListMethods_SSOAuthMethod$Type extends MessageType<AuthAPI_ListMet
17534
17626
  case /* MiLaboratories.PL.API.AuthAPI.ListMethods.SSOAuthMethod.FlowType flow_type */ 10:
17535
17627
  message.flowType = reader.int32();
17536
17628
  break;
17629
+ case /* optional string access_type */ 11:
17630
+ message.accessType = reader.string();
17631
+ break;
17537
17632
  default:
17538
17633
  let u = options.readUnknownField;
17539
17634
  if (u === "throw")
@@ -17580,6 +17675,9 @@ class AuthAPI_ListMethods_SSOAuthMethod$Type extends MessageType<AuthAPI_ListMet
17580
17675
  /* MiLaboratories.PL.API.AuthAPI.ListMethods.SSOAuthMethod.FlowType flow_type = 10; */
17581
17676
  if (message.flowType !== 0)
17582
17677
  writer.tag(10, WireType.Varint).int32(message.flowType);
17678
+ /* optional string access_type = 11; */
17679
+ if (message.accessType !== undefined)
17680
+ writer.tag(11, WireType.LengthDelimited).string(message.accessType);
17583
17681
  let u = options.writeUnknownFields;
17584
17682
  if (u !== false)
17585
17683
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -17757,7 +17855,8 @@ class AuthAPI_BeginSSOLogin_PublicPKCE$Type extends MessageType<AuthAPI_BeginSSO
17757
17855
  constructor() {
17758
17856
  super("MiLaboratories.PL.API.AuthAPI.BeginSSOLogin.PublicPKCE", [
17759
17857
  { no: 1, name: "nonce", kind: "scalar", T: 9 /*ScalarType.STRING*/ },
17760
- { no: 2, name: "expires_at", kind: "message", T: () => Timestamp }
17858
+ { no: 2, name: "expires_at", kind: "message", T: () => Timestamp },
17859
+ { no: 3, name: "client_secret", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }
17761
17860
  ]);
17762
17861
  }
17763
17862
  create(value?: PartialMessage<AuthAPI_BeginSSOLogin_PublicPKCE>): AuthAPI_BeginSSOLogin_PublicPKCE {
@@ -17778,6 +17877,9 @@ class AuthAPI_BeginSSOLogin_PublicPKCE$Type extends MessageType<AuthAPI_BeginSSO
17778
17877
  case /* google.protobuf.Timestamp expires_at */ 2:
17779
17878
  message.expiresAt = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.expiresAt);
17780
17879
  break;
17880
+ case /* optional string client_secret */ 3:
17881
+ message.clientSecret = reader.string();
17882
+ break;
17781
17883
  default:
17782
17884
  let u = options.readUnknownField;
17783
17885
  if (u === "throw")
@@ -17796,6 +17898,9 @@ class AuthAPI_BeginSSOLogin_PublicPKCE$Type extends MessageType<AuthAPI_BeginSSO
17796
17898
  /* google.protobuf.Timestamp expires_at = 2; */
17797
17899
  if (message.expiresAt)
17798
17900
  Timestamp.internalBinaryWrite(message.expiresAt, writer.tag(2, WireType.LengthDelimited).fork(), options).join();
17901
+ /* optional string client_secret = 3; */
17902
+ if (message.clientSecret !== undefined)
17903
+ writer.tag(3, WireType.LengthDelimited).string(message.clientSecret);
17799
17904
  let u = options.writeUnknownFields;
17800
17905
  if (u !== false)
17801
17906
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -19063,6 +19168,53 @@ class AuthAPI_ListGrants_Response$Type extends MessageType<AuthAPI_ListGrants_Re
19063
19168
  */
19064
19169
  export const AuthAPI_ListGrants_Response = new AuthAPI_ListGrants_Response$Type();
19065
19170
  // @generated message type with reflection information, may provide speed optimized methods
19171
+ class AuthAPI_ListGrants_TxResponse$Type extends MessageType<AuthAPI_ListGrants_TxResponse> {
19172
+ constructor() {
19173
+ super("MiLaboratories.PL.API.AuthAPI.ListGrants.TxResponse", [
19174
+ { no: 1, name: "grants", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => AuthAPI_Grant }
19175
+ ]);
19176
+ }
19177
+ create(value?: PartialMessage<AuthAPI_ListGrants_TxResponse>): AuthAPI_ListGrants_TxResponse {
19178
+ const message = globalThis.Object.create((this.messagePrototype!));
19179
+ message.grants = [];
19180
+ if (value !== undefined)
19181
+ reflectionMergePartial<AuthAPI_ListGrants_TxResponse>(this, message, value);
19182
+ return message;
19183
+ }
19184
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AuthAPI_ListGrants_TxResponse): AuthAPI_ListGrants_TxResponse {
19185
+ let message = target ?? this.create(), end = reader.pos + length;
19186
+ while (reader.pos < end) {
19187
+ let [fieldNo, wireType] = reader.tag();
19188
+ switch (fieldNo) {
19189
+ case /* repeated MiLaboratories.PL.API.AuthAPI.Grant grants */ 1:
19190
+ message.grants.push(AuthAPI_Grant.internalBinaryRead(reader, reader.uint32(), options));
19191
+ break;
19192
+ default:
19193
+ let u = options.readUnknownField;
19194
+ if (u === "throw")
19195
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
19196
+ let d = reader.skip(wireType);
19197
+ if (u !== false)
19198
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
19199
+ }
19200
+ }
19201
+ return message;
19202
+ }
19203
+ internalBinaryWrite(message: AuthAPI_ListGrants_TxResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
19204
+ /* repeated MiLaboratories.PL.API.AuthAPI.Grant grants = 1; */
19205
+ for (let i = 0; i < message.grants.length; i++)
19206
+ AuthAPI_Grant.internalBinaryWrite(message.grants[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
19207
+ let u = options.writeUnknownFields;
19208
+ if (u !== false)
19209
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
19210
+ return writer;
19211
+ }
19212
+ }
19213
+ /**
19214
+ * @generated MessageType for protobuf message MiLaboratories.PL.API.AuthAPI.ListGrants.TxResponse
19215
+ */
19216
+ export const AuthAPI_ListGrants_TxResponse = new AuthAPI_ListGrants_TxResponse$Type();
19217
+ // @generated message type with reflection information, may provide speed optimized methods
19066
19218
  class AuthAPI_Grant$Type extends MessageType<AuthAPI_Grant> {
19067
19219
  constructor() {
19068
19220
  super("MiLaboratories.PL.API.AuthAPI.Grant", [
@@ -19775,6 +19927,176 @@ class AuthAPI_ListUserResources_SharedResource$Type extends MessageType<AuthAPI_
19775
19927
  */
19776
19928
  export const AuthAPI_ListUserResources_SharedResource = new AuthAPI_ListUserResources_SharedResource$Type();
19777
19929
  // @generated message type with reflection information, may provide speed optimized methods
19930
+ class AuthAPI_User$Type extends MessageType<AuthAPI_User> {
19931
+ constructor() {
19932
+ super("MiLaboratories.PL.API.AuthAPI.User", [
19933
+ { no: 1, name: "login", kind: "scalar", T: 9 /*ScalarType.STRING*/ }
19934
+ ]);
19935
+ }
19936
+ create(value?: PartialMessage<AuthAPI_User>): AuthAPI_User {
19937
+ const message = globalThis.Object.create((this.messagePrototype!));
19938
+ message.login = "";
19939
+ if (value !== undefined)
19940
+ reflectionMergePartial<AuthAPI_User>(this, message, value);
19941
+ return message;
19942
+ }
19943
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AuthAPI_User): AuthAPI_User {
19944
+ let message = target ?? this.create(), end = reader.pos + length;
19945
+ while (reader.pos < end) {
19946
+ let [fieldNo, wireType] = reader.tag();
19947
+ switch (fieldNo) {
19948
+ case /* string login */ 1:
19949
+ message.login = reader.string();
19950
+ break;
19951
+ default:
19952
+ let u = options.readUnknownField;
19953
+ if (u === "throw")
19954
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
19955
+ let d = reader.skip(wireType);
19956
+ if (u !== false)
19957
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
19958
+ }
19959
+ }
19960
+ return message;
19961
+ }
19962
+ internalBinaryWrite(message: AuthAPI_User, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
19963
+ /* string login = 1; */
19964
+ if (message.login !== "")
19965
+ writer.tag(1, WireType.LengthDelimited).string(message.login);
19966
+ let u = options.writeUnknownFields;
19967
+ if (u !== false)
19968
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
19969
+ return writer;
19970
+ }
19971
+ }
19972
+ /**
19973
+ * @generated MessageType for protobuf message MiLaboratories.PL.API.AuthAPI.User
19974
+ */
19975
+ export const AuthAPI_User = new AuthAPI_User$Type();
19976
+ // @generated message type with reflection information, may provide speed optimized methods
19977
+ class AuthAPI_ListUsers$Type extends MessageType<AuthAPI_ListUsers> {
19978
+ constructor() {
19979
+ super("MiLaboratories.PL.API.AuthAPI.ListUsers", []);
19980
+ }
19981
+ create(value?: PartialMessage<AuthAPI_ListUsers>): AuthAPI_ListUsers {
19982
+ const message = globalThis.Object.create((this.messagePrototype!));
19983
+ if (value !== undefined)
19984
+ reflectionMergePartial<AuthAPI_ListUsers>(this, message, value);
19985
+ return message;
19986
+ }
19987
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AuthAPI_ListUsers): AuthAPI_ListUsers {
19988
+ let message = target ?? this.create(), end = reader.pos + length;
19989
+ while (reader.pos < end) {
19990
+ let [fieldNo, wireType] = reader.tag();
19991
+ switch (fieldNo) {
19992
+ default:
19993
+ let u = options.readUnknownField;
19994
+ if (u === "throw")
19995
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
19996
+ let d = reader.skip(wireType);
19997
+ if (u !== false)
19998
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
19999
+ }
20000
+ }
20001
+ return message;
20002
+ }
20003
+ internalBinaryWrite(message: AuthAPI_ListUsers, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
20004
+ let u = options.writeUnknownFields;
20005
+ if (u !== false)
20006
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
20007
+ return writer;
20008
+ }
20009
+ }
20010
+ /**
20011
+ * @generated MessageType for protobuf message MiLaboratories.PL.API.AuthAPI.ListUsers
20012
+ */
20013
+ export const AuthAPI_ListUsers = new AuthAPI_ListUsers$Type();
20014
+ // @generated message type with reflection information, may provide speed optimized methods
20015
+ class AuthAPI_ListUsers_Request$Type extends MessageType<AuthAPI_ListUsers_Request> {
20016
+ constructor() {
20017
+ super("MiLaboratories.PL.API.AuthAPI.ListUsers.Request", []);
20018
+ }
20019
+ create(value?: PartialMessage<AuthAPI_ListUsers_Request>): AuthAPI_ListUsers_Request {
20020
+ const message = globalThis.Object.create((this.messagePrototype!));
20021
+ if (value !== undefined)
20022
+ reflectionMergePartial<AuthAPI_ListUsers_Request>(this, message, value);
20023
+ return message;
20024
+ }
20025
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AuthAPI_ListUsers_Request): AuthAPI_ListUsers_Request {
20026
+ let message = target ?? this.create(), end = reader.pos + length;
20027
+ while (reader.pos < end) {
20028
+ let [fieldNo, wireType] = reader.tag();
20029
+ switch (fieldNo) {
20030
+ default:
20031
+ let u = options.readUnknownField;
20032
+ if (u === "throw")
20033
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
20034
+ let d = reader.skip(wireType);
20035
+ if (u !== false)
20036
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
20037
+ }
20038
+ }
20039
+ return message;
20040
+ }
20041
+ internalBinaryWrite(message: AuthAPI_ListUsers_Request, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
20042
+ let u = options.writeUnknownFields;
20043
+ if (u !== false)
20044
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
20045
+ return writer;
20046
+ }
20047
+ }
20048
+ /**
20049
+ * @generated MessageType for protobuf message MiLaboratories.PL.API.AuthAPI.ListUsers.Request
20050
+ */
20051
+ export const AuthAPI_ListUsers_Request = new AuthAPI_ListUsers_Request$Type();
20052
+ // @generated message type with reflection information, may provide speed optimized methods
20053
+ class AuthAPI_ListUsers_Response$Type extends MessageType<AuthAPI_ListUsers_Response> {
20054
+ constructor() {
20055
+ super("MiLaboratories.PL.API.AuthAPI.ListUsers.Response", [
20056
+ { no: 1, name: "users", kind: "message", repeat: 2 /*RepeatType.UNPACKED*/, T: () => AuthAPI_User }
20057
+ ]);
20058
+ }
20059
+ create(value?: PartialMessage<AuthAPI_ListUsers_Response>): AuthAPI_ListUsers_Response {
20060
+ const message = globalThis.Object.create((this.messagePrototype!));
20061
+ message.users = [];
20062
+ if (value !== undefined)
20063
+ reflectionMergePartial<AuthAPI_ListUsers_Response>(this, message, value);
20064
+ return message;
20065
+ }
20066
+ internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: AuthAPI_ListUsers_Response): AuthAPI_ListUsers_Response {
20067
+ let message = target ?? this.create(), end = reader.pos + length;
20068
+ while (reader.pos < end) {
20069
+ let [fieldNo, wireType] = reader.tag();
20070
+ switch (fieldNo) {
20071
+ case /* repeated MiLaboratories.PL.API.AuthAPI.User users */ 1:
20072
+ message.users.push(AuthAPI_User.internalBinaryRead(reader, reader.uint32(), options));
20073
+ break;
20074
+ default:
20075
+ let u = options.readUnknownField;
20076
+ if (u === "throw")
20077
+ throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`);
20078
+ let d = reader.skip(wireType);
20079
+ if (u !== false)
20080
+ (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d);
20081
+ }
20082
+ }
20083
+ return message;
20084
+ }
20085
+ internalBinaryWrite(message: AuthAPI_ListUsers_Response, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter {
20086
+ /* repeated MiLaboratories.PL.API.AuthAPI.User users = 1; */
20087
+ for (let i = 0; i < message.users.length; i++)
20088
+ AuthAPI_User.internalBinaryWrite(message.users[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join();
20089
+ let u = options.writeUnknownFields;
20090
+ if (u !== false)
20091
+ (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
20092
+ return writer;
20093
+ }
20094
+ }
20095
+ /**
20096
+ * @generated MessageType for protobuf message MiLaboratories.PL.API.AuthAPI.ListUsers.Response
20097
+ */
20098
+ export const AuthAPI_ListUsers_Response = new AuthAPI_ListUsers_Response$Type();
20099
+ // @generated message type with reflection information, may provide speed optimized methods
19778
20100
  class MiscAPI$Type extends MessageType<MiscAPI> {
19779
20101
  constructor() {
19780
20102
  super("MiLaboratories.PL.API.MiscAPI", []);
@@ -20405,6 +20727,7 @@ export const Platform = new ServiceType("MiLaboratories.PL.API.Platform", [
20405
20727
  { name: "MintSignature", options: { "google.api.http": { post: "/v1/auth/mint-signature", body: "*" } }, I: AuthAPI_MintSignature_Request, O: AuthAPI_MintSignature_Response },
20406
20728
  { name: "GetUserRoot", options: { "google.api.http": { post: "/v1/auth/user-root", body: "*" } }, I: AuthAPI_GetUserRoot_Request, O: AuthAPI_GetUserRoot_Response },
20407
20729
  { name: "ListUserResources", serverStreaming: true, options: {}, I: AuthAPI_ListUserResources_Request, O: AuthAPI_ListUserResources_Response },
20730
+ { name: "ListUsers", options: {}, I: AuthAPI_ListUsers_Request, O: AuthAPI_ListUsers_Response },
20408
20731
  { name: "ListResourceTypes", options: { "google.api.http": { get: "/v1/resource-types" } }, I: MiscAPI_ListResourceTypes_Request, O: MiscAPI_ListResourceTypes_Response },
20409
20732
  { name: "Ping", options: { "google.api.http": { get: "/v1/ping" } }, I: MaintenanceAPI_Ping_Request, O: MaintenanceAPI_Ping_Response },
20410
20733
  { name: "License", options: { "google.api.http": { get: "/v1/license" } }, I: MaintenanceAPI_License_Request, O: MaintenanceAPI_License_Response }
@@ -417,8 +417,8 @@ export interface ResourceSchema {
417
417
  */
418
418
  export interface ResourceSchema_AccessFlags {
419
419
  /**
420
- * Deny-list approach: default = allowed (true)
421
- * Controllers set these to false to restrict non-controller roles (role='u', role='w')
420
+ * Allow-list approach: default = forbidden (false)
421
+ * Controllers set this to true allow non-controller roles (role='u', role='w')
422
422
  *
423
423
  * @generated from protobuf field: optional bool create_resource = 1
424
424
  */
@@ -428,21 +428,21 @@ export interface ResourceSchema_AccessFlags {
428
428
  *
429
429
  * @generated from protobuf field: optional bool read_fields = 2
430
430
  */
431
- readFields?: boolean; // default: true (reads allowed)
431
+ readFields?: boolean; // default: false (reads denied)
432
432
  /**
433
433
  * @generated from protobuf field: optional bool write_fields = 3
434
434
  */
435
- writeFields?: boolean; // default: true (writes allowed)
435
+ writeFields?: boolean; // default: false (writes denied)
436
436
  /**
437
437
  * IMPORTANT: read_kv=false with write_kv=true is a forbidden combination
438
438
  *
439
439
  * @generated from protobuf field: optional bool read_kv = 4
440
440
  */
441
- readKv?: boolean; // if unset, falls back to read_fields
441
+ readKv?: boolean; // default: false (KV reads denied)
442
442
  /**
443
443
  * @generated from protobuf field: optional bool write_kv = 5
444
444
  */
445
- writeKv?: boolean; // if unset, falls back to write_fields
445
+ writeKv?: boolean; // default: false (KV writes denied)
446
446
  /**
447
447
  * Per-field-type overrides (map: field_type → bool)
448
448
  * When defined for a field type, overrides resource-level flags
@@ -458,6 +458,13 @@ export interface ResourceSchema_AccessFlags {
458
458
  writeByFieldType: {
459
459
  [key: number]: boolean;
460
460
  };
461
+ /**
462
+ * Allows non-controller roles (role='u', role='w') to set error on the resource,
463
+ * marking it as failed and dropping it from recovery/deduplication indicies.
464
+ *
465
+ * @generated from protobuf field: optional bool set_error = 8
466
+ */
467
+ setError?: boolean; // default: true (allowed)
461
468
  }
462
469
  /**
463
470
  * @generated from protobuf message MiLaboratories.PL.API.FieldSchema
@@ -1506,7 +1513,8 @@ class ResourceSchema_AccessFlags$Type extends MessageType<ResourceSchema_AccessF
1506
1513
  { no: 4, name: "read_kv", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
1507
1514
  { no: 5, name: "write_kv", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ },
1508
1515
  { no: 6, name: "read_by_field_type", kind: "map", K: 13 /*ScalarType.UINT32*/, V: { kind: "scalar", T: 8 /*ScalarType.BOOL*/ } },
1509
- { no: 7, name: "write_by_field_type", kind: "map", K: 13 /*ScalarType.UINT32*/, V: { kind: "scalar", T: 8 /*ScalarType.BOOL*/ } }
1516
+ { no: 7, name: "write_by_field_type", kind: "map", K: 13 /*ScalarType.UINT32*/, V: { kind: "scalar", T: 8 /*ScalarType.BOOL*/ } },
1517
+ { no: 8, name: "set_error", kind: "scalar", opt: true, T: 8 /*ScalarType.BOOL*/ }
1510
1518
  ]);
1511
1519
  }
1512
1520
  create(value?: PartialMessage<ResourceSchema_AccessFlags>): ResourceSchema_AccessFlags {
@@ -1543,6 +1551,9 @@ class ResourceSchema_AccessFlags$Type extends MessageType<ResourceSchema_AccessF
1543
1551
  case /* map<uint32, bool> write_by_field_type */ 7:
1544
1552
  this.binaryReadMap7(message.writeByFieldType, reader, options);
1545
1553
  break;
1554
+ case /* optional bool set_error */ 8:
1555
+ message.setError = reader.bool();
1556
+ break;
1546
1557
  default:
1547
1558
  let u = options.readUnknownField;
1548
1559
  if (u === "throw")
@@ -1608,6 +1619,9 @@ class ResourceSchema_AccessFlags$Type extends MessageType<ResourceSchema_AccessF
1608
1619
  /* map<uint32, bool> write_by_field_type = 7; */
1609
1620
  for (let k of globalThis.Object.keys(message.writeByFieldType))
1610
1621
  writer.tag(7, WireType.LengthDelimited).fork().tag(1, WireType.Varint).uint32(parseInt(k)).tag(2, WireType.Varint).bool(message.writeByFieldType[k as any]).join();
1622
+ /* optional bool set_error = 8; */
1623
+ if (message.setError !== undefined)
1624
+ writer.tag(8, WireType.Varint).bool(message.setError);
1611
1625
  let u = options.writeUnknownFields;
1612
1626
  if (u !== false)
1613
1627
  (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
@@ -576,6 +576,15 @@ export interface components {
576
576
  nonce: string;
577
577
  /** Format: date-time */
578
578
  expiresAt: string;
579
+ /**
580
+ * @description Confidential-client secret for the IdP token exchange; absent for public clients.
581
+ * Rationale: Google's OIDC does not support public clients — it requires a
582
+ * client_secret at the token endpoint even for the PKCE auth-code flow. That is a
583
+ * gap in Google Cloud OIDC: a desktop app cannot use Google OIDC without the secret
584
+ * leaving the server. So the backend holds the secret and forwards it here to the
585
+ * desktop, which performs the token exchange as a confidential client.
586
+ */
587
+ clientSecret: string;
579
588
  };
580
589
  AuthAPI_BeginSSOLogin_Request: Record<string, never>;
581
590
  AuthAPI_BeginSSOLogin_Response: {
@@ -657,6 +666,7 @@ export interface components {
657
666
  groupsClaim: string;
658
667
  /** Format: enum */
659
668
  flowType: number;
669
+ accessType: string;
660
670
  };
661
671
  AuthAPI_ListMethods_TokenAuthMethod: Record<string, never>;
662
672
  AuthAPI_Login_BasicCredentials: {
@@ -957,14 +967,20 @@ export interface components {
957
967
  os: string;
958
968
  arch: string;
959
969
  /**
960
- * @description Opt-in capabilities advertised by this server instance, used by
961
- * clients to pick between fast and fallback code paths without waiting
962
- * for a failed RPC.
970
+ * @description Opt-in capabilities advertised by this server instance. Two
971
+ * client-side usage modes share this same wire field, decided
972
+ * per-token by the client:
973
+ * - Optimization hint. Client picks between a fast path and a
974
+ * fallback without probing by trial-and-error; missing tokens
975
+ * just cause the fallback to run (e.g. "treeFilter:v2").
976
+ * - Install-time gate. Client refuses to install a block whose
977
+ * manifest declares a required capability the server doesn't
978
+ * advertise; missing tokens fail closed (e.g. "wasm:v1").
963
979
  *
964
980
  * Each entry is an opaque token "<feature>:<version>" (e.g.
965
- * "loadSubtree:v1"). Unrecognized tokens are ignored by the client.
966
- * The field is unset on servers predating this mechanism, which the
967
- * client treats as "no optional capabilities advertised".
981
+ * "treeFilter:v2"). The field is unset on servers predating this
982
+ * mechanism, which the client treats as "no optional capabilities
983
+ * advertised" — fallback for hints, fail-closed for gates.
968
984
  *
969
985
  * All list see pl/platform/api/plapiserver/server_capabilities.go
970
986
  */
@@ -1063,8 +1079,8 @@ export interface components {
1063
1079
  };
1064
1080
  ResourceSchema_AccessFlags: {
1065
1081
  /**
1066
- * @description Deny-list approach: default = allowed (true)
1067
- * Controllers set these to false to restrict non-controller roles (role='u', role='w')
1082
+ * @description Allow-list approach: default = forbidden (false)
1083
+ * Controllers set this to true allow non-controller roles (role='u', role='w')
1068
1084
  */
1069
1085
  createResource: boolean;
1070
1086
  /** @description IMPORTANT: read_fields=false with write_fields=true is a forbidden combination */
@@ -1083,6 +1099,11 @@ export interface components {
1083
1099
  writeByFieldType: {
1084
1100
  [key: string]: boolean;
1085
1101
  };
1102
+ /**
1103
+ * @description Allows non-controller roles (role='u', role='w') to set error on the resource,
1104
+ * marking it as failed and dropping it from recovery/deduplication indicies.
1105
+ */
1106
+ setError: boolean;
1086
1107
  };
1087
1108
  ResourceType: {
1088
1109
  name: string;