From bac64ac3a7890543fe62c27367c0ae22530b600a Mon Sep 17 00:00:00 2001 From: Antoine Toussaint Date: Mon, 6 Jul 2026 16:10:47 -0400 Subject: [PATCH 1/2] accounts+frontend: user edit/delete, team update/delete, session revoke, settings Backend (accounts): UpdateUser honors target uuid w/ self-or-admin gate; add UpdateTeam/DeleteTeam + RevokeSession RPCs (proto + Go + connect handlers, regenerated); fix RLS-scoping on self-writes (consent/settings/user CRUD now wrap store.As(Identity).Within, team writes WithOrgTx, session revoke WithBypass) so they don't silently no-op under RLS; fix UserSettings store using WHERE id vs uuid; fix buf.gen go_package_prefix (api->accounts). Frontend: user edit/delete dialogs, team rename/delete, session force-logout, notification-settings wired to real UserSettings.notifications, settings mutation takes a MessageInitShape. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../code/pkg/adapters/connect_handlers.go | 9 + .../accounts/code/pkg/adapters/rpcs.go | 68 +- .../accounts/code/pkg/business/consent.go | 8 +- .../code/pkg/business/platform_admin.go | 24 + .../accounts/code/pkg/business/store.go | 2 + .../accounts/code/pkg/business/teams.go | 41 + .../code/pkg/business/user_settings.go | 7 +- .../accounts/code/pkg/business/users.go | 26 +- .../services/accounts/code/pkg/gen/api.pb.go | 2190 +++++++++-------- .../accounts/code/pkg/gen/api.pb.gw.go | 343 +++ .../accounts/code/pkg/gen/api_grpc.pb.go | 114 + .../code/pkg/gen/genconnect/api.connect.go | 85 + .../accounts/code/pkg/infra/postgres_team.go | 46 + .../code/pkg/infra/postgres_user_settings.go | 4 +- .../accounts/openapi/api.swagger.json | 120 + module/services/accounts/proto/api.proto | 31 + module/services/accounts/proto/buf.gen.yaml | 2 +- .../ui/notification-settings.tsx | 187 +- .../features/platform/service/mutations.ts | 10 + .../features/platform/ui/sessions-page.tsx | 111 +- .../src/features/teams/service/mutations.ts | 5 + .../code/src/features/teams/ui/team-form.tsx | 16 +- .../code/src/features/teams/ui/teams-page.tsx | 77 +- .../src/features/teams/ui/teams-table.tsx | 20 +- .../user-settings/service/mutations.ts | 19 +- .../code/src/features/users/model/schemas.ts | 10 + .../src/features/users/service/mutations.ts | 25 +- .../features/users/ui/delete-user-dialog.tsx | 48 + .../src/features/users/ui/edit-user-form.tsx | 90 + .../code/src/features/users/ui/users-page.tsx | 50 +- .../src/features/users/ui/users-table.tsx | 20 +- .../code/src/gen/saas-starter_api_grpc_pb.ts | 1647 +++++++++++-- 32 files changed, 4023 insertions(+), 1432 deletions(-) create mode 100644 module/services/frontend/code/src/features/users/ui/delete-user-dialog.tsx create mode 100644 module/services/frontend/code/src/features/users/ui/edit-user-form.tsx diff --git a/module/services/accounts/code/pkg/adapters/connect_handlers.go b/module/services/accounts/code/pkg/adapters/connect_handlers.go index c7af3ccb..bd303a9f 100644 --- a/module/services/accounts/code/pkg/adapters/connect_handlers.go +++ b/module/services/accounts/code/pkg/adapters/connect_handlers.go @@ -253,6 +253,12 @@ func (h *teamConnectHandler) RemoveMember(ctx context.Context, req *connect.Requ func (h *teamConnectHandler) ListMembers(ctx context.Context, req *connect.Request[gen.ListTeamMembersRequest]) (*connect.Response[gen.ListTeamMembersResponse], error) { return unary(ctx, req, h.inner.ListMembers) } +func (h *teamConnectHandler) UpdateTeam(ctx context.Context, req *connect.Request[gen.UpdateTeamRequest]) (*connect.Response[gen.UpdateTeamResponse], error) { + return unary(ctx, req, h.inner.UpdateTeam) +} +func (h *teamConnectHandler) DeleteTeam(ctx context.Context, req *connect.Request[gen.DeleteTeamRequest]) (*connect.Response[emptypb.Empty], error) { + return unary(ctx, req, h.inner.DeleteTeam) +} // ============================================================================ // PermissionService @@ -400,6 +406,9 @@ func (h *platformAdminConnectHandler) ImpersonateUser(ctx context.Context, req * func (h *platformAdminConnectHandler) ListActiveSessions(ctx context.Context, req *connect.Request[gen.ListActiveSessionsRequest]) (*connect.Response[gen.ListActiveSessionsResponse], error) { return unary(ctx, req, h.inner.ListActiveSessions) } +func (h *platformAdminConnectHandler) RevokeSession(ctx context.Context, req *connect.Request[gen.RevokeSessionRequest]) (*connect.Response[emptypb.Empty], error) { + return unary(ctx, req, h.inner.RevokeSession) +} func (h *platformAdminConnectHandler) GetOrgEntitlements(ctx context.Context, req *connect.Request[gen.GetOrgEntitlementsRequest]) (*connect.Response[gen.GetOrgEntitlementsResponse], error) { return unary(ctx, req, h.inner.GetOrgEntitlements) } diff --git a/module/services/accounts/code/pkg/adapters/rpcs.go b/module/services/accounts/code/pkg/adapters/rpcs.go index c38b2366..65d41db4 100644 --- a/module/services/accounts/code/pkg/adapters/rpcs.go +++ b/module/services/accounts/code/pkg/adapters/rpcs.go @@ -87,16 +87,21 @@ func (s *UserServer) UpdateUser(ctx context.Context, req *gen.UpdateUserRequest) if err := Validate(req); err != nil { return nil, err } - w := wool.Get(ctx).In("UpdateUser") - w.GRPC().Inject() - userID, found := w.UserAuthID() - if !found { - return nil, status.Error(codes.Unauthenticated, "user id not found") + actorID, err := requireAuth(ctx) + if err != nil { + return nil, err + } + // The target is the request's uuid (validated). The caller must be that user + // (self-service profile edit) or a platform admin (the admin Users table) — + // the same gate DeleteUser uses. Previously this ignored req.Uuid and updated + // the caller, so an admin could never edit another user. + if err := requireSelfOrPlatformAdmin(ctx, actorID, req.Uuid); err != nil { + return nil, err } if err := requireScope(ctx, "users:write"); err != nil { return nil, err } - return service.UpdateUser(ctx, userID, req) + return service.UpdateUser(ctx, req.Uuid, req) } func (s *UserServer) DeleteUser(ctx context.Context, req *gen.GetUserRequest) (*emptypb.Empty, error) { @@ -358,6 +363,41 @@ func (s *TeamServer) ListMembers(ctx context.Context, req *gen.ListTeamMembersRe return service.ListTeamMembers(ctx, req) } +func (s *TeamServer) UpdateTeam(ctx context.Context, req *gen.UpdateTeamRequest) (*gen.UpdateTeamResponse, error) { + if err := Validate(req); err != nil { + return nil, err + } + actorID, err := requireAuth(ctx) + if err != nil { + return nil, err + } + orgID, err := requireTeamAdmin(ctx, actorID, req.TeamId) + if err != nil { + return nil, err + } + ctx = business.WithCachedTeamOrgID(ctx, req.TeamId, orgID) + return service.UpdateTeam(ctx, actorID, req) +} + +func (s *TeamServer) DeleteTeam(ctx context.Context, req *gen.DeleteTeamRequest) (*emptypb.Empty, error) { + if err := Validate(req); err != nil { + return nil, err + } + actorID, err := requireAuth(ctx) + if err != nil { + return nil, err + } + orgID, err := requireTeamAdmin(ctx, actorID, req.TeamId) + if err != nil { + return nil, err + } + ctx = business.WithCachedTeamOrgID(ctx, req.TeamId, orgID) + if err := service.DeleteTeam(ctx, actorID, req); err != nil { + return nil, err + } + return &emptypb.Empty{}, nil +} + // ============================================================================ // PermissionService RPCs (on PermServer) // ============================================================================ @@ -848,6 +888,22 @@ func (s *PlatformAdminServer) ListActiveSessions(ctx context.Context, req *gen.L return service.ListActiveSessions(ctx, actorID, req) } +func (s *PlatformAdminServer) RevokeSession(ctx context.Context, req *gen.RevokeSessionRequest) (*emptypb.Empty, error) { + if err := Validate(req); err != nil { + return nil, err + } + w := wool.Get(ctx).In("RevokeSession") + w.GRPC().Inject() + actorID, found := w.UserAuthID() + if !found { + return nil, status.Error(codes.Unauthenticated, "user id not found") + } + if err := service.RevokeSession(ctx, actorID, req); err != nil { + return nil, err + } + return &emptypb.Empty{}, nil +} + func (s *PlatformAdminServer) GetOrgEntitlements(ctx context.Context, req *gen.GetOrgEntitlementsRequest) (*gen.GetOrgEntitlementsResponse, error) { if err := Validate(req); err != nil { return nil, err diff --git a/module/services/accounts/code/pkg/business/consent.go b/module/services/accounts/code/pkg/business/consent.go index 346aed9f..ab9ca6c2 100644 --- a/module/services/accounts/code/pkg/business/consent.go +++ b/module/services/accounts/code/pkg/business/consent.go @@ -50,7 +50,13 @@ func (s *Service) GetConsentStatus(ctx context.Context, userID string) (*UserCon // version the user actually saw is more honest than refusing the // click. Next page load they'll see the new version and accept it. func (s *Service) AcceptConsent(ctx context.Context, userID, version string) error { - if err := s.store.SetUserConsent(ctx, userID, version, time.Now()); err != nil { + // The write targets the caller's own users row, which is RLS-protected + // (users_update: uuid == app.current_user_id). Scope the tx to the user so + // the GUC is set — without this the UPDATE matches zero rows under the + // app_tenant role and consent silently never persists (banner reappears). + if err := s.store.As(Identity{UserID: userID}).Within(ctx, func(ctx context.Context) error { + return s.store.SetUserConsent(ctx, userID, version, time.Now()) + }); err != nil { return err } s.emit(ctx, userID, "user", "consent.accepted", "user", userID, "") diff --git a/module/services/accounts/code/pkg/business/platform_admin.go b/module/services/accounts/code/pkg/business/platform_admin.go index 31624a4c..7491db08 100644 --- a/module/services/accounts/code/pkg/business/platform_admin.go +++ b/module/services/accounts/code/pkg/business/platform_admin.go @@ -210,6 +210,30 @@ func (s *Service) ListActiveSessions(ctx context.Context, actorID string, req *g return &gen.ListActiveSessionsResponse{Sessions: infos}, nil } +// RevokeSession force-logs-out one active session by id (support+ only). A platform +// admin acts across all users, so the write rides WithBypass (RLS would otherwise scope +// the sessions table to the caller). +func (s *Service) RevokeSession(ctx context.Context, actorID string, req *gen.RevokeSessionRequest) error { + w := wool.Get(ctx).In("RevokeSession") + + if err := s.requirePlatformRole(ctx, actorID, "support"); err != nil { + return w.Wrapf(err, "permission denied") + } + + reason := req.Reason + if reason == "" { + reason = "revoked_by_admin" + } + if err := s.store.WithBypass(ctx, func(ctx context.Context) error { + return s.store.RevokeSession(ctx, req.SessionId, reason) + }); err != nil { + return w.Wrapf(err, "cannot revoke session") + } + + s.emit(ctx, actorID, "user", "session.revoked", "session", req.SessionId, "") + return nil +} + // GrantPlatformRole grants a platform role to a user (super_admin only). func (s *Service) GrantPlatformRole(ctx context.Context, actorID string, req *gen.GrantPlatformRoleRequest) error { w := wool.Get(ctx).In("GrantPlatformRole") diff --git a/module/services/accounts/code/pkg/business/store.go b/module/services/accounts/code/pkg/business/store.go index 800bf5e4..39ed124f 100644 --- a/module/services/accounts/code/pkg/business/store.go +++ b/module/services/accounts/code/pkg/business/store.go @@ -61,6 +61,8 @@ type Store interface { // Teams CreateTeam(ctx context.Context, team *gen.Team) error ListTeams(ctx context.Context, orgID string) ([]*gen.Team, error) + UpdateTeam(ctx context.Context, teamID, name, description string) (*gen.Team, error) + DeleteTeam(ctx context.Context, teamID string) error AddTeamMember(ctx context.Context, teamID string, userID string, role string) error RemoveTeamMember(ctx context.Context, teamID string, userID string) error ListTeamMembers(ctx context.Context, teamID string) ([]*gen.TeamMembership, error) diff --git a/module/services/accounts/code/pkg/business/teams.go b/module/services/accounts/code/pkg/business/teams.go index e1a0af2b..d4da1397 100644 --- a/module/services/accounts/code/pkg/business/teams.go +++ b/module/services/accounts/code/pkg/business/teams.go @@ -77,6 +77,47 @@ func (s *Service) RemoveTeamMember(ctx context.Context, actorID string, req *gen return nil } +// UpdateTeam renames / re-describes a team. Org-scoped like the other team writes. +func (s *Service) UpdateTeam(ctx context.Context, actorID string, req *gen.UpdateTeamRequest) (*gen.UpdateTeamResponse, error) { + w := wool.Get(ctx).In("UpdateTeam") + + orgID, err := s.resolveTeamOrg(ctx, req.TeamId) + if err != nil { + return nil, w.Wrapf(err, "cannot resolve team org") + } + + var team *gen.Team + if err := s.store.WithOrgTx(ctx, orgID, func(ctx context.Context) error { + t, err := s.store.UpdateTeam(ctx, req.TeamId, req.Name, req.Description) + team = t + return err + }); err != nil { + return nil, w.Wrapf(err, "cannot update team") + } + + s.emit(ctx, actorID, "user", "team.updated", "team", req.TeamId, orgID) + return &gen.UpdateTeamResponse{Team: team}, nil +} + +// DeleteTeam removes a team (and its memberships). Org-scoped. +func (s *Service) DeleteTeam(ctx context.Context, actorID string, req *gen.DeleteTeamRequest) error { + w := wool.Get(ctx).In("DeleteTeam") + + orgID, err := s.resolveTeamOrg(ctx, req.TeamId) + if err != nil { + return w.Wrapf(err, "cannot resolve team org") + } + + if err := s.store.WithOrgTx(ctx, orgID, func(ctx context.Context) error { + return s.store.DeleteTeam(ctx, req.TeamId) + }); err != nil { + return w.Wrapf(err, "cannot delete team") + } + + s.emit(ctx, actorID, "user", "team.deleted", "team", req.TeamId, orgID) + return nil +} + // ListTeamMembers lists all members of a team. func (s *Service) ListTeamMembers(ctx context.Context, req *gen.ListTeamMembersRequest) (*gen.ListTeamMembersResponse, error) { w := wool.Get(ctx).In("ListTeamMembers") diff --git a/module/services/accounts/code/pkg/business/user_settings.go b/module/services/accounts/code/pkg/business/user_settings.go index 6c887fb6..57b0e7c5 100644 --- a/module/services/accounts/code/pkg/business/user_settings.go +++ b/module/services/accounts/code/pkg/business/user_settings.go @@ -91,7 +91,12 @@ func (s *Service) UpdateUserSettings(ctx context.Context, userID string, patch * if err != nil { return nil, fmt.Errorf("encode patch: %w", err) } - if err := s.store.UpdateUserSettings(ctx, userID, body); err != nil { + // Settings live on the RLS-protected users row; scope the tx to the user so + // app.current_user_id is set (else the UPDATE silently matches zero rows and + // settings never persist — same class of bug as consent). + if err := s.store.As(Identity{UserID: userID}).Within(ctx, func(ctx context.Context) error { + return s.store.UpdateUserSettings(ctx, userID, body) + }); err != nil { return nil, err } s.emit(ctx, userID, "user", "settings.updated", "user", userID, "") diff --git a/module/services/accounts/code/pkg/business/users.go b/module/services/accounts/code/pkg/business/users.go index ce8cc867..fd448579 100644 --- a/module/services/accounts/code/pkg/business/users.go +++ b/module/services/accounts/code/pkg/business/users.go @@ -103,8 +103,16 @@ func (s *Service) UpdateUser(ctx context.Context, userID string, req *gen.Update return s.store.GetUser(ctx, userID) } - user, err := s.store.UpdateUser(ctx, userID, updates) - if err != nil { + // The users row is RLS-protected (users_update: uuid == app.current_user_id). + // Scope to the TARGET user so the GUC is set — this permits both the self-edit + // and the admin-edits-another case (the row being updated IS the scoped id). + // Without it the UPDATE silently matches zero rows under the app_tenant role. + var user *gen.User + if err := s.store.As(Identity{UserID: userID}).Within(ctx, func(ctx context.Context) error { + u, e := s.store.UpdateUser(ctx, userID, updates) + user = u + return e + }); err != nil { return nil, w.Wrapf(err, "cannot update user") } @@ -120,13 +128,19 @@ func (s *Service) DeleteUser(ctx context.Context, userID string, req *gen.GetUse if targetID == "" { return w.NewError("uuid required for delete") } - if err := s.store.DeleteUser(ctx, targetID); err != nil { + // Scope to the target so the RLS users_delete policy (uuid == app.current_user_id) + // permits the soft-delete; the session revoke rides the same scope. + if err := s.store.As(Identity{UserID: targetID}).Within(ctx, func(ctx context.Context) error { + if err := s.store.DeleteUser(ctx, targetID); err != nil { + return err + } + // Revoke all sessions (best-effort) + _ = s.store.RevokeAllUserSessions(ctx, targetID, "user_deleted") + return nil + }); err != nil { return w.Wrapf(err, "cannot delete user") } - // Revoke all sessions - _ = s.store.RevokeAllUserSessions(ctx, targetID, "user_deleted") - s.emit(ctx, userID, "user", "user.deleted", "user", targetID, "") return nil } diff --git a/module/services/accounts/code/pkg/gen/api.pb.go b/module/services/accounts/code/pkg/gen/api.pb.go index 5aa3a151..4589fb55 100644 --- a/module/services/accounts/code/pkg/gen/api.pb.go +++ b/module/services/accounts/code/pkg/gen/api.pb.go @@ -3269,6 +3269,154 @@ func (x *RemoveTeamMemberRequest) GetUserId() string { return "" } +type UpdateTeamRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TeamId string `protobuf:"bytes,1,opt,name=team_id,json=teamId,proto3" json:"team_id,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Description string `protobuf:"bytes,3,opt,name=description,proto3" json:"description,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateTeamRequest) Reset() { + *x = UpdateTeamRequest{} + mi := &file_api_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateTeamRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTeamRequest) ProtoMessage() {} + +func (x *UpdateTeamRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTeamRequest.ProtoReflect.Descriptor instead. +func (*UpdateTeamRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{42} +} + +func (x *UpdateTeamRequest) GetTeamId() string { + if x != nil { + return x.TeamId + } + return "" +} + +func (x *UpdateTeamRequest) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *UpdateTeamRequest) GetDescription() string { + if x != nil { + return x.Description + } + return "" +} + +type UpdateTeamResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Team *Team `protobuf:"bytes,1,opt,name=team,proto3" json:"team,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UpdateTeamResponse) Reset() { + *x = UpdateTeamResponse{} + mi := &file_api_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UpdateTeamResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UpdateTeamResponse) ProtoMessage() {} + +func (x *UpdateTeamResponse) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UpdateTeamResponse.ProtoReflect.Descriptor instead. +func (*UpdateTeamResponse) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{43} +} + +func (x *UpdateTeamResponse) GetTeam() *Team { + if x != nil { + return x.Team + } + return nil +} + +type DeleteTeamRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + TeamId string `protobuf:"bytes,1,opt,name=team_id,json=teamId,proto3" json:"team_id,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteTeamRequest) Reset() { + *x = DeleteTeamRequest{} + mi := &file_api_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteTeamRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteTeamRequest) ProtoMessage() {} + +func (x *DeleteTeamRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteTeamRequest.ProtoReflect.Descriptor instead. +func (*DeleteTeamRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{44} +} + +func (x *DeleteTeamRequest) GetTeamId() string { + if x != nil { + return x.TeamId + } + return "" +} + type ListTeamMembersRequest struct { state protoimpl.MessageState `protogen:"open.v1"` TeamId string `protobuf:"bytes,1,opt,name=team_id,json=teamId,proto3" json:"team_id,omitempty"` @@ -3278,7 +3426,7 @@ type ListTeamMembersRequest struct { func (x *ListTeamMembersRequest) Reset() { *x = ListTeamMembersRequest{} - mi := &file_api_proto_msgTypes[42] + mi := &file_api_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3290,7 +3438,7 @@ func (x *ListTeamMembersRequest) String() string { func (*ListTeamMembersRequest) ProtoMessage() {} func (x *ListTeamMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[42] + mi := &file_api_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3303,7 +3451,7 @@ func (x *ListTeamMembersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTeamMembersRequest.ProtoReflect.Descriptor instead. func (*ListTeamMembersRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{42} + return file_api_proto_rawDescGZIP(), []int{45} } func (x *ListTeamMembersRequest) GetTeamId() string { @@ -3322,7 +3470,7 @@ type ListTeamMembersResponse struct { func (x *ListTeamMembersResponse) Reset() { *x = ListTeamMembersResponse{} - mi := &file_api_proto_msgTypes[43] + mi := &file_api_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3334,7 +3482,7 @@ func (x *ListTeamMembersResponse) String() string { func (*ListTeamMembersResponse) ProtoMessage() {} func (x *ListTeamMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[43] + mi := &file_api_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3347,7 +3495,7 @@ func (x *ListTeamMembersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListTeamMembersResponse.ProtoReflect.Descriptor instead. func (*ListTeamMembersResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{43} + return file_api_proto_rawDescGZIP(), []int{46} } func (x *ListTeamMembersResponse) GetMembers() []*TeamMembership { @@ -3369,7 +3517,7 @@ type CreateRoleRequest struct { func (x *CreateRoleRequest) Reset() { *x = CreateRoleRequest{} - mi := &file_api_proto_msgTypes[44] + mi := &file_api_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3381,7 +3529,7 @@ func (x *CreateRoleRequest) String() string { func (*CreateRoleRequest) ProtoMessage() {} func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[44] + mi := &file_api_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3394,7 +3542,7 @@ func (x *CreateRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRoleRequest.ProtoReflect.Descriptor instead. func (*CreateRoleRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{44} + return file_api_proto_rawDescGZIP(), []int{47} } func (x *CreateRoleRequest) GetName() string { @@ -3434,7 +3582,7 @@ type CreateRoleResponse struct { func (x *CreateRoleResponse) Reset() { *x = CreateRoleResponse{} - mi := &file_api_proto_msgTypes[45] + mi := &file_api_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3446,7 +3594,7 @@ func (x *CreateRoleResponse) String() string { func (*CreateRoleResponse) ProtoMessage() {} func (x *CreateRoleResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[45] + mi := &file_api_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3459,7 +3607,7 @@ func (x *CreateRoleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRoleResponse.ProtoReflect.Descriptor instead. func (*CreateRoleResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{45} + return file_api_proto_rawDescGZIP(), []int{48} } func (x *CreateRoleResponse) GetRole() *Role { @@ -3478,7 +3626,7 @@ type ListRolesRequest struct { func (x *ListRolesRequest) Reset() { *x = ListRolesRequest{} - mi := &file_api_proto_msgTypes[46] + mi := &file_api_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3490,7 +3638,7 @@ func (x *ListRolesRequest) String() string { func (*ListRolesRequest) ProtoMessage() {} func (x *ListRolesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[46] + mi := &file_api_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3503,7 +3651,7 @@ func (x *ListRolesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRolesRequest.ProtoReflect.Descriptor instead. func (*ListRolesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{46} + return file_api_proto_rawDescGZIP(), []int{49} } func (x *ListRolesRequest) GetOrgId() string { @@ -3522,7 +3670,7 @@ type ListRolesResponse struct { func (x *ListRolesResponse) Reset() { *x = ListRolesResponse{} - mi := &file_api_proto_msgTypes[47] + mi := &file_api_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3534,7 +3682,7 @@ func (x *ListRolesResponse) String() string { func (*ListRolesResponse) ProtoMessage() {} func (x *ListRolesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[47] + mi := &file_api_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3547,7 +3695,7 @@ func (x *ListRolesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRolesResponse.ProtoReflect.Descriptor instead. func (*ListRolesResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{47} + return file_api_proto_rawDescGZIP(), []int{50} } func (x *ListRolesResponse) GetRoles() []*Role { @@ -3566,7 +3714,7 @@ type DeleteRoleRequest struct { func (x *DeleteRoleRequest) Reset() { *x = DeleteRoleRequest{} - mi := &file_api_proto_msgTypes[48] + mi := &file_api_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3578,7 +3726,7 @@ func (x *DeleteRoleRequest) String() string { func (*DeleteRoleRequest) ProtoMessage() {} func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[48] + mi := &file_api_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3591,7 +3739,7 @@ func (x *DeleteRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRoleRequest.ProtoReflect.Descriptor instead. func (*DeleteRoleRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{48} + return file_api_proto_rawDescGZIP(), []int{51} } func (x *DeleteRoleRequest) GetId() string { @@ -3614,7 +3762,7 @@ type AssignRoleRequest struct { func (x *AssignRoleRequest) Reset() { *x = AssignRoleRequest{} - mi := &file_api_proto_msgTypes[49] + mi := &file_api_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3626,7 +3774,7 @@ func (x *AssignRoleRequest) String() string { func (*AssignRoleRequest) ProtoMessage() {} func (x *AssignRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[49] + mi := &file_api_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3639,7 +3787,7 @@ func (x *AssignRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignRoleRequest.ProtoReflect.Descriptor instead. func (*AssignRoleRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{49} + return file_api_proto_rawDescGZIP(), []int{52} } func (x *AssignRoleRequest) GetSubjectId() string { @@ -3686,7 +3834,7 @@ type AssignRoleResponse struct { func (x *AssignRoleResponse) Reset() { *x = AssignRoleResponse{} - mi := &file_api_proto_msgTypes[50] + mi := &file_api_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3698,7 +3846,7 @@ func (x *AssignRoleResponse) String() string { func (*AssignRoleResponse) ProtoMessage() {} func (x *AssignRoleResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[50] + mi := &file_api_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3711,7 +3859,7 @@ func (x *AssignRoleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignRoleResponse.ProtoReflect.Descriptor instead. func (*AssignRoleResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{50} + return file_api_proto_rawDescGZIP(), []int{53} } func (x *AssignRoleResponse) GetAssignment() *RoleAssignment { @@ -3733,7 +3881,7 @@ type RevokeRoleRequest struct { func (x *RevokeRoleRequest) Reset() { *x = RevokeRoleRequest{} - mi := &file_api_proto_msgTypes[51] + mi := &file_api_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3745,7 +3893,7 @@ func (x *RevokeRoleRequest) String() string { func (*RevokeRoleRequest) ProtoMessage() {} func (x *RevokeRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[51] + mi := &file_api_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3758,7 +3906,7 @@ func (x *RevokeRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeRoleRequest.ProtoReflect.Descriptor instead. func (*RevokeRoleRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{51} + return file_api_proto_rawDescGZIP(), []int{54} } func (x *RevokeRoleRequest) GetSubjectId() string { @@ -3804,7 +3952,7 @@ type ListRoleAssignmentsRequest struct { func (x *ListRoleAssignmentsRequest) Reset() { *x = ListRoleAssignmentsRequest{} - mi := &file_api_proto_msgTypes[52] + mi := &file_api_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3816,7 +3964,7 @@ func (x *ListRoleAssignmentsRequest) String() string { func (*ListRoleAssignmentsRequest) ProtoMessage() {} func (x *ListRoleAssignmentsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[52] + mi := &file_api_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3829,7 +3977,7 @@ func (x *ListRoleAssignmentsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRoleAssignmentsRequest.ProtoReflect.Descriptor instead. func (*ListRoleAssignmentsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{52} + return file_api_proto_rawDescGZIP(), []int{55} } func (x *ListRoleAssignmentsRequest) GetOrgId() string { @@ -3862,7 +4010,7 @@ type ListRoleAssignmentsResponse struct { func (x *ListRoleAssignmentsResponse) Reset() { *x = ListRoleAssignmentsResponse{} - mi := &file_api_proto_msgTypes[53] + mi := &file_api_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3874,7 +4022,7 @@ func (x *ListRoleAssignmentsResponse) String() string { func (*ListRoleAssignmentsResponse) ProtoMessage() {} func (x *ListRoleAssignmentsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[53] + mi := &file_api_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3887,7 +4035,7 @@ func (x *ListRoleAssignmentsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListRoleAssignmentsResponse.ProtoReflect.Descriptor instead. func (*ListRoleAssignmentsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{53} + return file_api_proto_rawDescGZIP(), []int{56} } func (x *ListRoleAssignmentsResponse) GetAssignments() []*RoleAssignment { @@ -3911,7 +4059,7 @@ type CheckPermissionRequest struct { func (x *CheckPermissionRequest) Reset() { *x = CheckPermissionRequest{} - mi := &file_api_proto_msgTypes[54] + mi := &file_api_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3923,7 +4071,7 @@ func (x *CheckPermissionRequest) String() string { func (*CheckPermissionRequest) ProtoMessage() {} func (x *CheckPermissionRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[54] + mi := &file_api_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3936,7 +4084,7 @@ func (x *CheckPermissionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckPermissionRequest.ProtoReflect.Descriptor instead. func (*CheckPermissionRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{54} + return file_api_proto_rawDescGZIP(), []int{57} } func (x *CheckPermissionRequest) GetSubjectId() string { @@ -3991,7 +4139,7 @@ type CheckPermissionResponse struct { func (x *CheckPermissionResponse) Reset() { *x = CheckPermissionResponse{} - mi := &file_api_proto_msgTypes[55] + mi := &file_api_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4003,7 +4151,7 @@ func (x *CheckPermissionResponse) String() string { func (*CheckPermissionResponse) ProtoMessage() {} func (x *CheckPermissionResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[55] + mi := &file_api_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4016,7 +4164,7 @@ func (x *CheckPermissionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CheckPermissionResponse.ProtoReflect.Descriptor instead. func (*CheckPermissionResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{55} + return file_api_proto_rawDescGZIP(), []int{58} } func (x *CheckPermissionResponse) GetAllowed() bool { @@ -4081,7 +4229,7 @@ type DecideRequest struct { func (x *DecideRequest) Reset() { *x = DecideRequest{} - mi := &file_api_proto_msgTypes[56] + mi := &file_api_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4093,7 +4241,7 @@ func (x *DecideRequest) String() string { func (*DecideRequest) ProtoMessage() {} func (x *DecideRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[56] + mi := &file_api_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4106,7 +4254,7 @@ func (x *DecideRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DecideRequest.ProtoReflect.Descriptor instead. func (*DecideRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{56} + return file_api_proto_rawDescGZIP(), []int{59} } func (x *DecideRequest) GetPrincipalId() string { @@ -4190,7 +4338,7 @@ type DecideResponse struct { func (x *DecideResponse) Reset() { *x = DecideResponse{} - mi := &file_api_proto_msgTypes[57] + mi := &file_api_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4202,7 +4350,7 @@ func (x *DecideResponse) String() string { func (*DecideResponse) ProtoMessage() {} func (x *DecideResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[57] + mi := &file_api_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4215,7 +4363,7 @@ func (x *DecideResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DecideResponse.ProtoReflect.Descriptor instead. func (*DecideResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{57} + return file_api_proto_rawDescGZIP(), []int{60} } func (x *DecideResponse) GetDecision() Decision { @@ -4255,7 +4403,7 @@ type GetPrincipalRequest struct { func (x *GetPrincipalRequest) Reset() { *x = GetPrincipalRequest{} - mi := &file_api_proto_msgTypes[58] + mi := &file_api_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4267,7 +4415,7 @@ func (x *GetPrincipalRequest) String() string { func (*GetPrincipalRequest) ProtoMessage() {} func (x *GetPrincipalRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[58] + mi := &file_api_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4280,7 +4428,7 @@ func (x *GetPrincipalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPrincipalRequest.ProtoReflect.Descriptor instead. func (*GetPrincipalRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{58} + return file_api_proto_rawDescGZIP(), []int{61} } func (x *GetPrincipalRequest) GetId() string { @@ -4300,7 +4448,7 @@ type GetAgentPrincipalRequest struct { func (x *GetAgentPrincipalRequest) Reset() { *x = GetAgentPrincipalRequest{} - mi := &file_api_proto_msgTypes[59] + mi := &file_api_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4312,7 +4460,7 @@ func (x *GetAgentPrincipalRequest) String() string { func (*GetAgentPrincipalRequest) ProtoMessage() {} func (x *GetAgentPrincipalRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[59] + mi := &file_api_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4325,7 +4473,7 @@ func (x *GetAgentPrincipalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAgentPrincipalRequest.ProtoReflect.Descriptor instead. func (*GetAgentPrincipalRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{59} + return file_api_proto_rawDescGZIP(), []int{62} } func (x *GetAgentPrincipalRequest) GetOrgId() string { @@ -4354,7 +4502,7 @@ type CreateAgentPrincipalRequest struct { func (x *CreateAgentPrincipalRequest) Reset() { *x = CreateAgentPrincipalRequest{} - mi := &file_api_proto_msgTypes[60] + mi := &file_api_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4366,7 +4514,7 @@ func (x *CreateAgentPrincipalRequest) String() string { func (*CreateAgentPrincipalRequest) ProtoMessage() {} func (x *CreateAgentPrincipalRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[60] + mi := &file_api_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4379,7 +4527,7 @@ func (x *CreateAgentPrincipalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAgentPrincipalRequest.ProtoReflect.Descriptor instead. func (*CreateAgentPrincipalRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{60} + return file_api_proto_rawDescGZIP(), []int{63} } func (x *CreateAgentPrincipalRequest) GetOrgId() string { @@ -4413,7 +4561,7 @@ type RevokePrincipalRequest struct { func (x *RevokePrincipalRequest) Reset() { *x = RevokePrincipalRequest{} - mi := &file_api_proto_msgTypes[61] + mi := &file_api_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4425,7 +4573,7 @@ func (x *RevokePrincipalRequest) String() string { func (*RevokePrincipalRequest) ProtoMessage() {} func (x *RevokePrincipalRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[61] + mi := &file_api_proto_msgTypes[64] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4438,7 +4586,7 @@ func (x *RevokePrincipalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokePrincipalRequest.ProtoReflect.Descriptor instead. func (*RevokePrincipalRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{61} + return file_api_proto_rawDescGZIP(), []int{64} } func (x *RevokePrincipalRequest) GetId() string { @@ -4469,7 +4617,7 @@ type ListPrincipalsRequest struct { func (x *ListPrincipalsRequest) Reset() { *x = ListPrincipalsRequest{} - mi := &file_api_proto_msgTypes[62] + mi := &file_api_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4481,7 +4629,7 @@ func (x *ListPrincipalsRequest) String() string { func (*ListPrincipalsRequest) ProtoMessage() {} func (x *ListPrincipalsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[62] + mi := &file_api_proto_msgTypes[65] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4494,7 +4642,7 @@ func (x *ListPrincipalsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPrincipalsRequest.ProtoReflect.Descriptor instead. func (*ListPrincipalsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{62} + return file_api_proto_rawDescGZIP(), []int{65} } func (x *ListPrincipalsRequest) GetOrgId() string { @@ -4535,7 +4683,7 @@ type ListPrincipalsResponse struct { func (x *ListPrincipalsResponse) Reset() { *x = ListPrincipalsResponse{} - mi := &file_api_proto_msgTypes[63] + mi := &file_api_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4547,7 +4695,7 @@ func (x *ListPrincipalsResponse) String() string { func (*ListPrincipalsResponse) ProtoMessage() {} func (x *ListPrincipalsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[63] + mi := &file_api_proto_msgTypes[66] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4560,7 +4708,7 @@ func (x *ListPrincipalsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPrincipalsResponse.ProtoReflect.Descriptor instead. func (*ListPrincipalsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{63} + return file_api_proto_rawDescGZIP(), []int{66} } func (x *ListPrincipalsResponse) GetPrincipals() []*Principal { @@ -4587,7 +4735,7 @@ type ResolveIdentityRequest struct { func (x *ResolveIdentityRequest) Reset() { *x = ResolveIdentityRequest{} - mi := &file_api_proto_msgTypes[64] + mi := &file_api_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4599,7 +4747,7 @@ func (x *ResolveIdentityRequest) String() string { func (*ResolveIdentityRequest) ProtoMessage() {} func (x *ResolveIdentityRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[64] + mi := &file_api_proto_msgTypes[67] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4612,7 +4760,7 @@ func (x *ResolveIdentityRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveIdentityRequest.ProtoReflect.Descriptor instead. func (*ResolveIdentityRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{64} + return file_api_proto_rawDescGZIP(), []int{67} } func (x *ResolveIdentityRequest) GetProvider() string { @@ -4643,7 +4791,7 @@ type ResolveIdentityResponse struct { func (x *ResolveIdentityResponse) Reset() { *x = ResolveIdentityResponse{} - mi := &file_api_proto_msgTypes[65] + mi := &file_api_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4655,7 +4803,7 @@ func (x *ResolveIdentityResponse) String() string { func (*ResolveIdentityResponse) ProtoMessage() {} func (x *ResolveIdentityResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[65] + mi := &file_api_proto_msgTypes[68] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4668,7 +4816,7 @@ func (x *ResolveIdentityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ResolveIdentityResponse.ProtoReflect.Descriptor instead. func (*ResolveIdentityResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{65} + return file_api_proto_rawDescGZIP(), []int{68} } func (x *ResolveIdentityResponse) GetUserId() string { @@ -4740,7 +4888,7 @@ type RequestDelegationRequest struct { func (x *RequestDelegationRequest) Reset() { *x = RequestDelegationRequest{} - mi := &file_api_proto_msgTypes[66] + mi := &file_api_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4752,7 +4900,7 @@ func (x *RequestDelegationRequest) String() string { func (*RequestDelegationRequest) ProtoMessage() {} func (x *RequestDelegationRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[66] + mi := &file_api_proto_msgTypes[69] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4765,7 +4913,7 @@ func (x *RequestDelegationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestDelegationRequest.ProtoReflect.Descriptor instead. func (*RequestDelegationRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{66} + return file_api_proto_rawDescGZIP(), []int{69} } func (x *RequestDelegationRequest) GetOrgId() string { @@ -4856,7 +5004,7 @@ type RequestDelegationResponse struct { func (x *RequestDelegationResponse) Reset() { *x = RequestDelegationResponse{} - mi := &file_api_proto_msgTypes[67] + mi := &file_api_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4868,7 +5016,7 @@ func (x *RequestDelegationResponse) String() string { func (*RequestDelegationResponse) ProtoMessage() {} func (x *RequestDelegationResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[67] + mi := &file_api_proto_msgTypes[70] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4881,7 +5029,7 @@ func (x *RequestDelegationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestDelegationResponse.ProtoReflect.Descriptor instead. func (*RequestDelegationResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{67} + return file_api_proto_rawDescGZIP(), []int{70} } func (x *RequestDelegationResponse) GetId() string { @@ -4915,7 +5063,7 @@ type WaitForDelegationRequest struct { func (x *WaitForDelegationRequest) Reset() { *x = WaitForDelegationRequest{} - mi := &file_api_proto_msgTypes[68] + mi := &file_api_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4927,7 +5075,7 @@ func (x *WaitForDelegationRequest) String() string { func (*WaitForDelegationRequest) ProtoMessage() {} func (x *WaitForDelegationRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[68] + mi := &file_api_proto_msgTypes[71] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4940,7 +5088,7 @@ func (x *WaitForDelegationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use WaitForDelegationRequest.ProtoReflect.Descriptor instead. func (*WaitForDelegationRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{68} + return file_api_proto_rawDescGZIP(), []int{71} } func (x *WaitForDelegationRequest) GetId() string { @@ -4979,7 +5127,7 @@ type DelegationEvent struct { func (x *DelegationEvent) Reset() { *x = DelegationEvent{} - mi := &file_api_proto_msgTypes[69] + mi := &file_api_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4991,7 +5139,7 @@ func (x *DelegationEvent) String() string { func (*DelegationEvent) ProtoMessage() {} func (x *DelegationEvent) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[69] + mi := &file_api_proto_msgTypes[72] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5004,7 +5152,7 @@ func (x *DelegationEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DelegationEvent.ProtoReflect.Descriptor instead. func (*DelegationEvent) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{69} + return file_api_proto_rawDescGZIP(), []int{72} } func (x *DelegationEvent) GetId() string { @@ -5071,7 +5219,7 @@ type DecideDelegationRequest struct { func (x *DecideDelegationRequest) Reset() { *x = DecideDelegationRequest{} - mi := &file_api_proto_msgTypes[70] + mi := &file_api_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5083,7 +5231,7 @@ func (x *DecideDelegationRequest) String() string { func (*DecideDelegationRequest) ProtoMessage() {} func (x *DecideDelegationRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[70] + mi := &file_api_proto_msgTypes[73] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5096,7 +5244,7 @@ func (x *DecideDelegationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DecideDelegationRequest.ProtoReflect.Descriptor instead. func (*DecideDelegationRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{70} + return file_api_proto_rawDescGZIP(), []int{73} } func (x *DecideDelegationRequest) GetId() string { @@ -5151,7 +5299,7 @@ type DelegationGrant struct { func (x *DelegationGrant) Reset() { *x = DelegationGrant{} - mi := &file_api_proto_msgTypes[71] + mi := &file_api_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5163,7 +5311,7 @@ func (x *DelegationGrant) String() string { func (*DelegationGrant) ProtoMessage() {} func (x *DelegationGrant) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[71] + mi := &file_api_proto_msgTypes[74] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5176,7 +5324,7 @@ func (x *DelegationGrant) ProtoReflect() protoreflect.Message { // Deprecated: Use DelegationGrant.ProtoReflect.Descriptor instead. func (*DelegationGrant) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{71} + return file_api_proto_rawDescGZIP(), []int{74} } func (x *DelegationGrant) GetId() string { @@ -5302,7 +5450,7 @@ type ListPendingDelegationsRequest struct { func (x *ListPendingDelegationsRequest) Reset() { *x = ListPendingDelegationsRequest{} - mi := &file_api_proto_msgTypes[72] + mi := &file_api_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5314,7 +5462,7 @@ func (x *ListPendingDelegationsRequest) String() string { func (*ListPendingDelegationsRequest) ProtoMessage() {} func (x *ListPendingDelegationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[72] + mi := &file_api_proto_msgTypes[75] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5327,7 +5475,7 @@ func (x *ListPendingDelegationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPendingDelegationsRequest.ProtoReflect.Descriptor instead. func (*ListPendingDelegationsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{72} + return file_api_proto_rawDescGZIP(), []int{75} } func (x *ListPendingDelegationsRequest) GetOrgId() string { @@ -5361,7 +5509,7 @@ type ListPendingDelegationsResponse struct { func (x *ListPendingDelegationsResponse) Reset() { *x = ListPendingDelegationsResponse{} - mi := &file_api_proto_msgTypes[73] + mi := &file_api_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5373,7 +5521,7 @@ func (x *ListPendingDelegationsResponse) String() string { func (*ListPendingDelegationsResponse) ProtoMessage() {} func (x *ListPendingDelegationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[73] + mi := &file_api_proto_msgTypes[76] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5386,7 +5534,7 @@ func (x *ListPendingDelegationsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPendingDelegationsResponse.ProtoReflect.Descriptor instead. func (*ListPendingDelegationsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{73} + return file_api_proto_rawDescGZIP(), []int{76} } func (x *ListPendingDelegationsResponse) GetGrants() []*DelegationGrant { @@ -5422,7 +5570,7 @@ type APIKey struct { func (x *APIKey) Reset() { *x = APIKey{} - mi := &file_api_proto_msgTypes[74] + mi := &file_api_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5434,7 +5582,7 @@ func (x *APIKey) String() string { func (*APIKey) ProtoMessage() {} func (x *APIKey) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[74] + mi := &file_api_proto_msgTypes[77] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5447,7 +5595,7 @@ func (x *APIKey) ProtoReflect() protoreflect.Message { // Deprecated: Use APIKey.ProtoReflect.Descriptor instead. func (*APIKey) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{74} + return file_api_proto_rawDescGZIP(), []int{77} } func (x *APIKey) GetId() string { @@ -5540,7 +5688,7 @@ type CreateAPIKeyRequest struct { func (x *CreateAPIKeyRequest) Reset() { *x = CreateAPIKeyRequest{} - mi := &file_api_proto_msgTypes[75] + mi := &file_api_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5552,7 +5700,7 @@ func (x *CreateAPIKeyRequest) String() string { func (*CreateAPIKeyRequest) ProtoMessage() {} func (x *CreateAPIKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[75] + mi := &file_api_proto_msgTypes[78] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5565,7 +5713,7 @@ func (x *CreateAPIKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAPIKeyRequest.ProtoReflect.Descriptor instead. func (*CreateAPIKeyRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{75} + return file_api_proto_rawDescGZIP(), []int{78} } func (x *CreateAPIKeyRequest) GetOrganizationId() string { @@ -5613,7 +5761,7 @@ type CreateAPIKeyResponse struct { func (x *CreateAPIKeyResponse) Reset() { *x = CreateAPIKeyResponse{} - mi := &file_api_proto_msgTypes[76] + mi := &file_api_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5625,7 +5773,7 @@ func (x *CreateAPIKeyResponse) String() string { func (*CreateAPIKeyResponse) ProtoMessage() {} func (x *CreateAPIKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[76] + mi := &file_api_proto_msgTypes[79] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5638,7 +5786,7 @@ func (x *CreateAPIKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateAPIKeyResponse.ProtoReflect.Descriptor instead. func (*CreateAPIKeyResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{76} + return file_api_proto_rawDescGZIP(), []int{79} } func (x *CreateAPIKeyResponse) GetKey() *APIKey { @@ -5666,7 +5814,7 @@ type ListAPIKeysRequest struct { func (x *ListAPIKeysRequest) Reset() { *x = ListAPIKeysRequest{} - mi := &file_api_proto_msgTypes[77] + mi := &file_api_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5678,7 +5826,7 @@ func (x *ListAPIKeysRequest) String() string { func (*ListAPIKeysRequest) ProtoMessage() {} func (x *ListAPIKeysRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[77] + mi := &file_api_proto_msgTypes[80] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5691,7 +5839,7 @@ func (x *ListAPIKeysRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAPIKeysRequest.ProtoReflect.Descriptor instead. func (*ListAPIKeysRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{77} + return file_api_proto_rawDescGZIP(), []int{80} } func (x *ListAPIKeysRequest) GetOrganizationId() string { @@ -5725,7 +5873,7 @@ type ListAPIKeysResponse struct { func (x *ListAPIKeysResponse) Reset() { *x = ListAPIKeysResponse{} - mi := &file_api_proto_msgTypes[78] + mi := &file_api_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5737,7 +5885,7 @@ func (x *ListAPIKeysResponse) String() string { func (*ListAPIKeysResponse) ProtoMessage() {} func (x *ListAPIKeysResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[78] + mi := &file_api_proto_msgTypes[81] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5750,7 +5898,7 @@ func (x *ListAPIKeysResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListAPIKeysResponse.ProtoReflect.Descriptor instead. func (*ListAPIKeysResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{78} + return file_api_proto_rawDescGZIP(), []int{81} } func (x *ListAPIKeysResponse) GetKeys() []*APIKey { @@ -5779,7 +5927,7 @@ type RevokeAPIKeyRequest struct { func (x *RevokeAPIKeyRequest) Reset() { *x = RevokeAPIKeyRequest{} - mi := &file_api_proto_msgTypes[79] + mi := &file_api_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5791,7 +5939,7 @@ func (x *RevokeAPIKeyRequest) String() string { func (*RevokeAPIKeyRequest) ProtoMessage() {} func (x *RevokeAPIKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[79] + mi := &file_api_proto_msgTypes[82] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5804,7 +5952,7 @@ func (x *RevokeAPIKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeAPIKeyRequest.ProtoReflect.Descriptor instead. func (*RevokeAPIKeyRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{79} + return file_api_proto_rawDescGZIP(), []int{82} } func (x *RevokeAPIKeyRequest) GetId() string { @@ -5833,7 +5981,7 @@ type ValidateAPIKeyRequest struct { func (x *ValidateAPIKeyRequest) Reset() { *x = ValidateAPIKeyRequest{} - mi := &file_api_proto_msgTypes[80] + mi := &file_api_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5845,7 +5993,7 @@ func (x *ValidateAPIKeyRequest) String() string { func (*ValidateAPIKeyRequest) ProtoMessage() {} func (x *ValidateAPIKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[80] + mi := &file_api_proto_msgTypes[83] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5858,7 +6006,7 @@ func (x *ValidateAPIKeyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateAPIKeyRequest.ProtoReflect.Descriptor instead. func (*ValidateAPIKeyRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{80} + return file_api_proto_rawDescGZIP(), []int{83} } func (x *ValidateAPIKeyRequest) GetKey() string { @@ -5893,7 +6041,7 @@ type ValidateAPIKeyResponse struct { func (x *ValidateAPIKeyResponse) Reset() { *x = ValidateAPIKeyResponse{} - mi := &file_api_proto_msgTypes[81] + mi := &file_api_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5905,7 +6053,7 @@ func (x *ValidateAPIKeyResponse) String() string { func (*ValidateAPIKeyResponse) ProtoMessage() {} func (x *ValidateAPIKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[81] + mi := &file_api_proto_msgTypes[84] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5918,7 +6066,7 @@ func (x *ValidateAPIKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ValidateAPIKeyResponse.ProtoReflect.Descriptor instead. func (*ValidateAPIKeyResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{81} + return file_api_proto_rawDescGZIP(), []int{84} } func (x *ValidateAPIKeyResponse) GetValid() bool { @@ -5991,7 +6139,7 @@ type AuthenticateRequest struct { func (x *AuthenticateRequest) Reset() { *x = AuthenticateRequest{} - mi := &file_api_proto_msgTypes[82] + mi := &file_api_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6003,7 +6151,7 @@ func (x *AuthenticateRequest) String() string { func (*AuthenticateRequest) ProtoMessage() {} func (x *AuthenticateRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[82] + mi := &file_api_proto_msgTypes[85] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6016,7 +6164,7 @@ func (x *AuthenticateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthenticateRequest.ProtoReflect.Descriptor instead. func (*AuthenticateRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{82} + return file_api_proto_rawDescGZIP(), []int{85} } func (x *AuthenticateRequest) GetProvider() string { @@ -6075,7 +6223,7 @@ type AuthenticateResponse struct { func (x *AuthenticateResponse) Reset() { *x = AuthenticateResponse{} - mi := &file_api_proto_msgTypes[83] + mi := &file_api_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6087,7 +6235,7 @@ func (x *AuthenticateResponse) String() string { func (*AuthenticateResponse) ProtoMessage() {} func (x *AuthenticateResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[83] + mi := &file_api_proto_msgTypes[86] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6100,7 +6248,7 @@ func (x *AuthenticateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthenticateResponse.ProtoReflect.Descriptor instead. func (*AuthenticateResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{83} + return file_api_proto_rawDescGZIP(), []int{86} } func (x *AuthenticateResponse) GetAccessToken() string { @@ -6154,7 +6302,7 @@ type RefreshTokenRequest struct { func (x *RefreshTokenRequest) Reset() { *x = RefreshTokenRequest{} - mi := &file_api_proto_msgTypes[84] + mi := &file_api_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6166,7 +6314,7 @@ func (x *RefreshTokenRequest) String() string { func (*RefreshTokenRequest) ProtoMessage() {} func (x *RefreshTokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[84] + mi := &file_api_proto_msgTypes[87] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6179,7 +6327,7 @@ func (x *RefreshTokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RefreshTokenRequest.ProtoReflect.Descriptor instead. func (*RefreshTokenRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{84} + return file_api_proto_rawDescGZIP(), []int{87} } func (x *RefreshTokenRequest) GetRefreshToken() string { @@ -6200,7 +6348,7 @@ type RefreshTokenResponse struct { func (x *RefreshTokenResponse) Reset() { *x = RefreshTokenResponse{} - mi := &file_api_proto_msgTypes[85] + mi := &file_api_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6212,7 +6360,7 @@ func (x *RefreshTokenResponse) String() string { func (*RefreshTokenResponse) ProtoMessage() {} func (x *RefreshTokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[85] + mi := &file_api_proto_msgTypes[88] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6225,7 +6373,7 @@ func (x *RefreshTokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RefreshTokenResponse.ProtoReflect.Descriptor instead. func (*RefreshTokenResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{85} + return file_api_proto_rawDescGZIP(), []int{88} } func (x *RefreshTokenResponse) GetAccessToken() string { @@ -6258,7 +6406,7 @@ type LogoutRequest struct { func (x *LogoutRequest) Reset() { *x = LogoutRequest{} - mi := &file_api_proto_msgTypes[86] + mi := &file_api_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6270,7 +6418,7 @@ func (x *LogoutRequest) String() string { func (*LogoutRequest) ProtoMessage() {} func (x *LogoutRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[86] + mi := &file_api_proto_msgTypes[89] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6283,7 +6431,7 @@ func (x *LogoutRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LogoutRequest.ProtoReflect.Descriptor instead. func (*LogoutRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{86} + return file_api_proto_rawDescGZIP(), []int{89} } func (x *LogoutRequest) GetRefreshToken() string { @@ -6302,7 +6450,7 @@ type JWKSResponse struct { func (x *JWKSResponse) Reset() { *x = JWKSResponse{} - mi := &file_api_proto_msgTypes[87] + mi := &file_api_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6314,7 +6462,7 @@ func (x *JWKSResponse) String() string { func (*JWKSResponse) ProtoMessage() {} func (x *JWKSResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[87] + mi := &file_api_proto_msgTypes[90] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6327,7 +6475,7 @@ func (x *JWKSResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JWKSResponse.ProtoReflect.Descriptor instead. func (*JWKSResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{87} + return file_api_proto_rawDescGZIP(), []int{90} } func (x *JWKSResponse) GetKeysJson() string { @@ -6352,7 +6500,7 @@ type BeginOAuthRequest struct { func (x *BeginOAuthRequest) Reset() { *x = BeginOAuthRequest{} - mi := &file_api_proto_msgTypes[88] + mi := &file_api_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6364,7 +6512,7 @@ func (x *BeginOAuthRequest) String() string { func (*BeginOAuthRequest) ProtoMessage() {} func (x *BeginOAuthRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[88] + mi := &file_api_proto_msgTypes[91] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6377,7 +6525,7 @@ func (x *BeginOAuthRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BeginOAuthRequest.ProtoReflect.Descriptor instead. func (*BeginOAuthRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{88} + return file_api_proto_rawDescGZIP(), []int{91} } func (x *BeginOAuthRequest) GetProvider() string { @@ -6405,7 +6553,7 @@ type BeginOAuthResponse struct { func (x *BeginOAuthResponse) Reset() { *x = BeginOAuthResponse{} - mi := &file_api_proto_msgTypes[89] + mi := &file_api_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6417,7 +6565,7 @@ func (x *BeginOAuthResponse) String() string { func (*BeginOAuthResponse) ProtoMessage() {} func (x *BeginOAuthResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[89] + mi := &file_api_proto_msgTypes[92] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6430,7 +6578,7 @@ func (x *BeginOAuthResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BeginOAuthResponse.ProtoReflect.Descriptor instead. func (*BeginOAuthResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{89} + return file_api_proto_rawDescGZIP(), []int{92} } func (x *BeginOAuthResponse) GetState() string { @@ -6464,7 +6612,7 @@ type AuditExportConfig struct { func (x *AuditExportConfig) Reset() { *x = AuditExportConfig{} - mi := &file_api_proto_msgTypes[90] + mi := &file_api_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6476,7 +6624,7 @@ func (x *AuditExportConfig) String() string { func (*AuditExportConfig) ProtoMessage() {} func (x *AuditExportConfig) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[90] + mi := &file_api_proto_msgTypes[93] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6489,7 +6637,7 @@ func (x *AuditExportConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use AuditExportConfig.ProtoReflect.Descriptor instead. func (*AuditExportConfig) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{90} + return file_api_proto_rawDescGZIP(), []int{93} } func (x *AuditExportConfig) GetId() string { @@ -6592,7 +6740,7 @@ type GetAuditExportConfigRequest struct { func (x *GetAuditExportConfigRequest) Reset() { *x = GetAuditExportConfigRequest{} - mi := &file_api_proto_msgTypes[91] + mi := &file_api_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6604,7 +6752,7 @@ func (x *GetAuditExportConfigRequest) String() string { func (*GetAuditExportConfigRequest) ProtoMessage() {} func (x *GetAuditExportConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[91] + mi := &file_api_proto_msgTypes[94] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6617,7 +6765,7 @@ func (x *GetAuditExportConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetAuditExportConfigRequest.ProtoReflect.Descriptor instead. func (*GetAuditExportConfigRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{91} + return file_api_proto_rawDescGZIP(), []int{94} } func (x *GetAuditExportConfigRequest) GetOrgId() string { @@ -6636,7 +6784,7 @@ type SaveAuditExportConfigRequest struct { func (x *SaveAuditExportConfigRequest) Reset() { *x = SaveAuditExportConfigRequest{} - mi := &file_api_proto_msgTypes[92] + mi := &file_api_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6648,7 +6796,7 @@ func (x *SaveAuditExportConfigRequest) String() string { func (*SaveAuditExportConfigRequest) ProtoMessage() {} func (x *SaveAuditExportConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[92] + mi := &file_api_proto_msgTypes[95] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6661,7 +6809,7 @@ func (x *SaveAuditExportConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SaveAuditExportConfigRequest.ProtoReflect.Descriptor instead. func (*SaveAuditExportConfigRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{92} + return file_api_proto_rawDescGZIP(), []int{95} } func (x *SaveAuditExportConfigRequest) GetConfig() *AuditExportConfig { @@ -6680,7 +6828,7 @@ type DeleteAuditExportConfigRequest struct { func (x *DeleteAuditExportConfigRequest) Reset() { *x = DeleteAuditExportConfigRequest{} - mi := &file_api_proto_msgTypes[93] + mi := &file_api_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6692,7 +6840,7 @@ func (x *DeleteAuditExportConfigRequest) String() string { func (*DeleteAuditExportConfigRequest) ProtoMessage() {} func (x *DeleteAuditExportConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[93] + mi := &file_api_proto_msgTypes[96] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6705,7 +6853,7 @@ func (x *DeleteAuditExportConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteAuditExportConfigRequest.ProtoReflect.Descriptor instead. func (*DeleteAuditExportConfigRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{93} + return file_api_proto_rawDescGZIP(), []int{96} } func (x *DeleteAuditExportConfigRequest) GetOrgId() string { @@ -6730,7 +6878,7 @@ type ConsentStatus struct { func (x *ConsentStatus) Reset() { *x = ConsentStatus{} - mi := &file_api_proto_msgTypes[94] + mi := &file_api_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6742,7 +6890,7 @@ func (x *ConsentStatus) String() string { func (*ConsentStatus) ProtoMessage() {} func (x *ConsentStatus) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[94] + mi := &file_api_proto_msgTypes[97] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6755,7 +6903,7 @@ func (x *ConsentStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use ConsentStatus.ProtoReflect.Descriptor instead. func (*ConsentStatus) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{94} + return file_api_proto_rawDescGZIP(), []int{97} } func (x *ConsentStatus) GetAcceptedVersion() string { @@ -6787,7 +6935,7 @@ type GetConsentStatusRequest struct { func (x *GetConsentStatusRequest) Reset() { *x = GetConsentStatusRequest{} - mi := &file_api_proto_msgTypes[95] + mi := &file_api_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6799,7 +6947,7 @@ func (x *GetConsentStatusRequest) String() string { func (*GetConsentStatusRequest) ProtoMessage() {} func (x *GetConsentStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[95] + mi := &file_api_proto_msgTypes[98] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6812,7 +6960,7 @@ func (x *GetConsentStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConsentStatusRequest.ProtoReflect.Descriptor instead. func (*GetConsentStatusRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{95} + return file_api_proto_rawDescGZIP(), []int{98} } type AcceptConsentRequest struct { @@ -6824,7 +6972,7 @@ type AcceptConsentRequest struct { func (x *AcceptConsentRequest) Reset() { *x = AcceptConsentRequest{} - mi := &file_api_proto_msgTypes[96] + mi := &file_api_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6836,7 +6984,7 @@ func (x *AcceptConsentRequest) String() string { func (*AcceptConsentRequest) ProtoMessage() {} func (x *AcceptConsentRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[96] + mi := &file_api_proto_msgTypes[99] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6849,7 +6997,7 @@ func (x *AcceptConsentRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AcceptConsentRequest.ProtoReflect.Descriptor instead. func (*AcceptConsentRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{96} + return file_api_proto_rawDescGZIP(), []int{99} } func (x *AcceptConsentRequest) GetVersion() string { @@ -6877,7 +7025,7 @@ type AuditEvent struct { func (x *AuditEvent) Reset() { *x = AuditEvent{} - mi := &file_api_proto_msgTypes[97] + mi := &file_api_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6889,7 +7037,7 @@ func (x *AuditEvent) String() string { func (*AuditEvent) ProtoMessage() {} func (x *AuditEvent) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[97] + mi := &file_api_proto_msgTypes[100] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6902,7 +7050,7 @@ func (x *AuditEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use AuditEvent.ProtoReflect.Descriptor instead. func (*AuditEvent) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{97} + return file_api_proto_rawDescGZIP(), []int{100} } func (x *AuditEvent) GetId() string { @@ -6992,7 +7140,7 @@ type QueryAuditLogRequest struct { func (x *QueryAuditLogRequest) Reset() { *x = QueryAuditLogRequest{} - mi := &file_api_proto_msgTypes[98] + mi := &file_api_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7004,7 +7152,7 @@ func (x *QueryAuditLogRequest) String() string { func (*QueryAuditLogRequest) ProtoMessage() {} func (x *QueryAuditLogRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[98] + mi := &file_api_proto_msgTypes[101] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7017,7 +7165,7 @@ func (x *QueryAuditLogRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAuditLogRequest.ProtoReflect.Descriptor instead. func (*QueryAuditLogRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{98} + return file_api_proto_rawDescGZIP(), []int{101} } func (x *QueryAuditLogRequest) GetOrgId() string { @@ -7094,7 +7242,7 @@ type QueryAuditLogResponse struct { func (x *QueryAuditLogResponse) Reset() { *x = QueryAuditLogResponse{} - mi := &file_api_proto_msgTypes[99] + mi := &file_api_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7106,7 +7254,7 @@ func (x *QueryAuditLogResponse) String() string { func (*QueryAuditLogResponse) ProtoMessage() {} func (x *QueryAuditLogResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[99] + mi := &file_api_proto_msgTypes[102] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7119,7 +7267,7 @@ func (x *QueryAuditLogResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use QueryAuditLogResponse.ProtoReflect.Descriptor instead. func (*QueryAuditLogResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{99} + return file_api_proto_rawDescGZIP(), []int{102} } func (x *QueryAuditLogResponse) GetEvents() []*AuditEvent { @@ -7155,7 +7303,7 @@ type ExportAuditLogRequest struct { func (x *ExportAuditLogRequest) Reset() { *x = ExportAuditLogRequest{} - mi := &file_api_proto_msgTypes[100] + mi := &file_api_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7167,7 +7315,7 @@ func (x *ExportAuditLogRequest) String() string { func (*ExportAuditLogRequest) ProtoMessage() {} func (x *ExportAuditLogRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[100] + mi := &file_api_proto_msgTypes[103] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7180,7 +7328,7 @@ func (x *ExportAuditLogRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExportAuditLogRequest.ProtoReflect.Descriptor instead. func (*ExportAuditLogRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{100} + return file_api_proto_rawDescGZIP(), []int{103} } func (x *ExportAuditLogRequest) GetOrgId() string { @@ -7222,7 +7370,7 @@ type ExportAuditLogResponse struct { func (x *ExportAuditLogResponse) Reset() { *x = ExportAuditLogResponse{} - mi := &file_api_proto_msgTypes[101] + mi := &file_api_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7234,7 +7382,7 @@ func (x *ExportAuditLogResponse) String() string { func (*ExportAuditLogResponse) ProtoMessage() {} func (x *ExportAuditLogResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[101] + mi := &file_api_proto_msgTypes[104] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7247,7 +7395,7 @@ func (x *ExportAuditLogResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExportAuditLogResponse.ProtoReflect.Descriptor instead. func (*ExportAuditLogResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{101} + return file_api_proto_rawDescGZIP(), []int{104} } func (x *ExportAuditLogResponse) GetData() []byte { @@ -7287,7 +7435,7 @@ type Invitation struct { func (x *Invitation) Reset() { *x = Invitation{} - mi := &file_api_proto_msgTypes[102] + mi := &file_api_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7299,7 +7447,7 @@ func (x *Invitation) String() string { func (*Invitation) ProtoMessage() {} func (x *Invitation) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[102] + mi := &file_api_proto_msgTypes[105] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7312,7 +7460,7 @@ func (x *Invitation) ProtoReflect() protoreflect.Message { // Deprecated: Use Invitation.ProtoReflect.Descriptor instead. func (*Invitation) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{102} + return file_api_proto_rawDescGZIP(), []int{105} } func (x *Invitation) GetId() string { @@ -7382,7 +7530,7 @@ type CreateInvitationRequest struct { func (x *CreateInvitationRequest) Reset() { *x = CreateInvitationRequest{} - mi := &file_api_proto_msgTypes[103] + mi := &file_api_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7394,7 +7542,7 @@ func (x *CreateInvitationRequest) String() string { func (*CreateInvitationRequest) ProtoMessage() {} func (x *CreateInvitationRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[103] + mi := &file_api_proto_msgTypes[106] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7407,7 +7555,7 @@ func (x *CreateInvitationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateInvitationRequest.ProtoReflect.Descriptor instead. func (*CreateInvitationRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{103} + return file_api_proto_rawDescGZIP(), []int{106} } func (x *CreateInvitationRequest) GetOrgId() string { @@ -7441,7 +7589,7 @@ type CreateInvitationResponse struct { func (x *CreateInvitationResponse) Reset() { *x = CreateInvitationResponse{} - mi := &file_api_proto_msgTypes[104] + mi := &file_api_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7453,7 +7601,7 @@ func (x *CreateInvitationResponse) String() string { func (*CreateInvitationResponse) ProtoMessage() {} func (x *CreateInvitationResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[104] + mi := &file_api_proto_msgTypes[107] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7466,7 +7614,7 @@ func (x *CreateInvitationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateInvitationResponse.ProtoReflect.Descriptor instead. func (*CreateInvitationResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{104} + return file_api_proto_rawDescGZIP(), []int{107} } func (x *CreateInvitationResponse) GetInvitation() *Invitation { @@ -7492,7 +7640,7 @@ type AcceptInvitationRequest struct { func (x *AcceptInvitationRequest) Reset() { *x = AcceptInvitationRequest{} - mi := &file_api_proto_msgTypes[105] + mi := &file_api_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7504,7 +7652,7 @@ func (x *AcceptInvitationRequest) String() string { func (*AcceptInvitationRequest) ProtoMessage() {} func (x *AcceptInvitationRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[105] + mi := &file_api_proto_msgTypes[108] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7517,7 +7665,7 @@ func (x *AcceptInvitationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AcceptInvitationRequest.ProtoReflect.Descriptor instead. func (*AcceptInvitationRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{105} + return file_api_proto_rawDescGZIP(), []int{108} } func (x *AcceptInvitationRequest) GetToken() string { @@ -7536,7 +7684,7 @@ type AcceptInvitationResponse struct { func (x *AcceptInvitationResponse) Reset() { *x = AcceptInvitationResponse{} - mi := &file_api_proto_msgTypes[106] + mi := &file_api_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7548,7 +7696,7 @@ func (x *AcceptInvitationResponse) String() string { func (*AcceptInvitationResponse) ProtoMessage() {} func (x *AcceptInvitationResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[106] + mi := &file_api_proto_msgTypes[109] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7561,7 +7709,7 @@ func (x *AcceptInvitationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AcceptInvitationResponse.ProtoReflect.Descriptor instead. func (*AcceptInvitationResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{106} + return file_api_proto_rawDescGZIP(), []int{109} } func (x *AcceptInvitationResponse) GetOrganization() *Organization { @@ -7581,7 +7729,7 @@ type ListInvitationsRequest struct { func (x *ListInvitationsRequest) Reset() { *x = ListInvitationsRequest{} - mi := &file_api_proto_msgTypes[107] + mi := &file_api_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7593,7 +7741,7 @@ func (x *ListInvitationsRequest) String() string { func (*ListInvitationsRequest) ProtoMessage() {} func (x *ListInvitationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[107] + mi := &file_api_proto_msgTypes[110] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7606,7 +7754,7 @@ func (x *ListInvitationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListInvitationsRequest.ProtoReflect.Descriptor instead. func (*ListInvitationsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{107} + return file_api_proto_rawDescGZIP(), []int{110} } func (x *ListInvitationsRequest) GetOrgId() string { @@ -7632,7 +7780,7 @@ type ListInvitationsResponse struct { func (x *ListInvitationsResponse) Reset() { *x = ListInvitationsResponse{} - mi := &file_api_proto_msgTypes[108] + mi := &file_api_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7644,7 +7792,7 @@ func (x *ListInvitationsResponse) String() string { func (*ListInvitationsResponse) ProtoMessage() {} func (x *ListInvitationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[108] + mi := &file_api_proto_msgTypes[111] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7657,7 +7805,7 @@ func (x *ListInvitationsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListInvitationsResponse.ProtoReflect.Descriptor instead. func (*ListInvitationsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{108} + return file_api_proto_rawDescGZIP(), []int{111} } func (x *ListInvitationsResponse) GetInvitations() []*Invitation { @@ -7676,7 +7824,7 @@ type RevokeInvitationRequest struct { func (x *RevokeInvitationRequest) Reset() { *x = RevokeInvitationRequest{} - mi := &file_api_proto_msgTypes[109] + mi := &file_api_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7688,7 +7836,7 @@ func (x *RevokeInvitationRequest) String() string { func (*RevokeInvitationRequest) ProtoMessage() {} func (x *RevokeInvitationRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[109] + mi := &file_api_proto_msgTypes[112] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7701,7 +7849,7 @@ func (x *RevokeInvitationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeInvitationRequest.ProtoReflect.Descriptor instead. func (*RevokeInvitationRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{109} + return file_api_proto_rawDescGZIP(), []int{112} } func (x *RevokeInvitationRequest) GetId() string { @@ -7722,7 +7870,7 @@ type SearchUsersRequest struct { func (x *SearchUsersRequest) Reset() { *x = SearchUsersRequest{} - mi := &file_api_proto_msgTypes[110] + mi := &file_api_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7734,7 +7882,7 @@ func (x *SearchUsersRequest) String() string { func (*SearchUsersRequest) ProtoMessage() {} func (x *SearchUsersRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[110] + mi := &file_api_proto_msgTypes[113] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7747,7 +7895,7 @@ func (x *SearchUsersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchUsersRequest.ProtoReflect.Descriptor instead. func (*SearchUsersRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{110} + return file_api_proto_rawDescGZIP(), []int{113} } func (x *SearchUsersRequest) GetQuery() string { @@ -7782,7 +7930,7 @@ type SearchUsersResponse struct { func (x *SearchUsersResponse) Reset() { *x = SearchUsersResponse{} - mi := &file_api_proto_msgTypes[111] + mi := &file_api_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7794,7 +7942,7 @@ func (x *SearchUsersResponse) String() string { func (*SearchUsersResponse) ProtoMessage() {} func (x *SearchUsersResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[111] + mi := &file_api_proto_msgTypes[114] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7807,7 +7955,7 @@ func (x *SearchUsersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SearchUsersResponse.ProtoReflect.Descriptor instead. func (*SearchUsersResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{111} + return file_api_proto_rawDescGZIP(), []int{114} } func (x *SearchUsersResponse) GetUsers() []*User { @@ -7841,7 +7989,7 @@ type SuspendUserRequest struct { func (x *SuspendUserRequest) Reset() { *x = SuspendUserRequest{} - mi := &file_api_proto_msgTypes[112] + mi := &file_api_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7853,7 +8001,7 @@ func (x *SuspendUserRequest) String() string { func (*SuspendUserRequest) ProtoMessage() {} func (x *SuspendUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[112] + mi := &file_api_proto_msgTypes[115] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7866,7 +8014,7 @@ func (x *SuspendUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SuspendUserRequest.ProtoReflect.Descriptor instead. func (*SuspendUserRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{112} + return file_api_proto_rawDescGZIP(), []int{115} } func (x *SuspendUserRequest) GetUserId() string { @@ -7892,7 +8040,7 @@ type UnsuspendUserRequest struct { func (x *UnsuspendUserRequest) Reset() { *x = UnsuspendUserRequest{} - mi := &file_api_proto_msgTypes[113] + mi := &file_api_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7904,7 +8052,7 @@ func (x *UnsuspendUserRequest) String() string { func (*UnsuspendUserRequest) ProtoMessage() {} func (x *UnsuspendUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[113] + mi := &file_api_proto_msgTypes[116] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7917,7 +8065,7 @@ func (x *UnsuspendUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnsuspendUserRequest.ProtoReflect.Descriptor instead. func (*UnsuspendUserRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{113} + return file_api_proto_rawDescGZIP(), []int{116} } func (x *UnsuspendUserRequest) GetUserId() string { @@ -7936,7 +8084,7 @@ type ImpersonateUserRequest struct { func (x *ImpersonateUserRequest) Reset() { *x = ImpersonateUserRequest{} - mi := &file_api_proto_msgTypes[114] + mi := &file_api_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7948,7 +8096,7 @@ func (x *ImpersonateUserRequest) String() string { func (*ImpersonateUserRequest) ProtoMessage() {} func (x *ImpersonateUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[114] + mi := &file_api_proto_msgTypes[117] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7961,7 +8109,7 @@ func (x *ImpersonateUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ImpersonateUserRequest.ProtoReflect.Descriptor instead. func (*ImpersonateUserRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{114} + return file_api_proto_rawDescGZIP(), []int{117} } func (x *ImpersonateUserRequest) GetUserId() string { @@ -7981,7 +8129,7 @@ type ImpersonateUserResponse struct { func (x *ImpersonateUserResponse) Reset() { *x = ImpersonateUserResponse{} - mi := &file_api_proto_msgTypes[115] + mi := &file_api_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7993,7 +8141,7 @@ func (x *ImpersonateUserResponse) String() string { func (*ImpersonateUserResponse) ProtoMessage() {} func (x *ImpersonateUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[115] + mi := &file_api_proto_msgTypes[118] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8006,7 +8154,7 @@ func (x *ImpersonateUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ImpersonateUserResponse.ProtoReflect.Descriptor instead. func (*ImpersonateUserResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{115} + return file_api_proto_rawDescGZIP(), []int{118} } func (x *ImpersonateUserResponse) GetAccessToken() string { @@ -8034,7 +8182,7 @@ type ListActiveSessionsRequest struct { func (x *ListActiveSessionsRequest) Reset() { *x = ListActiveSessionsRequest{} - mi := &file_api_proto_msgTypes[116] + mi := &file_api_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8046,7 +8194,7 @@ func (x *ListActiveSessionsRequest) String() string { func (*ListActiveSessionsRequest) ProtoMessage() {} func (x *ListActiveSessionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[116] + mi := &file_api_proto_msgTypes[119] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8059,7 +8207,7 @@ func (x *ListActiveSessionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListActiveSessionsRequest.ProtoReflect.Descriptor instead. func (*ListActiveSessionsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{116} + return file_api_proto_rawDescGZIP(), []int{119} } func (x *ListActiveSessionsRequest) GetUserId() string { @@ -8098,7 +8246,7 @@ type SessionInfo struct { func (x *SessionInfo) Reset() { *x = SessionInfo{} - mi := &file_api_proto_msgTypes[117] + mi := &file_api_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8110,7 +8258,7 @@ func (x *SessionInfo) String() string { func (*SessionInfo) ProtoMessage() {} func (x *SessionInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[117] + mi := &file_api_proto_msgTypes[120] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8123,7 +8271,7 @@ func (x *SessionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SessionInfo.ProtoReflect.Descriptor instead. func (*SessionInfo) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{117} + return file_api_proto_rawDescGZIP(), []int{120} } func (x *SessionInfo) GetId() string { @@ -8185,7 +8333,7 @@ type ListActiveSessionsResponse struct { func (x *ListActiveSessionsResponse) Reset() { *x = ListActiveSessionsResponse{} - mi := &file_api_proto_msgTypes[118] + mi := &file_api_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8197,7 +8345,7 @@ func (x *ListActiveSessionsResponse) String() string { func (*ListActiveSessionsResponse) ProtoMessage() {} func (x *ListActiveSessionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[118] + mi := &file_api_proto_msgTypes[121] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8210,7 +8358,7 @@ func (x *ListActiveSessionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListActiveSessionsResponse.ProtoReflect.Descriptor instead. func (*ListActiveSessionsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{118} + return file_api_proto_rawDescGZIP(), []int{121} } func (x *ListActiveSessionsResponse) GetSessions() []*SessionInfo { @@ -8227,6 +8375,58 @@ func (x *ListActiveSessionsResponse) GetNextPageToken() string { return "" } +type RevokeSessionRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionId string `protobuf:"bytes,1,opt,name=session_id,json=sessionId,proto3" json:"session_id,omitempty"` + Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RevokeSessionRequest) Reset() { + *x = RevokeSessionRequest{} + mi := &file_api_proto_msgTypes[122] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RevokeSessionRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RevokeSessionRequest) ProtoMessage() {} + +func (x *RevokeSessionRequest) ProtoReflect() protoreflect.Message { + mi := &file_api_proto_msgTypes[122] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RevokeSessionRequest.ProtoReflect.Descriptor instead. +func (*RevokeSessionRequest) Descriptor() ([]byte, []int) { + return file_api_proto_rawDescGZIP(), []int{122} +} + +func (x *RevokeSessionRequest) GetSessionId() string { + if x != nil { + return x.SessionId + } + return "" +} + +func (x *RevokeSessionRequest) GetReason() string { + if x != nil { + return x.Reason + } + return "" +} + type GetOrgEntitlementsRequest struct { state protoimpl.MessageState `protogen:"open.v1"` OrgId string `protobuf:"bytes,1,opt,name=org_id,json=orgId,proto3" json:"org_id,omitempty"` @@ -8236,7 +8436,7 @@ type GetOrgEntitlementsRequest struct { func (x *GetOrgEntitlementsRequest) Reset() { *x = GetOrgEntitlementsRequest{} - mi := &file_api_proto_msgTypes[119] + mi := &file_api_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8248,7 +8448,7 @@ func (x *GetOrgEntitlementsRequest) String() string { func (*GetOrgEntitlementsRequest) ProtoMessage() {} func (x *GetOrgEntitlementsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[119] + mi := &file_api_proto_msgTypes[123] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8261,7 +8461,7 @@ func (x *GetOrgEntitlementsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetOrgEntitlementsRequest.ProtoReflect.Descriptor instead. func (*GetOrgEntitlementsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{119} + return file_api_proto_rawDescGZIP(), []int{123} } func (x *GetOrgEntitlementsRequest) GetOrgId() string { @@ -8281,7 +8481,7 @@ type GetOrgEntitlementsResponse struct { func (x *GetOrgEntitlementsResponse) Reset() { *x = GetOrgEntitlementsResponse{} - mi := &file_api_proto_msgTypes[120] + mi := &file_api_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8293,7 +8493,7 @@ func (x *GetOrgEntitlementsResponse) String() string { func (*GetOrgEntitlementsResponse) ProtoMessage() {} func (x *GetOrgEntitlementsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[120] + mi := &file_api_proto_msgTypes[124] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8306,7 +8506,7 @@ func (x *GetOrgEntitlementsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetOrgEntitlementsResponse.ProtoReflect.Descriptor instead. func (*GetOrgEntitlementsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{120} + return file_api_proto_rawDescGZIP(), []int{124} } func (x *GetOrgEntitlementsResponse) GetPlanName() string { @@ -8335,7 +8535,7 @@ type EntitlementInfo struct { func (x *EntitlementInfo) Reset() { *x = EntitlementInfo{} - mi := &file_api_proto_msgTypes[121] + mi := &file_api_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8347,7 +8547,7 @@ func (x *EntitlementInfo) String() string { func (*EntitlementInfo) ProtoMessage() {} func (x *EntitlementInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[121] + mi := &file_api_proto_msgTypes[125] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8360,7 +8560,7 @@ func (x *EntitlementInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use EntitlementInfo.ProtoReflect.Descriptor instead. func (*EntitlementInfo) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{121} + return file_api_proto_rawDescGZIP(), []int{125} } func (x *EntitlementInfo) GetFeature() string { @@ -8403,7 +8603,7 @@ type OverrideEntitlementRequest struct { func (x *OverrideEntitlementRequest) Reset() { *x = OverrideEntitlementRequest{} - mi := &file_api_proto_msgTypes[122] + mi := &file_api_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8415,7 +8615,7 @@ func (x *OverrideEntitlementRequest) String() string { func (*OverrideEntitlementRequest) ProtoMessage() {} func (x *OverrideEntitlementRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[122] + mi := &file_api_proto_msgTypes[126] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8428,7 +8628,7 @@ func (x *OverrideEntitlementRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OverrideEntitlementRequest.ProtoReflect.Descriptor instead. func (*OverrideEntitlementRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{122} + return file_api_proto_rawDescGZIP(), []int{126} } func (x *OverrideEntitlementRequest) GetOrgId() string { @@ -8468,7 +8668,7 @@ type OverrideEntitlementResponse struct { func (x *OverrideEntitlementResponse) Reset() { *x = OverrideEntitlementResponse{} - mi := &file_api_proto_msgTypes[123] + mi := &file_api_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8480,7 +8680,7 @@ func (x *OverrideEntitlementResponse) String() string { func (*OverrideEntitlementResponse) ProtoMessage() {} func (x *OverrideEntitlementResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[123] + mi := &file_api_proto_msgTypes[127] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8493,7 +8693,7 @@ func (x *OverrideEntitlementResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OverrideEntitlementResponse.ProtoReflect.Descriptor instead. func (*OverrideEntitlementResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{123} + return file_api_proto_rawDescGZIP(), []int{127} } func (x *OverrideEntitlementResponse) GetId() string { @@ -8513,7 +8713,7 @@ type GrantPlatformRoleRequest struct { func (x *GrantPlatformRoleRequest) Reset() { *x = GrantPlatformRoleRequest{} - mi := &file_api_proto_msgTypes[124] + mi := &file_api_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8525,7 +8725,7 @@ func (x *GrantPlatformRoleRequest) String() string { func (*GrantPlatformRoleRequest) ProtoMessage() {} func (x *GrantPlatformRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[124] + mi := &file_api_proto_msgTypes[128] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8538,7 +8738,7 @@ func (x *GrantPlatformRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantPlatformRoleRequest.ProtoReflect.Descriptor instead. func (*GrantPlatformRoleRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{124} + return file_api_proto_rawDescGZIP(), []int{128} } func (x *GrantPlatformRoleRequest) GetUserId() string { @@ -8564,7 +8764,7 @@ type RevokePlatformRoleRequest struct { func (x *RevokePlatformRoleRequest) Reset() { *x = RevokePlatformRoleRequest{} - mi := &file_api_proto_msgTypes[125] + mi := &file_api_proto_msgTypes[129] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8576,7 +8776,7 @@ func (x *RevokePlatformRoleRequest) String() string { func (*RevokePlatformRoleRequest) ProtoMessage() {} func (x *RevokePlatformRoleRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[125] + mi := &file_api_proto_msgTypes[129] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8589,7 +8789,7 @@ func (x *RevokePlatformRoleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokePlatformRoleRequest.ProtoReflect.Descriptor instead. func (*RevokePlatformRoleRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{125} + return file_api_proto_rawDescGZIP(), []int{129} } func (x *RevokePlatformRoleRequest) GetUserId() string { @@ -8607,7 +8807,7 @@ type ListPlatformAdminsRequest struct { func (x *ListPlatformAdminsRequest) Reset() { *x = ListPlatformAdminsRequest{} - mi := &file_api_proto_msgTypes[126] + mi := &file_api_proto_msgTypes[130] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8619,7 +8819,7 @@ func (x *ListPlatformAdminsRequest) String() string { func (*ListPlatformAdminsRequest) ProtoMessage() {} func (x *ListPlatformAdminsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[126] + mi := &file_api_proto_msgTypes[130] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8632,7 +8832,7 @@ func (x *ListPlatformAdminsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPlatformAdminsRequest.ProtoReflect.Descriptor instead. func (*ListPlatformAdminsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{126} + return file_api_proto_rawDescGZIP(), []int{130} } type PlatformAdminEntry struct { @@ -8647,7 +8847,7 @@ type PlatformAdminEntry struct { func (x *PlatformAdminEntry) Reset() { *x = PlatformAdminEntry{} - mi := &file_api_proto_msgTypes[127] + mi := &file_api_proto_msgTypes[131] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8659,7 +8859,7 @@ func (x *PlatformAdminEntry) String() string { func (*PlatformAdminEntry) ProtoMessage() {} func (x *PlatformAdminEntry) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[127] + mi := &file_api_proto_msgTypes[131] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8672,7 +8872,7 @@ func (x *PlatformAdminEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use PlatformAdminEntry.ProtoReflect.Descriptor instead. func (*PlatformAdminEntry) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{127} + return file_api_proto_rawDescGZIP(), []int{131} } func (x *PlatformAdminEntry) GetUserId() string { @@ -8712,7 +8912,7 @@ type ListPlatformAdminsResponse struct { func (x *ListPlatformAdminsResponse) Reset() { *x = ListPlatformAdminsResponse{} - mi := &file_api_proto_msgTypes[128] + mi := &file_api_proto_msgTypes[132] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8724,7 +8924,7 @@ func (x *ListPlatformAdminsResponse) String() string { func (*ListPlatformAdminsResponse) ProtoMessage() {} func (x *ListPlatformAdminsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[128] + mi := &file_api_proto_msgTypes[132] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8737,7 +8937,7 @@ func (x *ListPlatformAdminsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListPlatformAdminsResponse.ProtoReflect.Descriptor instead. func (*ListPlatformAdminsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{128} + return file_api_proto_rawDescGZIP(), []int{132} } func (x *ListPlatformAdminsResponse) GetAdmins() []*PlatformAdminEntry { @@ -8755,7 +8955,7 @@ type ListFeatureFlagsRequest struct { func (x *ListFeatureFlagsRequest) Reset() { *x = ListFeatureFlagsRequest{} - mi := &file_api_proto_msgTypes[129] + mi := &file_api_proto_msgTypes[133] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8767,7 +8967,7 @@ func (x *ListFeatureFlagsRequest) String() string { func (*ListFeatureFlagsRequest) ProtoMessage() {} func (x *ListFeatureFlagsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[129] + mi := &file_api_proto_msgTypes[133] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8780,7 +8980,7 @@ func (x *ListFeatureFlagsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFeatureFlagsRequest.ProtoReflect.Descriptor instead. func (*ListFeatureFlagsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{129} + return file_api_proto_rawDescGZIP(), []int{133} } type FeatureFlagEntry struct { @@ -8796,7 +8996,7 @@ type FeatureFlagEntry struct { func (x *FeatureFlagEntry) Reset() { *x = FeatureFlagEntry{} - mi := &file_api_proto_msgTypes[130] + mi := &file_api_proto_msgTypes[134] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8808,7 +9008,7 @@ func (x *FeatureFlagEntry) String() string { func (*FeatureFlagEntry) ProtoMessage() {} func (x *FeatureFlagEntry) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[130] + mi := &file_api_proto_msgTypes[134] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8821,7 +9021,7 @@ func (x *FeatureFlagEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use FeatureFlagEntry.ProtoReflect.Descriptor instead. func (*FeatureFlagEntry) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{130} + return file_api_proto_rawDescGZIP(), []int{134} } func (x *FeatureFlagEntry) GetName() string { @@ -8868,7 +9068,7 @@ type ListFeatureFlagsResponse struct { func (x *ListFeatureFlagsResponse) Reset() { *x = ListFeatureFlagsResponse{} - mi := &file_api_proto_msgTypes[131] + mi := &file_api_proto_msgTypes[135] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8880,7 +9080,7 @@ func (x *ListFeatureFlagsResponse) String() string { func (*ListFeatureFlagsResponse) ProtoMessage() {} func (x *ListFeatureFlagsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[131] + mi := &file_api_proto_msgTypes[135] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8893,7 +9093,7 @@ func (x *ListFeatureFlagsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListFeatureFlagsResponse.ProtoReflect.Descriptor instead. func (*ListFeatureFlagsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{131} + return file_api_proto_rawDescGZIP(), []int{135} } func (x *ListFeatureFlagsResponse) GetFlags() []*FeatureFlagEntry { @@ -8916,7 +9116,7 @@ type UpsertFeatureFlagRequest struct { func (x *UpsertFeatureFlagRequest) Reset() { *x = UpsertFeatureFlagRequest{} - mi := &file_api_proto_msgTypes[132] + mi := &file_api_proto_msgTypes[136] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8928,7 +9128,7 @@ func (x *UpsertFeatureFlagRequest) String() string { func (*UpsertFeatureFlagRequest) ProtoMessage() {} func (x *UpsertFeatureFlagRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[132] + mi := &file_api_proto_msgTypes[136] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8941,7 +9141,7 @@ func (x *UpsertFeatureFlagRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertFeatureFlagRequest.ProtoReflect.Descriptor instead. func (*UpsertFeatureFlagRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{132} + return file_api_proto_rawDescGZIP(), []int{136} } func (x *UpsertFeatureFlagRequest) GetName() string { @@ -8988,7 +9188,7 @@ type UpsertFeatureFlagResponse struct { func (x *UpsertFeatureFlagResponse) Reset() { *x = UpsertFeatureFlagResponse{} - mi := &file_api_proto_msgTypes[133] + mi := &file_api_proto_msgTypes[137] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9000,7 +9200,7 @@ func (x *UpsertFeatureFlagResponse) String() string { func (*UpsertFeatureFlagResponse) ProtoMessage() {} func (x *UpsertFeatureFlagResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[133] + mi := &file_api_proto_msgTypes[137] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9013,7 +9213,7 @@ func (x *UpsertFeatureFlagResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpsertFeatureFlagResponse.ProtoReflect.Descriptor instead. func (*UpsertFeatureFlagResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{133} + return file_api_proto_rawDescGZIP(), []int{137} } func (x *UpsertFeatureFlagResponse) GetName() string { @@ -9038,7 +9238,7 @@ type WebhookSubscription struct { func (x *WebhookSubscription) Reset() { *x = WebhookSubscription{} - mi := &file_api_proto_msgTypes[134] + mi := &file_api_proto_msgTypes[138] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9050,7 +9250,7 @@ func (x *WebhookSubscription) String() string { func (*WebhookSubscription) ProtoMessage() {} func (x *WebhookSubscription) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[134] + mi := &file_api_proto_msgTypes[138] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9063,7 +9263,7 @@ func (x *WebhookSubscription) ProtoReflect() protoreflect.Message { // Deprecated: Use WebhookSubscription.ProtoReflect.Descriptor instead. func (*WebhookSubscription) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{134} + return file_api_proto_rawDescGZIP(), []int{138} } func (x *WebhookSubscription) GetId() string { @@ -9138,7 +9338,7 @@ type WebhookDelivery struct { func (x *WebhookDelivery) Reset() { *x = WebhookDelivery{} - mi := &file_api_proto_msgTypes[135] + mi := &file_api_proto_msgTypes[139] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9150,7 +9350,7 @@ func (x *WebhookDelivery) String() string { func (*WebhookDelivery) ProtoMessage() {} func (x *WebhookDelivery) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[135] + mi := &file_api_proto_msgTypes[139] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9163,7 +9363,7 @@ func (x *WebhookDelivery) ProtoReflect() protoreflect.Message { // Deprecated: Use WebhookDelivery.ProtoReflect.Descriptor instead. func (*WebhookDelivery) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{135} + return file_api_proto_rawDescGZIP(), []int{139} } func (x *WebhookDelivery) GetId() string { @@ -9255,7 +9455,7 @@ type CreateWebhookSubscriptionRequest struct { func (x *CreateWebhookSubscriptionRequest) Reset() { *x = CreateWebhookSubscriptionRequest{} - mi := &file_api_proto_msgTypes[136] + mi := &file_api_proto_msgTypes[140] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9267,7 +9467,7 @@ func (x *CreateWebhookSubscriptionRequest) String() string { func (*CreateWebhookSubscriptionRequest) ProtoMessage() {} func (x *CreateWebhookSubscriptionRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[136] + mi := &file_api_proto_msgTypes[140] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9280,7 +9480,7 @@ func (x *CreateWebhookSubscriptionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateWebhookSubscriptionRequest.ProtoReflect.Descriptor instead. func (*CreateWebhookSubscriptionRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{136} + return file_api_proto_rawDescGZIP(), []int{140} } func (x *CreateWebhookSubscriptionRequest) GetOrgId() string { @@ -9320,7 +9520,7 @@ type DeleteWebhookSubscriptionRequest struct { func (x *DeleteWebhookSubscriptionRequest) Reset() { *x = DeleteWebhookSubscriptionRequest{} - mi := &file_api_proto_msgTypes[137] + mi := &file_api_proto_msgTypes[141] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9332,7 +9532,7 @@ func (x *DeleteWebhookSubscriptionRequest) String() string { func (*DeleteWebhookSubscriptionRequest) ProtoMessage() {} func (x *DeleteWebhookSubscriptionRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[137] + mi := &file_api_proto_msgTypes[141] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9345,7 +9545,7 @@ func (x *DeleteWebhookSubscriptionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteWebhookSubscriptionRequest.ProtoReflect.Descriptor instead. func (*DeleteWebhookSubscriptionRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{137} + return file_api_proto_rawDescGZIP(), []int{141} } func (x *DeleteWebhookSubscriptionRequest) GetId() string { @@ -9366,7 +9566,7 @@ type ListWebhookSubscriptionsRequest struct { func (x *ListWebhookSubscriptionsRequest) Reset() { *x = ListWebhookSubscriptionsRequest{} - mi := &file_api_proto_msgTypes[138] + mi := &file_api_proto_msgTypes[142] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9378,7 +9578,7 @@ func (x *ListWebhookSubscriptionsRequest) String() string { func (*ListWebhookSubscriptionsRequest) ProtoMessage() {} func (x *ListWebhookSubscriptionsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[138] + mi := &file_api_proto_msgTypes[142] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9391,7 +9591,7 @@ func (x *ListWebhookSubscriptionsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWebhookSubscriptionsRequest.ProtoReflect.Descriptor instead. func (*ListWebhookSubscriptionsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{138} + return file_api_proto_rawDescGZIP(), []int{142} } func (x *ListWebhookSubscriptionsRequest) GetOrgId() string { @@ -9425,7 +9625,7 @@ type ListWebhookSubscriptionsResponse struct { func (x *ListWebhookSubscriptionsResponse) Reset() { *x = ListWebhookSubscriptionsResponse{} - mi := &file_api_proto_msgTypes[139] + mi := &file_api_proto_msgTypes[143] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9437,7 +9637,7 @@ func (x *ListWebhookSubscriptionsResponse) String() string { func (*ListWebhookSubscriptionsResponse) ProtoMessage() {} func (x *ListWebhookSubscriptionsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[139] + mi := &file_api_proto_msgTypes[143] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9450,7 +9650,7 @@ func (x *ListWebhookSubscriptionsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWebhookSubscriptionsResponse.ProtoReflect.Descriptor instead. func (*ListWebhookSubscriptionsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{139} + return file_api_proto_rawDescGZIP(), []int{143} } func (x *ListWebhookSubscriptionsResponse) GetSubscriptions() []*WebhookSubscription { @@ -9478,7 +9678,7 @@ type ListWebhookDeliveriesRequest struct { func (x *ListWebhookDeliveriesRequest) Reset() { *x = ListWebhookDeliveriesRequest{} - mi := &file_api_proto_msgTypes[140] + mi := &file_api_proto_msgTypes[144] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9490,7 +9690,7 @@ func (x *ListWebhookDeliveriesRequest) String() string { func (*ListWebhookDeliveriesRequest) ProtoMessage() {} func (x *ListWebhookDeliveriesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[140] + mi := &file_api_proto_msgTypes[144] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9503,7 +9703,7 @@ func (x *ListWebhookDeliveriesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWebhookDeliveriesRequest.ProtoReflect.Descriptor instead. func (*ListWebhookDeliveriesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{140} + return file_api_proto_rawDescGZIP(), []int{144} } func (x *ListWebhookDeliveriesRequest) GetSubscriptionId() string { @@ -9537,7 +9737,7 @@ type ListWebhookDeliveriesResponse struct { func (x *ListWebhookDeliveriesResponse) Reset() { *x = ListWebhookDeliveriesResponse{} - mi := &file_api_proto_msgTypes[141] + mi := &file_api_proto_msgTypes[145] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9549,7 +9749,7 @@ func (x *ListWebhookDeliveriesResponse) String() string { func (*ListWebhookDeliveriesResponse) ProtoMessage() {} func (x *ListWebhookDeliveriesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[141] + mi := &file_api_proto_msgTypes[145] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9562,7 +9762,7 @@ func (x *ListWebhookDeliveriesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListWebhookDeliveriesResponse.ProtoReflect.Descriptor instead. func (*ListWebhookDeliveriesResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{141} + return file_api_proto_rawDescGZIP(), []int{145} } func (x *ListWebhookDeliveriesResponse) GetDeliveries() []*WebhookDelivery { @@ -9592,7 +9792,7 @@ type TestWebhookRequest struct { func (x *TestWebhookRequest) Reset() { *x = TestWebhookRequest{} - mi := &file_api_proto_msgTypes[142] + mi := &file_api_proto_msgTypes[146] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9604,7 +9804,7 @@ func (x *TestWebhookRequest) String() string { func (*TestWebhookRequest) ProtoMessage() {} func (x *TestWebhookRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[142] + mi := &file_api_proto_msgTypes[146] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9617,7 +9817,7 @@ func (x *TestWebhookRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TestWebhookRequest.ProtoReflect.Descriptor instead. func (*TestWebhookRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{142} + return file_api_proto_rawDescGZIP(), []int{146} } func (x *TestWebhookRequest) GetId() string { @@ -9643,7 +9843,7 @@ type GetWebhookDeliveryRequest struct { func (x *GetWebhookDeliveryRequest) Reset() { *x = GetWebhookDeliveryRequest{} - mi := &file_api_proto_msgTypes[143] + mi := &file_api_proto_msgTypes[147] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9655,7 +9855,7 @@ func (x *GetWebhookDeliveryRequest) String() string { func (*GetWebhookDeliveryRequest) ProtoMessage() {} func (x *GetWebhookDeliveryRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[143] + mi := &file_api_proto_msgTypes[147] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9668,7 +9868,7 @@ func (x *GetWebhookDeliveryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetWebhookDeliveryRequest.ProtoReflect.Descriptor instead. func (*GetWebhookDeliveryRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{143} + return file_api_proto_rawDescGZIP(), []int{147} } func (x *GetWebhookDeliveryRequest) GetId() string { @@ -9690,7 +9890,7 @@ type ReplayWebhookDeliveryRequest struct { func (x *ReplayWebhookDeliveryRequest) Reset() { *x = ReplayWebhookDeliveryRequest{} - mi := &file_api_proto_msgTypes[144] + mi := &file_api_proto_msgTypes[148] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9702,7 +9902,7 @@ func (x *ReplayWebhookDeliveryRequest) String() string { func (*ReplayWebhookDeliveryRequest) ProtoMessage() {} func (x *ReplayWebhookDeliveryRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[144] + mi := &file_api_proto_msgTypes[148] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9715,7 +9915,7 @@ func (x *ReplayWebhookDeliveryRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplayWebhookDeliveryRequest.ProtoReflect.Descriptor instead. func (*ReplayWebhookDeliveryRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{144} + return file_api_proto_rawDescGZIP(), []int{148} } func (x *ReplayWebhookDeliveryRequest) GetId() string { @@ -9739,7 +9939,7 @@ type RotateWebhookSecretRequest struct { func (x *RotateWebhookSecretRequest) Reset() { *x = RotateWebhookSecretRequest{} - mi := &file_api_proto_msgTypes[145] + mi := &file_api_proto_msgTypes[149] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9751,7 +9951,7 @@ func (x *RotateWebhookSecretRequest) String() string { func (*RotateWebhookSecretRequest) ProtoMessage() {} func (x *RotateWebhookSecretRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[145] + mi := &file_api_proto_msgTypes[149] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9764,7 +9964,7 @@ func (x *RotateWebhookSecretRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RotateWebhookSecretRequest.ProtoReflect.Descriptor instead. func (*RotateWebhookSecretRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{145} + return file_api_proto_rawDescGZIP(), []int{149} } func (x *RotateWebhookSecretRequest) GetId() string { @@ -9793,7 +9993,7 @@ type RotateWebhookSecretResponse struct { func (x *RotateWebhookSecretResponse) Reset() { *x = RotateWebhookSecretResponse{} - mi := &file_api_proto_msgTypes[146] + mi := &file_api_proto_msgTypes[150] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9805,7 +10005,7 @@ func (x *RotateWebhookSecretResponse) String() string { func (*RotateWebhookSecretResponse) ProtoMessage() {} func (x *RotateWebhookSecretResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[146] + mi := &file_api_proto_msgTypes[150] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9818,7 +10018,7 @@ func (x *RotateWebhookSecretResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RotateWebhookSecretResponse.ProtoReflect.Descriptor instead. func (*RotateWebhookSecretResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{146} + return file_api_proto_rawDescGZIP(), []int{150} } func (x *RotateWebhookSecretResponse) GetSecret() string { @@ -9852,7 +10052,7 @@ type Notification struct { func (x *Notification) Reset() { *x = Notification{} - mi := &file_api_proto_msgTypes[147] + mi := &file_api_proto_msgTypes[151] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9864,7 +10064,7 @@ func (x *Notification) String() string { func (*Notification) ProtoMessage() {} func (x *Notification) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[147] + mi := &file_api_proto_msgTypes[151] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9877,7 +10077,7 @@ func (x *Notification) ProtoReflect() protoreflect.Message { // Deprecated: Use Notification.ProtoReflect.Descriptor instead. func (*Notification) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{147} + return file_api_proto_rawDescGZIP(), []int{151} } func (x *Notification) GetId() string { @@ -9953,7 +10153,7 @@ type ListNotificationsRequest struct { func (x *ListNotificationsRequest) Reset() { *x = ListNotificationsRequest{} - mi := &file_api_proto_msgTypes[148] + mi := &file_api_proto_msgTypes[152] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -9965,7 +10165,7 @@ func (x *ListNotificationsRequest) String() string { func (*ListNotificationsRequest) ProtoMessage() {} func (x *ListNotificationsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[148] + mi := &file_api_proto_msgTypes[152] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -9978,7 +10178,7 @@ func (x *ListNotificationsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNotificationsRequest.ProtoReflect.Descriptor instead. func (*ListNotificationsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{148} + return file_api_proto_rawDescGZIP(), []int{152} } func (x *ListNotificationsRequest) GetPageSize() int32 { @@ -10005,7 +10205,7 @@ type ListNotificationsResponse struct { func (x *ListNotificationsResponse) Reset() { *x = ListNotificationsResponse{} - mi := &file_api_proto_msgTypes[149] + mi := &file_api_proto_msgTypes[153] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10017,7 +10217,7 @@ func (x *ListNotificationsResponse) String() string { func (*ListNotificationsResponse) ProtoMessage() {} func (x *ListNotificationsResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[149] + mi := &file_api_proto_msgTypes[153] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10030,7 +10230,7 @@ func (x *ListNotificationsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNotificationsResponse.ProtoReflect.Descriptor instead. func (*ListNotificationsResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{149} + return file_api_proto_rawDescGZIP(), []int{153} } func (x *ListNotificationsResponse) GetNotifications() []*Notification { @@ -10055,7 +10255,7 @@ type GetUnreadCountRequest struct { func (x *GetUnreadCountRequest) Reset() { *x = GetUnreadCountRequest{} - mi := &file_api_proto_msgTypes[150] + mi := &file_api_proto_msgTypes[154] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10067,7 +10267,7 @@ func (x *GetUnreadCountRequest) String() string { func (*GetUnreadCountRequest) ProtoMessage() {} func (x *GetUnreadCountRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[150] + mi := &file_api_proto_msgTypes[154] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10080,7 +10280,7 @@ func (x *GetUnreadCountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUnreadCountRequest.ProtoReflect.Descriptor instead. func (*GetUnreadCountRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{150} + return file_api_proto_rawDescGZIP(), []int{154} } type GetUnreadCountResponse struct { @@ -10092,7 +10292,7 @@ type GetUnreadCountResponse struct { func (x *GetUnreadCountResponse) Reset() { *x = GetUnreadCountResponse{} - mi := &file_api_proto_msgTypes[151] + mi := &file_api_proto_msgTypes[155] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10104,7 +10304,7 @@ func (x *GetUnreadCountResponse) String() string { func (*GetUnreadCountResponse) ProtoMessage() {} func (x *GetUnreadCountResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[151] + mi := &file_api_proto_msgTypes[155] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10117,7 +10317,7 @@ func (x *GetUnreadCountResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUnreadCountResponse.ProtoReflect.Descriptor instead. func (*GetUnreadCountResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{151} + return file_api_proto_rawDescGZIP(), []int{155} } func (x *GetUnreadCountResponse) GetCount() int32 { @@ -10136,7 +10336,7 @@ type MarkNotificationReadRequest struct { func (x *MarkNotificationReadRequest) Reset() { *x = MarkNotificationReadRequest{} - mi := &file_api_proto_msgTypes[152] + mi := &file_api_proto_msgTypes[156] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10148,7 +10348,7 @@ func (x *MarkNotificationReadRequest) String() string { func (*MarkNotificationReadRequest) ProtoMessage() {} func (x *MarkNotificationReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[152] + mi := &file_api_proto_msgTypes[156] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10161,7 +10361,7 @@ func (x *MarkNotificationReadRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MarkNotificationReadRequest.ProtoReflect.Descriptor instead. func (*MarkNotificationReadRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{152} + return file_api_proto_rawDescGZIP(), []int{156} } func (x *MarkNotificationReadRequest) GetId() string { @@ -10179,7 +10379,7 @@ type MarkAllNotificationsReadRequest struct { func (x *MarkAllNotificationsReadRequest) Reset() { *x = MarkAllNotificationsReadRequest{} - mi := &file_api_proto_msgTypes[153] + mi := &file_api_proto_msgTypes[157] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10191,7 +10391,7 @@ func (x *MarkAllNotificationsReadRequest) String() string { func (*MarkAllNotificationsReadRequest) ProtoMessage() {} func (x *MarkAllNotificationsReadRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[153] + mi := &file_api_proto_msgTypes[157] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10204,7 +10404,7 @@ func (x *MarkAllNotificationsReadRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MarkAllNotificationsReadRequest.ProtoReflect.Descriptor instead. func (*MarkAllNotificationsReadRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{153} + return file_api_proto_rawDescGZIP(), []int{157} } type DeleteNotificationRequest struct { @@ -10216,7 +10416,7 @@ type DeleteNotificationRequest struct { func (x *DeleteNotificationRequest) Reset() { *x = DeleteNotificationRequest{} - mi := &file_api_proto_msgTypes[154] + mi := &file_api_proto_msgTypes[158] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10228,7 +10428,7 @@ func (x *DeleteNotificationRequest) String() string { func (*DeleteNotificationRequest) ProtoMessage() {} func (x *DeleteNotificationRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[154] + mi := &file_api_proto_msgTypes[158] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10241,7 +10441,7 @@ func (x *DeleteNotificationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNotificationRequest.ProtoReflect.Descriptor instead. func (*DeleteNotificationRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{154} + return file_api_proto_rawDescGZIP(), []int{158} } func (x *DeleteNotificationRequest) GetId() string { @@ -10262,7 +10462,7 @@ type OnboardingStep struct { func (x *OnboardingStep) Reset() { *x = OnboardingStep{} - mi := &file_api_proto_msgTypes[155] + mi := &file_api_proto_msgTypes[159] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10274,7 +10474,7 @@ func (x *OnboardingStep) String() string { func (*OnboardingStep) ProtoMessage() {} func (x *OnboardingStep) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[155] + mi := &file_api_proto_msgTypes[159] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10287,7 +10487,7 @@ func (x *OnboardingStep) ProtoReflect() protoreflect.Message { // Deprecated: Use OnboardingStep.ProtoReflect.Descriptor instead. func (*OnboardingStep) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{155} + return file_api_proto_rawDescGZIP(), []int{159} } func (x *OnboardingStep) GetStepName() string { @@ -10321,7 +10521,7 @@ type OnboardingProgress struct { func (x *OnboardingProgress) Reset() { *x = OnboardingProgress{} - mi := &file_api_proto_msgTypes[156] + mi := &file_api_proto_msgTypes[160] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10333,7 +10533,7 @@ func (x *OnboardingProgress) String() string { func (*OnboardingProgress) ProtoMessage() {} func (x *OnboardingProgress) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[156] + mi := &file_api_proto_msgTypes[160] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10346,7 +10546,7 @@ func (x *OnboardingProgress) ProtoReflect() protoreflect.Message { // Deprecated: Use OnboardingProgress.ProtoReflect.Descriptor instead. func (*OnboardingProgress) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{156} + return file_api_proto_rawDescGZIP(), []int{160} } func (x *OnboardingProgress) GetSteps() []*OnboardingStep { @@ -10371,7 +10571,7 @@ type GetOnboardingProgressRequest struct { func (x *GetOnboardingProgressRequest) Reset() { *x = GetOnboardingProgressRequest{} - mi := &file_api_proto_msgTypes[157] + mi := &file_api_proto_msgTypes[161] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10383,7 +10583,7 @@ func (x *GetOnboardingProgressRequest) String() string { func (*GetOnboardingProgressRequest) ProtoMessage() {} func (x *GetOnboardingProgressRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[157] + mi := &file_api_proto_msgTypes[161] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10396,7 +10596,7 @@ func (x *GetOnboardingProgressRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetOnboardingProgressRequest.ProtoReflect.Descriptor instead. func (*GetOnboardingProgressRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{157} + return file_api_proto_rawDescGZIP(), []int{161} } type CompleteOnboardingStepRequest struct { @@ -10408,7 +10608,7 @@ type CompleteOnboardingStepRequest struct { func (x *CompleteOnboardingStepRequest) Reset() { *x = CompleteOnboardingStepRequest{} - mi := &file_api_proto_msgTypes[158] + mi := &file_api_proto_msgTypes[162] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10420,7 +10620,7 @@ func (x *CompleteOnboardingStepRequest) String() string { func (*CompleteOnboardingStepRequest) ProtoMessage() {} func (x *CompleteOnboardingStepRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[158] + mi := &file_api_proto_msgTypes[162] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10433,7 +10633,7 @@ func (x *CompleteOnboardingStepRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CompleteOnboardingStepRequest.ProtoReflect.Descriptor instead. func (*CompleteOnboardingStepRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{158} + return file_api_proto_rawDescGZIP(), []int{162} } func (x *CompleteOnboardingStepRequest) GetStepName() string { @@ -10452,7 +10652,7 @@ type SkipOnboardingStepRequest struct { func (x *SkipOnboardingStepRequest) Reset() { *x = SkipOnboardingStepRequest{} - mi := &file_api_proto_msgTypes[159] + mi := &file_api_proto_msgTypes[163] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10464,7 +10664,7 @@ func (x *SkipOnboardingStepRequest) String() string { func (*SkipOnboardingStepRequest) ProtoMessage() {} func (x *SkipOnboardingStepRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[159] + mi := &file_api_proto_msgTypes[163] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10477,7 +10677,7 @@ func (x *SkipOnboardingStepRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SkipOnboardingStepRequest.ProtoReflect.Descriptor instead. func (*SkipOnboardingStepRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{159} + return file_api_proto_rawDescGZIP(), []int{163} } func (x *SkipOnboardingStepRequest) GetStepName() string { @@ -10503,7 +10703,7 @@ type GDPRRequest struct { func (x *GDPRRequest) Reset() { *x = GDPRRequest{} - mi := &file_api_proto_msgTypes[160] + mi := &file_api_proto_msgTypes[164] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10515,7 +10715,7 @@ func (x *GDPRRequest) String() string { func (*GDPRRequest) ProtoMessage() {} func (x *GDPRRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[160] + mi := &file_api_proto_msgTypes[164] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10528,7 +10728,7 @@ func (x *GDPRRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GDPRRequest.ProtoReflect.Descriptor instead. func (*GDPRRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{160} + return file_api_proto_rawDescGZIP(), []int{164} } func (x *GDPRRequest) GetId() string { @@ -10595,7 +10795,7 @@ type RequestDataExportRequest struct { func (x *RequestDataExportRequest) Reset() { *x = RequestDataExportRequest{} - mi := &file_api_proto_msgTypes[161] + mi := &file_api_proto_msgTypes[165] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10607,7 +10807,7 @@ func (x *RequestDataExportRequest) String() string { func (*RequestDataExportRequest) ProtoMessage() {} func (x *RequestDataExportRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[161] + mi := &file_api_proto_msgTypes[165] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10620,7 +10820,7 @@ func (x *RequestDataExportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestDataExportRequest.ProtoReflect.Descriptor instead. func (*RequestDataExportRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{161} + return file_api_proto_rawDescGZIP(), []int{165} } type GetExportStatusRequest struct { @@ -10632,7 +10832,7 @@ type GetExportStatusRequest struct { func (x *GetExportStatusRequest) Reset() { *x = GetExportStatusRequest{} - mi := &file_api_proto_msgTypes[162] + mi := &file_api_proto_msgTypes[166] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10644,7 +10844,7 @@ func (x *GetExportStatusRequest) String() string { func (*GetExportStatusRequest) ProtoMessage() {} func (x *GetExportStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[162] + mi := &file_api_proto_msgTypes[166] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10657,7 +10857,7 @@ func (x *GetExportStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetExportStatusRequest.ProtoReflect.Descriptor instead. func (*GetExportStatusRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{162} + return file_api_proto_rawDescGZIP(), []int{166} } func (x *GetExportStatusRequest) GetId() string { @@ -10675,7 +10875,7 @@ type RequestDeletionRequest struct { func (x *RequestDeletionRequest) Reset() { *x = RequestDeletionRequest{} - mi := &file_api_proto_msgTypes[163] + mi := &file_api_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10687,7 +10887,7 @@ func (x *RequestDeletionRequest) String() string { func (*RequestDeletionRequest) ProtoMessage() {} func (x *RequestDeletionRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[163] + mi := &file_api_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10700,7 +10900,7 @@ func (x *RequestDeletionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RequestDeletionRequest.ProtoReflect.Descriptor instead. func (*RequestDeletionRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{163} + return file_api_proto_rawDescGZIP(), []int{167} } type GetDeletionStatusRequest struct { @@ -10712,7 +10912,7 @@ type GetDeletionStatusRequest struct { func (x *GetDeletionStatusRequest) Reset() { *x = GetDeletionStatusRequest{} - mi := &file_api_proto_msgTypes[164] + mi := &file_api_proto_msgTypes[168] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10724,7 +10924,7 @@ func (x *GetDeletionStatusRequest) String() string { func (*GetDeletionStatusRequest) ProtoMessage() {} func (x *GetDeletionStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[164] + mi := &file_api_proto_msgTypes[168] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10737,7 +10937,7 @@ func (x *GetDeletionStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetDeletionStatusRequest.ProtoReflect.Descriptor instead. func (*GetDeletionStatusRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{164} + return file_api_proto_rawDescGZIP(), []int{168} } func (x *GetDeletionStatusRequest) GetId() string { @@ -10762,7 +10962,7 @@ type MFADevice struct { func (x *MFADevice) Reset() { *x = MFADevice{} - mi := &file_api_proto_msgTypes[165] + mi := &file_api_proto_msgTypes[169] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10774,7 +10974,7 @@ func (x *MFADevice) String() string { func (*MFADevice) ProtoMessage() {} func (x *MFADevice) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[165] + mi := &file_api_proto_msgTypes[169] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10787,7 +10987,7 @@ func (x *MFADevice) ProtoReflect() protoreflect.Message { // Deprecated: Use MFADevice.ProtoReflect.Descriptor instead. func (*MFADevice) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{165} + return file_api_proto_rawDescGZIP(), []int{169} } func (x *MFADevice) GetId() string { @@ -10847,7 +11047,7 @@ type SetupTOTPRequest struct { func (x *SetupTOTPRequest) Reset() { *x = SetupTOTPRequest{} - mi := &file_api_proto_msgTypes[166] + mi := &file_api_proto_msgTypes[170] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10859,7 +11059,7 @@ func (x *SetupTOTPRequest) String() string { func (*SetupTOTPRequest) ProtoMessage() {} func (x *SetupTOTPRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[166] + mi := &file_api_proto_msgTypes[170] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10872,7 +11072,7 @@ func (x *SetupTOTPRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetupTOTPRequest.ProtoReflect.Descriptor instead. func (*SetupTOTPRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{166} + return file_api_proto_rawDescGZIP(), []int{170} } type SetupTOTPResponse struct { @@ -10886,7 +11086,7 @@ type SetupTOTPResponse struct { func (x *SetupTOTPResponse) Reset() { *x = SetupTOTPResponse{} - mi := &file_api_proto_msgTypes[167] + mi := &file_api_proto_msgTypes[171] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10898,7 +11098,7 @@ func (x *SetupTOTPResponse) String() string { func (*SetupTOTPResponse) ProtoMessage() {} func (x *SetupTOTPResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[167] + mi := &file_api_proto_msgTypes[171] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10911,7 +11111,7 @@ func (x *SetupTOTPResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetupTOTPResponse.ProtoReflect.Descriptor instead. func (*SetupTOTPResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{167} + return file_api_proto_rawDescGZIP(), []int{171} } func (x *SetupTOTPResponse) GetSecret() string { @@ -10944,7 +11144,7 @@ type VerifyTOTPRequest struct { func (x *VerifyTOTPRequest) Reset() { *x = VerifyTOTPRequest{} - mi := &file_api_proto_msgTypes[168] + mi := &file_api_proto_msgTypes[172] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -10956,7 +11156,7 @@ func (x *VerifyTOTPRequest) String() string { func (*VerifyTOTPRequest) ProtoMessage() {} func (x *VerifyTOTPRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[168] + mi := &file_api_proto_msgTypes[172] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -10969,7 +11169,7 @@ func (x *VerifyTOTPRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyTOTPRequest.ProtoReflect.Descriptor instead. func (*VerifyTOTPRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{168} + return file_api_proto_rawDescGZIP(), []int{172} } func (x *VerifyTOTPRequest) GetCode() string { @@ -10989,7 +11189,7 @@ type VerifyTOTPResponse struct { func (x *VerifyTOTPResponse) Reset() { *x = VerifyTOTPResponse{} - mi := &file_api_proto_msgTypes[169] + mi := &file_api_proto_msgTypes[173] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11001,7 +11201,7 @@ func (x *VerifyTOTPResponse) String() string { func (*VerifyTOTPResponse) ProtoMessage() {} func (x *VerifyTOTPResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[169] + mi := &file_api_proto_msgTypes[173] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11014,7 +11214,7 @@ func (x *VerifyTOTPResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyTOTPResponse.ProtoReflect.Descriptor instead. func (*VerifyTOTPResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{169} + return file_api_proto_rawDescGZIP(), []int{173} } func (x *VerifyTOTPResponse) GetValid() bool { @@ -11039,7 +11239,7 @@ type ListMFADevicesRequest struct { func (x *ListMFADevicesRequest) Reset() { *x = ListMFADevicesRequest{} - mi := &file_api_proto_msgTypes[170] + mi := &file_api_proto_msgTypes[174] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11051,7 +11251,7 @@ func (x *ListMFADevicesRequest) String() string { func (*ListMFADevicesRequest) ProtoMessage() {} func (x *ListMFADevicesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[170] + mi := &file_api_proto_msgTypes[174] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11064,7 +11264,7 @@ func (x *ListMFADevicesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMFADevicesRequest.ProtoReflect.Descriptor instead. func (*ListMFADevicesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{170} + return file_api_proto_rawDescGZIP(), []int{174} } type ListMFADevicesResponse struct { @@ -11076,7 +11276,7 @@ type ListMFADevicesResponse struct { func (x *ListMFADevicesResponse) Reset() { *x = ListMFADevicesResponse{} - mi := &file_api_proto_msgTypes[171] + mi := &file_api_proto_msgTypes[175] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11088,7 +11288,7 @@ func (x *ListMFADevicesResponse) String() string { func (*ListMFADevicesResponse) ProtoMessage() {} func (x *ListMFADevicesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[171] + mi := &file_api_proto_msgTypes[175] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11101,7 +11301,7 @@ func (x *ListMFADevicesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListMFADevicesResponse.ProtoReflect.Descriptor instead. func (*ListMFADevicesResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{171} + return file_api_proto_rawDescGZIP(), []int{175} } func (x *ListMFADevicesResponse) GetDevices() []*MFADevice { @@ -11120,7 +11320,7 @@ type RevokeMFADeviceRequest struct { func (x *RevokeMFADeviceRequest) Reset() { *x = RevokeMFADeviceRequest{} - mi := &file_api_proto_msgTypes[172] + mi := &file_api_proto_msgTypes[176] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11132,7 +11332,7 @@ func (x *RevokeMFADeviceRequest) String() string { func (*RevokeMFADeviceRequest) ProtoMessage() {} func (x *RevokeMFADeviceRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[172] + mi := &file_api_proto_msgTypes[176] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11145,7 +11345,7 @@ func (x *RevokeMFADeviceRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RevokeMFADeviceRequest.ProtoReflect.Descriptor instead. func (*RevokeMFADeviceRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{172} + return file_api_proto_rawDescGZIP(), []int{176} } func (x *RevokeMFADeviceRequest) GetId() string { @@ -11163,7 +11363,7 @@ type GenerateBackupCodesRequest struct { func (x *GenerateBackupCodesRequest) Reset() { *x = GenerateBackupCodesRequest{} - mi := &file_api_proto_msgTypes[173] + mi := &file_api_proto_msgTypes[177] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11175,7 +11375,7 @@ func (x *GenerateBackupCodesRequest) String() string { func (*GenerateBackupCodesRequest) ProtoMessage() {} func (x *GenerateBackupCodesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[173] + mi := &file_api_proto_msgTypes[177] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11188,7 +11388,7 @@ func (x *GenerateBackupCodesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateBackupCodesRequest.ProtoReflect.Descriptor instead. func (*GenerateBackupCodesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{173} + return file_api_proto_rawDescGZIP(), []int{177} } type GenerateBackupCodesResponse struct { @@ -11200,7 +11400,7 @@ type GenerateBackupCodesResponse struct { func (x *GenerateBackupCodesResponse) Reset() { *x = GenerateBackupCodesResponse{} - mi := &file_api_proto_msgTypes[174] + mi := &file_api_proto_msgTypes[178] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11212,7 +11412,7 @@ func (x *GenerateBackupCodesResponse) String() string { func (*GenerateBackupCodesResponse) ProtoMessage() {} func (x *GenerateBackupCodesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[174] + mi := &file_api_proto_msgTypes[178] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11225,7 +11425,7 @@ func (x *GenerateBackupCodesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateBackupCodesResponse.ProtoReflect.Descriptor instead. func (*GenerateBackupCodesResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{174} + return file_api_proto_rawDescGZIP(), []int{178} } func (x *GenerateBackupCodesResponse) GetBackupCodes() []string { @@ -11256,7 +11456,7 @@ type OrgSSOConfig struct { func (x *OrgSSOConfig) Reset() { *x = OrgSSOConfig{} - mi := &file_api_proto_msgTypes[175] + mi := &file_api_proto_msgTypes[179] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11268,7 +11468,7 @@ func (x *OrgSSOConfig) String() string { func (*OrgSSOConfig) ProtoMessage() {} func (x *OrgSSOConfig) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[175] + mi := &file_api_proto_msgTypes[179] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11281,7 +11481,7 @@ func (x *OrgSSOConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use OrgSSOConfig.ProtoReflect.Descriptor instead. func (*OrgSSOConfig) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{175} + return file_api_proto_rawDescGZIP(), []int{179} } func (x *OrgSSOConfig) GetOrgId() string { @@ -11335,7 +11535,7 @@ type GetOrgSSORequest struct { func (x *GetOrgSSORequest) Reset() { *x = GetOrgSSORequest{} - mi := &file_api_proto_msgTypes[176] + mi := &file_api_proto_msgTypes[180] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11347,7 +11547,7 @@ func (x *GetOrgSSORequest) String() string { func (*GetOrgSSORequest) ProtoMessage() {} func (x *GetOrgSSORequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[176] + mi := &file_api_proto_msgTypes[180] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11360,7 +11560,7 @@ func (x *GetOrgSSORequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetOrgSSORequest.ProtoReflect.Descriptor instead. func (*GetOrgSSORequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{176} + return file_api_proto_rawDescGZIP(), []int{180} } func (x *GetOrgSSORequest) GetOrgId() string { @@ -11385,7 +11585,7 @@ type StartSSOSetupRequest struct { func (x *StartSSOSetupRequest) Reset() { *x = StartSSOSetupRequest{} - mi := &file_api_proto_msgTypes[177] + mi := &file_api_proto_msgTypes[181] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11397,7 +11597,7 @@ func (x *StartSSOSetupRequest) String() string { func (*StartSSOSetupRequest) ProtoMessage() {} func (x *StartSSOSetupRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[177] + mi := &file_api_proto_msgTypes[181] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11410,7 +11610,7 @@ func (x *StartSSOSetupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StartSSOSetupRequest.ProtoReflect.Descriptor instead. func (*StartSSOSetupRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{177} + return file_api_proto_rawDescGZIP(), []int{181} } func (x *StartSSOSetupRequest) GetOrgId() string { @@ -11439,7 +11639,7 @@ type StartSSOSetupResponse struct { func (x *StartSSOSetupResponse) Reset() { *x = StartSSOSetupResponse{} - mi := &file_api_proto_msgTypes[178] + mi := &file_api_proto_msgTypes[182] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11451,7 +11651,7 @@ func (x *StartSSOSetupResponse) String() string { func (*StartSSOSetupResponse) ProtoMessage() {} func (x *StartSSOSetupResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[178] + mi := &file_api_proto_msgTypes[182] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11464,7 +11664,7 @@ func (x *StartSSOSetupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartSSOSetupResponse.ProtoReflect.Descriptor instead. func (*StartSSOSetupResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{178} + return file_api_proto_rawDescGZIP(), []int{182} } func (x *StartSSOSetupResponse) GetPortalLink() string { @@ -11483,7 +11683,7 @@ type DisableSSORequest struct { func (x *DisableSSORequest) Reset() { *x = DisableSSORequest{} - mi := &file_api_proto_msgTypes[179] + mi := &file_api_proto_msgTypes[183] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11495,7 +11695,7 @@ func (x *DisableSSORequest) String() string { func (*DisableSSORequest) ProtoMessage() {} func (x *DisableSSORequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[179] + mi := &file_api_proto_msgTypes[183] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11508,7 +11708,7 @@ func (x *DisableSSORequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DisableSSORequest.ProtoReflect.Descriptor instead. func (*DisableSSORequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{179} + return file_api_proto_rawDescGZIP(), []int{183} } func (x *DisableSSORequest) GetOrgId() string { @@ -11530,7 +11730,7 @@ type OpenBillingPortalRequest struct { func (x *OpenBillingPortalRequest) Reset() { *x = OpenBillingPortalRequest{} - mi := &file_api_proto_msgTypes[180] + mi := &file_api_proto_msgTypes[184] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11542,7 +11742,7 @@ func (x *OpenBillingPortalRequest) String() string { func (*OpenBillingPortalRequest) ProtoMessage() {} func (x *OpenBillingPortalRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[180] + mi := &file_api_proto_msgTypes[184] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11555,7 +11755,7 @@ func (x *OpenBillingPortalRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use OpenBillingPortalRequest.ProtoReflect.Descriptor instead. func (*OpenBillingPortalRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{180} + return file_api_proto_rawDescGZIP(), []int{184} } func (x *OpenBillingPortalRequest) GetOrgId() string { @@ -11581,7 +11781,7 @@ type OpenBillingPortalResponse struct { func (x *OpenBillingPortalResponse) Reset() { *x = OpenBillingPortalResponse{} - mi := &file_api_proto_msgTypes[181] + mi := &file_api_proto_msgTypes[185] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11593,7 +11793,7 @@ func (x *OpenBillingPortalResponse) String() string { func (*OpenBillingPortalResponse) ProtoMessage() {} func (x *OpenBillingPortalResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[181] + mi := &file_api_proto_msgTypes[185] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11606,7 +11806,7 @@ func (x *OpenBillingPortalResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use OpenBillingPortalResponse.ProtoReflect.Descriptor instead. func (*OpenBillingPortalResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{181} + return file_api_proto_rawDescGZIP(), []int{185} } func (x *OpenBillingPortalResponse) GetUrl() string { @@ -11638,7 +11838,7 @@ type Invoice struct { func (x *Invoice) Reset() { *x = Invoice{} - mi := &file_api_proto_msgTypes[182] + mi := &file_api_proto_msgTypes[186] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11650,7 +11850,7 @@ func (x *Invoice) String() string { func (*Invoice) ProtoMessage() {} func (x *Invoice) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[182] + mi := &file_api_proto_msgTypes[186] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11663,7 +11863,7 @@ func (x *Invoice) ProtoReflect() protoreflect.Message { // Deprecated: Use Invoice.ProtoReflect.Descriptor instead. func (*Invoice) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{182} + return file_api_proto_rawDescGZIP(), []int{186} } func (x *Invoice) GetId() string { @@ -11753,7 +11953,7 @@ type ListInvoicesRequest struct { func (x *ListInvoicesRequest) Reset() { *x = ListInvoicesRequest{} - mi := &file_api_proto_msgTypes[183] + mi := &file_api_proto_msgTypes[187] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11765,7 +11965,7 @@ func (x *ListInvoicesRequest) String() string { func (*ListInvoicesRequest) ProtoMessage() {} func (x *ListInvoicesRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[183] + mi := &file_api_proto_msgTypes[187] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11778,7 +11978,7 @@ func (x *ListInvoicesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListInvoicesRequest.ProtoReflect.Descriptor instead. func (*ListInvoicesRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{183} + return file_api_proto_rawDescGZIP(), []int{187} } func (x *ListInvoicesRequest) GetOrgId() string { @@ -11804,7 +12004,7 @@ type ListInvoicesResponse struct { func (x *ListInvoicesResponse) Reset() { *x = ListInvoicesResponse{} - mi := &file_api_proto_msgTypes[184] + mi := &file_api_proto_msgTypes[188] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11816,7 +12016,7 @@ func (x *ListInvoicesResponse) String() string { func (*ListInvoicesResponse) ProtoMessage() {} func (x *ListInvoicesResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[184] + mi := &file_api_proto_msgTypes[188] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11829,7 +12029,7 @@ func (x *ListInvoicesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListInvoicesResponse.ProtoReflect.Descriptor instead. func (*ListInvoicesResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{184} + return file_api_proto_rawDescGZIP(), []int{188} } func (x *ListInvoicesResponse) GetInvoices() []*Invoice { @@ -11854,7 +12054,7 @@ type UserEmailSettings struct { func (x *UserEmailSettings) Reset() { *x = UserEmailSettings{} - mi := &file_api_proto_msgTypes[185] + mi := &file_api_proto_msgTypes[189] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11866,7 +12066,7 @@ func (x *UserEmailSettings) String() string { func (*UserEmailSettings) ProtoMessage() {} func (x *UserEmailSettings) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[185] + mi := &file_api_proto_msgTypes[189] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11879,7 +12079,7 @@ func (x *UserEmailSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use UserEmailSettings.ProtoReflect.Descriptor instead. func (*UserEmailSettings) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{185} + return file_api_proto_rawDescGZIP(), []int{189} } func (x *UserEmailSettings) GetProduct() bool { @@ -11921,7 +12121,7 @@ type UserNotificationSettings struct { func (x *UserNotificationSettings) Reset() { *x = UserNotificationSettings{} - mi := &file_api_proto_msgTypes[186] + mi := &file_api_proto_msgTypes[190] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -11933,7 +12133,7 @@ func (x *UserNotificationSettings) String() string { func (*UserNotificationSettings) ProtoMessage() {} func (x *UserNotificationSettings) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[186] + mi := &file_api_proto_msgTypes[190] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -11946,7 +12146,7 @@ func (x *UserNotificationSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use UserNotificationSettings.ProtoReflect.Descriptor instead. func (*UserNotificationSettings) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{186} + return file_api_proto_rawDescGZIP(), []int{190} } func (x *UserNotificationSettings) GetInApp() bool { @@ -11993,7 +12193,7 @@ type UserSettings struct { func (x *UserSettings) Reset() { *x = UserSettings{} - mi := &file_api_proto_msgTypes[187] + mi := &file_api_proto_msgTypes[191] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12005,7 +12205,7 @@ func (x *UserSettings) String() string { func (*UserSettings) ProtoMessage() {} func (x *UserSettings) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[187] + mi := &file_api_proto_msgTypes[191] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12018,7 +12218,7 @@ func (x *UserSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use UserSettings.ProtoReflect.Descriptor instead. func (*UserSettings) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{187} + return file_api_proto_rawDescGZIP(), []int{191} } func (x *UserSettings) GetTheme() string { @@ -12078,7 +12278,7 @@ type GetUserSettingsRequest struct { func (x *GetUserSettingsRequest) Reset() { *x = GetUserSettingsRequest{} - mi := &file_api_proto_msgTypes[188] + mi := &file_api_proto_msgTypes[192] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12090,7 +12290,7 @@ func (x *GetUserSettingsRequest) String() string { func (*GetUserSettingsRequest) ProtoMessage() {} func (x *GetUserSettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[188] + mi := &file_api_proto_msgTypes[192] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12103,7 +12303,7 @@ func (x *GetUserSettingsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUserSettingsRequest.ProtoReflect.Descriptor instead. func (*GetUserSettingsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{188} + return file_api_proto_rawDescGZIP(), []int{192} } type UpdateUserSettingsRequest struct { @@ -12117,7 +12317,7 @@ type UpdateUserSettingsRequest struct { func (x *UpdateUserSettingsRequest) Reset() { *x = UpdateUserSettingsRequest{} - mi := &file_api_proto_msgTypes[189] + mi := &file_api_proto_msgTypes[193] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12129,7 +12329,7 @@ func (x *UpdateUserSettingsRequest) String() string { func (*UpdateUserSettingsRequest) ProtoMessage() {} func (x *UpdateUserSettingsRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[189] + mi := &file_api_proto_msgTypes[193] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12142,7 +12342,7 @@ func (x *UpdateUserSettingsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateUserSettingsRequest.ProtoReflect.Descriptor instead. func (*UpdateUserSettingsRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{189} + return file_api_proto_rawDescGZIP(), []int{193} } func (x *UpdateUserSettingsRequest) GetPatch() *UserSettings { @@ -12168,7 +12368,7 @@ type ServiceInfo struct { func (x *ServiceInfo) Reset() { *x = ServiceInfo{} - mi := &file_api_proto_msgTypes[190] + mi := &file_api_proto_msgTypes[194] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12180,7 +12380,7 @@ func (x *ServiceInfo) String() string { func (*ServiceInfo) ProtoMessage() {} func (x *ServiceInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[190] + mi := &file_api_proto_msgTypes[194] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12193,7 +12393,7 @@ func (x *ServiceInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceInfo.ProtoReflect.Descriptor instead. func (*ServiceInfo) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{190} + return file_api_proto_rawDescGZIP(), []int{194} } func (x *ServiceInfo) GetName() string { @@ -12248,7 +12448,7 @@ type RPCInfo struct { func (x *RPCInfo) Reset() { *x = RPCInfo{} - mi := &file_api_proto_msgTypes[191] + mi := &file_api_proto_msgTypes[195] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12260,7 +12460,7 @@ func (x *RPCInfo) String() string { func (*RPCInfo) ProtoMessage() {} func (x *RPCInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[191] + mi := &file_api_proto_msgTypes[195] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12273,7 +12473,7 @@ func (x *RPCInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use RPCInfo.ProtoReflect.Descriptor instead. func (*RPCInfo) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{191} + return file_api_proto_rawDescGZIP(), []int{195} } func (x *RPCInfo) GetService() string { @@ -12345,7 +12545,7 @@ type PermissionInfo struct { func (x *PermissionInfo) Reset() { *x = PermissionInfo{} - mi := &file_api_proto_msgTypes[192] + mi := &file_api_proto_msgTypes[196] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12357,7 +12557,7 @@ func (x *PermissionInfo) String() string { func (*PermissionInfo) ProtoMessage() {} func (x *PermissionInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[192] + mi := &file_api_proto_msgTypes[196] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12370,7 +12570,7 @@ func (x *PermissionInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use PermissionInfo.ProtoReflect.Descriptor instead. func (*PermissionInfo) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{192} + return file_api_proto_rawDescGZIP(), []int{196} } func (x *PermissionInfo) GetResource() string { @@ -12417,7 +12617,7 @@ type RLSPolicyInfo struct { func (x *RLSPolicyInfo) Reset() { *x = RLSPolicyInfo{} - mi := &file_api_proto_msgTypes[193] + mi := &file_api_proto_msgTypes[197] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12429,7 +12629,7 @@ func (x *RLSPolicyInfo) String() string { func (*RLSPolicyInfo) ProtoMessage() {} func (x *RLSPolicyInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[193] + mi := &file_api_proto_msgTypes[197] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12442,7 +12642,7 @@ func (x *RLSPolicyInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use RLSPolicyInfo.ProtoReflect.Descriptor instead. func (*RLSPolicyInfo) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{193} + return file_api_proto_rawDescGZIP(), []int{197} } func (x *RLSPolicyInfo) GetTable() string { @@ -12491,7 +12691,7 @@ type ScopeInfo struct { func (x *ScopeInfo) Reset() { *x = ScopeInfo{} - mi := &file_api_proto_msgTypes[194] + mi := &file_api_proto_msgTypes[198] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12503,7 +12703,7 @@ func (x *ScopeInfo) String() string { func (*ScopeInfo) ProtoMessage() {} func (x *ScopeInfo) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[194] + mi := &file_api_proto_msgTypes[198] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12516,7 +12716,7 @@ func (x *ScopeInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ScopeInfo.ProtoReflect.Descriptor instead. func (*ScopeInfo) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{194} + return file_api_proto_rawDescGZIP(), []int{198} } func (x *ScopeInfo) GetScope() string { @@ -12547,7 +12747,7 @@ type ServiceCapabilities struct { func (x *ServiceCapabilities) Reset() { *x = ServiceCapabilities{} - mi := &file_api_proto_msgTypes[195] + mi := &file_api_proto_msgTypes[199] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12559,7 +12759,7 @@ func (x *ServiceCapabilities) String() string { func (*ServiceCapabilities) ProtoMessage() {} func (x *ServiceCapabilities) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[195] + mi := &file_api_proto_msgTypes[199] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12572,7 +12772,7 @@ func (x *ServiceCapabilities) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceCapabilities.ProtoReflect.Descriptor instead. func (*ServiceCapabilities) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{195} + return file_api_proto_rawDescGZIP(), []int{199} } func (x *ServiceCapabilities) GetInfo() *ServiceInfo { @@ -12618,7 +12818,7 @@ type GetServiceInfoRequest struct { func (x *GetServiceInfoRequest) Reset() { *x = GetServiceInfoRequest{} - mi := &file_api_proto_msgTypes[196] + mi := &file_api_proto_msgTypes[200] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12630,7 +12830,7 @@ func (x *GetServiceInfoRequest) String() string { func (*GetServiceInfoRequest) ProtoMessage() {} func (x *GetServiceInfoRequest) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[196] + mi := &file_api_proto_msgTypes[200] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12643,7 +12843,7 @@ func (x *GetServiceInfoRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetServiceInfoRequest.ProtoReflect.Descriptor instead. func (*GetServiceInfoRequest) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{196} + return file_api_proto_rawDescGZIP(), []int{200} } type GetServiceInfoResponse struct { @@ -12655,7 +12855,7 @@ type GetServiceInfoResponse struct { func (x *GetServiceInfoResponse) Reset() { *x = GetServiceInfoResponse{} - mi := &file_api_proto_msgTypes[197] + mi := &file_api_proto_msgTypes[201] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -12667,7 +12867,7 @@ func (x *GetServiceInfoResponse) String() string { func (*GetServiceInfoResponse) ProtoMessage() {} func (x *GetServiceInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_api_proto_msgTypes[197] + mi := &file_api_proto_msgTypes[201] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -12680,7 +12880,7 @@ func (x *GetServiceInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetServiceInfoResponse.ProtoReflect.Descriptor instead. func (*GetServiceInfoResponse) Descriptor() ([]byte, []int) { - return file_api_proto_rawDescGZIP(), []int{197} + return file_api_proto_rawDescGZIP(), []int{201} } func (x *GetServiceInfoResponse) GetCapabilities() *ServiceCapabilities { @@ -12895,7 +13095,15 @@ const file_api_proto_rawDesc = "" + "\x04role\x18\x03 \x01(\x0e2\x13.customers.TeamRoleR\x04role\"_\n" + "\x17RemoveTeamMemberRequest\x12!\n" + "\ateam_id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06teamId\x12!\n" + - "\auser_id\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06userId\";\n" + + "\auser_id\x18\x02 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06userId\"u\n" + + "\x11UpdateTeamRequest\x12!\n" + + "\ateam_id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06teamId\x12\x1b\n" + + "\x04name\x18\x02 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\x04name\x12 \n" + + "\vdescription\x18\x03 \x01(\tR\vdescription\"9\n" + + "\x12UpdateTeamResponse\x12#\n" + + "\x04team\x18\x01 \x01(\v2\x0f.customers.TeamR\x04team\"6\n" + + "\x11DeleteTeamRequest\x12!\n" + + "\ateam_id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06teamId\";\n" + "\x16ListTeamMembersRequest\x12!\n" + "\ateam_id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x06teamId\"N\n" + "\x17ListTeamMembersResponse\x123\n" + @@ -13316,7 +13524,11 @@ const file_api_proto_rawDesc = "" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"x\n" + "\x1aListActiveSessionsResponse\x122\n" + "\bsessions\x18\x01 \x03(\v2\x16.customers.SessionInfoR\bsessions\x12&\n" + - "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"<\n" + + "\x0fnext_page_token\x18\x02 \x01(\tR\rnextPageToken\"V\n" + + "\x14RevokeSessionRequest\x12&\n" + + "\n" + + "session_id\x18\x01 \x01(\tB\a\xbaH\x04r\x02\x10\x01R\tsessionId\x12\x16\n" + + "\x06reason\x18\x02 \x01(\tR\x06reason\"<\n" + "\x19GetOrgEntitlementsRequest\x12\x1f\n" + "\x06org_id\x18\x01 \x01(\tB\b\xbaH\x05r\x03\xb0\x01\x01R\x05orgId\"y\n" + "\x1aGetOrgEntitlementsResponse\x12\x1b\n" + @@ -13729,14 +13941,18 @@ const file_api_proto_rawDesc = "" + "\fRemoveMember\x12!.customers.RemoveOrgMemberRequest\x1a\x16.google.protobuf.Empty\"4\x82\xd3\xe4\x93\x02.*,/v1/organizations/{org_id}/members/{user_id}\x12~\n" + "\vListMembers\x12 .customers.ListOrgMembersRequest\x1a!.customers.ListOrgMembersResponse\"*\x82\xd3\xe4\x93\x02$\x12\"/v1/organizations/{org_id}/members\x12w\n" + "\x0eGetOrgSettings\x12 .customers.GetOrgSettingsRequest\x1a\x16.customers.OrgSettings\"+\x82\xd3\xe4\x93\x02%\x12#/v1/organizations/{org_id}/settings\x12\x80\x01\n" + - "\x11UpdateOrgSettings\x12#.customers.UpdateOrgSettingsRequest\x1a\x16.customers.OrgSettings\".\x82\xd3\xe4\x93\x02(:\x01*\x1a#/v1/organizations/{org_id}/settings2\xdb\x04\n" + + "\x11UpdateOrgSettings\x12#.customers.UpdateOrgSettingsRequest\x1a\x16.customers.OrgSettings\".\x82\xd3\xe4\x93\x02(:\x01*\x1a#/v1/organizations/{org_id}/settings2\xa7\x06\n" + "\vTeamService\x12v\n" + "\n" + "CreateTeam\x12\x1c.customers.CreateTeamRequest\x1a\x1d.customers.CreateTeamResponse\"+\x82\xd3\xe4\x93\x02%:\x01*\" /v1/organizations/{org_id}/teams\x12p\n" + "\tListTeams\x12\x1b.customers.ListTeamsRequest\x1a\x1c.customers.ListTeamsResponse\"(\x82\xd3\xe4\x93\x02\"\x12 /v1/organizations/{org_id}/teams\x12l\n" + "\tAddMember\x12\x1f.customers.AddTeamMemberRequest\x1a\x16.google.protobuf.Empty\"&\x82\xd3\xe4\x93\x02 :\x01*\"\x1b/v1/teams/{team_id}/members\x12y\n" + "\fRemoveMember\x12\".customers.RemoveTeamMemberRequest\x1a\x16.google.protobuf.Empty\"-\x82\xd3\xe4\x93\x02'*%/v1/teams/{team_id}/members/{user_id}\x12y\n" + - "\vListMembers\x12!.customers.ListTeamMembersRequest\x1a\".customers.ListTeamMembersResponse\"#\x82\xd3\xe4\x93\x02\x1d\x12\x1b/v1/teams/{team_id}/members2\xdc\x06\n" + + "\vListMembers\x12!.customers.ListTeamMembersRequest\x1a\".customers.ListTeamMembersResponse\"#\x82\xd3\xe4\x93\x02\x1d\x12\x1b/v1/teams/{team_id}/members\x12i\n" + + "\n" + + "UpdateTeam\x12\x1c.customers.UpdateTeamRequest\x1a\x1d.customers.UpdateTeamResponse\"\x1e\x82\xd3\xe4\x93\x02\x18:\x01*2\x13/v1/teams/{team_id}\x12_\n" + + "\n" + + "DeleteTeam\x12\x1c.customers.DeleteTeamRequest\x1a\x16.google.protobuf.Empty\"\x1b\x82\xd3\xe4\x93\x02\x15*\x13/v1/teams/{team_id}2\xdc\x06\n" + "\x11PermissionService\x12_\n" + "\n" + "CreateRole\x12\x1c.customers.CreateRoleRequest\x1a\x1d.customers.CreateRoleResponse\"\x14\x82\xd3\xe4\x93\x02\x0e:\x01*\"\t/v1/roles\x12Y\n" + @@ -13785,13 +14001,14 @@ const file_api_proto_rawDesc = "" + "\aGetJWKS\x12\x16.google.protobuf.Empty\x1a\x17.customers.JWKSResponse\"&\x82\xd3\xe4\x93\x02 \x12\x1e/v1/auth/.well-known/jwks.json2\xf1\x01\n" + "\fAuditService\x12i\n" + "\rQueryAuditLog\x12\x1f.customers.QueryAuditLogRequest\x1a .customers.QueryAuditLogResponse\"\x15\x82\xd3\xe4\x93\x02\x0f\x12\r/v1/audit-log\x12v\n" + - "\x0eExportAuditLog\x12 .customers.ExportAuditLogRequest\x1a!.customers.ExportAuditLogResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/v1/audit-log:export2\xc6\f\n" + + "\x0eExportAuditLog\x12 .customers.ExportAuditLogRequest\x1a!.customers.ExportAuditLogResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/v1/audit-log:export2\xbc\r\n" + "\x14PlatformAdminService\x12h\n" + "\vSearchUsers\x12\x1d.customers.SearchUsersRequest\x1a\x1e.customers.SearchUsersResponse\"\x1a\x82\xd3\xe4\x93\x02\x14\x12\x12/v1/platform/users\x12u\n" + "\vSuspendUser\x12\x1d.customers.SuspendUserRequest\x1a\x16.google.protobuf.Empty\"/\x82\xd3\xe4\x93\x02):\x01*\"$/v1/platform/users/{user_id}:suspend\x12{\n" + "\rUnsuspendUser\x12\x1f.customers.UnsuspendUserRequest\x1a\x16.google.protobuf.Empty\"1\x82\xd3\xe4\x93\x02+:\x01*\"&/v1/platform/users/{user_id}:unsuspend\x12\x8d\x01\n" + "\x0fImpersonateUser\x12!.customers.ImpersonateUserRequest\x1a\".customers.ImpersonateUserResponse\"3\x82\xd3\xe4\x93\x02-:\x01*\"(/v1/platform/users/{user_id}:impersonate\x12\x80\x01\n" + - "\x12ListActiveSessions\x12$.customers.ListActiveSessionsRequest\x1a%.customers.ListActiveSessionsResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\x12\x15/v1/platform/sessions\x12\x9b\x01\n" + + "\x12ListActiveSessions\x12$.customers.ListActiveSessionsRequest\x1a%.customers.ListActiveSessionsResponse\"\x1d\x82\xd3\xe4\x93\x02\x17\x12\x15/v1/platform/sessions\x12t\n" + + "\rRevokeSession\x12\x1f.customers.RevokeSessionRequest\x1a\x16.google.protobuf.Empty\"*\x82\xd3\xe4\x93\x02$*\"/v1/platform/sessions/{session_id}\x12\x9b\x01\n" + "\x12GetOrgEntitlements\x12$.customers.GetOrgEntitlementsRequest\x1a%.customers.GetOrgEntitlementsResponse\"8\x82\xd3\xe4\x93\x022\x120/v1/platform/organizations/{org_id}/entitlements\x12\xa1\x01\n" + "\x13OverrideEntitlement\x12%.customers.OverrideEntitlementRequest\x1a&.customers.OverrideEntitlementResponse\";\x82\xd3\xe4\x93\x025:\x01*\"0/v1/platform/organizations/{org_id}/entitlements\x12p\n" + "\x11GrantPlatformRole\x12#.customers.GrantPlatformRoleRequest\x1a\x16.google.protobuf.Empty\"\x1e\x82\xd3\xe4\x93\x02\x18:\x01*\"\x13/v1/platform/admins\x12y\n" + @@ -13849,8 +14066,8 @@ const file_api_proto_rawDesc = "" + "\fRevokeDevice\x12!.customers.RevokeMFADeviceRequest\x1a\x16.google.protobuf.Empty\"\x1c\x82\xd3\xe4\x93\x02\x16*\x14/v1/mfa/devices/{id}\x12\x85\x01\n" + "\x13GenerateBackupCodes\x12%.customers.GenerateBackupCodesRequest\x1a&.customers.GenerateBackupCodesResponse\"\x1f\x82\xd3\xe4\x93\x02\x19:\x01*\"\x14/v1/mfa/backup-codes2\x93\x01\n" + "\x14IntrospectionService\x12{\n" + - "\x0eGetServiceInfo\x12 .customers.GetServiceInfoRequest\x1a!.customers.GetServiceInfoResponse\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/v1/.well-known/service-infoBj\n" + - "\rcom.customersB\bApiProtoP\x01Z\vapi/pkg/gen\xa2\x02\x03CXX\xaa\x02\tCustomers\xca\x02\tCustomers\xe2\x02\x15Customers\\GPBMetadata\xea\x02\tCustomersb\x06proto3" + "\x0eGetServiceInfo\x12 .customers.GetServiceInfoRequest\x1a!.customers.GetServiceInfoResponse\"$\x82\xd3\xe4\x93\x02\x1e\x12\x1c/v1/.well-known/service-infoBo\n" + + "\rcom.customersB\bApiProtoP\x01Z\x10accounts/pkg/gen\xa2\x02\x03CXX\xaa\x02\tCustomers\xca\x02\tCustomers\xe2\x02\x15Customers\\GPBMetadata\xea\x02\tCustomersb\x06proto3" var ( file_api_proto_rawDescOnce sync.Once @@ -13865,7 +14082,7 @@ func file_api_proto_rawDescGZIP() []byte { } var file_api_proto_enumTypes = make([]protoimpl.EnumInfo, 13) -var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 205) +var file_api_proto_msgTypes = make([]protoimpl.MessageInfo, 209) var file_api_proto_goTypes = []any{ (UserStatus)(0), // 0: customers.UserStatus (OrgRole)(0), // 1: customers.OrgRole @@ -13922,196 +14139,200 @@ var file_api_proto_goTypes = []any{ (*ListTeamsResponse)(nil), // 52: customers.ListTeamsResponse (*AddTeamMemberRequest)(nil), // 53: customers.AddTeamMemberRequest (*RemoveTeamMemberRequest)(nil), // 54: customers.RemoveTeamMemberRequest - (*ListTeamMembersRequest)(nil), // 55: customers.ListTeamMembersRequest - (*ListTeamMembersResponse)(nil), // 56: customers.ListTeamMembersResponse - (*CreateRoleRequest)(nil), // 57: customers.CreateRoleRequest - (*CreateRoleResponse)(nil), // 58: customers.CreateRoleResponse - (*ListRolesRequest)(nil), // 59: customers.ListRolesRequest - (*ListRolesResponse)(nil), // 60: customers.ListRolesResponse - (*DeleteRoleRequest)(nil), // 61: customers.DeleteRoleRequest - (*AssignRoleRequest)(nil), // 62: customers.AssignRoleRequest - (*AssignRoleResponse)(nil), // 63: customers.AssignRoleResponse - (*RevokeRoleRequest)(nil), // 64: customers.RevokeRoleRequest - (*ListRoleAssignmentsRequest)(nil), // 65: customers.ListRoleAssignmentsRequest - (*ListRoleAssignmentsResponse)(nil), // 66: customers.ListRoleAssignmentsResponse - (*CheckPermissionRequest)(nil), // 67: customers.CheckPermissionRequest - (*CheckPermissionResponse)(nil), // 68: customers.CheckPermissionResponse - (*DecideRequest)(nil), // 69: customers.DecideRequest - (*DecideResponse)(nil), // 70: customers.DecideResponse - (*GetPrincipalRequest)(nil), // 71: customers.GetPrincipalRequest - (*GetAgentPrincipalRequest)(nil), // 72: customers.GetAgentPrincipalRequest - (*CreateAgentPrincipalRequest)(nil), // 73: customers.CreateAgentPrincipalRequest - (*RevokePrincipalRequest)(nil), // 74: customers.RevokePrincipalRequest - (*ListPrincipalsRequest)(nil), // 75: customers.ListPrincipalsRequest - (*ListPrincipalsResponse)(nil), // 76: customers.ListPrincipalsResponse - (*ResolveIdentityRequest)(nil), // 77: customers.ResolveIdentityRequest - (*ResolveIdentityResponse)(nil), // 78: customers.ResolveIdentityResponse - (*RequestDelegationRequest)(nil), // 79: customers.RequestDelegationRequest - (*RequestDelegationResponse)(nil), // 80: customers.RequestDelegationResponse - (*WaitForDelegationRequest)(nil), // 81: customers.WaitForDelegationRequest - (*DelegationEvent)(nil), // 82: customers.DelegationEvent - (*DecideDelegationRequest)(nil), // 83: customers.DecideDelegationRequest - (*DelegationGrant)(nil), // 84: customers.DelegationGrant - (*ListPendingDelegationsRequest)(nil), // 85: customers.ListPendingDelegationsRequest - (*ListPendingDelegationsResponse)(nil), // 86: customers.ListPendingDelegationsResponse - (*APIKey)(nil), // 87: customers.APIKey - (*CreateAPIKeyRequest)(nil), // 88: customers.CreateAPIKeyRequest - (*CreateAPIKeyResponse)(nil), // 89: customers.CreateAPIKeyResponse - (*ListAPIKeysRequest)(nil), // 90: customers.ListAPIKeysRequest - (*ListAPIKeysResponse)(nil), // 91: customers.ListAPIKeysResponse - (*RevokeAPIKeyRequest)(nil), // 92: customers.RevokeAPIKeyRequest - (*ValidateAPIKeyRequest)(nil), // 93: customers.ValidateAPIKeyRequest - (*ValidateAPIKeyResponse)(nil), // 94: customers.ValidateAPIKeyResponse - (*AuthenticateRequest)(nil), // 95: customers.AuthenticateRequest - (*AuthenticateResponse)(nil), // 96: customers.AuthenticateResponse - (*RefreshTokenRequest)(nil), // 97: customers.RefreshTokenRequest - (*RefreshTokenResponse)(nil), // 98: customers.RefreshTokenResponse - (*LogoutRequest)(nil), // 99: customers.LogoutRequest - (*JWKSResponse)(nil), // 100: customers.JWKSResponse - (*BeginOAuthRequest)(nil), // 101: customers.BeginOAuthRequest - (*BeginOAuthResponse)(nil), // 102: customers.BeginOAuthResponse - (*AuditExportConfig)(nil), // 103: customers.AuditExportConfig - (*GetAuditExportConfigRequest)(nil), // 104: customers.GetAuditExportConfigRequest - (*SaveAuditExportConfigRequest)(nil), // 105: customers.SaveAuditExportConfigRequest - (*DeleteAuditExportConfigRequest)(nil), // 106: customers.DeleteAuditExportConfigRequest - (*ConsentStatus)(nil), // 107: customers.ConsentStatus - (*GetConsentStatusRequest)(nil), // 108: customers.GetConsentStatusRequest - (*AcceptConsentRequest)(nil), // 109: customers.AcceptConsentRequest - (*AuditEvent)(nil), // 110: customers.AuditEvent - (*QueryAuditLogRequest)(nil), // 111: customers.QueryAuditLogRequest - (*QueryAuditLogResponse)(nil), // 112: customers.QueryAuditLogResponse - (*ExportAuditLogRequest)(nil), // 113: customers.ExportAuditLogRequest - (*ExportAuditLogResponse)(nil), // 114: customers.ExportAuditLogResponse - (*Invitation)(nil), // 115: customers.Invitation - (*CreateInvitationRequest)(nil), // 116: customers.CreateInvitationRequest - (*CreateInvitationResponse)(nil), // 117: customers.CreateInvitationResponse - (*AcceptInvitationRequest)(nil), // 118: customers.AcceptInvitationRequest - (*AcceptInvitationResponse)(nil), // 119: customers.AcceptInvitationResponse - (*ListInvitationsRequest)(nil), // 120: customers.ListInvitationsRequest - (*ListInvitationsResponse)(nil), // 121: customers.ListInvitationsResponse - (*RevokeInvitationRequest)(nil), // 122: customers.RevokeInvitationRequest - (*SearchUsersRequest)(nil), // 123: customers.SearchUsersRequest - (*SearchUsersResponse)(nil), // 124: customers.SearchUsersResponse - (*SuspendUserRequest)(nil), // 125: customers.SuspendUserRequest - (*UnsuspendUserRequest)(nil), // 126: customers.UnsuspendUserRequest - (*ImpersonateUserRequest)(nil), // 127: customers.ImpersonateUserRequest - (*ImpersonateUserResponse)(nil), // 128: customers.ImpersonateUserResponse - (*ListActiveSessionsRequest)(nil), // 129: customers.ListActiveSessionsRequest - (*SessionInfo)(nil), // 130: customers.SessionInfo - (*ListActiveSessionsResponse)(nil), // 131: customers.ListActiveSessionsResponse - (*GetOrgEntitlementsRequest)(nil), // 132: customers.GetOrgEntitlementsRequest - (*GetOrgEntitlementsResponse)(nil), // 133: customers.GetOrgEntitlementsResponse - (*EntitlementInfo)(nil), // 134: customers.EntitlementInfo - (*OverrideEntitlementRequest)(nil), // 135: customers.OverrideEntitlementRequest - (*OverrideEntitlementResponse)(nil), // 136: customers.OverrideEntitlementResponse - (*GrantPlatformRoleRequest)(nil), // 137: customers.GrantPlatformRoleRequest - (*RevokePlatformRoleRequest)(nil), // 138: customers.RevokePlatformRoleRequest - (*ListPlatformAdminsRequest)(nil), // 139: customers.ListPlatformAdminsRequest - (*PlatformAdminEntry)(nil), // 140: customers.PlatformAdminEntry - (*ListPlatformAdminsResponse)(nil), // 141: customers.ListPlatformAdminsResponse - (*ListFeatureFlagsRequest)(nil), // 142: customers.ListFeatureFlagsRequest - (*FeatureFlagEntry)(nil), // 143: customers.FeatureFlagEntry - (*ListFeatureFlagsResponse)(nil), // 144: customers.ListFeatureFlagsResponse - (*UpsertFeatureFlagRequest)(nil), // 145: customers.UpsertFeatureFlagRequest - (*UpsertFeatureFlagResponse)(nil), // 146: customers.UpsertFeatureFlagResponse - (*WebhookSubscription)(nil), // 147: customers.WebhookSubscription - (*WebhookDelivery)(nil), // 148: customers.WebhookDelivery - (*CreateWebhookSubscriptionRequest)(nil), // 149: customers.CreateWebhookSubscriptionRequest - (*DeleteWebhookSubscriptionRequest)(nil), // 150: customers.DeleteWebhookSubscriptionRequest - (*ListWebhookSubscriptionsRequest)(nil), // 151: customers.ListWebhookSubscriptionsRequest - (*ListWebhookSubscriptionsResponse)(nil), // 152: customers.ListWebhookSubscriptionsResponse - (*ListWebhookDeliveriesRequest)(nil), // 153: customers.ListWebhookDeliveriesRequest - (*ListWebhookDeliveriesResponse)(nil), // 154: customers.ListWebhookDeliveriesResponse - (*TestWebhookRequest)(nil), // 155: customers.TestWebhookRequest - (*GetWebhookDeliveryRequest)(nil), // 156: customers.GetWebhookDeliveryRequest - (*ReplayWebhookDeliveryRequest)(nil), // 157: customers.ReplayWebhookDeliveryRequest - (*RotateWebhookSecretRequest)(nil), // 158: customers.RotateWebhookSecretRequest - (*RotateWebhookSecretResponse)(nil), // 159: customers.RotateWebhookSecretResponse - (*Notification)(nil), // 160: customers.Notification - (*ListNotificationsRequest)(nil), // 161: customers.ListNotificationsRequest - (*ListNotificationsResponse)(nil), // 162: customers.ListNotificationsResponse - (*GetUnreadCountRequest)(nil), // 163: customers.GetUnreadCountRequest - (*GetUnreadCountResponse)(nil), // 164: customers.GetUnreadCountResponse - (*MarkNotificationReadRequest)(nil), // 165: customers.MarkNotificationReadRequest - (*MarkAllNotificationsReadRequest)(nil), // 166: customers.MarkAllNotificationsReadRequest - (*DeleteNotificationRequest)(nil), // 167: customers.DeleteNotificationRequest - (*OnboardingStep)(nil), // 168: customers.OnboardingStep - (*OnboardingProgress)(nil), // 169: customers.OnboardingProgress - (*GetOnboardingProgressRequest)(nil), // 170: customers.GetOnboardingProgressRequest - (*CompleteOnboardingStepRequest)(nil), // 171: customers.CompleteOnboardingStepRequest - (*SkipOnboardingStepRequest)(nil), // 172: customers.SkipOnboardingStepRequest - (*GDPRRequest)(nil), // 173: customers.GDPRRequest - (*RequestDataExportRequest)(nil), // 174: customers.RequestDataExportRequest - (*GetExportStatusRequest)(nil), // 175: customers.GetExportStatusRequest - (*RequestDeletionRequest)(nil), // 176: customers.RequestDeletionRequest - (*GetDeletionStatusRequest)(nil), // 177: customers.GetDeletionStatusRequest - (*MFADevice)(nil), // 178: customers.MFADevice - (*SetupTOTPRequest)(nil), // 179: customers.SetupTOTPRequest - (*SetupTOTPResponse)(nil), // 180: customers.SetupTOTPResponse - (*VerifyTOTPRequest)(nil), // 181: customers.VerifyTOTPRequest - (*VerifyTOTPResponse)(nil), // 182: customers.VerifyTOTPResponse - (*ListMFADevicesRequest)(nil), // 183: customers.ListMFADevicesRequest - (*ListMFADevicesResponse)(nil), // 184: customers.ListMFADevicesResponse - (*RevokeMFADeviceRequest)(nil), // 185: customers.RevokeMFADeviceRequest - (*GenerateBackupCodesRequest)(nil), // 186: customers.GenerateBackupCodesRequest - (*GenerateBackupCodesResponse)(nil), // 187: customers.GenerateBackupCodesResponse - (*OrgSSOConfig)(nil), // 188: customers.OrgSSOConfig - (*GetOrgSSORequest)(nil), // 189: customers.GetOrgSSORequest - (*StartSSOSetupRequest)(nil), // 190: customers.StartSSOSetupRequest - (*StartSSOSetupResponse)(nil), // 191: customers.StartSSOSetupResponse - (*DisableSSORequest)(nil), // 192: customers.DisableSSORequest - (*OpenBillingPortalRequest)(nil), // 193: customers.OpenBillingPortalRequest - (*OpenBillingPortalResponse)(nil), // 194: customers.OpenBillingPortalResponse - (*Invoice)(nil), // 195: customers.Invoice - (*ListInvoicesRequest)(nil), // 196: customers.ListInvoicesRequest - (*ListInvoicesResponse)(nil), // 197: customers.ListInvoicesResponse - (*UserEmailSettings)(nil), // 198: customers.UserEmailSettings - (*UserNotificationSettings)(nil), // 199: customers.UserNotificationSettings - (*UserSettings)(nil), // 200: customers.UserSettings - (*GetUserSettingsRequest)(nil), // 201: customers.GetUserSettingsRequest - (*UpdateUserSettingsRequest)(nil), // 202: customers.UpdateUserSettingsRequest - (*ServiceInfo)(nil), // 203: customers.ServiceInfo - (*RPCInfo)(nil), // 204: customers.RPCInfo - (*PermissionInfo)(nil), // 205: customers.PermissionInfo - (*RLSPolicyInfo)(nil), // 206: customers.RLSPolicyInfo - (*ScopeInfo)(nil), // 207: customers.ScopeInfo - (*ServiceCapabilities)(nil), // 208: customers.ServiceCapabilities - (*GetServiceInfoRequest)(nil), // 209: customers.GetServiceInfoRequest - (*GetServiceInfoResponse)(nil), // 210: customers.GetServiceInfoResponse - nil, // 211: customers.User.ProfileEntry - nil, // 212: customers.UserIdentity.ProviderDataEntry - nil, // 213: customers.RegisterUserRequest.ProfileEntry - nil, // 214: customers.ValidateAPIKeyResponse.AttributesEntry - nil, // 215: customers.AuthenticateRequest.ProfileEntry - nil, // 216: customers.AuditEvent.MetadataEntry - nil, // 217: customers.SessionInfo.DeviceInfoEntry - (*timestamppb.Timestamp)(nil), // 218: google.protobuf.Timestamp - (*fieldmaskpb.FieldMask)(nil), // 219: google.protobuf.FieldMask - (*structpb.Struct)(nil), // 220: google.protobuf.Struct - (*emptypb.Empty)(nil), // 221: google.protobuf.Empty + (*UpdateTeamRequest)(nil), // 55: customers.UpdateTeamRequest + (*UpdateTeamResponse)(nil), // 56: customers.UpdateTeamResponse + (*DeleteTeamRequest)(nil), // 57: customers.DeleteTeamRequest + (*ListTeamMembersRequest)(nil), // 58: customers.ListTeamMembersRequest + (*ListTeamMembersResponse)(nil), // 59: customers.ListTeamMembersResponse + (*CreateRoleRequest)(nil), // 60: customers.CreateRoleRequest + (*CreateRoleResponse)(nil), // 61: customers.CreateRoleResponse + (*ListRolesRequest)(nil), // 62: customers.ListRolesRequest + (*ListRolesResponse)(nil), // 63: customers.ListRolesResponse + (*DeleteRoleRequest)(nil), // 64: customers.DeleteRoleRequest + (*AssignRoleRequest)(nil), // 65: customers.AssignRoleRequest + (*AssignRoleResponse)(nil), // 66: customers.AssignRoleResponse + (*RevokeRoleRequest)(nil), // 67: customers.RevokeRoleRequest + (*ListRoleAssignmentsRequest)(nil), // 68: customers.ListRoleAssignmentsRequest + (*ListRoleAssignmentsResponse)(nil), // 69: customers.ListRoleAssignmentsResponse + (*CheckPermissionRequest)(nil), // 70: customers.CheckPermissionRequest + (*CheckPermissionResponse)(nil), // 71: customers.CheckPermissionResponse + (*DecideRequest)(nil), // 72: customers.DecideRequest + (*DecideResponse)(nil), // 73: customers.DecideResponse + (*GetPrincipalRequest)(nil), // 74: customers.GetPrincipalRequest + (*GetAgentPrincipalRequest)(nil), // 75: customers.GetAgentPrincipalRequest + (*CreateAgentPrincipalRequest)(nil), // 76: customers.CreateAgentPrincipalRequest + (*RevokePrincipalRequest)(nil), // 77: customers.RevokePrincipalRequest + (*ListPrincipalsRequest)(nil), // 78: customers.ListPrincipalsRequest + (*ListPrincipalsResponse)(nil), // 79: customers.ListPrincipalsResponse + (*ResolveIdentityRequest)(nil), // 80: customers.ResolveIdentityRequest + (*ResolveIdentityResponse)(nil), // 81: customers.ResolveIdentityResponse + (*RequestDelegationRequest)(nil), // 82: customers.RequestDelegationRequest + (*RequestDelegationResponse)(nil), // 83: customers.RequestDelegationResponse + (*WaitForDelegationRequest)(nil), // 84: customers.WaitForDelegationRequest + (*DelegationEvent)(nil), // 85: customers.DelegationEvent + (*DecideDelegationRequest)(nil), // 86: customers.DecideDelegationRequest + (*DelegationGrant)(nil), // 87: customers.DelegationGrant + (*ListPendingDelegationsRequest)(nil), // 88: customers.ListPendingDelegationsRequest + (*ListPendingDelegationsResponse)(nil), // 89: customers.ListPendingDelegationsResponse + (*APIKey)(nil), // 90: customers.APIKey + (*CreateAPIKeyRequest)(nil), // 91: customers.CreateAPIKeyRequest + (*CreateAPIKeyResponse)(nil), // 92: customers.CreateAPIKeyResponse + (*ListAPIKeysRequest)(nil), // 93: customers.ListAPIKeysRequest + (*ListAPIKeysResponse)(nil), // 94: customers.ListAPIKeysResponse + (*RevokeAPIKeyRequest)(nil), // 95: customers.RevokeAPIKeyRequest + (*ValidateAPIKeyRequest)(nil), // 96: customers.ValidateAPIKeyRequest + (*ValidateAPIKeyResponse)(nil), // 97: customers.ValidateAPIKeyResponse + (*AuthenticateRequest)(nil), // 98: customers.AuthenticateRequest + (*AuthenticateResponse)(nil), // 99: customers.AuthenticateResponse + (*RefreshTokenRequest)(nil), // 100: customers.RefreshTokenRequest + (*RefreshTokenResponse)(nil), // 101: customers.RefreshTokenResponse + (*LogoutRequest)(nil), // 102: customers.LogoutRequest + (*JWKSResponse)(nil), // 103: customers.JWKSResponse + (*BeginOAuthRequest)(nil), // 104: customers.BeginOAuthRequest + (*BeginOAuthResponse)(nil), // 105: customers.BeginOAuthResponse + (*AuditExportConfig)(nil), // 106: customers.AuditExportConfig + (*GetAuditExportConfigRequest)(nil), // 107: customers.GetAuditExportConfigRequest + (*SaveAuditExportConfigRequest)(nil), // 108: customers.SaveAuditExportConfigRequest + (*DeleteAuditExportConfigRequest)(nil), // 109: customers.DeleteAuditExportConfigRequest + (*ConsentStatus)(nil), // 110: customers.ConsentStatus + (*GetConsentStatusRequest)(nil), // 111: customers.GetConsentStatusRequest + (*AcceptConsentRequest)(nil), // 112: customers.AcceptConsentRequest + (*AuditEvent)(nil), // 113: customers.AuditEvent + (*QueryAuditLogRequest)(nil), // 114: customers.QueryAuditLogRequest + (*QueryAuditLogResponse)(nil), // 115: customers.QueryAuditLogResponse + (*ExportAuditLogRequest)(nil), // 116: customers.ExportAuditLogRequest + (*ExportAuditLogResponse)(nil), // 117: customers.ExportAuditLogResponse + (*Invitation)(nil), // 118: customers.Invitation + (*CreateInvitationRequest)(nil), // 119: customers.CreateInvitationRequest + (*CreateInvitationResponse)(nil), // 120: customers.CreateInvitationResponse + (*AcceptInvitationRequest)(nil), // 121: customers.AcceptInvitationRequest + (*AcceptInvitationResponse)(nil), // 122: customers.AcceptInvitationResponse + (*ListInvitationsRequest)(nil), // 123: customers.ListInvitationsRequest + (*ListInvitationsResponse)(nil), // 124: customers.ListInvitationsResponse + (*RevokeInvitationRequest)(nil), // 125: customers.RevokeInvitationRequest + (*SearchUsersRequest)(nil), // 126: customers.SearchUsersRequest + (*SearchUsersResponse)(nil), // 127: customers.SearchUsersResponse + (*SuspendUserRequest)(nil), // 128: customers.SuspendUserRequest + (*UnsuspendUserRequest)(nil), // 129: customers.UnsuspendUserRequest + (*ImpersonateUserRequest)(nil), // 130: customers.ImpersonateUserRequest + (*ImpersonateUserResponse)(nil), // 131: customers.ImpersonateUserResponse + (*ListActiveSessionsRequest)(nil), // 132: customers.ListActiveSessionsRequest + (*SessionInfo)(nil), // 133: customers.SessionInfo + (*ListActiveSessionsResponse)(nil), // 134: customers.ListActiveSessionsResponse + (*RevokeSessionRequest)(nil), // 135: customers.RevokeSessionRequest + (*GetOrgEntitlementsRequest)(nil), // 136: customers.GetOrgEntitlementsRequest + (*GetOrgEntitlementsResponse)(nil), // 137: customers.GetOrgEntitlementsResponse + (*EntitlementInfo)(nil), // 138: customers.EntitlementInfo + (*OverrideEntitlementRequest)(nil), // 139: customers.OverrideEntitlementRequest + (*OverrideEntitlementResponse)(nil), // 140: customers.OverrideEntitlementResponse + (*GrantPlatformRoleRequest)(nil), // 141: customers.GrantPlatformRoleRequest + (*RevokePlatformRoleRequest)(nil), // 142: customers.RevokePlatformRoleRequest + (*ListPlatformAdminsRequest)(nil), // 143: customers.ListPlatformAdminsRequest + (*PlatformAdminEntry)(nil), // 144: customers.PlatformAdminEntry + (*ListPlatformAdminsResponse)(nil), // 145: customers.ListPlatformAdminsResponse + (*ListFeatureFlagsRequest)(nil), // 146: customers.ListFeatureFlagsRequest + (*FeatureFlagEntry)(nil), // 147: customers.FeatureFlagEntry + (*ListFeatureFlagsResponse)(nil), // 148: customers.ListFeatureFlagsResponse + (*UpsertFeatureFlagRequest)(nil), // 149: customers.UpsertFeatureFlagRequest + (*UpsertFeatureFlagResponse)(nil), // 150: customers.UpsertFeatureFlagResponse + (*WebhookSubscription)(nil), // 151: customers.WebhookSubscription + (*WebhookDelivery)(nil), // 152: customers.WebhookDelivery + (*CreateWebhookSubscriptionRequest)(nil), // 153: customers.CreateWebhookSubscriptionRequest + (*DeleteWebhookSubscriptionRequest)(nil), // 154: customers.DeleteWebhookSubscriptionRequest + (*ListWebhookSubscriptionsRequest)(nil), // 155: customers.ListWebhookSubscriptionsRequest + (*ListWebhookSubscriptionsResponse)(nil), // 156: customers.ListWebhookSubscriptionsResponse + (*ListWebhookDeliveriesRequest)(nil), // 157: customers.ListWebhookDeliveriesRequest + (*ListWebhookDeliveriesResponse)(nil), // 158: customers.ListWebhookDeliveriesResponse + (*TestWebhookRequest)(nil), // 159: customers.TestWebhookRequest + (*GetWebhookDeliveryRequest)(nil), // 160: customers.GetWebhookDeliveryRequest + (*ReplayWebhookDeliveryRequest)(nil), // 161: customers.ReplayWebhookDeliveryRequest + (*RotateWebhookSecretRequest)(nil), // 162: customers.RotateWebhookSecretRequest + (*RotateWebhookSecretResponse)(nil), // 163: customers.RotateWebhookSecretResponse + (*Notification)(nil), // 164: customers.Notification + (*ListNotificationsRequest)(nil), // 165: customers.ListNotificationsRequest + (*ListNotificationsResponse)(nil), // 166: customers.ListNotificationsResponse + (*GetUnreadCountRequest)(nil), // 167: customers.GetUnreadCountRequest + (*GetUnreadCountResponse)(nil), // 168: customers.GetUnreadCountResponse + (*MarkNotificationReadRequest)(nil), // 169: customers.MarkNotificationReadRequest + (*MarkAllNotificationsReadRequest)(nil), // 170: customers.MarkAllNotificationsReadRequest + (*DeleteNotificationRequest)(nil), // 171: customers.DeleteNotificationRequest + (*OnboardingStep)(nil), // 172: customers.OnboardingStep + (*OnboardingProgress)(nil), // 173: customers.OnboardingProgress + (*GetOnboardingProgressRequest)(nil), // 174: customers.GetOnboardingProgressRequest + (*CompleteOnboardingStepRequest)(nil), // 175: customers.CompleteOnboardingStepRequest + (*SkipOnboardingStepRequest)(nil), // 176: customers.SkipOnboardingStepRequest + (*GDPRRequest)(nil), // 177: customers.GDPRRequest + (*RequestDataExportRequest)(nil), // 178: customers.RequestDataExportRequest + (*GetExportStatusRequest)(nil), // 179: customers.GetExportStatusRequest + (*RequestDeletionRequest)(nil), // 180: customers.RequestDeletionRequest + (*GetDeletionStatusRequest)(nil), // 181: customers.GetDeletionStatusRequest + (*MFADevice)(nil), // 182: customers.MFADevice + (*SetupTOTPRequest)(nil), // 183: customers.SetupTOTPRequest + (*SetupTOTPResponse)(nil), // 184: customers.SetupTOTPResponse + (*VerifyTOTPRequest)(nil), // 185: customers.VerifyTOTPRequest + (*VerifyTOTPResponse)(nil), // 186: customers.VerifyTOTPResponse + (*ListMFADevicesRequest)(nil), // 187: customers.ListMFADevicesRequest + (*ListMFADevicesResponse)(nil), // 188: customers.ListMFADevicesResponse + (*RevokeMFADeviceRequest)(nil), // 189: customers.RevokeMFADeviceRequest + (*GenerateBackupCodesRequest)(nil), // 190: customers.GenerateBackupCodesRequest + (*GenerateBackupCodesResponse)(nil), // 191: customers.GenerateBackupCodesResponse + (*OrgSSOConfig)(nil), // 192: customers.OrgSSOConfig + (*GetOrgSSORequest)(nil), // 193: customers.GetOrgSSORequest + (*StartSSOSetupRequest)(nil), // 194: customers.StartSSOSetupRequest + (*StartSSOSetupResponse)(nil), // 195: customers.StartSSOSetupResponse + (*DisableSSORequest)(nil), // 196: customers.DisableSSORequest + (*OpenBillingPortalRequest)(nil), // 197: customers.OpenBillingPortalRequest + (*OpenBillingPortalResponse)(nil), // 198: customers.OpenBillingPortalResponse + (*Invoice)(nil), // 199: customers.Invoice + (*ListInvoicesRequest)(nil), // 200: customers.ListInvoicesRequest + (*ListInvoicesResponse)(nil), // 201: customers.ListInvoicesResponse + (*UserEmailSettings)(nil), // 202: customers.UserEmailSettings + (*UserNotificationSettings)(nil), // 203: customers.UserNotificationSettings + (*UserSettings)(nil), // 204: customers.UserSettings + (*GetUserSettingsRequest)(nil), // 205: customers.GetUserSettingsRequest + (*UpdateUserSettingsRequest)(nil), // 206: customers.UpdateUserSettingsRequest + (*ServiceInfo)(nil), // 207: customers.ServiceInfo + (*RPCInfo)(nil), // 208: customers.RPCInfo + (*PermissionInfo)(nil), // 209: customers.PermissionInfo + (*RLSPolicyInfo)(nil), // 210: customers.RLSPolicyInfo + (*ScopeInfo)(nil), // 211: customers.ScopeInfo + (*ServiceCapabilities)(nil), // 212: customers.ServiceCapabilities + (*GetServiceInfoRequest)(nil), // 213: customers.GetServiceInfoRequest + (*GetServiceInfoResponse)(nil), // 214: customers.GetServiceInfoResponse + nil, // 215: customers.User.ProfileEntry + nil, // 216: customers.UserIdentity.ProviderDataEntry + nil, // 217: customers.RegisterUserRequest.ProfileEntry + nil, // 218: customers.ValidateAPIKeyResponse.AttributesEntry + nil, // 219: customers.AuthenticateRequest.ProfileEntry + nil, // 220: customers.AuditEvent.MetadataEntry + nil, // 221: customers.SessionInfo.DeviceInfoEntry + (*timestamppb.Timestamp)(nil), // 222: google.protobuf.Timestamp + (*fieldmaskpb.FieldMask)(nil), // 223: google.protobuf.FieldMask + (*structpb.Struct)(nil), // 224: google.protobuf.Struct + (*emptypb.Empty)(nil), // 225: google.protobuf.Empty } var file_api_proto_depIdxs = []int32{ - 218, // 0: customers.User.created_at:type_name -> google.protobuf.Timestamp - 218, // 1: customers.User.updated_at:type_name -> google.protobuf.Timestamp - 218, // 2: customers.User.last_login:type_name -> google.protobuf.Timestamp + 222, // 0: customers.User.created_at:type_name -> google.protobuf.Timestamp + 222, // 1: customers.User.updated_at:type_name -> google.protobuf.Timestamp + 222, // 2: customers.User.last_login:type_name -> google.protobuf.Timestamp 0, // 3: customers.User.status:type_name -> customers.UserStatus - 211, // 4: customers.User.profile:type_name -> customers.User.ProfileEntry - 218, // 5: customers.UserIdentity.created_at:type_name -> google.protobuf.Timestamp - 218, // 6: customers.UserIdentity.last_used:type_name -> google.protobuf.Timestamp - 212, // 7: customers.UserIdentity.provider_data:type_name -> customers.UserIdentity.ProviderDataEntry - 218, // 8: customers.Organization.created_at:type_name -> google.protobuf.Timestamp + 215, // 4: customers.User.profile:type_name -> customers.User.ProfileEntry + 222, // 5: customers.UserIdentity.created_at:type_name -> google.protobuf.Timestamp + 222, // 6: customers.UserIdentity.last_used:type_name -> google.protobuf.Timestamp + 216, // 7: customers.UserIdentity.provider_data:type_name -> customers.UserIdentity.ProviderDataEntry + 222, // 8: customers.Organization.created_at:type_name -> google.protobuf.Timestamp 1, // 9: customers.OrgMembership.role:type_name -> customers.OrgRole - 218, // 10: customers.OrgMembership.joined_at:type_name -> google.protobuf.Timestamp - 218, // 11: customers.Team.created_at:type_name -> google.protobuf.Timestamp + 222, // 10: customers.OrgMembership.joined_at:type_name -> google.protobuf.Timestamp + 222, // 11: customers.Team.created_at:type_name -> google.protobuf.Timestamp 2, // 12: customers.TeamMembership.role:type_name -> customers.TeamRole - 218, // 13: customers.TeamMembership.joined_at:type_name -> google.protobuf.Timestamp + 222, // 13: customers.TeamMembership.joined_at:type_name -> google.protobuf.Timestamp 21, // 14: customers.Role.permissions:type_name -> customers.Permission 3, // 15: customers.RoleAssignment.subject_kind:type_name -> customers.SubjectKind - 218, // 16: customers.RoleAssignment.assigned_at:type_name -> google.protobuf.Timestamp + 222, // 16: customers.RoleAssignment.assigned_at:type_name -> google.protobuf.Timestamp 4, // 17: customers.Principal.kind:type_name -> customers.PrincipalKind - 218, // 18: customers.Principal.created_at:type_name -> google.protobuf.Timestamp - 218, // 19: customers.Principal.revoked_at:type_name -> google.protobuf.Timestamp - 213, // 20: customers.RegisterUserRequest.profile:type_name -> customers.RegisterUserRequest.ProfileEntry + 222, // 18: customers.Principal.created_at:type_name -> google.protobuf.Timestamp + 222, // 19: customers.Principal.revoked_at:type_name -> google.protobuf.Timestamp + 217, // 20: customers.RegisterUserRequest.profile:type_name -> customers.RegisterUserRequest.ProfileEntry 16, // 21: customers.RegisterUserRequest.identity:type_name -> customers.UserIdentity 15, // 22: customers.RegisterUserResponse.user:type_name -> customers.User 16, // 23: customers.RegisterUserResponse.identity:type_name -> customers.UserIdentity @@ -14122,7 +14343,7 @@ var file_api_proto_depIdxs = []int32{ 0, // 28: customers.ListUsersRequest.status:type_name -> customers.UserStatus 15, // 29: customers.ListUsersResponse.users:type_name -> customers.User 15, // 30: customers.UpdateUserRequest.user:type_name -> customers.User - 219, // 31: customers.UpdateUserRequest.update_mask:type_name -> google.protobuf.FieldMask + 223, // 31: customers.UpdateUserRequest.update_mask:type_name -> google.protobuf.FieldMask 16, // 32: customers.AddIdentityRequest.identity:type_name -> customers.UserIdentity 16, // 33: customers.ListUserIdentitiesResponse.identities:type_name -> customers.UserIdentity 17, // 34: customers.CreateOrganizationResponse.organization:type_name -> customers.Organization @@ -14132,323 +14353,330 @@ var file_api_proto_depIdxs = []int32{ 19, // 38: customers.CreateTeamResponse.team:type_name -> customers.Team 19, // 39: customers.ListTeamsResponse.teams:type_name -> customers.Team 2, // 40: customers.AddTeamMemberRequest.role:type_name -> customers.TeamRole - 20, // 41: customers.ListTeamMembersResponse.members:type_name -> customers.TeamMembership - 21, // 42: customers.CreateRoleRequest.permissions:type_name -> customers.Permission - 22, // 43: customers.CreateRoleResponse.role:type_name -> customers.Role - 22, // 44: customers.ListRolesResponse.roles:type_name -> customers.Role - 3, // 45: customers.AssignRoleRequest.subject_kind:type_name -> customers.SubjectKind - 23, // 46: customers.AssignRoleResponse.assignment:type_name -> customers.RoleAssignment - 3, // 47: customers.ListRoleAssignmentsRequest.subject_kind:type_name -> customers.SubjectKind - 23, // 48: customers.ListRoleAssignmentsResponse.assignments:type_name -> customers.RoleAssignment - 3, // 49: customers.CheckPermissionRequest.subject_kind:type_name -> customers.SubjectKind - 220, // 50: customers.DecideRequest.context:type_name -> google.protobuf.Struct - 21, // 51: customers.DecideRequest.declared_permissions:type_name -> customers.Permission - 5, // 52: customers.DecideResponse.decision:type_name -> customers.Decision - 4, // 53: customers.ListPrincipalsRequest.kind:type_name -> customers.PrincipalKind - 24, // 54: customers.ListPrincipalsResponse.principals:type_name -> customers.Principal - 220, // 55: customers.RequestDelegationRequest.context:type_name -> google.protobuf.Struct - 218, // 56: customers.RequestDelegationResponse.expires_at:type_name -> google.protobuf.Timestamp - 218, // 57: customers.DelegationEvent.decided_at:type_name -> google.protobuf.Timestamp - 218, // 58: customers.DelegationGrant.created_at:type_name -> google.protobuf.Timestamp - 218, // 59: customers.DelegationGrant.decided_at:type_name -> google.protobuf.Timestamp - 218, // 60: customers.DelegationGrant.expires_at:type_name -> google.protobuf.Timestamp - 84, // 61: customers.ListPendingDelegationsResponse.grants:type_name -> customers.DelegationGrant - 21, // 62: customers.APIKey.scopes:type_name -> customers.Permission - 6, // 63: customers.APIKey.environment:type_name -> customers.APIKeyEnvironment - 218, // 64: customers.APIKey.created_at:type_name -> google.protobuf.Timestamp - 218, // 65: customers.APIKey.expires_at:type_name -> google.protobuf.Timestamp - 218, // 66: customers.APIKey.last_used_at:type_name -> google.protobuf.Timestamp - 218, // 67: customers.APIKey.revoked_at:type_name -> google.protobuf.Timestamp - 21, // 68: customers.CreateAPIKeyRequest.scopes:type_name -> customers.Permission - 6, // 69: customers.CreateAPIKeyRequest.environment:type_name -> customers.APIKeyEnvironment - 218, // 70: customers.CreateAPIKeyRequest.expires_at:type_name -> google.protobuf.Timestamp - 87, // 71: customers.CreateAPIKeyResponse.key:type_name -> customers.APIKey - 87, // 72: customers.ListAPIKeysResponse.keys:type_name -> customers.APIKey - 214, // 73: customers.ValidateAPIKeyResponse.attributes:type_name -> customers.ValidateAPIKeyResponse.AttributesEntry - 215, // 74: customers.AuthenticateRequest.profile:type_name -> customers.AuthenticateRequest.ProfileEntry - 15, // 75: customers.AuthenticateResponse.user:type_name -> customers.User - 218, // 76: customers.AuditExportConfig.last_exported_at:type_name -> google.protobuf.Timestamp - 218, // 77: customers.AuditExportConfig.last_error_at:type_name -> google.protobuf.Timestamp - 103, // 78: customers.SaveAuditExportConfigRequest.config:type_name -> customers.AuditExportConfig - 218, // 79: customers.ConsentStatus.accepted_at:type_name -> google.protobuf.Timestamp - 216, // 80: customers.AuditEvent.metadata:type_name -> customers.AuditEvent.MetadataEntry - 218, // 81: customers.AuditEvent.created_at:type_name -> google.protobuf.Timestamp - 218, // 82: customers.QueryAuditLogRequest.from:type_name -> google.protobuf.Timestamp - 218, // 83: customers.QueryAuditLogRequest.to:type_name -> google.protobuf.Timestamp - 110, // 84: customers.QueryAuditLogResponse.events:type_name -> customers.AuditEvent - 7, // 85: customers.Invitation.status:type_name -> customers.InvitationStatus - 218, // 86: customers.Invitation.expires_at:type_name -> google.protobuf.Timestamp - 218, // 87: customers.Invitation.created_at:type_name -> google.protobuf.Timestamp - 115, // 88: customers.CreateInvitationResponse.invitation:type_name -> customers.Invitation - 17, // 89: customers.AcceptInvitationResponse.organization:type_name -> customers.Organization - 7, // 90: customers.ListInvitationsRequest.status:type_name -> customers.InvitationStatus - 115, // 91: customers.ListInvitationsResponse.invitations:type_name -> customers.Invitation - 15, // 92: customers.SearchUsersResponse.users:type_name -> customers.User - 217, // 93: customers.SessionInfo.device_info:type_name -> customers.SessionInfo.DeviceInfoEntry - 218, // 94: customers.SessionInfo.created_at:type_name -> google.protobuf.Timestamp - 218, // 95: customers.SessionInfo.last_active_at:type_name -> google.protobuf.Timestamp - 218, // 96: customers.SessionInfo.expires_at:type_name -> google.protobuf.Timestamp - 130, // 97: customers.ListActiveSessionsResponse.sessions:type_name -> customers.SessionInfo - 134, // 98: customers.GetOrgEntitlementsResponse.entitlements:type_name -> customers.EntitlementInfo - 218, // 99: customers.PlatformAdminEntry.granted_at:type_name -> google.protobuf.Timestamp - 140, // 100: customers.ListPlatformAdminsResponse.admins:type_name -> customers.PlatformAdminEntry - 143, // 101: customers.ListFeatureFlagsResponse.flags:type_name -> customers.FeatureFlagEntry - 218, // 102: customers.WebhookSubscription.created_at:type_name -> google.protobuf.Timestamp - 8, // 103: customers.WebhookDelivery.status:type_name -> customers.WebhookDeliveryStatus - 218, // 104: customers.WebhookDelivery.created_at:type_name -> google.protobuf.Timestamp - 218, // 105: customers.WebhookDelivery.delivered_at:type_name -> google.protobuf.Timestamp - 218, // 106: customers.WebhookDelivery.next_retry_at:type_name -> google.protobuf.Timestamp - 147, // 107: customers.ListWebhookSubscriptionsResponse.subscriptions:type_name -> customers.WebhookSubscription - 148, // 108: customers.ListWebhookDeliveriesResponse.deliveries:type_name -> customers.WebhookDelivery - 218, // 109: customers.RotateWebhookSecretResponse.old_secret_expires_at:type_name -> google.protobuf.Timestamp - 218, // 110: customers.Notification.read_at:type_name -> google.protobuf.Timestamp - 218, // 111: customers.Notification.created_at:type_name -> google.protobuf.Timestamp - 160, // 112: customers.ListNotificationsResponse.notifications:type_name -> customers.Notification - 9, // 113: customers.OnboardingStep.status:type_name -> customers.OnboardingStepStatus - 218, // 114: customers.OnboardingStep.completed_at:type_name -> google.protobuf.Timestamp - 168, // 115: customers.OnboardingProgress.steps:type_name -> customers.OnboardingStep - 10, // 116: customers.GDPRRequest.type:type_name -> customers.GDPRRequestType - 11, // 117: customers.GDPRRequest.status:type_name -> customers.GDPRRequestStatus - 218, // 118: customers.GDPRRequest.expires_at:type_name -> google.protobuf.Timestamp - 218, // 119: customers.GDPRRequest.created_at:type_name -> google.protobuf.Timestamp - 218, // 120: customers.GDPRRequest.completed_at:type_name -> google.protobuf.Timestamp - 12, // 121: customers.MFADevice.device_type:type_name -> customers.MFADeviceType - 218, // 122: customers.MFADevice.verified_at:type_name -> google.protobuf.Timestamp - 218, // 123: customers.MFADevice.last_used_at:type_name -> google.protobuf.Timestamp - 218, // 124: customers.MFADevice.created_at:type_name -> google.protobuf.Timestamp - 178, // 125: customers.VerifyTOTPResponse.device:type_name -> customers.MFADevice - 178, // 126: customers.ListMFADevicesResponse.devices:type_name -> customers.MFADevice - 218, // 127: customers.OrgSSOConfig.configured_at:type_name -> google.protobuf.Timestamp - 218, // 128: customers.Invoice.created:type_name -> google.protobuf.Timestamp - 218, // 129: customers.Invoice.period_start:type_name -> google.protobuf.Timestamp - 218, // 130: customers.Invoice.period_end:type_name -> google.protobuf.Timestamp - 195, // 131: customers.ListInvoicesResponse.invoices:type_name -> customers.Invoice - 198, // 132: customers.UserSettings.email:type_name -> customers.UserEmailSettings - 199, // 133: customers.UserSettings.notifications:type_name -> customers.UserNotificationSettings - 200, // 134: customers.UpdateUserSettingsRequest.patch:type_name -> customers.UserSettings - 203, // 135: customers.ServiceCapabilities.info:type_name -> customers.ServiceInfo - 204, // 136: customers.ServiceCapabilities.rpcs:type_name -> customers.RPCInfo - 205, // 137: customers.ServiceCapabilities.permissions:type_name -> customers.PermissionInfo - 206, // 138: customers.ServiceCapabilities.rls_tables:type_name -> customers.RLSPolicyInfo - 207, // 139: customers.ServiceCapabilities.scopes:type_name -> customers.ScopeInfo - 208, // 140: customers.GetServiceInfoResponse.capabilities:type_name -> customers.ServiceCapabilities - 13, // 141: customers.UserService.Version:input_type -> customers.VersionRequest - 28, // 142: customers.UserService.GetSelf:input_type -> customers.GetSelfRequest - 25, // 143: customers.UserService.RegisterUser:input_type -> customers.RegisterUserRequest - 27, // 144: customers.UserService.GetUser:input_type -> customers.GetUserRequest - 30, // 145: customers.UserService.ListUsers:input_type -> customers.ListUsersRequest - 32, // 146: customers.UserService.UpdateUser:input_type -> customers.UpdateUserRequest - 27, // 147: customers.UserService.DeleteUser:input_type -> customers.GetUserRequest - 33, // 148: customers.UserService.AddIdentity:input_type -> customers.AddIdentityRequest - 34, // 149: customers.UserService.FindUserByIdentity:input_type -> customers.FindUserByIdentityRequest - 35, // 150: customers.UserService.ListUserIdentities:input_type -> customers.ListUserIdentitiesRequest - 40, // 151: customers.OrganizationService.CreateOrganization:input_type -> customers.CreateOrganizationRequest - 42, // 152: customers.OrganizationService.GetOrganization:input_type -> customers.GetOrganizationRequest - 43, // 153: customers.OrganizationService.ListOrganizations:input_type -> customers.ListOrganizationsRequest - 45, // 154: customers.OrganizationService.AddMember:input_type -> customers.AddOrgMemberRequest - 46, // 155: customers.OrganizationService.RemoveMember:input_type -> customers.RemoveOrgMemberRequest - 47, // 156: customers.OrganizationService.ListMembers:input_type -> customers.ListOrgMembersRequest - 38, // 157: customers.OrganizationService.GetOrgSettings:input_type -> customers.GetOrgSettingsRequest - 39, // 158: customers.OrganizationService.UpdateOrgSettings:input_type -> customers.UpdateOrgSettingsRequest - 49, // 159: customers.TeamService.CreateTeam:input_type -> customers.CreateTeamRequest - 51, // 160: customers.TeamService.ListTeams:input_type -> customers.ListTeamsRequest - 53, // 161: customers.TeamService.AddMember:input_type -> customers.AddTeamMemberRequest - 54, // 162: customers.TeamService.RemoveMember:input_type -> customers.RemoveTeamMemberRequest - 55, // 163: customers.TeamService.ListMembers:input_type -> customers.ListTeamMembersRequest - 57, // 164: customers.PermissionService.CreateRole:input_type -> customers.CreateRoleRequest - 59, // 165: customers.PermissionService.ListRoles:input_type -> customers.ListRolesRequest - 61, // 166: customers.PermissionService.DeleteRole:input_type -> customers.DeleteRoleRequest - 62, // 167: customers.PermissionService.AssignRole:input_type -> customers.AssignRoleRequest - 64, // 168: customers.PermissionService.RevokeRole:input_type -> customers.RevokeRoleRequest - 65, // 169: customers.PermissionService.ListRoleAssignments:input_type -> customers.ListRoleAssignmentsRequest - 67, // 170: customers.PermissionService.CheckPermission:input_type -> customers.CheckPermissionRequest - 69, // 171: customers.PermissionService.Decide:input_type -> customers.DecideRequest - 71, // 172: customers.PrincipalService.GetPrincipal:input_type -> customers.GetPrincipalRequest - 72, // 173: customers.PrincipalService.GetAgentPrincipal:input_type -> customers.GetAgentPrincipalRequest - 73, // 174: customers.PrincipalService.CreateAgentPrincipal:input_type -> customers.CreateAgentPrincipalRequest - 74, // 175: customers.PrincipalService.RevokePrincipal:input_type -> customers.RevokePrincipalRequest - 75, // 176: customers.PrincipalService.ListPrincipals:input_type -> customers.ListPrincipalsRequest - 79, // 177: customers.DelegationService.RequestDelegation:input_type -> customers.RequestDelegationRequest - 81, // 178: customers.DelegationService.WaitForDelegation:input_type -> customers.WaitForDelegationRequest - 83, // 179: customers.DelegationService.DecideDelegation:input_type -> customers.DecideDelegationRequest - 85, // 180: customers.DelegationService.ListPendingDelegations:input_type -> customers.ListPendingDelegationsRequest - 77, // 181: customers.IdentityService.ResolveIdentity:input_type -> customers.ResolveIdentityRequest - 88, // 182: customers.APIKeyService.CreateAPIKey:input_type -> customers.CreateAPIKeyRequest - 90, // 183: customers.APIKeyService.ListAPIKeys:input_type -> customers.ListAPIKeysRequest - 92, // 184: customers.APIKeyService.RevokeAPIKey:input_type -> customers.RevokeAPIKeyRequest - 93, // 185: customers.APIKeyService.ValidateAPIKey:input_type -> customers.ValidateAPIKeyRequest - 104, // 186: customers.AuditExportService.GetConfig:input_type -> customers.GetAuditExportConfigRequest - 105, // 187: customers.AuditExportService.SaveConfig:input_type -> customers.SaveAuditExportConfigRequest - 106, // 188: customers.AuditExportService.DeleteConfig:input_type -> customers.DeleteAuditExportConfigRequest - 108, // 189: customers.ConsentService.GetStatus:input_type -> customers.GetConsentStatusRequest - 109, // 190: customers.ConsentService.Accept:input_type -> customers.AcceptConsentRequest - 101, // 191: customers.AuthService.BeginOAuth:input_type -> customers.BeginOAuthRequest - 95, // 192: customers.AuthService.Authenticate:input_type -> customers.AuthenticateRequest - 97, // 193: customers.AuthService.RefreshToken:input_type -> customers.RefreshTokenRequest - 99, // 194: customers.AuthService.Logout:input_type -> customers.LogoutRequest - 221, // 195: customers.AuthService.GetJWKS:input_type -> google.protobuf.Empty - 111, // 196: customers.AuditService.QueryAuditLog:input_type -> customers.QueryAuditLogRequest - 113, // 197: customers.AuditService.ExportAuditLog:input_type -> customers.ExportAuditLogRequest - 123, // 198: customers.PlatformAdminService.SearchUsers:input_type -> customers.SearchUsersRequest - 125, // 199: customers.PlatformAdminService.SuspendUser:input_type -> customers.SuspendUserRequest - 126, // 200: customers.PlatformAdminService.UnsuspendUser:input_type -> customers.UnsuspendUserRequest - 127, // 201: customers.PlatformAdminService.ImpersonateUser:input_type -> customers.ImpersonateUserRequest - 129, // 202: customers.PlatformAdminService.ListActiveSessions:input_type -> customers.ListActiveSessionsRequest - 132, // 203: customers.PlatformAdminService.GetOrgEntitlements:input_type -> customers.GetOrgEntitlementsRequest - 135, // 204: customers.PlatformAdminService.OverrideEntitlement:input_type -> customers.OverrideEntitlementRequest - 137, // 205: customers.PlatformAdminService.GrantPlatformRole:input_type -> customers.GrantPlatformRoleRequest - 138, // 206: customers.PlatformAdminService.RevokePlatformRole:input_type -> customers.RevokePlatformRoleRequest - 139, // 207: customers.PlatformAdminService.ListPlatformAdmins:input_type -> customers.ListPlatformAdminsRequest - 142, // 208: customers.PlatformAdminService.ListFeatureFlags:input_type -> customers.ListFeatureFlagsRequest - 145, // 209: customers.PlatformAdminService.UpsertFeatureFlag:input_type -> customers.UpsertFeatureFlagRequest - 116, // 210: customers.InvitationService.CreateInvitation:input_type -> customers.CreateInvitationRequest - 118, // 211: customers.InvitationService.AcceptInvitation:input_type -> customers.AcceptInvitationRequest - 120, // 212: customers.InvitationService.ListInvitations:input_type -> customers.ListInvitationsRequest - 122, // 213: customers.InvitationService.RevokeInvitation:input_type -> customers.RevokeInvitationRequest - 149, // 214: customers.WebhookService.CreateSubscription:input_type -> customers.CreateWebhookSubscriptionRequest - 150, // 215: customers.WebhookService.DeleteSubscription:input_type -> customers.DeleteWebhookSubscriptionRequest - 151, // 216: customers.WebhookService.ListSubscriptions:input_type -> customers.ListWebhookSubscriptionsRequest - 153, // 217: customers.WebhookService.ListDeliveries:input_type -> customers.ListWebhookDeliveriesRequest - 156, // 218: customers.WebhookService.GetDelivery:input_type -> customers.GetWebhookDeliveryRequest - 157, // 219: customers.WebhookService.ReplayDelivery:input_type -> customers.ReplayWebhookDeliveryRequest - 155, // 220: customers.WebhookService.TestWebhook:input_type -> customers.TestWebhookRequest - 158, // 221: customers.WebhookService.RotateSecret:input_type -> customers.RotateWebhookSecretRequest - 161, // 222: customers.NotificationService.ListNotifications:input_type -> customers.ListNotificationsRequest - 163, // 223: customers.NotificationService.GetUnreadCount:input_type -> customers.GetUnreadCountRequest - 165, // 224: customers.NotificationService.MarkRead:input_type -> customers.MarkNotificationReadRequest - 166, // 225: customers.NotificationService.MarkAllRead:input_type -> customers.MarkAllNotificationsReadRequest - 167, // 226: customers.NotificationService.DeleteNotification:input_type -> customers.DeleteNotificationRequest - 170, // 227: customers.OnboardingService.GetProgress:input_type -> customers.GetOnboardingProgressRequest - 171, // 228: customers.OnboardingService.CompleteStep:input_type -> customers.CompleteOnboardingStepRequest - 172, // 229: customers.OnboardingService.SkipStep:input_type -> customers.SkipOnboardingStepRequest - 174, // 230: customers.GDPRService.RequestExport:input_type -> customers.RequestDataExportRequest - 175, // 231: customers.GDPRService.GetExportStatus:input_type -> customers.GetExportStatusRequest - 176, // 232: customers.GDPRService.RequestDeletion:input_type -> customers.RequestDeletionRequest - 177, // 233: customers.GDPRService.GetDeletionStatus:input_type -> customers.GetDeletionStatusRequest - 189, // 234: customers.SSOAdminService.GetSSO:input_type -> customers.GetOrgSSORequest - 190, // 235: customers.SSOAdminService.StartSetup:input_type -> customers.StartSSOSetupRequest - 192, // 236: customers.SSOAdminService.Disable:input_type -> customers.DisableSSORequest - 193, // 237: customers.BillingService.OpenPortal:input_type -> customers.OpenBillingPortalRequest - 196, // 238: customers.BillingService.ListInvoices:input_type -> customers.ListInvoicesRequest - 201, // 239: customers.UserSettingsService.Get:input_type -> customers.GetUserSettingsRequest - 202, // 240: customers.UserSettingsService.Update:input_type -> customers.UpdateUserSettingsRequest - 179, // 241: customers.MFAService.SetupTOTP:input_type -> customers.SetupTOTPRequest - 181, // 242: customers.MFAService.VerifyTOTP:input_type -> customers.VerifyTOTPRequest - 183, // 243: customers.MFAService.ListDevices:input_type -> customers.ListMFADevicesRequest - 185, // 244: customers.MFAService.RevokeDevice:input_type -> customers.RevokeMFADeviceRequest - 186, // 245: customers.MFAService.GenerateBackupCodes:input_type -> customers.GenerateBackupCodesRequest - 209, // 246: customers.IntrospectionService.GetServiceInfo:input_type -> customers.GetServiceInfoRequest - 14, // 247: customers.UserService.Version:output_type -> customers.VersionResponse - 29, // 248: customers.UserService.GetSelf:output_type -> customers.GetSelfResponse - 26, // 249: customers.UserService.RegisterUser:output_type -> customers.RegisterUserResponse - 15, // 250: customers.UserService.GetUser:output_type -> customers.User - 31, // 251: customers.UserService.ListUsers:output_type -> customers.ListUsersResponse - 15, // 252: customers.UserService.UpdateUser:output_type -> customers.User - 221, // 253: customers.UserService.DeleteUser:output_type -> google.protobuf.Empty - 16, // 254: customers.UserService.AddIdentity:output_type -> customers.UserIdentity - 15, // 255: customers.UserService.FindUserByIdentity:output_type -> customers.User - 36, // 256: customers.UserService.ListUserIdentities:output_type -> customers.ListUserIdentitiesResponse - 41, // 257: customers.OrganizationService.CreateOrganization:output_type -> customers.CreateOrganizationResponse - 17, // 258: customers.OrganizationService.GetOrganization:output_type -> customers.Organization - 44, // 259: customers.OrganizationService.ListOrganizations:output_type -> customers.ListOrganizationsResponse - 221, // 260: customers.OrganizationService.AddMember:output_type -> google.protobuf.Empty - 221, // 261: customers.OrganizationService.RemoveMember:output_type -> google.protobuf.Empty - 48, // 262: customers.OrganizationService.ListMembers:output_type -> customers.ListOrgMembersResponse - 37, // 263: customers.OrganizationService.GetOrgSettings:output_type -> customers.OrgSettings - 37, // 264: customers.OrganizationService.UpdateOrgSettings:output_type -> customers.OrgSettings - 50, // 265: customers.TeamService.CreateTeam:output_type -> customers.CreateTeamResponse - 52, // 266: customers.TeamService.ListTeams:output_type -> customers.ListTeamsResponse - 221, // 267: customers.TeamService.AddMember:output_type -> google.protobuf.Empty - 221, // 268: customers.TeamService.RemoveMember:output_type -> google.protobuf.Empty - 56, // 269: customers.TeamService.ListMembers:output_type -> customers.ListTeamMembersResponse - 58, // 270: customers.PermissionService.CreateRole:output_type -> customers.CreateRoleResponse - 60, // 271: customers.PermissionService.ListRoles:output_type -> customers.ListRolesResponse - 221, // 272: customers.PermissionService.DeleteRole:output_type -> google.protobuf.Empty - 63, // 273: customers.PermissionService.AssignRole:output_type -> customers.AssignRoleResponse - 221, // 274: customers.PermissionService.RevokeRole:output_type -> google.protobuf.Empty - 66, // 275: customers.PermissionService.ListRoleAssignments:output_type -> customers.ListRoleAssignmentsResponse - 68, // 276: customers.PermissionService.CheckPermission:output_type -> customers.CheckPermissionResponse - 70, // 277: customers.PermissionService.Decide:output_type -> customers.DecideResponse - 24, // 278: customers.PrincipalService.GetPrincipal:output_type -> customers.Principal - 24, // 279: customers.PrincipalService.GetAgentPrincipal:output_type -> customers.Principal - 24, // 280: customers.PrincipalService.CreateAgentPrincipal:output_type -> customers.Principal - 221, // 281: customers.PrincipalService.RevokePrincipal:output_type -> google.protobuf.Empty - 76, // 282: customers.PrincipalService.ListPrincipals:output_type -> customers.ListPrincipalsResponse - 80, // 283: customers.DelegationService.RequestDelegation:output_type -> customers.RequestDelegationResponse - 82, // 284: customers.DelegationService.WaitForDelegation:output_type -> customers.DelegationEvent - 84, // 285: customers.DelegationService.DecideDelegation:output_type -> customers.DelegationGrant - 86, // 286: customers.DelegationService.ListPendingDelegations:output_type -> customers.ListPendingDelegationsResponse - 78, // 287: customers.IdentityService.ResolveIdentity:output_type -> customers.ResolveIdentityResponse - 89, // 288: customers.APIKeyService.CreateAPIKey:output_type -> customers.CreateAPIKeyResponse - 91, // 289: customers.APIKeyService.ListAPIKeys:output_type -> customers.ListAPIKeysResponse - 221, // 290: customers.APIKeyService.RevokeAPIKey:output_type -> google.protobuf.Empty - 94, // 291: customers.APIKeyService.ValidateAPIKey:output_type -> customers.ValidateAPIKeyResponse - 103, // 292: customers.AuditExportService.GetConfig:output_type -> customers.AuditExportConfig - 103, // 293: customers.AuditExportService.SaveConfig:output_type -> customers.AuditExportConfig - 221, // 294: customers.AuditExportService.DeleteConfig:output_type -> google.protobuf.Empty - 107, // 295: customers.ConsentService.GetStatus:output_type -> customers.ConsentStatus - 107, // 296: customers.ConsentService.Accept:output_type -> customers.ConsentStatus - 102, // 297: customers.AuthService.BeginOAuth:output_type -> customers.BeginOAuthResponse - 96, // 298: customers.AuthService.Authenticate:output_type -> customers.AuthenticateResponse - 98, // 299: customers.AuthService.RefreshToken:output_type -> customers.RefreshTokenResponse - 221, // 300: customers.AuthService.Logout:output_type -> google.protobuf.Empty - 100, // 301: customers.AuthService.GetJWKS:output_type -> customers.JWKSResponse - 112, // 302: customers.AuditService.QueryAuditLog:output_type -> customers.QueryAuditLogResponse - 114, // 303: customers.AuditService.ExportAuditLog:output_type -> customers.ExportAuditLogResponse - 124, // 304: customers.PlatformAdminService.SearchUsers:output_type -> customers.SearchUsersResponse - 221, // 305: customers.PlatformAdminService.SuspendUser:output_type -> google.protobuf.Empty - 221, // 306: customers.PlatformAdminService.UnsuspendUser:output_type -> google.protobuf.Empty - 128, // 307: customers.PlatformAdminService.ImpersonateUser:output_type -> customers.ImpersonateUserResponse - 131, // 308: customers.PlatformAdminService.ListActiveSessions:output_type -> customers.ListActiveSessionsResponse - 133, // 309: customers.PlatformAdminService.GetOrgEntitlements:output_type -> customers.GetOrgEntitlementsResponse - 136, // 310: customers.PlatformAdminService.OverrideEntitlement:output_type -> customers.OverrideEntitlementResponse - 221, // 311: customers.PlatformAdminService.GrantPlatformRole:output_type -> google.protobuf.Empty - 221, // 312: customers.PlatformAdminService.RevokePlatformRole:output_type -> google.protobuf.Empty - 141, // 313: customers.PlatformAdminService.ListPlatformAdmins:output_type -> customers.ListPlatformAdminsResponse - 144, // 314: customers.PlatformAdminService.ListFeatureFlags:output_type -> customers.ListFeatureFlagsResponse - 146, // 315: customers.PlatformAdminService.UpsertFeatureFlag:output_type -> customers.UpsertFeatureFlagResponse - 117, // 316: customers.InvitationService.CreateInvitation:output_type -> customers.CreateInvitationResponse - 119, // 317: customers.InvitationService.AcceptInvitation:output_type -> customers.AcceptInvitationResponse - 121, // 318: customers.InvitationService.ListInvitations:output_type -> customers.ListInvitationsResponse - 221, // 319: customers.InvitationService.RevokeInvitation:output_type -> google.protobuf.Empty - 147, // 320: customers.WebhookService.CreateSubscription:output_type -> customers.WebhookSubscription - 221, // 321: customers.WebhookService.DeleteSubscription:output_type -> google.protobuf.Empty - 152, // 322: customers.WebhookService.ListSubscriptions:output_type -> customers.ListWebhookSubscriptionsResponse - 154, // 323: customers.WebhookService.ListDeliveries:output_type -> customers.ListWebhookDeliveriesResponse - 148, // 324: customers.WebhookService.GetDelivery:output_type -> customers.WebhookDelivery - 148, // 325: customers.WebhookService.ReplayDelivery:output_type -> customers.WebhookDelivery - 148, // 326: customers.WebhookService.TestWebhook:output_type -> customers.WebhookDelivery - 159, // 327: customers.WebhookService.RotateSecret:output_type -> customers.RotateWebhookSecretResponse - 162, // 328: customers.NotificationService.ListNotifications:output_type -> customers.ListNotificationsResponse - 164, // 329: customers.NotificationService.GetUnreadCount:output_type -> customers.GetUnreadCountResponse - 221, // 330: customers.NotificationService.MarkRead:output_type -> google.protobuf.Empty - 221, // 331: customers.NotificationService.MarkAllRead:output_type -> google.protobuf.Empty - 221, // 332: customers.NotificationService.DeleteNotification:output_type -> google.protobuf.Empty - 169, // 333: customers.OnboardingService.GetProgress:output_type -> customers.OnboardingProgress - 169, // 334: customers.OnboardingService.CompleteStep:output_type -> customers.OnboardingProgress - 169, // 335: customers.OnboardingService.SkipStep:output_type -> customers.OnboardingProgress - 173, // 336: customers.GDPRService.RequestExport:output_type -> customers.GDPRRequest - 173, // 337: customers.GDPRService.GetExportStatus:output_type -> customers.GDPRRequest - 173, // 338: customers.GDPRService.RequestDeletion:output_type -> customers.GDPRRequest - 173, // 339: customers.GDPRService.GetDeletionStatus:output_type -> customers.GDPRRequest - 188, // 340: customers.SSOAdminService.GetSSO:output_type -> customers.OrgSSOConfig - 191, // 341: customers.SSOAdminService.StartSetup:output_type -> customers.StartSSOSetupResponse - 221, // 342: customers.SSOAdminService.Disable:output_type -> google.protobuf.Empty - 194, // 343: customers.BillingService.OpenPortal:output_type -> customers.OpenBillingPortalResponse - 197, // 344: customers.BillingService.ListInvoices:output_type -> customers.ListInvoicesResponse - 200, // 345: customers.UserSettingsService.Get:output_type -> customers.UserSettings - 200, // 346: customers.UserSettingsService.Update:output_type -> customers.UserSettings - 180, // 347: customers.MFAService.SetupTOTP:output_type -> customers.SetupTOTPResponse - 182, // 348: customers.MFAService.VerifyTOTP:output_type -> customers.VerifyTOTPResponse - 184, // 349: customers.MFAService.ListDevices:output_type -> customers.ListMFADevicesResponse - 221, // 350: customers.MFAService.RevokeDevice:output_type -> google.protobuf.Empty - 187, // 351: customers.MFAService.GenerateBackupCodes:output_type -> customers.GenerateBackupCodesResponse - 210, // 352: customers.IntrospectionService.GetServiceInfo:output_type -> customers.GetServiceInfoResponse - 247, // [247:353] is the sub-list for method output_type - 141, // [141:247] is the sub-list for method input_type - 141, // [141:141] is the sub-list for extension type_name - 141, // [141:141] is the sub-list for extension extendee - 0, // [0:141] is the sub-list for field type_name + 19, // 41: customers.UpdateTeamResponse.team:type_name -> customers.Team + 20, // 42: customers.ListTeamMembersResponse.members:type_name -> customers.TeamMembership + 21, // 43: customers.CreateRoleRequest.permissions:type_name -> customers.Permission + 22, // 44: customers.CreateRoleResponse.role:type_name -> customers.Role + 22, // 45: customers.ListRolesResponse.roles:type_name -> customers.Role + 3, // 46: customers.AssignRoleRequest.subject_kind:type_name -> customers.SubjectKind + 23, // 47: customers.AssignRoleResponse.assignment:type_name -> customers.RoleAssignment + 3, // 48: customers.ListRoleAssignmentsRequest.subject_kind:type_name -> customers.SubjectKind + 23, // 49: customers.ListRoleAssignmentsResponse.assignments:type_name -> customers.RoleAssignment + 3, // 50: customers.CheckPermissionRequest.subject_kind:type_name -> customers.SubjectKind + 224, // 51: customers.DecideRequest.context:type_name -> google.protobuf.Struct + 21, // 52: customers.DecideRequest.declared_permissions:type_name -> customers.Permission + 5, // 53: customers.DecideResponse.decision:type_name -> customers.Decision + 4, // 54: customers.ListPrincipalsRequest.kind:type_name -> customers.PrincipalKind + 24, // 55: customers.ListPrincipalsResponse.principals:type_name -> customers.Principal + 224, // 56: customers.RequestDelegationRequest.context:type_name -> google.protobuf.Struct + 222, // 57: customers.RequestDelegationResponse.expires_at:type_name -> google.protobuf.Timestamp + 222, // 58: customers.DelegationEvent.decided_at:type_name -> google.protobuf.Timestamp + 222, // 59: customers.DelegationGrant.created_at:type_name -> google.protobuf.Timestamp + 222, // 60: customers.DelegationGrant.decided_at:type_name -> google.protobuf.Timestamp + 222, // 61: customers.DelegationGrant.expires_at:type_name -> google.protobuf.Timestamp + 87, // 62: customers.ListPendingDelegationsResponse.grants:type_name -> customers.DelegationGrant + 21, // 63: customers.APIKey.scopes:type_name -> customers.Permission + 6, // 64: customers.APIKey.environment:type_name -> customers.APIKeyEnvironment + 222, // 65: customers.APIKey.created_at:type_name -> google.protobuf.Timestamp + 222, // 66: customers.APIKey.expires_at:type_name -> google.protobuf.Timestamp + 222, // 67: customers.APIKey.last_used_at:type_name -> google.protobuf.Timestamp + 222, // 68: customers.APIKey.revoked_at:type_name -> google.protobuf.Timestamp + 21, // 69: customers.CreateAPIKeyRequest.scopes:type_name -> customers.Permission + 6, // 70: customers.CreateAPIKeyRequest.environment:type_name -> customers.APIKeyEnvironment + 222, // 71: customers.CreateAPIKeyRequest.expires_at:type_name -> google.protobuf.Timestamp + 90, // 72: customers.CreateAPIKeyResponse.key:type_name -> customers.APIKey + 90, // 73: customers.ListAPIKeysResponse.keys:type_name -> customers.APIKey + 218, // 74: customers.ValidateAPIKeyResponse.attributes:type_name -> customers.ValidateAPIKeyResponse.AttributesEntry + 219, // 75: customers.AuthenticateRequest.profile:type_name -> customers.AuthenticateRequest.ProfileEntry + 15, // 76: customers.AuthenticateResponse.user:type_name -> customers.User + 222, // 77: customers.AuditExportConfig.last_exported_at:type_name -> google.protobuf.Timestamp + 222, // 78: customers.AuditExportConfig.last_error_at:type_name -> google.protobuf.Timestamp + 106, // 79: customers.SaveAuditExportConfigRequest.config:type_name -> customers.AuditExportConfig + 222, // 80: customers.ConsentStatus.accepted_at:type_name -> google.protobuf.Timestamp + 220, // 81: customers.AuditEvent.metadata:type_name -> customers.AuditEvent.MetadataEntry + 222, // 82: customers.AuditEvent.created_at:type_name -> google.protobuf.Timestamp + 222, // 83: customers.QueryAuditLogRequest.from:type_name -> google.protobuf.Timestamp + 222, // 84: customers.QueryAuditLogRequest.to:type_name -> google.protobuf.Timestamp + 113, // 85: customers.QueryAuditLogResponse.events:type_name -> customers.AuditEvent + 7, // 86: customers.Invitation.status:type_name -> customers.InvitationStatus + 222, // 87: customers.Invitation.expires_at:type_name -> google.protobuf.Timestamp + 222, // 88: customers.Invitation.created_at:type_name -> google.protobuf.Timestamp + 118, // 89: customers.CreateInvitationResponse.invitation:type_name -> customers.Invitation + 17, // 90: customers.AcceptInvitationResponse.organization:type_name -> customers.Organization + 7, // 91: customers.ListInvitationsRequest.status:type_name -> customers.InvitationStatus + 118, // 92: customers.ListInvitationsResponse.invitations:type_name -> customers.Invitation + 15, // 93: customers.SearchUsersResponse.users:type_name -> customers.User + 221, // 94: customers.SessionInfo.device_info:type_name -> customers.SessionInfo.DeviceInfoEntry + 222, // 95: customers.SessionInfo.created_at:type_name -> google.protobuf.Timestamp + 222, // 96: customers.SessionInfo.last_active_at:type_name -> google.protobuf.Timestamp + 222, // 97: customers.SessionInfo.expires_at:type_name -> google.protobuf.Timestamp + 133, // 98: customers.ListActiveSessionsResponse.sessions:type_name -> customers.SessionInfo + 138, // 99: customers.GetOrgEntitlementsResponse.entitlements:type_name -> customers.EntitlementInfo + 222, // 100: customers.PlatformAdminEntry.granted_at:type_name -> google.protobuf.Timestamp + 144, // 101: customers.ListPlatformAdminsResponse.admins:type_name -> customers.PlatformAdminEntry + 147, // 102: customers.ListFeatureFlagsResponse.flags:type_name -> customers.FeatureFlagEntry + 222, // 103: customers.WebhookSubscription.created_at:type_name -> google.protobuf.Timestamp + 8, // 104: customers.WebhookDelivery.status:type_name -> customers.WebhookDeliveryStatus + 222, // 105: customers.WebhookDelivery.created_at:type_name -> google.protobuf.Timestamp + 222, // 106: customers.WebhookDelivery.delivered_at:type_name -> google.protobuf.Timestamp + 222, // 107: customers.WebhookDelivery.next_retry_at:type_name -> google.protobuf.Timestamp + 151, // 108: customers.ListWebhookSubscriptionsResponse.subscriptions:type_name -> customers.WebhookSubscription + 152, // 109: customers.ListWebhookDeliveriesResponse.deliveries:type_name -> customers.WebhookDelivery + 222, // 110: customers.RotateWebhookSecretResponse.old_secret_expires_at:type_name -> google.protobuf.Timestamp + 222, // 111: customers.Notification.read_at:type_name -> google.protobuf.Timestamp + 222, // 112: customers.Notification.created_at:type_name -> google.protobuf.Timestamp + 164, // 113: customers.ListNotificationsResponse.notifications:type_name -> customers.Notification + 9, // 114: customers.OnboardingStep.status:type_name -> customers.OnboardingStepStatus + 222, // 115: customers.OnboardingStep.completed_at:type_name -> google.protobuf.Timestamp + 172, // 116: customers.OnboardingProgress.steps:type_name -> customers.OnboardingStep + 10, // 117: customers.GDPRRequest.type:type_name -> customers.GDPRRequestType + 11, // 118: customers.GDPRRequest.status:type_name -> customers.GDPRRequestStatus + 222, // 119: customers.GDPRRequest.expires_at:type_name -> google.protobuf.Timestamp + 222, // 120: customers.GDPRRequest.created_at:type_name -> google.protobuf.Timestamp + 222, // 121: customers.GDPRRequest.completed_at:type_name -> google.protobuf.Timestamp + 12, // 122: customers.MFADevice.device_type:type_name -> customers.MFADeviceType + 222, // 123: customers.MFADevice.verified_at:type_name -> google.protobuf.Timestamp + 222, // 124: customers.MFADevice.last_used_at:type_name -> google.protobuf.Timestamp + 222, // 125: customers.MFADevice.created_at:type_name -> google.protobuf.Timestamp + 182, // 126: customers.VerifyTOTPResponse.device:type_name -> customers.MFADevice + 182, // 127: customers.ListMFADevicesResponse.devices:type_name -> customers.MFADevice + 222, // 128: customers.OrgSSOConfig.configured_at:type_name -> google.protobuf.Timestamp + 222, // 129: customers.Invoice.created:type_name -> google.protobuf.Timestamp + 222, // 130: customers.Invoice.period_start:type_name -> google.protobuf.Timestamp + 222, // 131: customers.Invoice.period_end:type_name -> google.protobuf.Timestamp + 199, // 132: customers.ListInvoicesResponse.invoices:type_name -> customers.Invoice + 202, // 133: customers.UserSettings.email:type_name -> customers.UserEmailSettings + 203, // 134: customers.UserSettings.notifications:type_name -> customers.UserNotificationSettings + 204, // 135: customers.UpdateUserSettingsRequest.patch:type_name -> customers.UserSettings + 207, // 136: customers.ServiceCapabilities.info:type_name -> customers.ServiceInfo + 208, // 137: customers.ServiceCapabilities.rpcs:type_name -> customers.RPCInfo + 209, // 138: customers.ServiceCapabilities.permissions:type_name -> customers.PermissionInfo + 210, // 139: customers.ServiceCapabilities.rls_tables:type_name -> customers.RLSPolicyInfo + 211, // 140: customers.ServiceCapabilities.scopes:type_name -> customers.ScopeInfo + 212, // 141: customers.GetServiceInfoResponse.capabilities:type_name -> customers.ServiceCapabilities + 13, // 142: customers.UserService.Version:input_type -> customers.VersionRequest + 28, // 143: customers.UserService.GetSelf:input_type -> customers.GetSelfRequest + 25, // 144: customers.UserService.RegisterUser:input_type -> customers.RegisterUserRequest + 27, // 145: customers.UserService.GetUser:input_type -> customers.GetUserRequest + 30, // 146: customers.UserService.ListUsers:input_type -> customers.ListUsersRequest + 32, // 147: customers.UserService.UpdateUser:input_type -> customers.UpdateUserRequest + 27, // 148: customers.UserService.DeleteUser:input_type -> customers.GetUserRequest + 33, // 149: customers.UserService.AddIdentity:input_type -> customers.AddIdentityRequest + 34, // 150: customers.UserService.FindUserByIdentity:input_type -> customers.FindUserByIdentityRequest + 35, // 151: customers.UserService.ListUserIdentities:input_type -> customers.ListUserIdentitiesRequest + 40, // 152: customers.OrganizationService.CreateOrganization:input_type -> customers.CreateOrganizationRequest + 42, // 153: customers.OrganizationService.GetOrganization:input_type -> customers.GetOrganizationRequest + 43, // 154: customers.OrganizationService.ListOrganizations:input_type -> customers.ListOrganizationsRequest + 45, // 155: customers.OrganizationService.AddMember:input_type -> customers.AddOrgMemberRequest + 46, // 156: customers.OrganizationService.RemoveMember:input_type -> customers.RemoveOrgMemberRequest + 47, // 157: customers.OrganizationService.ListMembers:input_type -> customers.ListOrgMembersRequest + 38, // 158: customers.OrganizationService.GetOrgSettings:input_type -> customers.GetOrgSettingsRequest + 39, // 159: customers.OrganizationService.UpdateOrgSettings:input_type -> customers.UpdateOrgSettingsRequest + 49, // 160: customers.TeamService.CreateTeam:input_type -> customers.CreateTeamRequest + 51, // 161: customers.TeamService.ListTeams:input_type -> customers.ListTeamsRequest + 53, // 162: customers.TeamService.AddMember:input_type -> customers.AddTeamMemberRequest + 54, // 163: customers.TeamService.RemoveMember:input_type -> customers.RemoveTeamMemberRequest + 58, // 164: customers.TeamService.ListMembers:input_type -> customers.ListTeamMembersRequest + 55, // 165: customers.TeamService.UpdateTeam:input_type -> customers.UpdateTeamRequest + 57, // 166: customers.TeamService.DeleteTeam:input_type -> customers.DeleteTeamRequest + 60, // 167: customers.PermissionService.CreateRole:input_type -> customers.CreateRoleRequest + 62, // 168: customers.PermissionService.ListRoles:input_type -> customers.ListRolesRequest + 64, // 169: customers.PermissionService.DeleteRole:input_type -> customers.DeleteRoleRequest + 65, // 170: customers.PermissionService.AssignRole:input_type -> customers.AssignRoleRequest + 67, // 171: customers.PermissionService.RevokeRole:input_type -> customers.RevokeRoleRequest + 68, // 172: customers.PermissionService.ListRoleAssignments:input_type -> customers.ListRoleAssignmentsRequest + 70, // 173: customers.PermissionService.CheckPermission:input_type -> customers.CheckPermissionRequest + 72, // 174: customers.PermissionService.Decide:input_type -> customers.DecideRequest + 74, // 175: customers.PrincipalService.GetPrincipal:input_type -> customers.GetPrincipalRequest + 75, // 176: customers.PrincipalService.GetAgentPrincipal:input_type -> customers.GetAgentPrincipalRequest + 76, // 177: customers.PrincipalService.CreateAgentPrincipal:input_type -> customers.CreateAgentPrincipalRequest + 77, // 178: customers.PrincipalService.RevokePrincipal:input_type -> customers.RevokePrincipalRequest + 78, // 179: customers.PrincipalService.ListPrincipals:input_type -> customers.ListPrincipalsRequest + 82, // 180: customers.DelegationService.RequestDelegation:input_type -> customers.RequestDelegationRequest + 84, // 181: customers.DelegationService.WaitForDelegation:input_type -> customers.WaitForDelegationRequest + 86, // 182: customers.DelegationService.DecideDelegation:input_type -> customers.DecideDelegationRequest + 88, // 183: customers.DelegationService.ListPendingDelegations:input_type -> customers.ListPendingDelegationsRequest + 80, // 184: customers.IdentityService.ResolveIdentity:input_type -> customers.ResolveIdentityRequest + 91, // 185: customers.APIKeyService.CreateAPIKey:input_type -> customers.CreateAPIKeyRequest + 93, // 186: customers.APIKeyService.ListAPIKeys:input_type -> customers.ListAPIKeysRequest + 95, // 187: customers.APIKeyService.RevokeAPIKey:input_type -> customers.RevokeAPIKeyRequest + 96, // 188: customers.APIKeyService.ValidateAPIKey:input_type -> customers.ValidateAPIKeyRequest + 107, // 189: customers.AuditExportService.GetConfig:input_type -> customers.GetAuditExportConfigRequest + 108, // 190: customers.AuditExportService.SaveConfig:input_type -> customers.SaveAuditExportConfigRequest + 109, // 191: customers.AuditExportService.DeleteConfig:input_type -> customers.DeleteAuditExportConfigRequest + 111, // 192: customers.ConsentService.GetStatus:input_type -> customers.GetConsentStatusRequest + 112, // 193: customers.ConsentService.Accept:input_type -> customers.AcceptConsentRequest + 104, // 194: customers.AuthService.BeginOAuth:input_type -> customers.BeginOAuthRequest + 98, // 195: customers.AuthService.Authenticate:input_type -> customers.AuthenticateRequest + 100, // 196: customers.AuthService.RefreshToken:input_type -> customers.RefreshTokenRequest + 102, // 197: customers.AuthService.Logout:input_type -> customers.LogoutRequest + 225, // 198: customers.AuthService.GetJWKS:input_type -> google.protobuf.Empty + 114, // 199: customers.AuditService.QueryAuditLog:input_type -> customers.QueryAuditLogRequest + 116, // 200: customers.AuditService.ExportAuditLog:input_type -> customers.ExportAuditLogRequest + 126, // 201: customers.PlatformAdminService.SearchUsers:input_type -> customers.SearchUsersRequest + 128, // 202: customers.PlatformAdminService.SuspendUser:input_type -> customers.SuspendUserRequest + 129, // 203: customers.PlatformAdminService.UnsuspendUser:input_type -> customers.UnsuspendUserRequest + 130, // 204: customers.PlatformAdminService.ImpersonateUser:input_type -> customers.ImpersonateUserRequest + 132, // 205: customers.PlatformAdminService.ListActiveSessions:input_type -> customers.ListActiveSessionsRequest + 135, // 206: customers.PlatformAdminService.RevokeSession:input_type -> customers.RevokeSessionRequest + 136, // 207: customers.PlatformAdminService.GetOrgEntitlements:input_type -> customers.GetOrgEntitlementsRequest + 139, // 208: customers.PlatformAdminService.OverrideEntitlement:input_type -> customers.OverrideEntitlementRequest + 141, // 209: customers.PlatformAdminService.GrantPlatformRole:input_type -> customers.GrantPlatformRoleRequest + 142, // 210: customers.PlatformAdminService.RevokePlatformRole:input_type -> customers.RevokePlatformRoleRequest + 143, // 211: customers.PlatformAdminService.ListPlatformAdmins:input_type -> customers.ListPlatformAdminsRequest + 146, // 212: customers.PlatformAdminService.ListFeatureFlags:input_type -> customers.ListFeatureFlagsRequest + 149, // 213: customers.PlatformAdminService.UpsertFeatureFlag:input_type -> customers.UpsertFeatureFlagRequest + 119, // 214: customers.InvitationService.CreateInvitation:input_type -> customers.CreateInvitationRequest + 121, // 215: customers.InvitationService.AcceptInvitation:input_type -> customers.AcceptInvitationRequest + 123, // 216: customers.InvitationService.ListInvitations:input_type -> customers.ListInvitationsRequest + 125, // 217: customers.InvitationService.RevokeInvitation:input_type -> customers.RevokeInvitationRequest + 153, // 218: customers.WebhookService.CreateSubscription:input_type -> customers.CreateWebhookSubscriptionRequest + 154, // 219: customers.WebhookService.DeleteSubscription:input_type -> customers.DeleteWebhookSubscriptionRequest + 155, // 220: customers.WebhookService.ListSubscriptions:input_type -> customers.ListWebhookSubscriptionsRequest + 157, // 221: customers.WebhookService.ListDeliveries:input_type -> customers.ListWebhookDeliveriesRequest + 160, // 222: customers.WebhookService.GetDelivery:input_type -> customers.GetWebhookDeliveryRequest + 161, // 223: customers.WebhookService.ReplayDelivery:input_type -> customers.ReplayWebhookDeliveryRequest + 159, // 224: customers.WebhookService.TestWebhook:input_type -> customers.TestWebhookRequest + 162, // 225: customers.WebhookService.RotateSecret:input_type -> customers.RotateWebhookSecretRequest + 165, // 226: customers.NotificationService.ListNotifications:input_type -> customers.ListNotificationsRequest + 167, // 227: customers.NotificationService.GetUnreadCount:input_type -> customers.GetUnreadCountRequest + 169, // 228: customers.NotificationService.MarkRead:input_type -> customers.MarkNotificationReadRequest + 170, // 229: customers.NotificationService.MarkAllRead:input_type -> customers.MarkAllNotificationsReadRequest + 171, // 230: customers.NotificationService.DeleteNotification:input_type -> customers.DeleteNotificationRequest + 174, // 231: customers.OnboardingService.GetProgress:input_type -> customers.GetOnboardingProgressRequest + 175, // 232: customers.OnboardingService.CompleteStep:input_type -> customers.CompleteOnboardingStepRequest + 176, // 233: customers.OnboardingService.SkipStep:input_type -> customers.SkipOnboardingStepRequest + 178, // 234: customers.GDPRService.RequestExport:input_type -> customers.RequestDataExportRequest + 179, // 235: customers.GDPRService.GetExportStatus:input_type -> customers.GetExportStatusRequest + 180, // 236: customers.GDPRService.RequestDeletion:input_type -> customers.RequestDeletionRequest + 181, // 237: customers.GDPRService.GetDeletionStatus:input_type -> customers.GetDeletionStatusRequest + 193, // 238: customers.SSOAdminService.GetSSO:input_type -> customers.GetOrgSSORequest + 194, // 239: customers.SSOAdminService.StartSetup:input_type -> customers.StartSSOSetupRequest + 196, // 240: customers.SSOAdminService.Disable:input_type -> customers.DisableSSORequest + 197, // 241: customers.BillingService.OpenPortal:input_type -> customers.OpenBillingPortalRequest + 200, // 242: customers.BillingService.ListInvoices:input_type -> customers.ListInvoicesRequest + 205, // 243: customers.UserSettingsService.Get:input_type -> customers.GetUserSettingsRequest + 206, // 244: customers.UserSettingsService.Update:input_type -> customers.UpdateUserSettingsRequest + 183, // 245: customers.MFAService.SetupTOTP:input_type -> customers.SetupTOTPRequest + 185, // 246: customers.MFAService.VerifyTOTP:input_type -> customers.VerifyTOTPRequest + 187, // 247: customers.MFAService.ListDevices:input_type -> customers.ListMFADevicesRequest + 189, // 248: customers.MFAService.RevokeDevice:input_type -> customers.RevokeMFADeviceRequest + 190, // 249: customers.MFAService.GenerateBackupCodes:input_type -> customers.GenerateBackupCodesRequest + 213, // 250: customers.IntrospectionService.GetServiceInfo:input_type -> customers.GetServiceInfoRequest + 14, // 251: customers.UserService.Version:output_type -> customers.VersionResponse + 29, // 252: customers.UserService.GetSelf:output_type -> customers.GetSelfResponse + 26, // 253: customers.UserService.RegisterUser:output_type -> customers.RegisterUserResponse + 15, // 254: customers.UserService.GetUser:output_type -> customers.User + 31, // 255: customers.UserService.ListUsers:output_type -> customers.ListUsersResponse + 15, // 256: customers.UserService.UpdateUser:output_type -> customers.User + 225, // 257: customers.UserService.DeleteUser:output_type -> google.protobuf.Empty + 16, // 258: customers.UserService.AddIdentity:output_type -> customers.UserIdentity + 15, // 259: customers.UserService.FindUserByIdentity:output_type -> customers.User + 36, // 260: customers.UserService.ListUserIdentities:output_type -> customers.ListUserIdentitiesResponse + 41, // 261: customers.OrganizationService.CreateOrganization:output_type -> customers.CreateOrganizationResponse + 17, // 262: customers.OrganizationService.GetOrganization:output_type -> customers.Organization + 44, // 263: customers.OrganizationService.ListOrganizations:output_type -> customers.ListOrganizationsResponse + 225, // 264: customers.OrganizationService.AddMember:output_type -> google.protobuf.Empty + 225, // 265: customers.OrganizationService.RemoveMember:output_type -> google.protobuf.Empty + 48, // 266: customers.OrganizationService.ListMembers:output_type -> customers.ListOrgMembersResponse + 37, // 267: customers.OrganizationService.GetOrgSettings:output_type -> customers.OrgSettings + 37, // 268: customers.OrganizationService.UpdateOrgSettings:output_type -> customers.OrgSettings + 50, // 269: customers.TeamService.CreateTeam:output_type -> customers.CreateTeamResponse + 52, // 270: customers.TeamService.ListTeams:output_type -> customers.ListTeamsResponse + 225, // 271: customers.TeamService.AddMember:output_type -> google.protobuf.Empty + 225, // 272: customers.TeamService.RemoveMember:output_type -> google.protobuf.Empty + 59, // 273: customers.TeamService.ListMembers:output_type -> customers.ListTeamMembersResponse + 56, // 274: customers.TeamService.UpdateTeam:output_type -> customers.UpdateTeamResponse + 225, // 275: customers.TeamService.DeleteTeam:output_type -> google.protobuf.Empty + 61, // 276: customers.PermissionService.CreateRole:output_type -> customers.CreateRoleResponse + 63, // 277: customers.PermissionService.ListRoles:output_type -> customers.ListRolesResponse + 225, // 278: customers.PermissionService.DeleteRole:output_type -> google.protobuf.Empty + 66, // 279: customers.PermissionService.AssignRole:output_type -> customers.AssignRoleResponse + 225, // 280: customers.PermissionService.RevokeRole:output_type -> google.protobuf.Empty + 69, // 281: customers.PermissionService.ListRoleAssignments:output_type -> customers.ListRoleAssignmentsResponse + 71, // 282: customers.PermissionService.CheckPermission:output_type -> customers.CheckPermissionResponse + 73, // 283: customers.PermissionService.Decide:output_type -> customers.DecideResponse + 24, // 284: customers.PrincipalService.GetPrincipal:output_type -> customers.Principal + 24, // 285: customers.PrincipalService.GetAgentPrincipal:output_type -> customers.Principal + 24, // 286: customers.PrincipalService.CreateAgentPrincipal:output_type -> customers.Principal + 225, // 287: customers.PrincipalService.RevokePrincipal:output_type -> google.protobuf.Empty + 79, // 288: customers.PrincipalService.ListPrincipals:output_type -> customers.ListPrincipalsResponse + 83, // 289: customers.DelegationService.RequestDelegation:output_type -> customers.RequestDelegationResponse + 85, // 290: customers.DelegationService.WaitForDelegation:output_type -> customers.DelegationEvent + 87, // 291: customers.DelegationService.DecideDelegation:output_type -> customers.DelegationGrant + 89, // 292: customers.DelegationService.ListPendingDelegations:output_type -> customers.ListPendingDelegationsResponse + 81, // 293: customers.IdentityService.ResolveIdentity:output_type -> customers.ResolveIdentityResponse + 92, // 294: customers.APIKeyService.CreateAPIKey:output_type -> customers.CreateAPIKeyResponse + 94, // 295: customers.APIKeyService.ListAPIKeys:output_type -> customers.ListAPIKeysResponse + 225, // 296: customers.APIKeyService.RevokeAPIKey:output_type -> google.protobuf.Empty + 97, // 297: customers.APIKeyService.ValidateAPIKey:output_type -> customers.ValidateAPIKeyResponse + 106, // 298: customers.AuditExportService.GetConfig:output_type -> customers.AuditExportConfig + 106, // 299: customers.AuditExportService.SaveConfig:output_type -> customers.AuditExportConfig + 225, // 300: customers.AuditExportService.DeleteConfig:output_type -> google.protobuf.Empty + 110, // 301: customers.ConsentService.GetStatus:output_type -> customers.ConsentStatus + 110, // 302: customers.ConsentService.Accept:output_type -> customers.ConsentStatus + 105, // 303: customers.AuthService.BeginOAuth:output_type -> customers.BeginOAuthResponse + 99, // 304: customers.AuthService.Authenticate:output_type -> customers.AuthenticateResponse + 101, // 305: customers.AuthService.RefreshToken:output_type -> customers.RefreshTokenResponse + 225, // 306: customers.AuthService.Logout:output_type -> google.protobuf.Empty + 103, // 307: customers.AuthService.GetJWKS:output_type -> customers.JWKSResponse + 115, // 308: customers.AuditService.QueryAuditLog:output_type -> customers.QueryAuditLogResponse + 117, // 309: customers.AuditService.ExportAuditLog:output_type -> customers.ExportAuditLogResponse + 127, // 310: customers.PlatformAdminService.SearchUsers:output_type -> customers.SearchUsersResponse + 225, // 311: customers.PlatformAdminService.SuspendUser:output_type -> google.protobuf.Empty + 225, // 312: customers.PlatformAdminService.UnsuspendUser:output_type -> google.protobuf.Empty + 131, // 313: customers.PlatformAdminService.ImpersonateUser:output_type -> customers.ImpersonateUserResponse + 134, // 314: customers.PlatformAdminService.ListActiveSessions:output_type -> customers.ListActiveSessionsResponse + 225, // 315: customers.PlatformAdminService.RevokeSession:output_type -> google.protobuf.Empty + 137, // 316: customers.PlatformAdminService.GetOrgEntitlements:output_type -> customers.GetOrgEntitlementsResponse + 140, // 317: customers.PlatformAdminService.OverrideEntitlement:output_type -> customers.OverrideEntitlementResponse + 225, // 318: customers.PlatformAdminService.GrantPlatformRole:output_type -> google.protobuf.Empty + 225, // 319: customers.PlatformAdminService.RevokePlatformRole:output_type -> google.protobuf.Empty + 145, // 320: customers.PlatformAdminService.ListPlatformAdmins:output_type -> customers.ListPlatformAdminsResponse + 148, // 321: customers.PlatformAdminService.ListFeatureFlags:output_type -> customers.ListFeatureFlagsResponse + 150, // 322: customers.PlatformAdminService.UpsertFeatureFlag:output_type -> customers.UpsertFeatureFlagResponse + 120, // 323: customers.InvitationService.CreateInvitation:output_type -> customers.CreateInvitationResponse + 122, // 324: customers.InvitationService.AcceptInvitation:output_type -> customers.AcceptInvitationResponse + 124, // 325: customers.InvitationService.ListInvitations:output_type -> customers.ListInvitationsResponse + 225, // 326: customers.InvitationService.RevokeInvitation:output_type -> google.protobuf.Empty + 151, // 327: customers.WebhookService.CreateSubscription:output_type -> customers.WebhookSubscription + 225, // 328: customers.WebhookService.DeleteSubscription:output_type -> google.protobuf.Empty + 156, // 329: customers.WebhookService.ListSubscriptions:output_type -> customers.ListWebhookSubscriptionsResponse + 158, // 330: customers.WebhookService.ListDeliveries:output_type -> customers.ListWebhookDeliveriesResponse + 152, // 331: customers.WebhookService.GetDelivery:output_type -> customers.WebhookDelivery + 152, // 332: customers.WebhookService.ReplayDelivery:output_type -> customers.WebhookDelivery + 152, // 333: customers.WebhookService.TestWebhook:output_type -> customers.WebhookDelivery + 163, // 334: customers.WebhookService.RotateSecret:output_type -> customers.RotateWebhookSecretResponse + 166, // 335: customers.NotificationService.ListNotifications:output_type -> customers.ListNotificationsResponse + 168, // 336: customers.NotificationService.GetUnreadCount:output_type -> customers.GetUnreadCountResponse + 225, // 337: customers.NotificationService.MarkRead:output_type -> google.protobuf.Empty + 225, // 338: customers.NotificationService.MarkAllRead:output_type -> google.protobuf.Empty + 225, // 339: customers.NotificationService.DeleteNotification:output_type -> google.protobuf.Empty + 173, // 340: customers.OnboardingService.GetProgress:output_type -> customers.OnboardingProgress + 173, // 341: customers.OnboardingService.CompleteStep:output_type -> customers.OnboardingProgress + 173, // 342: customers.OnboardingService.SkipStep:output_type -> customers.OnboardingProgress + 177, // 343: customers.GDPRService.RequestExport:output_type -> customers.GDPRRequest + 177, // 344: customers.GDPRService.GetExportStatus:output_type -> customers.GDPRRequest + 177, // 345: customers.GDPRService.RequestDeletion:output_type -> customers.GDPRRequest + 177, // 346: customers.GDPRService.GetDeletionStatus:output_type -> customers.GDPRRequest + 192, // 347: customers.SSOAdminService.GetSSO:output_type -> customers.OrgSSOConfig + 195, // 348: customers.SSOAdminService.StartSetup:output_type -> customers.StartSSOSetupResponse + 225, // 349: customers.SSOAdminService.Disable:output_type -> google.protobuf.Empty + 198, // 350: customers.BillingService.OpenPortal:output_type -> customers.OpenBillingPortalResponse + 201, // 351: customers.BillingService.ListInvoices:output_type -> customers.ListInvoicesResponse + 204, // 352: customers.UserSettingsService.Get:output_type -> customers.UserSettings + 204, // 353: customers.UserSettingsService.Update:output_type -> customers.UserSettings + 184, // 354: customers.MFAService.SetupTOTP:output_type -> customers.SetupTOTPResponse + 186, // 355: customers.MFAService.VerifyTOTP:output_type -> customers.VerifyTOTPResponse + 188, // 356: customers.MFAService.ListDevices:output_type -> customers.ListMFADevicesResponse + 225, // 357: customers.MFAService.RevokeDevice:output_type -> google.protobuf.Empty + 191, // 358: customers.MFAService.GenerateBackupCodes:output_type -> customers.GenerateBackupCodesResponse + 214, // 359: customers.IntrospectionService.GetServiceInfo:output_type -> customers.GetServiceInfoResponse + 251, // [251:360] is the sub-list for method output_type + 142, // [142:251] is the sub-list for method input_type + 142, // [142:142] is the sub-list for extension type_name + 142, // [142:142] is the sub-list for extension extendee + 0, // [0:142] is the sub-list for field type_name } func init() { file_api_proto_init() } @@ -14460,16 +14688,16 @@ func file_api_proto_init() { (*GetUserRequest_Uuid)(nil), (*GetUserRequest_Email)(nil), } - file_api_proto_msgTypes[185].OneofWrappers = []any{} - file_api_proto_msgTypes[186].OneofWrappers = []any{} - file_api_proto_msgTypes[187].OneofWrappers = []any{} + file_api_proto_msgTypes[189].OneofWrappers = []any{} + file_api_proto_msgTypes[190].OneofWrappers = []any{} + file_api_proto_msgTypes[191].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_api_proto_rawDesc), len(file_api_proto_rawDesc)), NumEnums: 13, - NumMessages: 205, + NumMessages: 209, NumExtensions: 0, NumServices: 23, }, diff --git a/module/services/accounts/code/pkg/gen/api.pb.gw.go b/module/services/accounts/code/pkg/gen/api.pb.gw.go index aefbdce9..dde77e8a 100644 --- a/module/services/accounts/code/pkg/gen/api.pb.gw.go +++ b/module/services/accounts/code/pkg/gen/api.pb.gw.go @@ -1318,6 +1318,126 @@ func local_request_TeamService_ListMembers_0(ctx context.Context, marshaler runt } +func request_TeamService_UpdateTeam_0(ctx context.Context, marshaler runtime.Marshaler, client TeamServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTeamRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["team_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "team_id") + } + + protoReq.TeamId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "team_id", err) + } + + msg, err := client.UpdateTeam(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TeamService_UpdateTeam_0(ctx context.Context, marshaler runtime.Marshaler, server TeamServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq UpdateTeamRequest + var metadata runtime.ServerMetadata + + newReader, berr := utilities.IOReaderFactory(req.Body) + if berr != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", berr) + } + if err := marshaler.NewDecoder(newReader()).Decode(&protoReq); err != nil && err != io.EOF { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["team_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "team_id") + } + + protoReq.TeamId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "team_id", err) + } + + msg, err := server.UpdateTeam(ctx, &protoReq) + return msg, metadata, err + +} + +func request_TeamService_DeleteTeam_0(ctx context.Context, marshaler runtime.Marshaler, client TeamServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTeamRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["team_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "team_id") + } + + protoReq.TeamId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "team_id", err) + } + + msg, err := client.DeleteTeam(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_TeamService_DeleteTeam_0(ctx context.Context, marshaler runtime.Marshaler, server TeamServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq DeleteTeamRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["team_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "team_id") + } + + protoReq.TeamId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "team_id", err) + } + + msg, err := server.DeleteTeam(ctx, &protoReq) + return msg, metadata, err + +} + func request_PermissionService_CreateRole_0(ctx context.Context, marshaler runtime.Marshaler, client PermissionServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq CreateRoleRequest var metadata runtime.ServerMetadata @@ -2921,6 +3041,76 @@ func local_request_PlatformAdminService_ListActiveSessions_0(ctx context.Context } +var ( + filter_PlatformAdminService_RevokeSession_0 = &utilities.DoubleArray{Encoding: map[string]int{"session_id": 0, "sessionId": 1}, Base: []int{1, 1, 2, 0, 0}, Check: []int{0, 1, 1, 2, 3}} +) + +func request_PlatformAdminService_RevokeSession_0(ctx context.Context, marshaler runtime.Marshaler, client PlatformAdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RevokeSessionRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["session_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "session_id") + } + + protoReq.SessionId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "session_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PlatformAdminService_RevokeSession_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.RevokeSession(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_PlatformAdminService_RevokeSession_0(ctx context.Context, marshaler runtime.Marshaler, server PlatformAdminServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq RevokeSessionRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["session_id"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "session_id") + } + + protoReq.SessionId, err = runtime.String(val) + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "session_id", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_PlatformAdminService_RevokeSession_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.RevokeSession(ctx, &protoReq) + return msg, metadata, err + +} + func request_PlatformAdminService_GetOrgEntitlements_0(ctx context.Context, marshaler runtime.Marshaler, client PlatformAdminServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { var protoReq GetOrgEntitlementsRequest var metadata runtime.ServerMetadata @@ -5459,6 +5649,56 @@ func RegisterTeamServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("PATCH", pattern_TeamService_UpdateTeam_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/customers.TeamService/UpdateTeam", runtime.WithHTTPPathPattern("/v1/teams/{team_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TeamService_UpdateTeam_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TeamService_UpdateTeam_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_TeamService_DeleteTeam_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/customers.TeamService/DeleteTeam", runtime.WithHTTPPathPattern("/v1/teams/{team_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_TeamService_DeleteTeam_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TeamService_DeleteTeam_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -6506,6 +6746,31 @@ func RegisterPlatformAdminServiceHandlerServer(ctx context.Context, mux *runtime }) + mux.Handle("DELETE", pattern_PlatformAdminService_RevokeSession_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateIncomingContext(ctx, mux, req, "/customers.PlatformAdminService/RevokeSession", runtime.WithHTTPPathPattern("/v1/platform/sessions/{session_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_PlatformAdminService_RevokeSession_0(annotatedContext, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_PlatformAdminService_RevokeSession_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_PlatformAdminService_GetOrgEntitlements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -8431,6 +8696,50 @@ func RegisterTeamServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux }) + mux.Handle("PATCH", pattern_TeamService_UpdateTeam_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/customers.TeamService/UpdateTeam", runtime.WithHTTPPathPattern("/v1/teams/{team_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TeamService_UpdateTeam_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TeamService_UpdateTeam_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("DELETE", pattern_TeamService_DeleteTeam_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/customers.TeamService/DeleteTeam", runtime.WithHTTPPathPattern("/v1/teams/{team_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_TeamService_DeleteTeam_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_TeamService_DeleteTeam_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -8444,6 +8753,10 @@ var ( pattern_TeamService_RemoveMember_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3, 1, 0, 4, 1, 5, 4}, []string{"v1", "teams", "team_id", "members", "user_id"}, "")) pattern_TeamService_ListMembers_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2, 2, 3}, []string{"v1", "teams", "team_id", "members"}, "")) + + pattern_TeamService_UpdateTeam_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "teams", "team_id"}, "")) + + pattern_TeamService_DeleteTeam_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 1, 0, 4, 1, 5, 2}, []string{"v1", "teams", "team_id"}, "")) ) var ( @@ -8456,6 +8769,10 @@ var ( forward_TeamService_RemoveMember_0 = runtime.ForwardResponseMessage forward_TeamService_ListMembers_0 = runtime.ForwardResponseMessage + + forward_TeamService_UpdateTeam_0 = runtime.ForwardResponseMessage + + forward_TeamService_DeleteTeam_0 = runtime.ForwardResponseMessage ) // RegisterPermissionServiceHandlerFromEndpoint is same as RegisterPermissionServiceHandler but @@ -9895,6 +10212,28 @@ func RegisterPlatformAdminServiceHandlerClient(ctx context.Context, mux *runtime }) + mux.Handle("DELETE", pattern_PlatformAdminService_RevokeSession_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + var err error + var annotatedContext context.Context + annotatedContext, err = runtime.AnnotateContext(ctx, mux, req, "/customers.PlatformAdminService/RevokeSession", runtime.WithHTTPPathPattern("/v1/platform/sessions/{session_id}")) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_PlatformAdminService_RevokeSession_0(annotatedContext, inboundMarshaler, client, req, pathParams) + annotatedContext = runtime.NewServerMetadataContext(annotatedContext, md) + if err != nil { + runtime.HTTPError(annotatedContext, mux, outboundMarshaler, w, req, err) + return + } + + forward_PlatformAdminService_RevokeSession_0(annotatedContext, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + mux.Handle("GET", pattern_PlatformAdminService_GetOrgEntitlements_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() @@ -10063,6 +10402,8 @@ var ( pattern_PlatformAdminService_ListActiveSessions_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"v1", "platform", "sessions"}, "")) + pattern_PlatformAdminService_RevokeSession_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"v1", "platform", "sessions", "session_id"}, "")) + pattern_PlatformAdminService_GetOrgEntitlements_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"v1", "platform", "organizations", "org_id", "entitlements"}, "")) pattern_PlatformAdminService_OverrideEntitlement_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4}, []string{"v1", "platform", "organizations", "org_id", "entitlements"}, "")) @@ -10089,6 +10430,8 @@ var ( forward_PlatformAdminService_ListActiveSessions_0 = runtime.ForwardResponseMessage + forward_PlatformAdminService_RevokeSession_0 = runtime.ForwardResponseMessage + forward_PlatformAdminService_GetOrgEntitlements_0 = runtime.ForwardResponseMessage forward_PlatformAdminService_OverrideEntitlement_0 = runtime.ForwardResponseMessage diff --git a/module/services/accounts/code/pkg/gen/api_grpc.pb.go b/module/services/accounts/code/pkg/gen/api_grpc.pb.go index cacda346..c021a634 100644 --- a/module/services/accounts/code/pkg/gen/api_grpc.pb.go +++ b/module/services/accounts/code/pkg/gen/api_grpc.pb.go @@ -845,6 +845,8 @@ const ( TeamService_AddMember_FullMethodName = "/customers.TeamService/AddMember" TeamService_RemoveMember_FullMethodName = "/customers.TeamService/RemoveMember" TeamService_ListMembers_FullMethodName = "/customers.TeamService/ListMembers" + TeamService_UpdateTeam_FullMethodName = "/customers.TeamService/UpdateTeam" + TeamService_DeleteTeam_FullMethodName = "/customers.TeamService/DeleteTeam" ) // TeamServiceClient is the client API for TeamService service. @@ -858,6 +860,8 @@ type TeamServiceClient interface { AddMember(ctx context.Context, in *AddTeamMemberRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) RemoveMember(ctx context.Context, in *RemoveTeamMemberRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) ListMembers(ctx context.Context, in *ListTeamMembersRequest, opts ...grpc.CallOption) (*ListTeamMembersResponse, error) + UpdateTeam(ctx context.Context, in *UpdateTeamRequest, opts ...grpc.CallOption) (*UpdateTeamResponse, error) + DeleteTeam(ctx context.Context, in *DeleteTeamRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type teamServiceClient struct { @@ -918,6 +922,26 @@ func (c *teamServiceClient) ListMembers(ctx context.Context, in *ListTeamMembers return out, nil } +func (c *teamServiceClient) UpdateTeam(ctx context.Context, in *UpdateTeamRequest, opts ...grpc.CallOption) (*UpdateTeamResponse, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(UpdateTeamResponse) + err := c.cc.Invoke(ctx, TeamService_UpdateTeam_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *teamServiceClient) DeleteTeam(ctx context.Context, in *DeleteTeamRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, TeamService_DeleteTeam_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // TeamServiceServer is the server API for TeamService service. // All implementations must embed UnimplementedTeamServiceServer // for forward compatibility. @@ -929,6 +953,8 @@ type TeamServiceServer interface { AddMember(context.Context, *AddTeamMemberRequest) (*emptypb.Empty, error) RemoveMember(context.Context, *RemoveTeamMemberRequest) (*emptypb.Empty, error) ListMembers(context.Context, *ListTeamMembersRequest) (*ListTeamMembersResponse, error) + UpdateTeam(context.Context, *UpdateTeamRequest) (*UpdateTeamResponse, error) + DeleteTeam(context.Context, *DeleteTeamRequest) (*emptypb.Empty, error) mustEmbedUnimplementedTeamServiceServer() } @@ -954,6 +980,12 @@ func (UnimplementedTeamServiceServer) RemoveMember(context.Context, *RemoveTeamM func (UnimplementedTeamServiceServer) ListMembers(context.Context, *ListTeamMembersRequest) (*ListTeamMembersResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListMembers not implemented") } +func (UnimplementedTeamServiceServer) UpdateTeam(context.Context, *UpdateTeamRequest) (*UpdateTeamResponse, error) { + return nil, status.Error(codes.Unimplemented, "method UpdateTeam not implemented") +} +func (UnimplementedTeamServiceServer) DeleteTeam(context.Context, *DeleteTeamRequest) (*emptypb.Empty, error) { + return nil, status.Error(codes.Unimplemented, "method DeleteTeam not implemented") +} func (UnimplementedTeamServiceServer) mustEmbedUnimplementedTeamServiceServer() {} func (UnimplementedTeamServiceServer) testEmbeddedByValue() {} @@ -1065,6 +1097,42 @@ func _TeamService_ListMembers_Handler(srv interface{}, ctx context.Context, dec return interceptor(ctx, in, info, handler) } +func _TeamService_UpdateTeam_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(UpdateTeamRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TeamServiceServer).UpdateTeam(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: TeamService_UpdateTeam_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TeamServiceServer).UpdateTeam(ctx, req.(*UpdateTeamRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _TeamService_DeleteTeam_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(DeleteTeamRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(TeamServiceServer).DeleteTeam(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: TeamService_DeleteTeam_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(TeamServiceServer).DeleteTeam(ctx, req.(*DeleteTeamRequest)) + } + return interceptor(ctx, in, info, handler) +} + // TeamService_ServiceDesc is the grpc.ServiceDesc for TeamService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1092,6 +1160,14 @@ var TeamService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListMembers", Handler: _TeamService_ListMembers_Handler, }, + { + MethodName: "UpdateTeam", + Handler: _TeamService_UpdateTeam_Handler, + }, + { + MethodName: "DeleteTeam", + Handler: _TeamService_DeleteTeam_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "api.proto", @@ -3051,6 +3127,7 @@ const ( PlatformAdminService_UnsuspendUser_FullMethodName = "/customers.PlatformAdminService/UnsuspendUser" PlatformAdminService_ImpersonateUser_FullMethodName = "/customers.PlatformAdminService/ImpersonateUser" PlatformAdminService_ListActiveSessions_FullMethodName = "/customers.PlatformAdminService/ListActiveSessions" + PlatformAdminService_RevokeSession_FullMethodName = "/customers.PlatformAdminService/RevokeSession" PlatformAdminService_GetOrgEntitlements_FullMethodName = "/customers.PlatformAdminService/GetOrgEntitlements" PlatformAdminService_OverrideEntitlement_FullMethodName = "/customers.PlatformAdminService/OverrideEntitlement" PlatformAdminService_GrantPlatformRole_FullMethodName = "/customers.PlatformAdminService/GrantPlatformRole" @@ -3074,6 +3151,7 @@ type PlatformAdminServiceClient interface { ImpersonateUser(ctx context.Context, in *ImpersonateUserRequest, opts ...grpc.CallOption) (*ImpersonateUserResponse, error) // Session visibility ListActiveSessions(ctx context.Context, in *ListActiveSessionsRequest, opts ...grpc.CallOption) (*ListActiveSessionsResponse, error) + RevokeSession(ctx context.Context, in *RevokeSessionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) // Entitlements & billing GetOrgEntitlements(ctx context.Context, in *GetOrgEntitlementsRequest, opts ...grpc.CallOption) (*GetOrgEntitlementsResponse, error) OverrideEntitlement(ctx context.Context, in *OverrideEntitlementRequest, opts ...grpc.CallOption) (*OverrideEntitlementResponse, error) @@ -3144,6 +3222,16 @@ func (c *platformAdminServiceClient) ListActiveSessions(ctx context.Context, in return out, nil } +func (c *platformAdminServiceClient) RevokeSession(ctx context.Context, in *RevokeSessionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, PlatformAdminService_RevokeSession_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *platformAdminServiceClient) GetOrgEntitlements(ctx context.Context, in *GetOrgEntitlementsRequest, opts ...grpc.CallOption) (*GetOrgEntitlementsResponse, error) { cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) out := new(GetOrgEntitlementsResponse) @@ -3228,6 +3316,7 @@ type PlatformAdminServiceServer interface { ImpersonateUser(context.Context, *ImpersonateUserRequest) (*ImpersonateUserResponse, error) // Session visibility ListActiveSessions(context.Context, *ListActiveSessionsRequest) (*ListActiveSessionsResponse, error) + RevokeSession(context.Context, *RevokeSessionRequest) (*emptypb.Empty, error) // Entitlements & billing GetOrgEntitlements(context.Context, *GetOrgEntitlementsRequest) (*GetOrgEntitlementsResponse, error) OverrideEntitlement(context.Context, *OverrideEntitlementRequest) (*OverrideEntitlementResponse, error) @@ -3263,6 +3352,9 @@ func (UnimplementedPlatformAdminServiceServer) ImpersonateUser(context.Context, func (UnimplementedPlatformAdminServiceServer) ListActiveSessions(context.Context, *ListActiveSessionsRequest) (*ListActiveSessionsResponse, error) { return nil, status.Error(codes.Unimplemented, "method ListActiveSessions not implemented") } +func (UnimplementedPlatformAdminServiceServer) RevokeSession(context.Context, *RevokeSessionRequest) (*emptypb.Empty, error) { + return nil, status.Error(codes.Unimplemented, "method RevokeSession not implemented") +} func (UnimplementedPlatformAdminServiceServer) GetOrgEntitlements(context.Context, *GetOrgEntitlementsRequest) (*GetOrgEntitlementsResponse, error) { return nil, status.Error(codes.Unimplemented, "method GetOrgEntitlements not implemented") } @@ -3395,6 +3487,24 @@ func _PlatformAdminService_ListActiveSessions_Handler(srv interface{}, ctx conte return interceptor(ctx, in, info, handler) } +func _PlatformAdminService_RevokeSession_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RevokeSessionRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PlatformAdminServiceServer).RevokeSession(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: PlatformAdminService_RevokeSession_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PlatformAdminServiceServer).RevokeSession(ctx, req.(*RevokeSessionRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _PlatformAdminService_GetOrgEntitlements_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(GetOrgEntitlementsRequest) if err := dec(in); err != nil { @@ -3548,6 +3658,10 @@ var PlatformAdminService_ServiceDesc = grpc.ServiceDesc{ MethodName: "ListActiveSessions", Handler: _PlatformAdminService_ListActiveSessions_Handler, }, + { + MethodName: "RevokeSession", + Handler: _PlatformAdminService_RevokeSession_Handler, + }, { MethodName: "GetOrgEntitlements", Handler: _PlatformAdminService_GetOrgEntitlements_Handler, diff --git a/module/services/accounts/code/pkg/gen/genconnect/api.connect.go b/module/services/accounts/code/pkg/gen/genconnect/api.connect.go index 18dc51e0..0071820c 100644 --- a/module/services/accounts/code/pkg/gen/genconnect/api.connect.go +++ b/module/services/accounts/code/pkg/gen/genconnect/api.connect.go @@ -136,6 +136,10 @@ const ( TeamServiceRemoveMemberProcedure = "/customers.TeamService/RemoveMember" // TeamServiceListMembersProcedure is the fully-qualified name of the TeamService's ListMembers RPC. TeamServiceListMembersProcedure = "/customers.TeamService/ListMembers" + // TeamServiceUpdateTeamProcedure is the fully-qualified name of the TeamService's UpdateTeam RPC. + TeamServiceUpdateTeamProcedure = "/customers.TeamService/UpdateTeam" + // TeamServiceDeleteTeamProcedure is the fully-qualified name of the TeamService's DeleteTeam RPC. + TeamServiceDeleteTeamProcedure = "/customers.TeamService/DeleteTeam" // PermissionServiceCreateRoleProcedure is the fully-qualified name of the PermissionService's // CreateRole RPC. PermissionServiceCreateRoleProcedure = "/customers.PermissionService/CreateRole" @@ -249,6 +253,9 @@ const ( // PlatformAdminServiceListActiveSessionsProcedure is the fully-qualified name of the // PlatformAdminService's ListActiveSessions RPC. PlatformAdminServiceListActiveSessionsProcedure = "/customers.PlatformAdminService/ListActiveSessions" + // PlatformAdminServiceRevokeSessionProcedure is the fully-qualified name of the + // PlatformAdminService's RevokeSession RPC. + PlatformAdminServiceRevokeSessionProcedure = "/customers.PlatformAdminService/RevokeSession" // PlatformAdminServiceGetOrgEntitlementsProcedure is the fully-qualified name of the // PlatformAdminService's GetOrgEntitlements RPC. PlatformAdminServiceGetOrgEntitlementsProcedure = "/customers.PlatformAdminService/GetOrgEntitlements" @@ -939,6 +946,8 @@ type TeamServiceClient interface { AddMember(context.Context, *connect.Request[gen.AddTeamMemberRequest]) (*connect.Response[emptypb.Empty], error) RemoveMember(context.Context, *connect.Request[gen.RemoveTeamMemberRequest]) (*connect.Response[emptypb.Empty], error) ListMembers(context.Context, *connect.Request[gen.ListTeamMembersRequest]) (*connect.Response[gen.ListTeamMembersResponse], error) + UpdateTeam(context.Context, *connect.Request[gen.UpdateTeamRequest]) (*connect.Response[gen.UpdateTeamResponse], error) + DeleteTeam(context.Context, *connect.Request[gen.DeleteTeamRequest]) (*connect.Response[emptypb.Empty], error) } // NewTeamServiceClient constructs a client for the customers.TeamService service. By default, it @@ -982,6 +991,18 @@ func NewTeamServiceClient(httpClient connect.HTTPClient, baseURL string, opts .. connect.WithSchema(teamServiceMethods.ByName("ListMembers")), connect.WithClientOptions(opts...), ), + updateTeam: connect.NewClient[gen.UpdateTeamRequest, gen.UpdateTeamResponse]( + httpClient, + baseURL+TeamServiceUpdateTeamProcedure, + connect.WithSchema(teamServiceMethods.ByName("UpdateTeam")), + connect.WithClientOptions(opts...), + ), + deleteTeam: connect.NewClient[gen.DeleteTeamRequest, emptypb.Empty]( + httpClient, + baseURL+TeamServiceDeleteTeamProcedure, + connect.WithSchema(teamServiceMethods.ByName("DeleteTeam")), + connect.WithClientOptions(opts...), + ), } } @@ -992,6 +1013,8 @@ type teamServiceClient struct { addMember *connect.Client[gen.AddTeamMemberRequest, emptypb.Empty] removeMember *connect.Client[gen.RemoveTeamMemberRequest, emptypb.Empty] listMembers *connect.Client[gen.ListTeamMembersRequest, gen.ListTeamMembersResponse] + updateTeam *connect.Client[gen.UpdateTeamRequest, gen.UpdateTeamResponse] + deleteTeam *connect.Client[gen.DeleteTeamRequest, emptypb.Empty] } // CreateTeam calls customers.TeamService.CreateTeam. @@ -1019,6 +1042,16 @@ func (c *teamServiceClient) ListMembers(ctx context.Context, req *connect.Reques return c.listMembers.CallUnary(ctx, req) } +// UpdateTeam calls customers.TeamService.UpdateTeam. +func (c *teamServiceClient) UpdateTeam(ctx context.Context, req *connect.Request[gen.UpdateTeamRequest]) (*connect.Response[gen.UpdateTeamResponse], error) { + return c.updateTeam.CallUnary(ctx, req) +} + +// DeleteTeam calls customers.TeamService.DeleteTeam. +func (c *teamServiceClient) DeleteTeam(ctx context.Context, req *connect.Request[gen.DeleteTeamRequest]) (*connect.Response[emptypb.Empty], error) { + return c.deleteTeam.CallUnary(ctx, req) +} + // TeamServiceHandler is an implementation of the customers.TeamService service. type TeamServiceHandler interface { CreateTeam(context.Context, *connect.Request[gen.CreateTeamRequest]) (*connect.Response[gen.CreateTeamResponse], error) @@ -1026,6 +1059,8 @@ type TeamServiceHandler interface { AddMember(context.Context, *connect.Request[gen.AddTeamMemberRequest]) (*connect.Response[emptypb.Empty], error) RemoveMember(context.Context, *connect.Request[gen.RemoveTeamMemberRequest]) (*connect.Response[emptypb.Empty], error) ListMembers(context.Context, *connect.Request[gen.ListTeamMembersRequest]) (*connect.Response[gen.ListTeamMembersResponse], error) + UpdateTeam(context.Context, *connect.Request[gen.UpdateTeamRequest]) (*connect.Response[gen.UpdateTeamResponse], error) + DeleteTeam(context.Context, *connect.Request[gen.DeleteTeamRequest]) (*connect.Response[emptypb.Empty], error) } // NewTeamServiceHandler builds an HTTP handler from the service implementation. It returns the path @@ -1065,6 +1100,18 @@ func NewTeamServiceHandler(svc TeamServiceHandler, opts ...connect.HandlerOption connect.WithSchema(teamServiceMethods.ByName("ListMembers")), connect.WithHandlerOptions(opts...), ) + teamServiceUpdateTeamHandler := connect.NewUnaryHandler( + TeamServiceUpdateTeamProcedure, + svc.UpdateTeam, + connect.WithSchema(teamServiceMethods.ByName("UpdateTeam")), + connect.WithHandlerOptions(opts...), + ) + teamServiceDeleteTeamHandler := connect.NewUnaryHandler( + TeamServiceDeleteTeamProcedure, + svc.DeleteTeam, + connect.WithSchema(teamServiceMethods.ByName("DeleteTeam")), + connect.WithHandlerOptions(opts...), + ) return "/customers.TeamService/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case TeamServiceCreateTeamProcedure: @@ -1077,6 +1124,10 @@ func NewTeamServiceHandler(svc TeamServiceHandler, opts ...connect.HandlerOption teamServiceRemoveMemberHandler.ServeHTTP(w, r) case TeamServiceListMembersProcedure: teamServiceListMembersHandler.ServeHTTP(w, r) + case TeamServiceUpdateTeamProcedure: + teamServiceUpdateTeamHandler.ServeHTTP(w, r) + case TeamServiceDeleteTeamProcedure: + teamServiceDeleteTeamHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -1106,6 +1157,14 @@ func (UnimplementedTeamServiceHandler) ListMembers(context.Context, *connect.Req return nil, connect.NewError(connect.CodeUnimplemented, errors.New("customers.TeamService.ListMembers is not implemented")) } +func (UnimplementedTeamServiceHandler) UpdateTeam(context.Context, *connect.Request[gen.UpdateTeamRequest]) (*connect.Response[gen.UpdateTeamResponse], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("customers.TeamService.UpdateTeam is not implemented")) +} + +func (UnimplementedTeamServiceHandler) DeleteTeam(context.Context, *connect.Request[gen.DeleteTeamRequest]) (*connect.Response[emptypb.Empty], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("customers.TeamService.DeleteTeam is not implemented")) +} + // PermissionServiceClient is a client for the customers.PermissionService service. type PermissionServiceClient interface { CreateRole(context.Context, *connect.Request[gen.CreateRoleRequest]) (*connect.Response[gen.CreateRoleResponse], error) @@ -2439,6 +2498,7 @@ type PlatformAdminServiceClient interface { ImpersonateUser(context.Context, *connect.Request[gen.ImpersonateUserRequest]) (*connect.Response[gen.ImpersonateUserResponse], error) // Session visibility ListActiveSessions(context.Context, *connect.Request[gen.ListActiveSessionsRequest]) (*connect.Response[gen.ListActiveSessionsResponse], error) + RevokeSession(context.Context, *connect.Request[gen.RevokeSessionRequest]) (*connect.Response[emptypb.Empty], error) // Entitlements & billing GetOrgEntitlements(context.Context, *connect.Request[gen.GetOrgEntitlementsRequest]) (*connect.Response[gen.GetOrgEntitlementsResponse], error) OverrideEntitlement(context.Context, *connect.Request[gen.OverrideEntitlementRequest]) (*connect.Response[gen.OverrideEntitlementResponse], error) @@ -2492,6 +2552,12 @@ func NewPlatformAdminServiceClient(httpClient connect.HTTPClient, baseURL string connect.WithSchema(platformAdminServiceMethods.ByName("ListActiveSessions")), connect.WithClientOptions(opts...), ), + revokeSession: connect.NewClient[gen.RevokeSessionRequest, emptypb.Empty]( + httpClient, + baseURL+PlatformAdminServiceRevokeSessionProcedure, + connect.WithSchema(platformAdminServiceMethods.ByName("RevokeSession")), + connect.WithClientOptions(opts...), + ), getOrgEntitlements: connect.NewClient[gen.GetOrgEntitlementsRequest, gen.GetOrgEntitlementsResponse]( httpClient, baseURL+PlatformAdminServiceGetOrgEntitlementsProcedure, @@ -2544,6 +2610,7 @@ type platformAdminServiceClient struct { unsuspendUser *connect.Client[gen.UnsuspendUserRequest, emptypb.Empty] impersonateUser *connect.Client[gen.ImpersonateUserRequest, gen.ImpersonateUserResponse] listActiveSessions *connect.Client[gen.ListActiveSessionsRequest, gen.ListActiveSessionsResponse] + revokeSession *connect.Client[gen.RevokeSessionRequest, emptypb.Empty] getOrgEntitlements *connect.Client[gen.GetOrgEntitlementsRequest, gen.GetOrgEntitlementsResponse] overrideEntitlement *connect.Client[gen.OverrideEntitlementRequest, gen.OverrideEntitlementResponse] grantPlatformRole *connect.Client[gen.GrantPlatformRoleRequest, emptypb.Empty] @@ -2578,6 +2645,11 @@ func (c *platformAdminServiceClient) ListActiveSessions(ctx context.Context, req return c.listActiveSessions.CallUnary(ctx, req) } +// RevokeSession calls customers.PlatformAdminService.RevokeSession. +func (c *platformAdminServiceClient) RevokeSession(ctx context.Context, req *connect.Request[gen.RevokeSessionRequest]) (*connect.Response[emptypb.Empty], error) { + return c.revokeSession.CallUnary(ctx, req) +} + // GetOrgEntitlements calls customers.PlatformAdminService.GetOrgEntitlements. func (c *platformAdminServiceClient) GetOrgEntitlements(ctx context.Context, req *connect.Request[gen.GetOrgEntitlementsRequest]) (*connect.Response[gen.GetOrgEntitlementsResponse], error) { return c.getOrgEntitlements.CallUnary(ctx, req) @@ -2622,6 +2694,7 @@ type PlatformAdminServiceHandler interface { ImpersonateUser(context.Context, *connect.Request[gen.ImpersonateUserRequest]) (*connect.Response[gen.ImpersonateUserResponse], error) // Session visibility ListActiveSessions(context.Context, *connect.Request[gen.ListActiveSessionsRequest]) (*connect.Response[gen.ListActiveSessionsResponse], error) + RevokeSession(context.Context, *connect.Request[gen.RevokeSessionRequest]) (*connect.Response[emptypb.Empty], error) // Entitlements & billing GetOrgEntitlements(context.Context, *connect.Request[gen.GetOrgEntitlementsRequest]) (*connect.Response[gen.GetOrgEntitlementsResponse], error) OverrideEntitlement(context.Context, *connect.Request[gen.OverrideEntitlementRequest]) (*connect.Response[gen.OverrideEntitlementResponse], error) @@ -2671,6 +2744,12 @@ func NewPlatformAdminServiceHandler(svc PlatformAdminServiceHandler, opts ...con connect.WithSchema(platformAdminServiceMethods.ByName("ListActiveSessions")), connect.WithHandlerOptions(opts...), ) + platformAdminServiceRevokeSessionHandler := connect.NewUnaryHandler( + PlatformAdminServiceRevokeSessionProcedure, + svc.RevokeSession, + connect.WithSchema(platformAdminServiceMethods.ByName("RevokeSession")), + connect.WithHandlerOptions(opts...), + ) platformAdminServiceGetOrgEntitlementsHandler := connect.NewUnaryHandler( PlatformAdminServiceGetOrgEntitlementsProcedure, svc.GetOrgEntitlements, @@ -2725,6 +2804,8 @@ func NewPlatformAdminServiceHandler(svc PlatformAdminServiceHandler, opts ...con platformAdminServiceImpersonateUserHandler.ServeHTTP(w, r) case PlatformAdminServiceListActiveSessionsProcedure: platformAdminServiceListActiveSessionsHandler.ServeHTTP(w, r) + case PlatformAdminServiceRevokeSessionProcedure: + platformAdminServiceRevokeSessionHandler.ServeHTTP(w, r) case PlatformAdminServiceGetOrgEntitlementsProcedure: platformAdminServiceGetOrgEntitlementsHandler.ServeHTTP(w, r) case PlatformAdminServiceOverrideEntitlementProcedure: @@ -2768,6 +2849,10 @@ func (UnimplementedPlatformAdminServiceHandler) ListActiveSessions(context.Conte return nil, connect.NewError(connect.CodeUnimplemented, errors.New("customers.PlatformAdminService.ListActiveSessions is not implemented")) } +func (UnimplementedPlatformAdminServiceHandler) RevokeSession(context.Context, *connect.Request[gen.RevokeSessionRequest]) (*connect.Response[emptypb.Empty], error) { + return nil, connect.NewError(connect.CodeUnimplemented, errors.New("customers.PlatformAdminService.RevokeSession is not implemented")) +} + func (UnimplementedPlatformAdminServiceHandler) GetOrgEntitlements(context.Context, *connect.Request[gen.GetOrgEntitlementsRequest]) (*connect.Response[gen.GetOrgEntitlementsResponse], error) { return nil, connect.NewError(connect.CodeUnimplemented, errors.New("customers.PlatformAdminService.GetOrgEntitlements is not implemented")) } diff --git a/module/services/accounts/code/pkg/infra/postgres_team.go b/module/services/accounts/code/pkg/infra/postgres_team.go index 121fe28f..2644da24 100644 --- a/module/services/accounts/code/pkg/infra/postgres_team.go +++ b/module/services/accounts/code/pkg/infra/postgres_team.go @@ -114,6 +114,52 @@ func (s *PostgresStore) RemoveTeamMember(ctx context.Context, teamID string, use return nil } +// UpdateTeam renames / re-describes a team and returns the updated row. RLS +// (teams_update) is satisfied by the org-scoped tx the business layer opens. +func (s *PostgresStore) UpdateTeam(ctx context.Context, teamID, name, description string) (*gen.Team, error) { + w := wool.Get(ctx).In("UpdateTeam") + executor := s.getQueryExecutor(ctx) + + var t gen.Team + var createdAt time.Time + var desc, parent *string + err := executor.QueryRow(ctx, ` + UPDATE teams SET name = $2, description = $3 + WHERE id = $1 + RETURNING id, org_id, name, description, parent_team_id, slug, path, created_at`, + teamID, name, description, + ).Scan(&t.Id, &t.OrgId, &t.Name, &desc, &parent, &t.Slug, &t.Path, &createdAt) + if err != nil { + if errors.Is(err, pgx.ErrNoRows) { + return nil, w.NewError("team not found") + } + return nil, w.Wrapf(err, "failed to update team") + } + if desc != nil { + t.Description = *desc + } + if parent != nil { + t.ParentTeamId = *parent + } + t.CreatedAt = timestamppb.New(createdAt) + return &t, nil +} + +// DeleteTeam removes a team and its memberships. Memberships go first (no reliance +// on a DB cascade); both run in the org-scoped tx the business layer opens. +func (s *PostgresStore) DeleteTeam(ctx context.Context, teamID string) error { + w := wool.Get(ctx).In("DeleteTeam") + executor := s.getQueryExecutor(ctx) + + if _, err := executor.Exec(ctx, `DELETE FROM team_members WHERE team_id = $1`, teamID); err != nil { + return w.Wrapf(err, "failed to remove team members") + } + if _, err := executor.Exec(ctx, `DELETE FROM teams WHERE id = $1`, teamID); err != nil { + return w.Wrapf(err, "failed to delete team") + } + return nil +} + func (s *PostgresStore) ListTeamMembers(ctx context.Context, teamID string) ([]*gen.TeamMembership, error) { w := wool.Get(ctx).In("ListTeamMembers") executor := s.getQueryExecutor(ctx) diff --git a/module/services/accounts/code/pkg/infra/postgres_user_settings.go b/module/services/accounts/code/pkg/infra/postgres_user_settings.go index 97200db7..9a1a1cd7 100644 --- a/module/services/accounts/code/pkg/infra/postgres_user_settings.go +++ b/module/services/accounts/code/pkg/infra/postgres_user_settings.go @@ -12,7 +12,7 @@ func (s *PostgresStore) GetUserSettings(ctx context.Context, userID string) ([]b q := s.getQueryExecutor(ctx) var raw []byte err := q.QueryRow(ctx, ` - SELECT settings FROM users WHERE id = $1`, userID, + SELECT settings FROM users WHERE uuid = $1`, userID, ).Scan(&raw) if err != nil { return nil, err @@ -37,6 +37,6 @@ func (s *PostgresStore) UpdateUserSettings(ctx context.Context, userID string, p UPDATE users SET settings = settings || $2::jsonb, updated_at = NOW() - WHERE id = $1`, userID, patch) + WHERE uuid = $1`, userID, patch) return err } diff --git a/module/services/accounts/openapi/api.swagger.json b/module/services/accounts/openapi/api.swagger.json index 113196fe..1865f8fe 100644 --- a/module/services/accounts/openapi/api.swagger.json +++ b/module/services/accounts/openapi/api.swagger.json @@ -2315,6 +2315,43 @@ ] } }, + "/v1/platform/sessions/{sessionId}": { + "delete": { + "operationId": "PlatformAdminService_RevokeSession", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "sessionId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "reason", + "in": "query", + "required": false, + "type": "string" + } + ], + "tags": [ + "PlatformAdminService" + ] + } + }, "/v1/platform/users": { "get": { "summary": "User management (cross-tenant)", @@ -2994,6 +3031,81 @@ ] } }, + "/v1/teams/{teamId}": { + "delete": { + "operationId": "TeamService_DeleteTeam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "type": "object", + "properties": {} + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "teamId", + "in": "path", + "required": true, + "type": "string" + } + ], + "tags": [ + "TeamService" + ] + }, + "patch": { + "operationId": "TeamService_UpdateTeam", + "responses": { + "200": { + "description": "A successful response.", + "schema": { + "$ref": "#/definitions/customersUpdateTeamResponse" + } + }, + "default": { + "description": "An unexpected error response.", + "schema": { + "$ref": "#/definitions/rpcStatus" + } + } + }, + "parameters": [ + { + "name": "teamId", + "in": "path", + "required": true, + "type": "string" + }, + { + "name": "body", + "in": "body", + "required": true, + "schema": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "description": { + "type": "string" + } + } + } + } + ], + "tags": [ + "TeamService" + ] + } + }, "/v1/teams/{teamId}/members": { "get": { "operationId": "TeamService_ListMembers", @@ -5966,6 +6078,14 @@ ], "default": "TEAM_ROLE_UNSPECIFIED" }, + "customersUpdateTeamResponse": { + "type": "object", + "properties": { + "team": { + "$ref": "#/definitions/customersTeam" + } + } + }, "customersUpdateUserSettingsRequest": { "type": "object", "properties": { diff --git a/module/services/accounts/proto/api.proto b/module/services/accounts/proto/api.proto index ab979f3a..ede9b6c8 100644 --- a/module/services/accounts/proto/api.proto +++ b/module/services/accounts/proto/api.proto @@ -382,6 +382,20 @@ message RemoveTeamMemberRequest { string user_id = 2 [(buf.validate.field).string.uuid = true]; } +message UpdateTeamRequest { + string team_id = 1 [(buf.validate.field).string.uuid = true]; + string name = 2 [(buf.validate.field).string.min_len = 1]; + string description = 3; +} + +message UpdateTeamResponse { + Team team = 1; +} + +message DeleteTeamRequest { + string team_id = 1 [(buf.validate.field).string.uuid = true]; +} + message ListTeamMembersRequest { string team_id = 1 [(buf.validate.field).string.uuid = true]; } @@ -684,6 +698,14 @@ service TeamService { rpc ListMembers(ListTeamMembersRequest) returns (ListTeamMembersResponse) { option (google.api.http) = { get: "/v1/teams/{team_id}/members" }; } + + rpc UpdateTeam(UpdateTeamRequest) returns (UpdateTeamResponse) { + option (google.api.http) = { patch: "/v1/teams/{team_id}" body: "*" }; + } + + rpc DeleteTeam(DeleteTeamRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { delete: "/v1/teams/{team_id}" }; + } } // PermissionService — RBAC management and enforcement @@ -1333,6 +1355,11 @@ message ListActiveSessionsResponse { string next_page_token = 2; } +message RevokeSessionRequest { + string session_id = 1 [(buf.validate.field).string.min_len = 1]; + string reason = 2; +} + message GetOrgEntitlementsRequest { string org_id = 1 [(buf.validate.field).string.uuid = true]; } @@ -1434,6 +1461,10 @@ service PlatformAdminService { option (google.api.http) = { get: "/v1/platform/sessions" }; } + rpc RevokeSession(RevokeSessionRequest) returns (google.protobuf.Empty) { + option (google.api.http) = { delete: "/v1/platform/sessions/{session_id}" }; + } + // Entitlements & billing rpc GetOrgEntitlements(GetOrgEntitlementsRequest) returns (GetOrgEntitlementsResponse) { option (google.api.http) = { get: "/v1/platform/organizations/{org_id}/entitlements" }; diff --git a/module/services/accounts/proto/buf.gen.yaml b/module/services/accounts/proto/buf.gen.yaml index 4e0239a4..c8d4acbb 100644 --- a/module/services/accounts/proto/buf.gen.yaml +++ b/module/services/accounts/proto/buf.gen.yaml @@ -2,7 +2,7 @@ version: v1 managed: enabled: true go_package_prefix: - default: api/pkg/gen + default: accounts/pkg/gen except: - buf.build/googleapis/googleapis - buf.build/bufbuild/protovalidate diff --git a/module/services/frontend/code/src/features/notifications/ui/notification-settings.tsx b/module/services/frontend/code/src/features/notifications/ui/notification-settings.tsx index 967fae54..efdaeda0 100644 --- a/module/services/frontend/code/src/features/notifications/ui/notification-settings.tsx +++ b/module/services/frontend/code/src/features/notifications/ui/notification-settings.tsx @@ -1,6 +1,7 @@ "use client"; -import { useState } from "react"; +import { useEffect, useState } from "react"; +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { toast } from "sonner"; import { Card, @@ -10,157 +11,97 @@ import { CardHeader, CardTitle, Button, - Checkbox, Label, + Switch, } from "@/shared/ui"; +import { userSettingsQueries } from "@/features/user-settings/service/queries"; +import { userSettingsMutations } from "@/features/user-settings/service/mutations"; -interface NotificationChannel { - id: string; +interface Channel { + id: "inApp" | "push" | "sound"; label: string; + description: string; } -interface EventPreference { - eventType: string; - label: string; - channels: Record; -} - -const CHANNELS: NotificationChannel[] = [ - { id: "in_app", label: "In-App" }, - { id: "email", label: "Email" }, - { id: "slack", label: "Slack" }, +/** The delivery channels the backend actually persists (UserNotificationSettings: + * in_app / push / sound). Per-event granularity would need a proto extension; these + * are the global toggles the api stores today. */ +const CHANNELS: Channel[] = [ + { id: "inApp", label: "In-app", description: "Show notifications in the app's notification center." }, + { id: "push", label: "Push", description: "Send push notifications to your registered devices." }, + { id: "sound", label: "Sound", description: "Play a sound when a notification arrives." }, ]; -const DEFAULT_EVENTS: EventPreference[] = [ - { - eventType: "user.registered", - label: "New user registration", - channels: { in_app: true, email: true, slack: false }, - }, - { - eventType: "auth.login", - label: "User login", - channels: { in_app: false, email: false, slack: false }, - }, - { - eventType: "invitation.created", - label: "Invitation sent", - channels: { in_app: true, email: true, slack: false }, - }, - { - eventType: "invitation.accepted", - label: "Invitation accepted", - channels: { in_app: true, email: false, slack: false }, - }, - { - eventType: "org.member_added", - label: "Member added to org", - channels: { in_app: true, email: false, slack: true }, - }, - { - eventType: "org.member_removed", - label: "Member removed from org", - channels: { in_app: true, email: true, slack: true }, - }, - { - eventType: "api_key.created", - label: "API key created", - channels: { in_app: true, email: true, slack: false }, - }, - { - eventType: "role.assigned", - label: "Role assigned", - channels: { in_app: true, email: false, slack: false }, - }, - { - eventType: "platform.user_impersonated", - label: "User impersonation started", - channels: { in_app: true, email: true, slack: true }, - }, -]; +type Prefs = { inApp: boolean; push: boolean; sound: boolean }; /** - * Notification preferences scaffold. - * Backend notification preferences API can be wired in later; for now - * this is a UI-only component with local state. + * Notification preferences — wired to the real UserSettings.notifications + * (in_app / push / sound). Reads the current settings and persists changes via + * UserSettingsService.Update (the nested `notifications` object is replaced + * wholesale, so we always send all three). */ export function NotificationSettings() { - const [events, setEvents] = useState(DEFAULT_EVENTS); + const queryClient = useQueryClient(); + const { data, isLoading } = useQuery(userSettingsQueries.current()); + + const [prefs, setPrefs] = useState({ inApp: true, push: false, sound: false }); - const toggleChannel = (eventType: string, channelId: string) => { - setEvents((prev) => - prev.map((e) => - e.eventType === eventType - ? { - ...e, - channels: { - ...e.channels, - [channelId]: !e.channels[channelId], - }, - } - : e, - ), - ); - }; + // Seed local state from the server settings once they load. + useEffect(() => { + const n = data?.notifications; + if (n) { + setPrefs({ inApp: n.inApp ?? true, push: n.push ?? false, sound: n.sound ?? false }); + } + }, [data]); - const handleSave = () => { - // Placeholder: will call backend when preferences API exists - toast.success("Notification preferences saved"); - }; + const save = useMutation({ + mutationFn: () => + userSettingsMutations.update({ + notifications: { inApp: prefs.inApp, push: prefs.push, sound: prefs.sound }, + }), + onSuccess: () => { + toast.success("Notification preferences saved"); + queryClient.invalidateQueries({ queryKey: ["user-settings"] }); + }, + onError: () => toast.error("Failed to save preferences"), + }); return (
-

- Notification Preferences -

-

- Choose how you want to be notified for each event type. -

+

Notification Preferences

+

Choose how you want to be notified.

- Event Notifications - - Toggle notification channels per event type. - + Delivery channels + These apply to the notifications this account receives. -
- {/* Header */} -
- Event - {CHANNELS.map((ch) => ( - - {ch.label} - - ))} -
- - {/* Rows */} - {events.map((event) => ( -
- - {CHANNELS.map((ch) => ( -
- - toggleChannel(event.eventType, ch.id) - } - /> -
- ))} +
+ {CHANNELS.map((ch) => ( +
+
+ +

{ch.description}

+
+ setPrefs((p) => ({ ...p, [ch.id]: v }))} + />
))}
- +
diff --git a/module/services/frontend/code/src/features/platform/service/mutations.ts b/module/services/frontend/code/src/features/platform/service/mutations.ts index ee3e1b17..8419727c 100644 --- a/module/services/frontend/code/src/features/platform/service/mutations.ts +++ b/module/services/frontend/code/src/features/platform/service/mutations.ts @@ -71,3 +71,13 @@ export function useImpersonateUser() { mutationFn: (userId: string) => svc.impersonateUser({ userId }), }); } + +export function useRevokeSession() { + const svc = usePlatformAdminService(); + const qc = useQueryClient(); + return useMutation({ + mutationFn: ({ sessionId, reason }: { sessionId: string; reason?: string }) => + svc.revokeSession({ sessionId, reason: reason ?? "" }), + onSuccess: () => qc.invalidateQueries({ queryKey: ["sessions"] }), + }); +} diff --git a/module/services/frontend/code/src/features/platform/ui/sessions-page.tsx b/module/services/frontend/code/src/features/platform/ui/sessions-page.tsx index 46569252..905cb112 100644 --- a/module/services/frontend/code/src/features/platform/ui/sessions-page.tsx +++ b/module/services/frontend/code/src/features/platform/ui/sessions-page.tsx @@ -1,6 +1,6 @@ "use client"; -import { useMemo } from "react"; +import { useMemo, useState } from "react"; import { createColumnHelper, getCoreRowModel, @@ -8,31 +8,47 @@ import { getPaginationRowModel, useReactTable, } from "@tanstack/react-table"; +import { MoreHorizontal, LogOut } from "lucide-react"; +import { toast } from "sonner"; import { DataTable } from "@/shared/ui/data-table"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + Button, + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/shared/ui"; import { formatDate, truncateUUID } from "@/shared/lib/utils"; import type { SessionInfo } from "../model/types"; import { useActiveSessions } from "../service/queries"; +import { useRevokeSession } from "../service/mutations"; const col = createColumnHelper(); export function SessionsPage() { const { data: sessions = [], isLoading } = useActiveSessions(); + const [revokeTarget, setRevokeTarget] = useState(null); + const revoke = useRevokeSession(); const columns = useMemo( () => [ col.accessor("userId", { header: "User", - cell: (info) => ( - - {truncateUUID(info.getValue())} - - ), + cell: (info) => {truncateUUID(info.getValue())}, }), col.accessor("ipAddress", { header: "IP Address", - cell: (info) => ( - {info.getValue() || "-"} - ), + cell: (info) => {info.getValue() || "-"}, }), col.accessor("deviceInfo", { header: "Device", @@ -50,18 +66,31 @@ export function SessionsPage() { }), col.accessor("lastActiveAt", { header: "Last Active", - cell: (info) => ( - - {formatDate(info.getValue())} - - ), + cell: (info) => {formatDate(info.getValue())}, }), col.accessor("expiresAt", { header: "Expires", - cell: (info) => ( - - {formatDate(info.getValue())} - + cell: (info) => {formatDate(info.getValue())}, + }), + col.display({ + id: "actions", + cell: ({ row }) => ( + + }> + + + + Actions + + setRevokeTarget(row.original)} + className="text-destructive focus:text-destructive" + > + + Force logout + + + ), }), ], @@ -80,16 +109,46 @@ export function SessionsPage() {

Active Sessions

-

- View and monitor active user sessions. -

+

View and monitor active user sessions.

- + + + {revokeTarget && ( + !o && setRevokeTarget(null)}> + + + Force logout? + + This revokes the session for user{" "} + {truncateUUID(revokeTarget.userId)}. They'll be signed out + on that device immediately. + + + + setRevokeTarget(null)}>Cancel + + revoke.mutate( + { sessionId: revokeTarget.id, reason: "revoked_by_admin" }, + { + onSuccess: () => { + toast.success("Session revoked"); + setRevokeTarget(null); + }, + onError: () => toast.error("Failed to revoke session"), + }, + ) + } + disabled={revoke.isPending} + className="bg-destructive text-white hover:bg-destructive/90" + > + {revoke.isPending ? "Revoking..." : "Force logout"} + + + + + )}
); } diff --git a/module/services/frontend/code/src/features/teams/service/mutations.ts b/module/services/frontend/code/src/features/teams/service/mutations.ts index e9fdcf89..302b0790 100644 --- a/module/services/frontend/code/src/features/teams/service/mutations.ts +++ b/module/services/frontend/code/src/features/teams/service/mutations.ts @@ -13,4 +13,9 @@ export const teamMutations = { removeMember: (teamId: string, userId: string) => client.removeMember({ teamId, userId }), + + update: (teamId: string, name: string, description?: string) => + client.updateTeam({ teamId, name, description: description ?? "" }), + + remove: (teamId: string) => client.deleteTeam({ teamId }), }; diff --git a/module/services/frontend/code/src/features/teams/ui/team-form.tsx b/module/services/frontend/code/src/features/teams/ui/team-form.tsx index 38346d02..f405248e 100644 --- a/module/services/frontend/code/src/features/teams/ui/team-form.tsx +++ b/module/services/frontend/code/src/features/teams/ui/team-form.tsx @@ -18,24 +18,30 @@ import { createTeamSchema, type CreateTeamValues } from "../model/schemas"; interface TeamFormProps { open: boolean; + /** "create" (default) or "edit" — an edit form seeds `initial` and relabels. */ + mode?: "create" | "edit"; + initial?: { name: string; description?: string }; onSubmit: (values: CreateTeamValues) => void; onCancel: () => void; isPending: boolean; } -export function TeamForm({ open, onSubmit, onCancel, isPending }: TeamFormProps) { +export function TeamForm({ open, mode = "create", initial, onSubmit, onCancel, isPending }: TeamFormProps) { + const editing = mode === "edit"; const form = useForm({ resolver: zodResolver(createTeamSchema), - defaultValues: { name: "", description: "" }, + defaultValues: { name: initial?.name ?? "", description: initial?.description ?? "" }, }); return ( !o && onCancel()}> - Create Team + {editing ? "Rename team" : "Create Team"} - Add a new team to the selected organization. + {editing + ? "Update this team's name and description." + : "Add a new team to the selected organization."}
@@ -70,7 +76,7 @@ export function TeamForm({ open, onSubmit, onCancel, isPending }: TeamFormProps) Cancel
diff --git a/module/services/frontend/code/src/features/teams/ui/teams-page.tsx b/module/services/frontend/code/src/features/teams/ui/teams-page.tsx index a2d46abf..55a2ee5e 100644 --- a/module/services/frontend/code/src/features/teams/ui/teams-page.tsx +++ b/module/services/frontend/code/src/features/teams/ui/teams-page.tsx @@ -5,7 +5,17 @@ import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Plus } from "lucide-react"; import { toast } from "sonner"; import { timestampDate } from "@bufbuild/protobuf/wkt"; -import { Button } from "@/shared/ui"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, + Button, +} from "@/shared/ui"; import { OrgSelector } from "@/components/org-selector"; import { teamQueries } from "../service/queries"; import { teamMutations } from "../service/mutations"; @@ -19,6 +29,8 @@ export function TeamsPage() { const [orgId, setOrgId] = useState(""); const [showCreate, setShowCreate] = useState(false); const [selectedTeam, setSelectedTeam] = useState(null); + const [renameTarget, setRenameTarget] = useState(null); + const [deleteTarget, setDeleteTarget] = useState(null); // --- queries --- const { data: raw, isLoading } = useQuery({ @@ -45,9 +57,32 @@ export function TeamsPage() { onError: () => toast.error("Failed to create team"), }); + const updateMutation = useMutation({ + mutationFn: ({ teamId, name, description }: { teamId: string; name: string; description?: string }) => + teamMutations.update(teamId, name, description), + onSuccess: () => { + toast.success("Team updated"); + queryClient.invalidateQueries({ queryKey: ["teams", orgId] }); + setRenameTarget(null); + }, + onError: () => toast.error("Failed to update team"), + }); + + const deleteMutation = useMutation({ + mutationFn: (teamId: string) => teamMutations.remove(teamId), + onSuccess: () => { + toast.success("Team deleted"); + queryClient.invalidateQueries({ queryKey: ["teams", orgId] }); + setDeleteTarget(null); + }, + onError: () => toast.error("Failed to delete team"), + }); + const handleViewMembers = useCallback((team: Team) => { setSelectedTeam(team); }, []); + const handleRename = useCallback((team: Team) => setRenameTarget(team), []); + const handleDelete = useCallback((team: Team) => setDeleteTarget(team), []); return (
@@ -75,6 +110,8 @@ export function TeamsPage() { data={teams} isLoading={isLoading} onViewMembers={handleViewMembers} + onRename={handleRename} + onDelete={handleDelete} /> )} @@ -92,6 +129,44 @@ export function TeamsPage() { onCancel={() => setShowCreate(false)} isPending={createMutation.isPending} /> + + {renameTarget && ( + + updateMutation.mutate({ teamId: renameTarget.id, name: vals.name, description: vals.description }) + } + onCancel={() => setRenameTarget(null)} + isPending={updateMutation.isPending} + /> + )} + + {deleteTarget && ( + !o && setDeleteTarget(null)}> + + + Delete team? + + This permanently deletes {deleteTarget.name} and removes all + its memberships. This can't be undone. + + + + setDeleteTarget(null)}>Cancel + deleteMutation.mutate(deleteTarget.id)} + disabled={deleteMutation.isPending} + className="bg-destructive text-white hover:bg-destructive/90" + > + {deleteMutation.isPending ? "Deleting..." : "Delete team"} + + + + + )}
); } diff --git a/module/services/frontend/code/src/features/teams/ui/teams-table.tsx b/module/services/frontend/code/src/features/teams/ui/teams-table.tsx index 8696ea0b..b9c99e7a 100644 --- a/module/services/frontend/code/src/features/teams/ui/teams-table.tsx +++ b/module/services/frontend/code/src/features/teams/ui/teams-table.tsx @@ -9,7 +9,7 @@ import { useReactTable, type SortingState, } from "@tanstack/react-table"; -import { MoreHorizontal, Users } from "lucide-react"; +import { MoreHorizontal, Users, Pencil, Trash2 } from "lucide-react"; import { DataTable } from "@/shared/ui/data-table"; import { Button, @@ -29,12 +29,16 @@ interface TeamsTableProps { data: Team[]; isLoading: boolean; onViewMembers: (team: Team) => void; + onRename: (team: Team) => void; + onDelete: (team: Team) => void; } export function TeamsTable({ data, isLoading, onViewMembers, + onRename, + onDelete, }: TeamsTableProps) { const [sorting, setSorting] = useState([]); @@ -89,13 +93,25 @@ export function TeamsTable({ View Members + onRename(team)}> + + Rename + + + onDelete(team)} + className="text-destructive focus:text-destructive" + > + + Delete + ); }, }), ], - [onViewMembers], + [onViewMembers, onRename, onDelete], ); const table = useReactTable({ diff --git a/module/services/frontend/code/src/features/user-settings/service/mutations.ts b/module/services/frontend/code/src/features/user-settings/service/mutations.ts index f35fb182..482a03d4 100644 --- a/module/services/frontend/code/src/features/user-settings/service/mutations.ts +++ b/module/services/frontend/code/src/features/user-settings/service/mutations.ts @@ -1,17 +1,16 @@ +import { create, type MessageInitShape } from "@bufbuild/protobuf"; import { createClient } from "@connectrpc/connect"; import { apiTransport } from "@/lib/connect/transport"; -import { - UserSettingsService, - type UserSettings, -} from "@/gen/saas-starter_api_grpc_pb"; +import { UserSettingsService, UserSettingsSchema } from "@/gen/saas-starter_api_grpc_pb"; const client = createClient(UserSettingsService, apiTransport); export const userSettingsMutations = { - // Partial update — pass only the keys to change. Nested objects - // (email, notifications) are replaced wholesale by the api jsonb - // merge, so callers must always send the full nested object on - // any nested-key change. - update: (patch: Partial) => - client.update({ patch: patch as UserSettings }), + // Partial update — pass only the keys to change. Nested objects (email, + // notifications) are replaced wholesale by the api jsonb merge, so callers must + // always send the full nested object on any nested-key change. We accept a message + // INIT SHAPE (plain nested objects, no $typeName) and `create` the message here so + // callers don't have to construct protobuf messages by hand. + update: (patch: MessageInitShape) => + client.update({ patch: create(UserSettingsSchema, patch) }), }; diff --git a/module/services/frontend/code/src/features/users/model/schemas.ts b/module/services/frontend/code/src/features/users/model/schemas.ts index 7b559155..f5fa169e 100644 --- a/module/services/frontend/code/src/features/users/model/schemas.ts +++ b/module/services/frontend/code/src/features/users/model/schemas.ts @@ -6,3 +6,13 @@ export const suspendUserSchema = z.object({ }); export type SuspendUserValues = z.infer; + +/** Editable user fields — the profile name pair plus primary email. All optional; + * an unchanged field is simply re-sent (UpdateUser replaces the profile map / email). */ +export const editUserSchema = z.object({ + firstName: z.string().max(120, "Too long").optional(), + lastName: z.string().max(120, "Too long").optional(), + primaryEmail: z.string().email("Enter a valid email").optional().or(z.literal("")), +}); + +export type EditUserValues = z.infer; diff --git a/module/services/frontend/code/src/features/users/service/mutations.ts b/module/services/frontend/code/src/features/users/service/mutations.ts index aad649f1..fe85e41a 100644 --- a/module/services/frontend/code/src/features/users/service/mutations.ts +++ b/module/services/frontend/code/src/features/users/service/mutations.ts @@ -1,8 +1,19 @@ import { createClient } from "@connectrpc/connect"; import { apiTransport } from "@/lib/connect/transport"; -import { PlatformAdminService } from "@/gen/saas-starter_api_grpc_pb"; +import { PlatformAdminService, UserService } from "@/gen/saas-starter_api_grpc_pb"; const client = createClient(PlatformAdminService, apiTransport); +const userClient = createClient(UserService, apiTransport); + +/** The profile fields we edit, folded into the User.profile map. Merged onto the + * existing profile so unrelated keys are preserved (UpdateUser replaces the map). + * primaryEmail is always sent — the User proto validates it as an email even for a + * profile-only edit, so we echo the current address when it's unchanged. */ +export interface UserEdit { + uuid: string; + profile: Record; + primaryEmail: string; +} export const userMutations = { suspend: (userId: string, reason: string) => @@ -13,4 +24,16 @@ export const userMutations = { impersonate: (userId: string) => client.impersonateUser({ userId }), + + // UpdateUser honors the target uuid with a self-or-admin gate; we send the merged + // profile and the (current or edited) email as the User patch. + update: ({ uuid, profile, primaryEmail }: UserEdit) => + userClient.updateUser({ + uuid, + user: { uuid, profile, primaryEmail }, + }), + + // DeleteUser soft-deletes and revokes the user's sessions; takes a uuid identifier. + remove: (uuid: string) => + userClient.deleteUser({ identifier: { case: "uuid", value: uuid } }), }; diff --git a/module/services/frontend/code/src/features/users/ui/delete-user-dialog.tsx b/module/services/frontend/code/src/features/users/ui/delete-user-dialog.tsx new file mode 100644 index 00000000..a7d3d060 --- /dev/null +++ b/module/services/frontend/code/src/features/users/ui/delete-user-dialog.tsx @@ -0,0 +1,48 @@ +"use client"; + +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@/shared/ui"; + +interface DeleteUserDialogProps { + open: boolean; + userEmail: string; + onConfirm: () => void; + onCancel: () => void; + isPending: boolean; +} + +/** Confirm a soft-delete. Deleting also revokes the user's sessions server-side, + * so it's a destructive, session-ending action — hence the explicit confirm. */ +export function DeleteUserDialog({ open, userEmail, onConfirm, onCancel, isPending }: DeleteUserDialogProps) { + return ( + !o && onCancel()}> + + + Delete user? + + This soft-deletes {userEmail} and revokes all their active + sessions. They will be signed out everywhere and lose access. + + + + Cancel + + {isPending ? "Deleting..." : "Delete user"} + + + + + ); +} diff --git a/module/services/frontend/code/src/features/users/ui/edit-user-form.tsx b/module/services/frontend/code/src/features/users/ui/edit-user-form.tsx new file mode 100644 index 00000000..3b939310 --- /dev/null +++ b/module/services/frontend/code/src/features/users/ui/edit-user-form.tsx @@ -0,0 +1,90 @@ +"use client"; + +import { useForm } from "react-hook-form"; +import { zodResolver } from "@hookform/resolvers/zod"; +import { + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + Button, + Input, + Label, +} from "@/shared/ui"; +import { editUserSchema, type EditUserValues } from "../model/schemas"; +import type { User } from "../model/types"; +import type { UserEdit } from "../service/mutations"; + +interface EditUserFormProps { + open: boolean; + user: User; + onSubmit: (edit: UserEdit) => void; + onCancel: () => void; + isPending: boolean; +} + +/** Edit a user's profile (name) and primary email. The name pair lives in the + * `profile` map; we merge onto the existing profile so unrelated keys survive. */ +export function EditUserForm({ open, user, onSubmit, onCancel, isPending }: EditUserFormProps) { + const form = useForm({ + resolver: zodResolver(editUserSchema), + defaultValues: { + firstName: user.profile["first_name"] ?? "", + lastName: user.profile["last_name"] ?? "", + primaryEmail: user.primaryEmail, + }, + }); + + const submit = (values: EditUserValues) => { + const profile = { + ...user.profile, + first_name: values.firstName ?? "", + last_name: values.lastName ?? "", + }; + // Always send a valid email (the User proto validates it); fall back to the + // current address when the field was left unchanged/blank. + onSubmit({ uuid: user.uuid, profile, primaryEmail: values.primaryEmail?.trim() || user.primaryEmail }); + }; + + return ( + !o && onCancel()}> + + + Edit user + + Update the profile for {user.primaryEmail}. + + +
+
+
+ + +
+
+ + +
+
+
+ + + {form.formState.errors.primaryEmail && ( +

{form.formState.errors.primaryEmail.message}

+ )} +
+ + + + +
+
+
+ ); +} diff --git a/module/services/frontend/code/src/features/users/ui/users-page.tsx b/module/services/frontend/code/src/features/users/ui/users-page.tsx index cd32ddbe..91abf073 100644 --- a/module/services/frontend/code/src/features/users/ui/users-page.tsx +++ b/module/services/frontend/code/src/features/users/ui/users-page.tsx @@ -7,15 +7,19 @@ import { toast } from "sonner"; import { timestampDate } from "@bufbuild/protobuf/wkt"; import { Input } from "@/shared/ui"; import { userQueries } from "../service/queries"; -import { userMutations } from "../service/mutations"; +import { userMutations, type UserEdit } from "../service/mutations"; import { toUserStatus, type User } from "../model/types"; import { UsersTable } from "./users-table"; import { SuspendForm } from "./suspend-form"; +import { EditUserForm } from "./edit-user-form"; +import { DeleteUserDialog } from "./delete-user-dialog"; export function UsersPage() { const queryClient = useQueryClient(); const [search, setSearch] = useState(""); const [suspendTarget, setSuspendTarget] = useState(null); + const [editTarget, setEditTarget] = useState(null); + const [deleteTarget, setDeleteTarget] = useState(null); const [impersonationToken, setImpersonationToken] = useState(null); // --- queries --- @@ -64,6 +68,28 @@ export function UsersPage() { onError: () => toast.error("Failed to impersonate user"), }); + const updateMutation = useMutation({ + mutationFn: (edit: UserEdit) => userMutations.update(edit), + onSuccess: () => { + toast.success("User updated"); + queryClient.invalidateQueries({ queryKey: ["users"] }); + setEditTarget(null); + }, + onError: () => toast.error("Failed to update user"), + }); + + const deleteMutation = useMutation({ + mutationFn: (userId: string) => userMutations.remove(userId), + onSuccess: () => { + toast.success("User deleted"); + queryClient.invalidateQueries({ queryKey: ["users"] }); + setDeleteTarget(null); + }, + onError: () => toast.error("Failed to delete user"), + }); + + const handleEdit = useCallback((user: User) => setEditTarget(user), []); + const handleDelete = useCallback((user: User) => setDeleteTarget(user), []); const handleSuspend = useCallback((user: User) => setSuspendTarget(user), []); const handleUnsuspend = useCallback( (user: User) => unsuspendMutation.mutate(user.uuid), @@ -111,11 +137,33 @@ export function UsersPage() { + {editTarget && ( + updateMutation.mutate(edit)} + onCancel={() => setEditTarget(null)} + isPending={updateMutation.isPending} + /> + )} + + {deleteTarget && ( + deleteMutation.mutate(deleteTarget.uuid)} + onCancel={() => setDeleteTarget(null)} + isPending={deleteMutation.isPending} + /> + )} + {suspendTarget && ( (); interface UsersTableProps { data: User[]; isLoading: boolean; + onEdit: (user: User) => void; + onDelete: (user: User) => void; onSuspend: (user: User) => void; onUnsuspend: (user: User) => void; onImpersonate: (user: User) => void; @@ -40,6 +42,8 @@ interface UsersTableProps { export function UsersTable({ data, isLoading, + onEdit, + onDelete, onSuspend, onUnsuspend, onImpersonate, @@ -106,6 +110,10 @@ export function UsersTable({ Actions + onEdit(user)}> + + Edit + {user.status === "active" && ( onSuspend(user)}> @@ -122,13 +130,21 @@ export function UsersTable({ Impersonate + + onDelete(user)} + className="text-destructive focus:text-destructive" + > + + Delete + ); }, }), ], - [onSuspend, onUnsuspend, onImpersonate], + [onEdit, onDelete, onSuspend, onUnsuspend, onImpersonate], ); const table = useReactTable({ diff --git a/module/services/frontend/code/src/gen/saas-starter_api_grpc_pb.ts b/module/services/frontend/code/src/gen/saas-starter_api_grpc_pb.ts index eb772f52..19ac6725 100644 --- a/module/services/frontend/code/src/gen/saas-starter_api_grpc_pb.ts +++ b/module/services/frontend/code/src/gen/saas-starter_api_grpc_pb.ts @@ -6,15 +6,15 @@ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobu import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1"; import { file_google_api_annotations } from "./google/api/annotations_pb"; import type { EmptySchema, FieldMask, Timestamp } from "@bufbuild/protobuf/wkt"; -import { file_google_protobuf_empty, file_google_protobuf_field_mask, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; +import { file_google_protobuf_empty, file_google_protobuf_field_mask, file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; import { file_buf_validate_validate } from "./buf/validate/validate_pb"; -import type { Message } from "@bufbuild/protobuf"; +import type { JsonObject, Message } from "@bufbuild/protobuf"; /** * Describes the file saas-starter_api_grpc.proto. */ export const file_saas_starter_api_grpc: GenFile = /*@__PURE__*/ - fileDesc("ChtzYWFzLXN0YXJ0ZXJfYXBpX2dycGMucHJvdG8SCWN1c3RvbWVycyIQCg5WZXJzaW9uUmVxdWVzdCIrCg9WZXJzaW9uUmVzcG9uc2USGAoHdmVyc2lvbhgBIAEoCUIHukgEcgIQASLsAgoEVXNlchIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIeCg1wcmltYXJ5X2VtYWlsGAIgASgJQge6SARyAmABEi4KCmNyZWF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmxhc3RfbG9naW4YBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiUKBnN0YXR1cxgGIAEoDjIVLmN1c3RvbWVycy5Vc2VyU3RhdHVzEi0KB3Byb2ZpbGUYByADKAsyHC5jdXN0b21lcnMuVXNlci5Qcm9maWxlRW50cnkSFgoOZW1haWxfdmVyaWZpZWQYCCABKAgaLgoMUHJvZmlsZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEijgMKDFVzZXJJZGVudGl0eRIMCgR1dWlkGAEgASgJEhEKCXVzZXJfdXVpZBgCIAEoCRItCghwcm92aWRlchgDIAEoCUIbukgYchYQARgyMhBeW2EtekEtWjAtOV8tXSskEh8KC3Byb3ZpZGVyX2lkGAQgASgJQgq6SAdyBRABGP8BEh8KDnByb3ZpZGVyX2VtYWlsGAUgASgJQge6SARyAmABEi4KCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCWxhc3RfdXNlZBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQAoNcHJvdmlkZXJfZGF0YRgIIAMoCzIpLmN1c3RvbWVycy5Vc2VySWRlbnRpdHkuUHJvdmlkZXJEYXRhRW50cnkSFgoOZW1haWxfdmVyaWZpZWQYCSABKAgaMwoRUHJvdmlkZXJEYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASK+AQoMT3JnYW5pemF0aW9uEhQKAmlkGAEgASgJQgi6SAVyA7ABARIVCgRuYW1lGAIgASgJQge6SARyAhABEjUKBHNsdWcYAyABKAlCJ7pIJHIiEAEYPzIcXlthLXowLTldW2EtejAtOS1dKlthLXowLTldJBIaCghvd25lcl9pZBgEIAEoCUIIukgFcgOwAQESLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAigQEKDU9yZ01lbWJlcnNoaXASDgoGb3JnX2lkGAEgASgJEg8KB3VzZXJfaWQYAiABKAkSIAoEcm9sZRgDIAEoDjISLmN1c3RvbWVycy5PcmdSb2xlEi0KCWpvaW5lZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAikgEKBFRlYW0SFAoCaWQYASABKAlCCLpIBXIDsAEBEhgKBm9yZ19pZBgCIAEoCUIIukgFcgOwAQESFQoEbmFtZRgDIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgEIAEoCRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCKEAQoOVGVhbU1lbWJlcnNoaXASDwoHdGVhbV9pZBgBIAEoCRIPCgd1c2VyX2lkGAIgASgJEiEKBHJvbGUYAyABKA4yEy5jdXN0b21lcnMuVGVhbVJvbGUSLQoJam9pbmVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJACgpQZXJtaXNzaW9uEhkKCHJlc291cmNlGAEgASgJQge6SARyAhABEhcKBmFjdGlvbhgCIAEoCUIHukgEcgIQASKWAQoEUm9sZRIUCgJpZBgBIAEoCUIIukgFcgOwAQESFQoEbmFtZRgCIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgDIAEoCRIqCgtwZXJtaXNzaW9ucxgEIAMoCzIVLmN1c3RvbWVycy5QZXJtaXNzaW9uEhAKCGJ1aWx0X2luGAUgASgIEg4KBm9yZ19pZBgGIAEoCSLTAQoOUm9sZUFzc2lnbm1lbnQSCgoCaWQYASABKAkSHAoKc3ViamVjdF9pZBgCIAEoCUIIukgFcgOwAQESLAoMc3ViamVjdF9raW5kGAMgASgOMhYuY3VzdG9tZXJzLlN1YmplY3RLaW5kEhkKB3JvbGVfaWQYBCABKAlCCLpIBXIDsAEBEg4KBm9yZ19pZBgFIAEoCRINCgVzY29wZRgGIAEoCRIvCgthc3NpZ25lZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAizgEKE1JlZ2lzdGVyVXNlclJlcXVlc3QSHgoNcHJpbWFyeV9lbWFpbBgBIAEoCUIHukgEcgJgARI8Cgdwcm9maWxlGAIgAygLMisuY3VzdG9tZXJzLlJlZ2lzdGVyVXNlclJlcXVlc3QuUHJvZmlsZUVudHJ5EikKCGlkZW50aXR5GAMgASgLMhcuY3VzdG9tZXJzLlVzZXJJZGVudGl0eRouCgxQcm9maWxlRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJgChRSZWdpc3RlclVzZXJSZXNwb25zZRIdCgR1c2VyGAEgASgLMg8uY3VzdG9tZXJzLlVzZXISKQoIaWRlbnRpdHkYAiABKAsyFy5jdXN0b21lcnMuVXNlcklkZW50aXR5IlkKDkdldFVzZXJSZXF1ZXN0EhgKBHV1aWQYASABKAlCCLpIBXIDsAEBSAASGAoFZW1haWwYAiABKAlCB7pIBHICYAFIAEITCgppZGVudGlmaWVyEgW6SAIIASIQCg5HZXRTZWxmUmVxdWVzdCLCAQoPR2V0U2VsZlJlc3BvbnNlEh0KBHVzZXIYASABKAsyDy5jdXN0b21lcnMuVXNlchIrCgppZGVudGl0aWVzGAIgAygLMhcuY3VzdG9tZXJzLlVzZXJJZGVudGl0eRIuCg1vcmdhbml6YXRpb25zGAMgAygLMhcuY3VzdG9tZXJzLk9yZ2FuaXphdGlvbhIzChByb2xlX2Fzc2lnbm1lbnRzGAQgAygLMhkuY3VzdG9tZXJzLlJvbGVBc3NpZ25tZW50ImsKEExpc3RVc2Vyc1JlcXVlc3QSHAoJcGFnZV9zaXplGAEgASgFQgm6SAYaBBhkIAASEgoKcGFnZV90b2tlbhgCIAEoCRIlCgZzdGF0dXMYAyABKA4yFS5jdXN0b21lcnMuVXNlclN0YXR1cyJMChFMaXN0VXNlcnNSZXNwb25zZRIeCgV1c2VycxgBIAMoCzIPLmN1c3RvbWVycy5Vc2VyEhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSJ7ChFVcGRhdGVVc2VyUmVxdWVzdBIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIdCgR1c2VyGAIgASgLMg8uY3VzdG9tZXJzLlVzZXISLwoLdXBkYXRlX21hc2sYAyABKAsyGi5nb29nbGUucHJvdG9idWYuRmllbGRNYXNrIlwKEkFkZElkZW50aXR5UmVxdWVzdBIbCgl1c2VyX3V1aWQYASABKAlCCLpIBXIDsAEBEikKCGlkZW50aXR5GAIgASgLMhcuY3VzdG9tZXJzLlVzZXJJZGVudGl0eSJrChlGaW5kVXNlckJ5SWRlbnRpdHlSZXF1ZXN0Ei0KCHByb3ZpZGVyGAEgASgJQhu6SBhyFhABGDIyEF5bYS16QS1aMC05Xy1dKyQSHwoLcHJvdmlkZXJfaWQYAiABKAlCCrpIB3IFEAEY/wEiOAoZTGlzdFVzZXJJZGVudGl0aWVzUmVxdWVzdBIbCgl1c2VyX3V1aWQYASABKAlCCLpIBXIDsAEBIkkKGkxpc3RVc2VySWRlbnRpdGllc1Jlc3BvbnNlEisKCmlkZW50aXRpZXMYASADKAsyFy5jdXN0b21lcnMuVXNlcklkZW50aXR5InIKC09yZ1NldHRpbmdzEg4KBm9yZ19pZBgBIAEoCRIQCghsb2dvX3VybBgCIAEoCRIVCg1wcmltYXJ5X2NvbG9yGAMgASgJEhUKDWN1c3RvbV9kb21haW4YBCABKAkSEwoLZmF2aWNvbl91cmwYBSABKAkiMQoVR2V0T3JnU2V0dGluZ3NSZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQEiiQEKGFVwZGF0ZU9yZ1NldHRpbmdzUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEhAKCGxvZ29fdXJsGAIgASgJEhUKDXByaW1hcnlfY29sb3IYAyABKAkSFQoNY3VzdG9tX2RvbWFpbhgEIAEoCRITCgtmYXZpY29uX3VybBgFIAEoCSJpChlDcmVhdGVPcmdhbml6YXRpb25SZXF1ZXN0EhUKBG5hbWUYASABKAlCB7pIBHICEAESNQoEc2x1ZxgCIAEoCUInukgkciIQARg/MhxeW2EtejAtOV1bYS16MC05LV0qW2EtejAtOV0kIksKGkNyZWF0ZU9yZ2FuaXphdGlvblJlc3BvbnNlEi0KDG9yZ2FuaXphdGlvbhgBIAEoCzIXLmN1c3RvbWVycy5Pcmdhbml6YXRpb24iLgoWR2V0T3JnYW5pemF0aW9uUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQEiGgoYTGlzdE9yZ2FuaXphdGlvbnNSZXF1ZXN0IksKGUxpc3RPcmdhbml6YXRpb25zUmVzcG9uc2USLgoNb3JnYW5pemF0aW9ucxgBIAMoCzIXLmN1c3RvbWVycy5Pcmdhbml6YXRpb24ibAoTQWRkT3JnTWVtYmVyUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEhkKB3VzZXJfaWQYAiABKAlCCLpIBXIDsAEBEiAKBHJvbGUYAyABKA4yEi5jdXN0b21lcnMuT3JnUm9sZSJNChZSZW1vdmVPcmdNZW1iZXJSZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQESGQoHdXNlcl9pZBgCIAEoCUIIukgFcgOwAQEiMQoVTGlzdE9yZ01lbWJlcnNSZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQEiQwoWTGlzdE9yZ01lbWJlcnNSZXNwb25zZRIpCgdtZW1iZXJzGAEgAygLMhguY3VzdG9tZXJzLk9yZ01lbWJlcnNoaXAiWQoRQ3JlYXRlVGVhbVJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIVCgRuYW1lGAIgASgJQge6SARyAhABEhMKC2Rlc2NyaXB0aW9uGAMgASgJIjMKEkNyZWF0ZVRlYW1SZXNwb25zZRIdCgR0ZWFtGAEgASgLMg8uY3VzdG9tZXJzLlRlYW0iLAoQTGlzdFRlYW1zUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBIjMKEUxpc3RUZWFtc1Jlc3BvbnNlEh4KBXRlYW1zGAEgAygLMg8uY3VzdG9tZXJzLlRlYW0ibwoUQWRkVGVhbU1lbWJlclJlcXVlc3QSGQoHdGVhbV9pZBgBIAEoCUIIukgFcgOwAQESGQoHdXNlcl9pZBgCIAEoCUIIukgFcgOwAQESIQoEcm9sZRgDIAEoDjITLmN1c3RvbWVycy5UZWFtUm9sZSJPChdSZW1vdmVUZWFtTWVtYmVyUmVxdWVzdBIZCgd0ZWFtX2lkGAEgASgJQgi6SAVyA7ABARIZCgd1c2VyX2lkGAIgASgJQgi6SAVyA7ABASIzChZMaXN0VGVhbU1lbWJlcnNSZXF1ZXN0EhkKB3RlYW1faWQYASABKAlCCLpIBXIDsAEBIkUKF0xpc3RUZWFtTWVtYmVyc1Jlc3BvbnNlEioKB21lbWJlcnMYASADKAsyGS5jdXN0b21lcnMuVGVhbU1lbWJlcnNoaXAiewoRQ3JlYXRlUm9sZVJlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgCIAEoCRIqCgtwZXJtaXNzaW9ucxgDIAMoCzIVLmN1c3RvbWVycy5QZXJtaXNzaW9uEg4KBm9yZ19pZBgEIAEoCSIzChJDcmVhdGVSb2xlUmVzcG9uc2USHQoEcm9sZRgBIAEoCzIPLmN1c3RvbWVycy5Sb2xlIiIKEExpc3RSb2xlc1JlcXVlc3QSDgoGb3JnX2lkGAEgASgJIjMKEUxpc3RSb2xlc1Jlc3BvbnNlEh4KBXJvbGVzGAEgAygLMg8uY3VzdG9tZXJzLlJvbGUiKQoRRGVsZXRlUm9sZVJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIpkBChFBc3NpZ25Sb2xlUmVxdWVzdBIcCgpzdWJqZWN0X2lkGAEgASgJQgi6SAVyA7ABARIsCgxzdWJqZWN0X2tpbmQYAiABKA4yFi5jdXN0b21lcnMuU3ViamVjdEtpbmQSGQoHcm9sZV9pZBgDIAEoCUIIukgFcgOwAQESDgoGb3JnX2lkGAQgASgJEg0KBXNjb3BlGAUgASgJIkMKEkFzc2lnblJvbGVSZXNwb25zZRItCgphc3NpZ25tZW50GAEgASgLMhkuY3VzdG9tZXJzLlJvbGVBc3NpZ25tZW50ImsKEVJldm9rZVJvbGVSZXF1ZXN0EhwKCnN1YmplY3RfaWQYASABKAlCCLpIBXIDsAEBEhkKB3JvbGVfaWQYAiABKAlCCLpIBXIDsAEBEg4KBm9yZ19pZBgDIAEoCRINCgVzY29wZRgEIAEoCSJ4ChpMaXN0Um9sZUFzc2lnbm1lbnRzUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEhIKCnN1YmplY3RfaWQYAiABKAkSLAoMc3ViamVjdF9raW5kGAMgASgOMhYuY3VzdG9tZXJzLlN1YmplY3RLaW5kIk0KG0xpc3RSb2xlQXNzaWdubWVudHNSZXNwb25zZRIuCgthc3NpZ25tZW50cxgBIAMoCzIZLmN1c3RvbWVycy5Sb2xlQXNzaWdubWVudCK3AQoWQ2hlY2tQZXJtaXNzaW9uUmVxdWVzdBIcCgpzdWJqZWN0X2lkGAEgASgJQgi6SAVyA7ABARIsCgxzdWJqZWN0X2tpbmQYAiABKA4yFi5jdXN0b21lcnMuU3ViamVjdEtpbmQSGQoIcmVzb3VyY2UYAyABKAlCB7pIBHICEAESFwoGYWN0aW9uGAQgASgJQge6SARyAhABEg4KBm9yZ19pZBgFIAEoCRINCgVzY29wZRgGIAEoCSI6ChdDaGVja1Blcm1pc3Npb25SZXNwb25zZRIPCgdhbGxvd2VkGAEgASgIEg4KBnJlYXNvbhgCIAEoCSJoChZSZXNvbHZlSWRlbnRpdHlSZXF1ZXN0Ei0KCHByb3ZpZGVyGAEgASgJQhu6SBhyFhABGDIyEF5bYS16QS1aMC05Xy1dKyQSHwoLcHJvdmlkZXJfaWQYAiABKAlCCrpIB3IFEAEY/wEigQEKF1Jlc29sdmVJZGVudGl0eVJlc3BvbnNlEg8KB3VzZXJfaWQYASABKAkSDgoGb3JnX2lkGAIgASgJEg0KBXJvbGVzGAMgAygJEg0KBWZvdW5kGAQgASgIEhAKCG9yZ19yb2xlGAUgASgJEhUKDXBsYXRmb3JtX3JvbGUYBiABKAki+AIKBkFQSUtleRIKCgJpZBgBIAEoCRIXCg9vcmdhbml6YXRpb25faWQYAiABKAkSDwoHdXNlcl9pZBgDIAEoCRIMCgRuYW1lGAQgASgJEg4KBnByZWZpeBgFIAEoCRIlCgZzY29wZXMYBiADKAsyFS5jdXN0b21lcnMuUGVybWlzc2lvbhIxCgtlbnZpcm9ubWVudBgHIAEoDjIcLmN1c3RvbWVycy5BUElLZXlFbnZpcm9ubWVudBIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpleHBpcmVzX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3VzZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnJldm9rZWRfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wItwBChNDcmVhdGVBUElLZXlSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESGAoEbmFtZRgCIAEoCUIKukgHcgUQARj/ARIlCgZzY29wZXMYAyADKAsyFS5jdXN0b21lcnMuUGVybWlzc2lvbhIxCgtlbnZpcm9ubWVudBgEIAEoDjIcLmN1c3RvbWVycy5BUElLZXlFbnZpcm9ubWVudBIuCgpleHBpcmVzX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJNChRDcmVhdGVBUElLZXlSZXNwb25zZRIeCgNrZXkYASABKAsyES5jdXN0b21lcnMuQVBJS2V5EhUKDXBsYWludGV4dF9rZXkYAiABKAkiaQoSTGlzdEFQSUtleXNSZXF1ZXN0EiEKD29yZ2FuaXphdGlvbl9pZBgBIAEoCUIIukgFcgOwAQESHAoJcGFnZV9zaXplGAIgASgFQgm6SAYaBBhkIAASEgoKcGFnZV90b2tlbhgDIAEoCSJPChNMaXN0QVBJS2V5c1Jlc3BvbnNlEh8KBGtleXMYASADKAsyES5jdXN0b21lcnMuQVBJS2V5EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCSIrChNSZXZva2VBUElLZXlSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASIyChVWYWxpZGF0ZUFQSUtleVJlcXVlc3QSGQoIa2V5X2hhc2gYASABKAlCB7pIBHICEAEiYQoWVmFsaWRhdGVBUElLZXlSZXNwb25zZRINCgV2YWxpZBgBIAEoCBIPCgd1c2VyX2lkGAIgASgJEhcKD29yZ2FuaXphdGlvbl9pZBgDIAEoCRIOCgZzY29wZXMYBCADKAkimAIKE0F1dGhlbnRpY2F0ZVJlcXVlc3QSLQoIcHJvdmlkZXIYASABKAlCG7pIGHIWEAEYMjIQXlthLXpBLVowLTlfLV0rJBIfCgtwcm92aWRlcl9pZBgCIAEoCUIKukgHcgUQARj/ARIWCg5wcm92aWRlcl9lbWFpbBgDIAEoCRIWCg5lbWFpbF92ZXJpZmllZBgEIAEoCBI8Cgdwcm9maWxlGAUgAygLMisuY3VzdG9tZXJzLkF1dGhlbnRpY2F0ZVJlcXVlc3QuUHJvZmlsZUVudHJ5EhMKC2RldmljZV9pbmZvGAYgASgJGi4KDFByb2ZpbGVFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIp8BChRBdXRoZW50aWNhdGVSZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkSFQoNcmVmcmVzaF90b2tlbhgCIAEoCRISCgpleHBpcmVzX2luGAMgASgDEh0KBHVzZXIYBCABKAsyDy5jdXN0b21lcnMuVXNlchIUCgxtZmFfcmVxdWlyZWQYBSABKAgSEQoJbWZhX3Rva2VuGAYgASgJIjUKE1JlZnJlc2hUb2tlblJlcXVlc3QSHgoNcmVmcmVzaF90b2tlbhgBIAEoCUIHukgEcgIQASJXChRSZWZyZXNoVG9rZW5SZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkSFQoNcmVmcmVzaF90b2tlbhgCIAEoCRISCgpleHBpcmVzX2luGAMgASgDIi8KDUxvZ291dFJlcXVlc3QSHgoNcmVmcmVzaF90b2tlbhgBIAEoCUIHukgEcgIQASIhCgxKV0tTUmVzcG9uc2USEQoJa2V5c19qc29uGAEgASgJIk0KEUJlZ2luT0F1dGhSZXF1ZXN0EhkKCHByb3ZpZGVyGAEgASgJQge6SARyAhABEh0KDHJlZGlyZWN0X3VyaRgCIAEoCUIHukgEcgIQASIjChJCZWdpbk9BdXRoUmVzcG9uc2USDQoFc3RhdGUYASABKAki5gIKEUF1ZGl0RXhwb3J0Q29uZmlnEgoKAmlkGAEgASgJEhgKBm9yZ19pZBgCIAEoCUIIukgFcgOwAQESFwoGYnVja2V0GAMgASgJQge6SARyAhABEg4KBnJlZ2lvbhgEIAEoCRIQCghlbmRwb2ludBgFIAEoCRIOCgZwcmVmaXgYBiABKAkSFQoNYWNjZXNzX2tleV9pZBgHIAEoCRIZChFzZWNyZXRfYWNjZXNzX2tleRgIIAEoCRIgCg9jYWRlbmNlX21pbnV0ZXMYCSABKAVCB7pIBBoCKAUSDwoHZW5hYmxlZBgKIAEoCBI0ChBsYXN0X2V4cG9ydGVkX2F0GAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBISCgpsYXN0X2Vycm9yGAwgASgJEjEKDWxhc3RfZXJyb3JfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIjcKG0dldEF1ZGl0RXhwb3J0Q29uZmlnUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBIkwKHFNhdmVBdWRpdEV4cG9ydENvbmZpZ1JlcXVlc3QSLAoGY29uZmlnGAEgASgLMhwuY3VzdG9tZXJzLkF1ZGl0RXhwb3J0Q29uZmlnIjoKHkRlbGV0ZUF1ZGl0RXhwb3J0Q29uZmlnUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBInMKDUNvbnNlbnRTdGF0dXMSGAoQYWNjZXB0ZWRfdmVyc2lvbhgBIAEoCRIvCgthY2NlcHRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoPY3VycmVudF92ZXJzaW9uGAMgASgJIhkKF0dldENvbnNlbnRTdGF0dXNSZXF1ZXN0IjAKFEFjY2VwdENvbnNlbnRSZXF1ZXN0EhgKB3ZlcnNpb24YASABKAlCB7pIBHICEAEisQIKCkF1ZGl0RXZlbnQSCgoCaWQYASABKAkSEAoIYWN0b3JfaWQYAiABKAkSEgoKYWN0b3JfdHlwZRgDIAEoCRIOCgZhY3Rpb24YBCABKAkSEAoIcmVzb3VyY2UYBSABKAkSEwoLcmVzb3VyY2VfaWQYBiABKAkSDgoGb3JnX2lkGAcgASgJEjUKCG1ldGFkYXRhGAggAygLMiMuY3VzdG9tZXJzLkF1ZGl0RXZlbnQuTWV0YWRhdGFFbnRyeRISCgppcF9hZGRyZXNzGAkgASgJEi4KCmNyZWF0ZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASLzAQoUUXVlcnlBdWRpdExvZ1JlcXVlc3QSDgoGb3JnX2lkGAEgASgJEhAKCGFjdG9yX2lkGAIgASgJEg4KBmFjdGlvbhgDIAEoCRIQCghyZXNvdXJjZRgEIAEoCRITCgtyZXNvdXJjZV9pZBgFIAEoCRIoCgRmcm9tGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASHAoJcGFnZV9zaXplGAggASgFQgm6SAYaBBhkIAASEgoKcGFnZV90b2tlbhgJIAEoCSJsChVRdWVyeUF1ZGl0TG9nUmVzcG9uc2USJQoGZXZlbnRzGAEgAygLMhUuY3VzdG9tZXJzLkF1ZGl0RXZlbnQSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgFIlkKFUV4cG9ydEF1ZGl0TG9nUmVxdWVzdBIOCgZvcmdfaWQYASABKAkSDgoGZm9ybWF0GAIgASgJEhAKCGFjdG9yX2lkGAMgASgJEg4KBmFjdGlvbhgEIAEoCSJOChZFeHBvcnRBdWRpdExvZ1Jlc3BvbnNlEgwKBGRhdGEYASABKAwSFAoMY29udGVudF90eXBlGAIgASgJEhAKCGZpbGVuYW1lGAMgASgJIuYBCgpJbnZpdGF0aW9uEgoKAmlkGAEgASgJEg4KBm9yZ19pZBgCIAEoCRISCgppbnZpdGVyX2lkGAMgASgJEg0KBWVtYWlsGAQgASgJEgwKBHJvbGUYBSABKAkSKwoGc3RhdHVzGAYgASgOMhsuY3VzdG9tZXJzLkludml0YXRpb25TdGF0dXMSLgoKZXhwaXJlc19hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiWQoXQ3JlYXRlSW52aXRhdGlvblJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIWCgVlbWFpbBgCIAEoCUIHukgEcgJgARIMCgRyb2xlGAMgASgJIlsKGENyZWF0ZUludml0YXRpb25SZXNwb25zZRIpCgppbnZpdGF0aW9uGAEgASgLMhUuY3VzdG9tZXJzLkludml0YXRpb24SFAoMaW52aXRlX3Rva2VuGAIgASgJIjEKF0FjY2VwdEludml0YXRpb25SZXF1ZXN0EhYKBXRva2VuGAEgASgJQge6SARyAhABIkkKGEFjY2VwdEludml0YXRpb25SZXNwb25zZRItCgxvcmdhbml6YXRpb24YASABKAsyFy5jdXN0b21lcnMuT3JnYW5pemF0aW9uIl8KFkxpc3RJbnZpdGF0aW9uc1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIrCgZzdGF0dXMYAiABKA4yGy5jdXN0b21lcnMuSW52aXRhdGlvblN0YXR1cyJFChdMaXN0SW52aXRhdGlvbnNSZXNwb25zZRIqCgtpbnZpdGF0aW9ucxgBIAMoCzIVLmN1c3RvbWVycy5JbnZpdGF0aW9uIi8KF1Jldm9rZUludml0YXRpb25SZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASJVChJTZWFyY2hVc2Vyc1JlcXVlc3QSDQoFcXVlcnkYASABKAkSHAoJcGFnZV9zaXplGAIgASgFQgm6SAYaBBhkIAASEgoKcGFnZV90b2tlbhgDIAEoCSJjChNTZWFyY2hVc2Vyc1Jlc3BvbnNlEh4KBXVzZXJzGAEgAygLMg8uY3VzdG9tZXJzLlVzZXISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgFIj8KElN1c3BlbmRVc2VyUmVxdWVzdBIZCgd1c2VyX2lkGAEgASgJQgi6SAVyA7ABARIOCgZyZWFzb24YAiABKAkiMQoUVW5zdXNwZW5kVXNlclJlcXVlc3QSGQoHdXNlcl9pZBgBIAEoCUIIukgFcgOwAQEiMwoWSW1wZXJzb25hdGVVc2VyUmVxdWVzdBIZCgd1c2VyX2lkGAEgASgJQgi6SAVyA7ABASJDChdJbXBlcnNvbmF0ZVVzZXJSZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEgoKZXhwaXJlc19pbhgCIAEoAyJeChlMaXN0QWN0aXZlU2Vzc2lvbnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSHAoJcGFnZV9zaXplGAIgASgFQgm6SAYaBBhkIAASEgoKcGFnZV90b2tlbhgDIAEoCSLCAgoLU2Vzc2lvbkluZm8SCgoCaWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCRISCgppcF9hZGRyZXNzGAMgASgJEjsKC2RldmljZV9pbmZvGAQgAygLMiYuY3VzdG9tZXJzLlNlc3Npb25JbmZvLkRldmljZUluZm9FbnRyeRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIyCg5sYXN0X2FjdGl2ZV9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKZXhwaXJlc19hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAaMQoPRGV2aWNlSW5mb0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiXwoaTGlzdEFjdGl2ZVNlc3Npb25zUmVzcG9uc2USKAoIc2Vzc2lvbnMYASADKAsyFi5jdXN0b21lcnMuU2Vzc2lvbkluZm8SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIjUKGUdldE9yZ0VudGl0bGVtZW50c1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABASJhChpHZXRPcmdFbnRpdGxlbWVudHNSZXNwb25zZRIRCglwbGFuX25hbWUYASABKAkSMAoMZW50aXRsZW1lbnRzGAIgAygLMhouY3VzdG9tZXJzLkVudGl0bGVtZW50SW5mbyJVCg9FbnRpdGxlbWVudEluZm8SDwoHZmVhdHVyZRgBIAEoCRINCgVsaW1pdBgCIAEoAxIMCgR1c2VkGAMgASgDEhQKDGhhc19vdmVycmlkZRgEIAEoCCJ1ChpPdmVycmlkZUVudGl0bGVtZW50UmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEhgKB2ZlYXR1cmUYAiABKAlCB7pIBHICEAESEwoLbGltaXRfdmFsdWUYAyABKAMSDgoGcmVhc29uGAQgASgJIikKG092ZXJyaWRlRW50aXRsZW1lbnRSZXNwb25zZRIKCgJpZBgBIAEoCSJyChhHcmFudFBsYXRmb3JtUm9sZVJlcXVlc3QSGQoHdXNlcl9pZBgBIAEoCUIIukgFcgOwAQESOwoNcGxhdGZvcm1fcm9sZRgCIAEoCUIkukghch9SC3N1cGVyX2FkbWluUgdzdXBwb3J0UgdiaWxsaW5nIjYKGVJldm9rZVBsYXRmb3JtUm9sZVJlcXVlc3QSGQoHdXNlcl9pZBgBIAEoCUIIukgFcgOwAQEiGwoZTGlzdFBsYXRmb3JtQWRtaW5zUmVxdWVzdCKAAQoSUGxhdGZvcm1BZG1pbkVudHJ5Eg8KB3VzZXJfaWQYASABKAkSFQoNcGxhdGZvcm1fcm9sZRgCIAEoCRISCgpncmFudGVkX2J5GAMgASgJEi4KCmdyYW50ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIksKGkxpc3RQbGF0Zm9ybUFkbWluc1Jlc3BvbnNlEi0KBmFkbWlucxgBIAMoCzIdLmN1c3RvbWVycy5QbGF0Zm9ybUFkbWluRW50cnkiGQoXTGlzdEZlYXR1cmVGbGFnc1JlcXVlc3QidwoQRmVhdHVyZUZsYWdFbnRyeRIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEg8KB2VuYWJsZWQYAyABKAgSFwoPcm9sbG91dF9wZXJjZW50GAQgASgFEhYKDnRhcmdldF9vcmdfaWRzGAUgAygJIkYKGExpc3RGZWF0dXJlRmxhZ3NSZXNwb25zZRIqCgVmbGFncxgBIAMoCzIbLmN1c3RvbWVycy5GZWF0dXJlRmxhZ0VudHJ5IogBChhVcHNlcnRGZWF0dXJlRmxhZ1JlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgCIAEoCRIPCgdlbmFibGVkGAMgASgIEhcKD3JvbGxvdXRfcGVyY2VudBgEIAEoBRIWCg50YXJnZXRfb3JnX2lkcxgFIAMoCSIpChlVcHNlcnRGZWF0dXJlRmxhZ1Jlc3BvbnNlEgwKBG5hbWUYASABKAkiwQEKE1dlYmhvb2tTdWJzY3JpcHRpb24SFAoCaWQYASABKAlCCLpIBXIDsAEBEhgKBm9yZ19pZBgCIAEoCUIIukgFcgOwAQESFQoDdXJsGAMgASgJQgi6SAVyA4gBARIOCgZldmVudHMYBCADKAkSDgoGYWN0aXZlGAUgASgIEhMKC2Rlc2NyaXB0aW9uGAYgASgJEi4KCmNyZWF0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIvQCCg9XZWJob29rRGVsaXZlcnkSFAoCaWQYASABKAlCCLpIBXIDsAEBEiEKD3N1YnNjcmlwdGlvbl9pZBgCIAEoCUIIukgFcgOwAQESEgoKZXZlbnRfdHlwZRgDIAEoCRIPCgdwYXlsb2FkGAQgASgJEjAKBnN0YXR1cxgFIAEoDjIgLmN1c3RvbWVycy5XZWJob29rRGVsaXZlcnlTdGF0dXMSEAoIYXR0ZW1wdHMYBiABKAUSEwoLaHR0cF9zdGF0dXMYByABKAUSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMZGVsaXZlcmVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCg1yZXNwb25zZV9ib2R5GAogASgJEjEKDW5leHRfcmV0cnlfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIngKIENyZWF0ZVdlYmhvb2tTdWJzY3JpcHRpb25SZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQESFQoDdXJsGAIgASgJQgi6SAVyA4gBARIOCgZldmVudHMYAyADKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiOAogRGVsZXRlV2ViaG9va1N1YnNjcmlwdGlvblJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIm0KH0xpc3RXZWJob29rU3Vic2NyaXB0aW9uc1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIcCglwYWdlX3NpemUYAiABKAVCCbpIBhoEGGQgABISCgpwYWdlX3Rva2VuGAMgASgJInIKIExpc3RXZWJob29rU3Vic2NyaXB0aW9uc1Jlc3BvbnNlEjUKDXN1YnNjcmlwdGlvbnMYASADKAsyHi5jdXN0b21lcnMuV2ViaG9va1N1YnNjcmlwdGlvbhIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkicwocTGlzdFdlYmhvb2tEZWxpdmVyaWVzUmVxdWVzdBIhCg9zdWJzY3JpcHRpb25faWQYASABKAlCCLpIBXIDsAEBEhwKCXBhZ2Vfc2l6ZRgCIAEoBUIJukgGGgQYZCAAEhIKCnBhZ2VfdG9rZW4YAyABKAkiaAodTGlzdFdlYmhvb2tEZWxpdmVyaWVzUmVzcG9uc2USLgoKZGVsaXZlcmllcxgBIAMoCzIaLmN1c3RvbWVycy5XZWJob29rRGVsaXZlcnkSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIj4KElRlc3RXZWJob29rUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESEgoKZXZlbnRfdHlwZRgCIAEoCSIxChlHZXRXZWJob29rRGVsaXZlcnlSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASI0ChxSZXBsYXlXZWJob29rRGVsaXZlcnlSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASJQChpSb3RhdGVXZWJob29rU2VjcmV0UmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESHAoUZ3JhY2VfcGVyaW9kX3NlY29uZHMYAiABKAUiaAobUm90YXRlV2ViaG9va1NlY3JldFJlc3BvbnNlEg4KBnNlY3JldBgBIAEoCRI5ChVvbGRfc2VjcmV0X2V4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIvUBCgxOb3RpZmljYXRpb24SFAoCaWQYASABKAlCCLpIBXIDsAEBEhkKB3VzZXJfaWQYAiABKAlCCLpIBXIDsAEBEhgKBm9yZ19pZBgDIAEoCUIIukgFcgOwAQESDQoFdGl0bGUYBCABKAkSDAoEYm9keRgFIAEoCRIMCgR0eXBlGAYgASgJEhIKCmFjdGlvbl91cmwYByABKAkSKwoHcmVhZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiTAoYTGlzdE5vdGlmaWNhdGlvbnNSZXF1ZXN0EhwKCXBhZ2Vfc2l6ZRgBIAEoBUIJukgGGgQYZCAAEhIKCnBhZ2VfdG9rZW4YAiABKAkiZAoZTGlzdE5vdGlmaWNhdGlvbnNSZXNwb25zZRIuCg1ub3RpZmljYXRpb25zGAEgAygLMhcuY3VzdG9tZXJzLk5vdGlmaWNhdGlvbhIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkiFwoVR2V0VW5yZWFkQ291bnRSZXF1ZXN0IicKFkdldFVucmVhZENvdW50UmVzcG9uc2USDQoFY291bnQYASABKAUiMwobTWFya05vdGlmaWNhdGlvblJlYWRSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASIhCh9NYXJrQWxsTm90aWZpY2F0aW9uc1JlYWRSZXF1ZXN0IjEKGURlbGV0ZU5vdGlmaWNhdGlvblJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIo8BCg5PbmJvYXJkaW5nU3RlcBIaCglzdGVwX25hbWUYASABKAlCB7pIBHICEAESLwoGc3RhdHVzGAIgASgOMh8uY3VzdG9tZXJzLk9uYm9hcmRpbmdTdGVwU3RhdHVzEjAKDGNvbXBsZXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiUQoST25ib2FyZGluZ1Byb2dyZXNzEigKBXN0ZXBzGAEgAygLMhkuY3VzdG9tZXJzLk9uYm9hcmRpbmdTdGVwEhEKCWNvbXBsZXRlZBgCIAEoCCIeChxHZXRPbmJvYXJkaW5nUHJvZ3Jlc3NSZXF1ZXN0IjsKHUNvbXBsZXRlT25ib2FyZGluZ1N0ZXBSZXF1ZXN0EhoKCXN0ZXBfbmFtZRgBIAEoCUIHukgEcgIQASI3ChlTa2lwT25ib2FyZGluZ1N0ZXBSZXF1ZXN0EhoKCXN0ZXBfbmFtZRgBIAEoCUIHukgEcgIQASK+AgoLR0RQUlJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBEhkKB3VzZXJfaWQYAiABKAlCCLpIBXIDsAEBEigKBHR5cGUYAyABKA4yGi5jdXN0b21lcnMuR0RQUlJlcXVlc3RUeXBlEiwKBnN0YXR1cxgEIAEoDjIcLmN1c3RvbWVycy5HRFBSUmVxdWVzdFN0YXR1cxIUCgxkb3dubG9hZF91cmwYBSABKAkSLgoKZXhwaXJlc19hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMY29tcGxldGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIaChhSZXF1ZXN0RGF0YUV4cG9ydFJlcXVlc3QiLgoWR2V0RXhwb3J0U3RhdHVzUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQEiGAoWUmVxdWVzdERlbGV0aW9uUmVxdWVzdCIwChhHZXREZWxldGlvblN0YXR1c1JlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIowCCglNRkFEZXZpY2USFAoCaWQYASABKAlCCLpIBXIDsAEBEhkKB3VzZXJfaWQYAiABKAlCCLpIBXIDsAEBEi0KC2RldmljZV90eXBlGAMgASgOMhguY3VzdG9tZXJzLk1GQURldmljZVR5cGUSDAoEbmFtZRgEIAEoCRIvCgt2ZXJpZmllZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMbGFzdF91c2VkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpjcmVhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCISChBTZXR1cFRPVFBSZXF1ZXN0IlMKEVNldHVwVE9UUFJlc3BvbnNlEg4KBnNlY3JldBgBIAEoCRIYChBwcm92aXNpb25pbmdfdXJpGAIgASgJEhQKDGJhY2t1cF9jb2RlcxgDIAMoCSI2ChFWZXJpZnlUT1RQUmVxdWVzdBIhCgRjb2RlGAEgASgJQhO6SBByDhAGGAYyCF5bMC05XSskIkkKElZlcmlmeVRPVFBSZXNwb25zZRINCgV2YWxpZBgBIAEoCBIkCgZkZXZpY2UYAiABKAsyFC5jdXN0b21lcnMuTUZBRGV2aWNlIhcKFUxpc3RNRkFEZXZpY2VzUmVxdWVzdCI/ChZMaXN0TUZBRGV2aWNlc1Jlc3BvbnNlEiUKB2RldmljZXMYASADKAsyFC5jdXN0b21lcnMuTUZBRGV2aWNlIi4KFlJldm9rZU1GQURldmljZVJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIhwKGkdlbmVyYXRlQmFja3VwQ29kZXNSZXF1ZXN0IjMKG0dlbmVyYXRlQmFja3VwQ29kZXNSZXNwb25zZRIUCgxiYWNrdXBfY29kZXMYASADKAkirQEKDE9yZ1NTT0NvbmZpZxIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEhAKCHByb3ZpZGVyGAIgASgJEhUKDWNvbm5lY3Rpb25faWQYAyABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAQgASgJEg4KBnN0YXR1cxgFIAEoCRIxCg1jb25maWd1cmVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIsChBHZXRPcmdTU09SZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQEiTgoUU3RhcnRTU09TZXR1cFJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIcCgpyZXR1cm5fdXJsGAIgASgJQgi6SAVyA4gBASIsChVTdGFydFNTT1NldHVwUmVzcG9uc2USEwoLcG9ydGFsX2xpbmsYASABKAkiLQoRRGlzYWJsZVNTT1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABASJSChhPcGVuQmlsbGluZ1BvcnRhbFJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIcCgpyZXR1cm5fdXJsGAIgASgJQgi6SAVyA4gBASIoChlPcGVuQmlsbGluZ1BvcnRhbFJlc3BvbnNlEgsKA3VybBgBIAEoCSKwAgoHSW52b2ljZRIKCgJpZBgBIAEoCRIOCgZudW1iZXIYAiABKAkSDgoGc3RhdHVzGAMgASgJEhIKCmFtb3VudF9kdWUYBCABKAMSEwoLYW1vdW50X3BhaWQYBSABKAMSEAoIY3VycmVuY3kYBiABKAkSKwoHY3JlYXRlZBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGgoSaG9zdGVkX2ludm9pY2VfdXJsGAggASgJEhMKC2ludm9pY2VfcGRmGAkgASgJEjAKDHBlcmlvZF9zdGFydBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKcGVyaW9kX2VuZBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiPgoTTGlzdEludm9pY2VzUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEg0KBWxpbWl0GAIgASgFIjwKFExpc3RJbnZvaWNlc1Jlc3BvbnNlEiQKCGludm9pY2VzGAEgAygLMhIuY3VzdG9tZXJzLkludm9pY2UirQEKEVVzZXJFbWFpbFNldHRpbmdzEhQKB3Byb2R1Y3QYASABKAhIAIgBARIWCgltYXJrZXRpbmcYAiABKAhIAYgBARIVCghzZWN1cml0eRgDIAEoCEgCiAEBEhoKDXdlZWtseV9kaWdlc3QYBCABKAhIA4gBAUIKCghfcHJvZHVjdEIMCgpfbWFya2V0aW5nQgsKCV9zZWN1cml0eUIQCg5fd2Vla2x5X2RpZ2VzdCJ0ChhVc2VyTm90aWZpY2F0aW9uU2V0dGluZ3MSEwoGaW5fYXBwGAEgASgISACIAQESEQoEcHVzaBgCIAEoCEgBiAEBEhIKBXNvdW5kGAMgASgISAKIAQFCCQoHX2luX2FwcEIHCgVfcHVzaEIICgZfc291bmQi0wIKDFVzZXJTZXR0aW5ncxISCgV0aGVtZRgBIAEoCUgAiAEBEhMKBmxvY2FsZRgCIAEoCUgBiAEBEhUKCHRpbWV6b25lGAMgASgJSAKIAQESGAoLZGF0ZV9mb3JtYXQYBCABKAlIA4gBARIYCgt0aW1lX2Zvcm1hdBgFIAEoCUgEiAEBEjAKBWVtYWlsGAYgASgLMhwuY3VzdG9tZXJzLlVzZXJFbWFpbFNldHRpbmdzSAWIAQESPwoNbm90aWZpY2F0aW9ucxgHIAEoCzIjLmN1c3RvbWVycy5Vc2VyTm90aWZpY2F0aW9uU2V0dGluZ3NIBogBAUIICgZfdGhlbWVCCQoHX2xvY2FsZUILCglfdGltZXpvbmVCDgoMX2RhdGVfZm9ybWF0Qg4KDF90aW1lX2Zvcm1hdEIICgZfZW1haWxCEAoOX25vdGlmaWNhdGlvbnMiGAoWR2V0VXNlclNldHRpbmdzUmVxdWVzdCJDChlVcGRhdGVVc2VyU2V0dGluZ3NSZXF1ZXN0EiYKBXBhdGNoGAEgASgLMhcuY3VzdG9tZXJzLlVzZXJTZXR0aW5ncyJjCgtTZXJ2aWNlSW5mbxIMCgRuYW1lGAEgASgJEg4KBm1vZHVsZRgCIAEoCRIPCgd2ZXJzaW9uGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhAKCHJlcG9fdXJsGAUgASgJIqMBCgdSUENJbmZvEg8KB3NlcnZpY2UYASABKAkSDgoGbWV0aG9kGAIgASgJEhMKC2h0dHBfbWV0aG9kGAMgASgJEhEKCWh0dHBfcGF0aBgEIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCRIOCgZzY29wZXMYBiADKAkSFQoNaGFuZGxlcl9hdXRoehgHIAEoCRITCgtlbWl0c19hdWRpdBgIIAEoCCJfCg5QZXJtaXNzaW9uSW5mbxIQCghyZXNvdXJjZRgBIAEoCRIOCgZhY3Rpb24YAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFgoOYnVpbHRfaW5fcm9sZXMYBCADKAkibgoNUkxTUG9saWN5SW5mbxINCgV0YWJsZRgBIAEoCRIUCgxwb2xpY3lfc2hhcGUYAiABKAkSEwoLZmFpbF9jbG9zZWQYAyABKAgSFAoMc2NvcGVfY29sdW1uGAQgASgJEg0KBW5vdGVzGAUgASgJIi8KCVNjb3BlSW5mbxINCgVzY29wZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCSLhAQoTU2VydmljZUNhcGFiaWxpdGllcxIkCgRpbmZvGAEgASgLMhYuY3VzdG9tZXJzLlNlcnZpY2VJbmZvEiAKBHJwY3MYAiADKAsyEi5jdXN0b21lcnMuUlBDSW5mbxIuCgtwZXJtaXNzaW9ucxgDIAMoCzIZLmN1c3RvbWVycy5QZXJtaXNzaW9uSW5mbxIsCgpybHNfdGFibGVzGAQgAygLMhguY3VzdG9tZXJzLlJMU1BvbGljeUluZm8SJAoGc2NvcGVzGAUgAygLMhQuY3VzdG9tZXJzLlNjb3BlSW5mbyIXChVHZXRTZXJ2aWNlSW5mb1JlcXVlc3QiTgoWR2V0U2VydmljZUluZm9SZXNwb25zZRI0CgxjYXBhYmlsaXRpZXMYASABKAsyHi5jdXN0b21lcnMuU2VydmljZUNhcGFiaWxpdGllcyqPAQoKVXNlclN0YXR1cxIbChdVU0VSX1NUQVRVU19VTlNQRUNJRklFRBAAEhYKElVTRVJfU1RBVFVTX0FDVElWRRABEhgKFFVTRVJfU1RBVFVTX0lOQUNUSVZFEAISGQoVVVNFUl9TVEFUVVNfU1VTUEVOREVEEAMSFwoTVVNFUl9TVEFUVVNfREVMRVRFRBAEKmAKB09yZ1JvbGUSGAoUT1JHX1JPTEVfVU5TUEVDSUZJRUQQABITCg9PUkdfUk9MRV9NRU1CRVIQARISCg5PUkdfUk9MRV9BRE1JThACEhIKDk9SR19ST0xFX09XTkVSEAMqZQoIVGVhbVJvbGUSGQoVVEVBTV9ST0xFX1VOU1BFQ0lGSUVEEAASFAoQVEVBTV9ST0xFX01FTUJFUhABEhMKD1RFQU1fUk9MRV9BRE1JThACEhMKD1RFQU1fUk9MRV9PV05FUhADKlkKC1N1YmplY3RLaW5kEhwKGFNVQkpFQ1RfS0lORF9VTlNQRUNJRklFRBAAEhUKEVNVQkpFQ1RfS0lORF9VU0VSEAESFQoRU1VCSkVDVF9LSU5EX1RFQU0QAip0ChFBUElLZXlFbnZpcm9ubWVudBIjCh9BUElfS0VZX0VOVklST05NRU5UX1VOU1BFQ0lGSUVEEAASHAoYQVBJX0tFWV9FTlZJUk9OTUVOVF9MSVZFEAESHAoYQVBJX0tFWV9FTlZJUk9OTUVOVF9URVNUEAIqsgEKEEludml0YXRpb25TdGF0dXMSIQodSU5WSVRBVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlJTlZJVEFUSU9OX1NUQVRVU19QRU5ESU5HEAESHgoaSU5WSVRBVElPTl9TVEFUVVNfQUNDRVBURUQQAhIdChlJTlZJVEFUSU9OX1NUQVRVU19SRVZPS0VEEAMSHQoZSU5WSVRBVElPTl9TVEFUVVNfRVhQSVJFRBAEKq4BChVXZWJob29rRGVsaXZlcnlTdGF0dXMSJwojV0VCSE9PS19ERUxJVkVSWV9TVEFUVVNfVU5TUEVDSUZJRUQQABIjCh9XRUJIT09LX0RFTElWRVJZX1NUQVRVU19QRU5ESU5HEAESIwofV0VCSE9PS19ERUxJVkVSWV9TVEFUVVNfU1VDQ0VTUxACEiIKHldFQkhPT0tfREVMSVZFUllfU1RBVFVTX0ZBSUxFRBADKqwBChRPbmJvYXJkaW5nU3RlcFN0YXR1cxImCiJPTkJPQVJESU5HX1NURVBfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIgoeT05CT0FSRElOR19TVEVQX1NUQVRVU19QRU5ESU5HEAESJAogT05CT0FSRElOR19TVEVQX1NUQVRVU19DT01QTEVURUQQAhIiCh5PTkJPQVJESU5HX1NURVBfU1RBVFVTX1NLSVBQRUQQAypyCg9HRFBSUmVxdWVzdFR5cGUSIQodR0RQUl9SRVFVRVNUX1RZUEVfVU5TUEVDSUZJRUQQABIcChhHRFBSX1JFUVVFU1RfVFlQRV9FWFBPUlQQARIeChpHRFBSX1JFUVVFU1RfVFlQRV9ERUxFVElPThACKsABChFHRFBSUmVxdWVzdFN0YXR1cxIjCh9HRFBSX1JFUVVFU1RfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHwobR0RQUl9SRVFVRVNUX1NUQVRVU19QRU5ESU5HEAESIgoeR0RQUl9SRVFVRVNUX1NUQVRVU19QUk9DRVNTSU5HEAISIQodR0RQUl9SRVFVRVNUX1NUQVRVU19DT01QTEVURUQQAxIeChpHRFBSX1JFUVVFU1RfU1RBVFVTX0ZBSUxFRBAEKmgKDU1GQURldmljZVR5cGUSHwobTUZBX0RFVklDRV9UWVBFX1VOU1BFQ0lGSUVEEAASGAoUTUZBX0RFVklDRV9UWVBFX1RPVFAQARIcChhNRkFfREVWSUNFX1RZUEVfV0VCQVVUSE4QAjKWCAoLVXNlclNlcnZpY2USVQoHVmVyc2lvbhIZLmN1c3RvbWVycy5WZXJzaW9uUmVxdWVzdBoaLmN1c3RvbWVycy5WZXJzaW9uUmVzcG9uc2UiE4LT5JMCDRILL3YxL3ZlcnNpb24SWAoHR2V0U2VsZhIZLmN1c3RvbWVycy5HZXRTZWxmUmVxdWVzdBoaLmN1c3RvbWVycy5HZXRTZWxmUmVzcG9uc2UiFoLT5JMCEBIOL3YxL3VzZXJzL3NlbGYSZQoMUmVnaXN0ZXJVc2VyEh4uY3VzdG9tZXJzLlJlZ2lzdGVyVXNlclJlcXVlc3QaHy5jdXN0b21lcnMuUmVnaXN0ZXJVc2VyUmVzcG9uc2UiFILT5JMCDjoBKiIJL3YxL3VzZXJzEmQKB0dldFVzZXISGS5jdXN0b21lcnMuR2V0VXNlclJlcXVlc3QaDy5jdXN0b21lcnMuVXNlciItgtPkkwInWhMSES92MS91c2VyczpieUVtYWlsEhAvdjEvdXNlcnMve3V1aWR9ElkKCUxpc3RVc2VycxIbLmN1c3RvbWVycy5MaXN0VXNlcnNSZXF1ZXN0GhwuY3VzdG9tZXJzLkxpc3RVc2Vyc1Jlc3BvbnNlIhGC0+STAgsSCS92MS91c2VycxJbCgpVcGRhdGVVc2VyEhwuY3VzdG9tZXJzLlVwZGF0ZVVzZXJSZXF1ZXN0Gg8uY3VzdG9tZXJzLlVzZXIiHoLT5JMCGDoEdXNlcjIQL3YxL3VzZXJzL3t1dWlkfRJZCgpEZWxldGVVc2VyEhkuY3VzdG9tZXJzLkdldFVzZXJSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhiC0+STAhIqEC92MS91c2Vycy97dXVpZH0SeQoLQWRkSWRlbnRpdHkSHS5jdXN0b21lcnMuQWRkSWRlbnRpdHlSZXF1ZXN0GhcuY3VzdG9tZXJzLlVzZXJJZGVudGl0eSIygtPkkwIsOghpZGVudGl0eSIgL3YxL3VzZXJzL3t1c2VyX3V1aWR9L2lkZW50aXRpZXMSbQoSRmluZFVzZXJCeUlkZW50aXR5EiQuY3VzdG9tZXJzLkZpbmRVc2VyQnlJZGVudGl0eVJlcXVlc3QaDy5jdXN0b21lcnMuVXNlciIggtPkkwIaEhgvdjEvdXNlcnM6ZmluZEJ5SWRlbnRpdHkSiwEKEkxpc3RVc2VySWRlbnRpdGllcxIkLmN1c3RvbWVycy5MaXN0VXNlcklkZW50aXRpZXNSZXF1ZXN0GiUuY3VzdG9tZXJzLkxpc3RVc2VySWRlbnRpdGllc1Jlc3BvbnNlIiiC0+STAiISIC92MS91c2Vycy97dXNlcl91dWlkfS9pZGVudGl0aWVzMvEHChNPcmdhbml6YXRpb25TZXJ2aWNlEn8KEkNyZWF0ZU9yZ2FuaXphdGlvbhIkLmN1c3RvbWVycy5DcmVhdGVPcmdhbml6YXRpb25SZXF1ZXN0GiUuY3VzdG9tZXJzLkNyZWF0ZU9yZ2FuaXphdGlvblJlc3BvbnNlIhyC0+STAhY6ASoiES92MS9vcmdhbml6YXRpb25zEm0KD0dldE9yZ2FuaXphdGlvbhIhLmN1c3RvbWVycy5HZXRPcmdhbml6YXRpb25SZXF1ZXN0GhcuY3VzdG9tZXJzLk9yZ2FuaXphdGlvbiIegtPkkwIYEhYvdjEvb3JnYW5pemF0aW9ucy97aWR9EnkKEUxpc3RPcmdhbml6YXRpb25zEiMuY3VzdG9tZXJzLkxpc3RPcmdhbml6YXRpb25zUmVxdWVzdBokLmN1c3RvbWVycy5MaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlIhmC0+STAhMSES92MS9vcmdhbml6YXRpb25zEnIKCUFkZE1lbWJlchIeLmN1c3RvbWVycy5BZGRPcmdNZW1iZXJSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ii2C0+STAic6ASoiIi92MS9vcmdhbml6YXRpb25zL3tvcmdfaWR9L21lbWJlcnMSfwoMUmVtb3ZlTWVtYmVyEiEuY3VzdG9tZXJzLlJlbW92ZU9yZ01lbWJlclJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiNILT5JMCLiosL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vbWVtYmVycy97dXNlcl9pZH0SfgoLTGlzdE1lbWJlcnMSIC5jdXN0b21lcnMuTGlzdE9yZ01lbWJlcnNSZXF1ZXN0GiEuY3VzdG9tZXJzLkxpc3RPcmdNZW1iZXJzUmVzcG9uc2UiKoLT5JMCJBIiL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vbWVtYmVycxJ3Cg5HZXRPcmdTZXR0aW5ncxIgLmN1c3RvbWVycy5HZXRPcmdTZXR0aW5nc1JlcXVlc3QaFi5jdXN0b21lcnMuT3JnU2V0dGluZ3MiK4LT5JMCJRIjL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vc2V0dGluZ3MSgAEKEVVwZGF0ZU9yZ1NldHRpbmdzEiMuY3VzdG9tZXJzLlVwZGF0ZU9yZ1NldHRpbmdzUmVxdWVzdBoWLmN1c3RvbWVycy5PcmdTZXR0aW5ncyIugtPkkwIoOgEqGiMvdjEvb3JnYW5pemF0aW9ucy97b3JnX2lkfS9zZXR0aW5nczLbBAoLVGVhbVNlcnZpY2USdgoKQ3JlYXRlVGVhbRIcLmN1c3RvbWVycy5DcmVhdGVUZWFtUmVxdWVzdBodLmN1c3RvbWVycy5DcmVhdGVUZWFtUmVzcG9uc2UiK4LT5JMCJToBKiIgL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vdGVhbXMScAoJTGlzdFRlYW1zEhsuY3VzdG9tZXJzLkxpc3RUZWFtc1JlcXVlc3QaHC5jdXN0b21lcnMuTGlzdFRlYW1zUmVzcG9uc2UiKILT5JMCIhIgL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vdGVhbXMSbAoJQWRkTWVtYmVyEh8uY3VzdG9tZXJzLkFkZFRlYW1NZW1iZXJSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiaC0+STAiA6ASoiGy92MS90ZWFtcy97dGVhbV9pZH0vbWVtYmVycxJ5CgxSZW1vdmVNZW1iZXISIi5jdXN0b21lcnMuUmVtb3ZlVGVhbU1lbWJlclJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiLYLT5JMCJyolL3YxL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzL3t1c2VyX2lkfRJ5CgtMaXN0TWVtYmVycxIhLmN1c3RvbWVycy5MaXN0VGVhbU1lbWJlcnNSZXF1ZXN0GiIuY3VzdG9tZXJzLkxpc3RUZWFtTWVtYmVyc1Jlc3BvbnNlIiOC0+STAh0SGy92MS90ZWFtcy97dGVhbV9pZH0vbWVtYmVyczL6BQoRUGVybWlzc2lvblNlcnZpY2USXwoKQ3JlYXRlUm9sZRIcLmN1c3RvbWVycy5DcmVhdGVSb2xlUmVxdWVzdBodLmN1c3RvbWVycy5DcmVhdGVSb2xlUmVzcG9uc2UiFILT5JMCDjoBKiIJL3YxL3JvbGVzElkKCUxpc3RSb2xlcxIbLmN1c3RvbWVycy5MaXN0Um9sZXNSZXF1ZXN0GhwuY3VzdG9tZXJzLkxpc3RSb2xlc1Jlc3BvbnNlIhGC0+STAgsSCS92MS9yb2xlcxJaCgpEZWxldGVSb2xlEhwuY3VzdG9tZXJzLkRlbGV0ZVJvbGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhaC0+STAhAqDi92MS9yb2xlcy97aWR9EmoKCkFzc2lnblJvbGUSHC5jdXN0b21lcnMuQXNzaWduUm9sZVJlcXVlc3QaHS5jdXN0b21lcnMuQXNzaWduUm9sZVJlc3BvbnNlIh+C0+STAhk6ASoiFC92MS9yb2xlLWFzc2lnbm1lbnRzEmAKClJldm9rZVJvbGUSHC5jdXN0b21lcnMuUmV2b2tlUm9sZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHILT5JMCFioUL3YxL3JvbGUtYXNzaWdubWVudHMSggEKE0xpc3RSb2xlQXNzaWdubWVudHMSJS5jdXN0b21lcnMuTGlzdFJvbGVBc3NpZ25tZW50c1JlcXVlc3QaJi5jdXN0b21lcnMuTGlzdFJvbGVBc3NpZ25tZW50c1Jlc3BvbnNlIhyC0+STAhYSFC92MS9yb2xlLWFzc2lnbm1lbnRzEnoKD0NoZWNrUGVybWlzc2lvbhIhLmN1c3RvbWVycy5DaGVja1Blcm1pc3Npb25SZXF1ZXN0GiIuY3VzdG9tZXJzLkNoZWNrUGVybWlzc2lvblJlc3BvbnNlIiCC0+STAho6ASoiFS92MS9wZXJtaXNzaW9uczpjaGVjazKMAQoPSWRlbnRpdHlTZXJ2aWNlEnkKD1Jlc29sdmVJZGVudGl0eRIhLmN1c3RvbWVycy5SZXNvbHZlSWRlbnRpdHlSZXF1ZXN0GiIuY3VzdG9tZXJzLlJlc29sdmVJZGVudGl0eVJlc3BvbnNlIh+C0+STAhk6ASoiFC92MS9pZGVudGl0eTpyZXNvbHZlMpcDCg1BUElLZXlTZXJ2aWNlEmgKDENyZWF0ZUFQSUtleRIeLmN1c3RvbWVycy5DcmVhdGVBUElLZXlSZXF1ZXN0Gh8uY3VzdG9tZXJzLkNyZWF0ZUFQSUtleVJlc3BvbnNlIheC0+STAhE6ASoiDC92MS9hcGkta2V5cxJiCgtMaXN0QVBJS2V5cxIdLmN1c3RvbWVycy5MaXN0QVBJS2V5c1JlcXVlc3QaHi5jdXN0b21lcnMuTGlzdEFQSUtleXNSZXNwb25zZSIUgtPkkwIOEgwvdjEvYXBpLWtleXMSYQoMUmV2b2tlQVBJS2V5Eh4uY3VzdG9tZXJzLlJldm9rZUFQSUtleVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiGYLT5JMCEyoRL3YxL2FwaS1rZXlzL3tpZH0SVQoOVmFsaWRhdGVBUElLZXkSIC5jdXN0b21lcnMuVmFsaWRhdGVBUElLZXlSZXF1ZXN0GiEuY3VzdG9tZXJzLlZhbGlkYXRlQVBJS2V5UmVzcG9uc2Uy8gIKEkF1ZGl0RXhwb3J0U2VydmljZRJ0CglHZXRDb25maWcSJi5jdXN0b21lcnMuR2V0QXVkaXRFeHBvcnRDb25maWdSZXF1ZXN0GhwuY3VzdG9tZXJzLkF1ZGl0RXhwb3J0Q29uZmlnIiGC0+STAhsSGS92MS9hdWRpdC1leHBvcnQve29yZ19pZH0ScAoKU2F2ZUNvbmZpZxInLmN1c3RvbWVycy5TYXZlQXVkaXRFeHBvcnRDb25maWdSZXF1ZXN0GhwuY3VzdG9tZXJzLkF1ZGl0RXhwb3J0Q29uZmlnIhuC0+STAhU6ASoiEC92MS9hdWRpdC1leHBvcnQSdAoMRGVsZXRlQ29uZmlnEikuY3VzdG9tZXJzLkRlbGV0ZUF1ZGl0RXhwb3J0Q29uZmlnUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIhgtPkkwIbKhkvdjEvYXVkaXQtZXhwb3J0L3tvcmdfaWR9MtsBCg5Db25zZW50U2VydmljZRJlCglHZXRTdGF0dXMSIi5jdXN0b21lcnMuR2V0Q29uc2VudFN0YXR1c1JlcXVlc3QaGC5jdXN0b21lcnMuQ29uc2VudFN0YXR1cyIagtPkkwIUEhIvdjEvY29uc2VudC9zdGF0dXMSYgoGQWNjZXB0Eh8uY3VzdG9tZXJzLkFjY2VwdENvbnNlbnRSZXF1ZXN0GhguY3VzdG9tZXJzLkNvbnNlbnRTdGF0dXMiHYLT5JMCFzoBKiISL3YxL2NvbnNlbnQvYWNjZXB0MpYECgtBdXRoU2VydmljZRJqCgpCZWdpbk9BdXRoEhwuY3VzdG9tZXJzLkJlZ2luT0F1dGhSZXF1ZXN0Gh0uY3VzdG9tZXJzLkJlZ2luT0F1dGhSZXNwb25zZSIfgtPkkwIZOgEqIhQvdjEvYXV0aC9vYXV0aC9iZWdpbhJxCgxBdXRoZW50aWNhdGUSHi5jdXN0b21lcnMuQXV0aGVudGljYXRlUmVxdWVzdBofLmN1c3RvbWVycy5BdXRoZW50aWNhdGVSZXNwb25zZSIggtPkkwIaOgEqIhUvdjEvYXV0aC9hdXRoZW50aWNhdGUSbAoMUmVmcmVzaFRva2VuEh4uY3VzdG9tZXJzLlJlZnJlc2hUb2tlblJlcXVlc3QaHy5jdXN0b21lcnMuUmVmcmVzaFRva2VuUmVzcG9uc2UiG4LT5JMCFToBKiIQL3YxL2F1dGgvcmVmcmVzaBJWCgZMb2dvdXQSGC5jdXN0b21lcnMuTG9nb3V0UmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIagtPkkwIUOgEqIg8vdjEvYXV0aC9sb2dvdXQSYgoHR2V0SldLUxIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRoXLmN1c3RvbWVycy5KV0tTUmVzcG9uc2UiJoLT5JMCIBIeL3YxL2F1dGgvLndlbGwta25vd24vandrcy5qc29uMvEBCgxBdWRpdFNlcnZpY2USaQoNUXVlcnlBdWRpdExvZxIfLmN1c3RvbWVycy5RdWVyeUF1ZGl0TG9nUmVxdWVzdBogLmN1c3RvbWVycy5RdWVyeUF1ZGl0TG9nUmVzcG9uc2UiFYLT5JMCDxINL3YxL2F1ZGl0LWxvZxJ2Cg5FeHBvcnRBdWRpdExvZxIgLmN1c3RvbWVycy5FeHBvcnRBdWRpdExvZ1JlcXVlc3QaIS5jdXN0b21lcnMuRXhwb3J0QXVkaXRMb2dSZXNwb25zZSIfgtPkkwIZOgEqIhQvdjEvYXVkaXQtbG9nOmV4cG9ydDLGDAoUUGxhdGZvcm1BZG1pblNlcnZpY2USaAoLU2VhcmNoVXNlcnMSHS5jdXN0b21lcnMuU2VhcmNoVXNlcnNSZXF1ZXN0Gh4uY3VzdG9tZXJzLlNlYXJjaFVzZXJzUmVzcG9uc2UiGoLT5JMCFBISL3YxL3BsYXRmb3JtL3VzZXJzEnUKC1N1c3BlbmRVc2VyEh0uY3VzdG9tZXJzLlN1c3BlbmRVc2VyUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIvgtPkkwIpOgEqIiQvdjEvcGxhdGZvcm0vdXNlcnMve3VzZXJfaWR9OnN1c3BlbmQSewoNVW5zdXNwZW5kVXNlchIfLmN1c3RvbWVycy5VbnN1c3BlbmRVc2VyUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIxgtPkkwIrOgEqIiYvdjEvcGxhdGZvcm0vdXNlcnMve3VzZXJfaWR9OnVuc3VzcGVuZBKNAQoPSW1wZXJzb25hdGVVc2VyEiEuY3VzdG9tZXJzLkltcGVyc29uYXRlVXNlclJlcXVlc3QaIi5jdXN0b21lcnMuSW1wZXJzb25hdGVVc2VyUmVzcG9uc2UiM4LT5JMCLToBKiIoL3YxL3BsYXRmb3JtL3VzZXJzL3t1c2VyX2lkfTppbXBlcnNvbmF0ZRKAAQoSTGlzdEFjdGl2ZVNlc3Npb25zEiQuY3VzdG9tZXJzLkxpc3RBY3RpdmVTZXNzaW9uc1JlcXVlc3QaJS5jdXN0b21lcnMuTGlzdEFjdGl2ZVNlc3Npb25zUmVzcG9uc2UiHYLT5JMCFxIVL3YxL3BsYXRmb3JtL3Nlc3Npb25zEpsBChJHZXRPcmdFbnRpdGxlbWVudHMSJC5jdXN0b21lcnMuR2V0T3JnRW50aXRsZW1lbnRzUmVxdWVzdBolLmN1c3RvbWVycy5HZXRPcmdFbnRpdGxlbWVudHNSZXNwb25zZSI4gtPkkwIyEjAvdjEvcGxhdGZvcm0vb3JnYW5pemF0aW9ucy97b3JnX2lkfS9lbnRpdGxlbWVudHMSoQEKE092ZXJyaWRlRW50aXRsZW1lbnQSJS5jdXN0b21lcnMuT3ZlcnJpZGVFbnRpdGxlbWVudFJlcXVlc3QaJi5jdXN0b21lcnMuT3ZlcnJpZGVFbnRpdGxlbWVudFJlc3BvbnNlIjuC0+STAjU6ASoiMC92MS9wbGF0Zm9ybS9vcmdhbml6YXRpb25zL3tvcmdfaWR9L2VudGl0bGVtZW50cxJwChFHcmFudFBsYXRmb3JtUm9sZRIjLmN1c3RvbWVycy5HcmFudFBsYXRmb3JtUm9sZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHoLT5JMCGDoBKiITL3YxL3BsYXRmb3JtL2FkbWlucxJ5ChJSZXZva2VQbGF0Zm9ybVJvbGUSJC5jdXN0b21lcnMuUmV2b2tlUGxhdGZvcm1Sb2xlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIlgtPkkwIfKh0vdjEvcGxhdGZvcm0vYWRtaW5zL3t1c2VyX2lkfRJ+ChJMaXN0UGxhdGZvcm1BZG1pbnMSJC5jdXN0b21lcnMuTGlzdFBsYXRmb3JtQWRtaW5zUmVxdWVzdBolLmN1c3RvbWVycy5MaXN0UGxhdGZvcm1BZG1pbnNSZXNwb25zZSIbgtPkkwIVEhMvdjEvcGxhdGZvcm0vYWRtaW5zEn8KEExpc3RGZWF0dXJlRmxhZ3MSIi5jdXN0b21lcnMuTGlzdEZlYXR1cmVGbGFnc1JlcXVlc3QaIy5jdXN0b21lcnMuTGlzdEZlYXR1cmVGbGFnc1Jlc3BvbnNlIiKC0+STAhwSGi92MS9wbGF0Zm9ybS9mZWF0dXJlLWZsYWdzEowBChFVcHNlcnRGZWF0dXJlRmxhZxIjLmN1c3RvbWVycy5VcHNlcnRGZWF0dXJlRmxhZ1JlcXVlc3QaJC5jdXN0b21lcnMuVXBzZXJ0RmVhdHVyZUZsYWdSZXNwb25zZSIsgtPkkwImOgEqGiEvdjEvcGxhdGZvcm0vZmVhdHVyZS1mbGFncy97bmFtZX0y7QMKEUludml0YXRpb25TZXJ2aWNlEncKEENyZWF0ZUludml0YXRpb24SIi5jdXN0b21lcnMuQ3JlYXRlSW52aXRhdGlvblJlcXVlc3QaIy5jdXN0b21lcnMuQ3JlYXRlSW52aXRhdGlvblJlc3BvbnNlIhqC0+STAhQ6ASoiDy92MS9pbnZpdGF0aW9ucxJ+ChBBY2NlcHRJbnZpdGF0aW9uEiIuY3VzdG9tZXJzLkFjY2VwdEludml0YXRpb25SZXF1ZXN0GiMuY3VzdG9tZXJzLkFjY2VwdEludml0YXRpb25SZXNwb25zZSIhgtPkkwIbOgEqIhYvdjEvaW52aXRhdGlvbnM6YWNjZXB0EnEKD0xpc3RJbnZpdGF0aW9ucxIhLmN1c3RvbWVycy5MaXN0SW52aXRhdGlvbnNSZXF1ZXN0GiIuY3VzdG9tZXJzLkxpc3RJbnZpdGF0aW9uc1Jlc3BvbnNlIheC0+STAhESDy92MS9pbnZpdGF0aW9ucxJsChBSZXZva2VJbnZpdGF0aW9uEiIuY3VzdG9tZXJzLlJldm9rZUludml0YXRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhyC0+STAhYqFC92MS9pbnZpdGF0aW9ucy97aWR9MpcICg5XZWJob29rU2VydmljZRJ6ChJDcmVhdGVTdWJzY3JpcHRpb24SKy5jdXN0b21lcnMuQ3JlYXRlV2ViaG9va1N1YnNjcmlwdGlvblJlcXVlc3QaHi5jdXN0b21lcnMuV2ViaG9va1N1YnNjcmlwdGlvbiIXgtPkkwIROgEqIgwvdjEvd2ViaG9va3MSdAoSRGVsZXRlU3Vic2NyaXB0aW9uEisuY3VzdG9tZXJzLkRlbGV0ZVdlYmhvb2tTdWJzY3JpcHRpb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhmC0+STAhMqES92MS93ZWJob29rcy97aWR9EoIBChFMaXN0U3Vic2NyaXB0aW9ucxIqLmN1c3RvbWVycy5MaXN0V2ViaG9va1N1YnNjcmlwdGlvbnNSZXF1ZXN0GisuY3VzdG9tZXJzLkxpc3RXZWJob29rU3Vic2NyaXB0aW9uc1Jlc3BvbnNlIhSC0+STAg4SDC92MS93ZWJob29rcxKWAQoOTGlzdERlbGl2ZXJpZXMSJy5jdXN0b21lcnMuTGlzdFdlYmhvb2tEZWxpdmVyaWVzUmVxdWVzdBooLmN1c3RvbWVycy5MaXN0V2ViaG9va0RlbGl2ZXJpZXNSZXNwb25zZSIxgtPkkwIrEikvdjEvd2ViaG9va3Mve3N1YnNjcmlwdGlvbl9pZH0vZGVsaXZlcmllcxJ1CgtHZXREZWxpdmVyeRIkLmN1c3RvbWVycy5HZXRXZWJob29rRGVsaXZlcnlSZXF1ZXN0GhouY3VzdG9tZXJzLldlYmhvb2tEZWxpdmVyeSIkgtPkkwIeEhwvdjEvd2ViaG9va3MvZGVsaXZlcmllcy97aWR9EoUBCg5SZXBsYXlEZWxpdmVyeRInLmN1c3RvbWVycy5SZXBsYXlXZWJob29rRGVsaXZlcnlSZXF1ZXN0GhouY3VzdG9tZXJzLldlYmhvb2tEZWxpdmVyeSIugtPkkwIoOgEqIiMvdjEvd2ViaG9va3MvZGVsaXZlcmllcy97aWR9OnJlcGxheRJrCgtUZXN0V2ViaG9vaxIdLmN1c3RvbWVycy5UZXN0V2ViaG9va1JlcXVlc3QaGi5jdXN0b21lcnMuV2ViaG9va0RlbGl2ZXJ5IiGC0+STAhs6ASoiFi92MS93ZWJob29rcy97aWR9OnRlc3QSiAEKDFJvdGF0ZVNlY3JldBIlLmN1c3RvbWVycy5Sb3RhdGVXZWJob29rU2VjcmV0UmVxdWVzdBomLmN1c3RvbWVycy5Sb3RhdGVXZWJob29rU2VjcmV0UmVzcG9uc2UiKYLT5JMCIzoBKiIeL3YxL3dlYmhvb2tzL3tpZH06cm90YXRlU2VjcmV0MvEEChNOb3RpZmljYXRpb25TZXJ2aWNlEnkKEUxpc3ROb3RpZmljYXRpb25zEiMuY3VzdG9tZXJzLkxpc3ROb3RpZmljYXRpb25zUmVxdWVzdBokLmN1c3RvbWVycy5MaXN0Tm90aWZpY2F0aW9uc1Jlc3BvbnNlIhmC0+STAhMSES92MS9ub3RpZmljYXRpb25zEn0KDkdldFVucmVhZENvdW50EiAuY3VzdG9tZXJzLkdldFVucmVhZENvdW50UmVxdWVzdBohLmN1c3RvbWVycy5HZXRVbnJlYWRDb3VudFJlc3BvbnNlIiaC0+STAiASHi92MS9ub3RpZmljYXRpb25zL3VucmVhZC1jb3VudBJyCghNYXJrUmVhZBImLmN1c3RvbWVycy5NYXJrTm90aWZpY2F0aW9uUmVhZFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJoLT5JMCIDoBKiIbL3YxL25vdGlmaWNhdGlvbnMve2lkfTpyZWFkEngKC01hcmtBbGxSZWFkEiouY3VzdG9tZXJzLk1hcmtBbGxOb3RpZmljYXRpb25zUmVhZFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiJYLT5JMCHzoBKiIaL3YxL25vdGlmaWNhdGlvbnM6cmVhZC1hbGwScgoSRGVsZXRlTm90aWZpY2F0aW9uEiQuY3VzdG9tZXJzLkRlbGV0ZU5vdGlmaWNhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHoLT5JMCGCoWL3YxL25vdGlmaWNhdGlvbnMve2lkfTKJAwoRT25ib2FyZGluZ1NlcnZpY2USbQoLR2V0UHJvZ3Jlc3MSJy5jdXN0b21lcnMuR2V0T25ib2FyZGluZ1Byb2dyZXNzUmVxdWVzdBodLmN1c3RvbWVycy5PbmJvYXJkaW5nUHJvZ3Jlc3MiFoLT5JMCEBIOL3YxL29uYm9hcmRpbmcShwEKDENvbXBsZXRlU3RlcBIoLmN1c3RvbWVycy5Db21wbGV0ZU9uYm9hcmRpbmdTdGVwUmVxdWVzdBodLmN1c3RvbWVycy5PbmJvYXJkaW5nUHJvZ3Jlc3MiLoLT5JMCKDoBKiIjL3YxL29uYm9hcmRpbmcve3N0ZXBfbmFtZX06Y29tcGxldGUSewoIU2tpcFN0ZXASJC5jdXN0b21lcnMuU2tpcE9uYm9hcmRpbmdTdGVwUmVxdWVzdBodLmN1c3RvbWVycy5PbmJvYXJkaW5nUHJvZ3Jlc3MiKoLT5JMCJDoBKiIfL3YxL29uYm9hcmRpbmcve3N0ZXBfbmFtZX06c2tpcDK9AwoLR0RQUlNlcnZpY2USaAoNUmVxdWVzdEV4cG9ydBIjLmN1c3RvbWVycy5SZXF1ZXN0RGF0YUV4cG9ydFJlcXVlc3QaFi5jdXN0b21lcnMuR0RQUlJlcXVlc3QiGoLT5JMCFDoBKiIPL3YxL2dkcHIvZXhwb3J0EmoKD0dldEV4cG9ydFN0YXR1cxIhLmN1c3RvbWVycy5HZXRFeHBvcnRTdGF0dXNSZXF1ZXN0GhYuY3VzdG9tZXJzLkdEUFJSZXF1ZXN0IhyC0+STAhYSFC92MS9nZHByL2V4cG9ydC97aWR9EmgKD1JlcXVlc3REZWxldGlvbhIhLmN1c3RvbWVycy5SZXF1ZXN0RGVsZXRpb25SZXF1ZXN0GhYuY3VzdG9tZXJzLkdEUFJSZXF1ZXN0IhqC0+STAhQ6ASoiDy92MS9nZHByL2RlbGV0ZRJuChFHZXREZWxldGlvblN0YXR1cxIjLmN1c3RvbWVycy5HZXREZWxldGlvblN0YXR1c1JlcXVlc3QaFi5jdXN0b21lcnMuR0RQUlJlcXVlc3QiHILT5JMCFhIUL3YxL2dkcHIvZGVsZXRlL3tpZH0yswIKD1NTT0FkbWluU2VydmljZRJYCgZHZXRTU08SGy5jdXN0b21lcnMuR2V0T3JnU1NPUmVxdWVzdBoXLmN1c3RvbWVycy5PcmdTU09Db25maWciGILT5JMCEhIQL3YxL3Nzby97b3JnX2lkfRJpCgpTdGFydFNldHVwEh8uY3VzdG9tZXJzLlN0YXJ0U1NPU2V0dXBSZXF1ZXN0GiAuY3VzdG9tZXJzLlN0YXJ0U1NPU2V0dXBSZXNwb25zZSIYgtPkkwISOgEqIg0vdjEvc3NvL3NldHVwElsKB0Rpc2FibGUSHC5jdXN0b21lcnMuRGlzYWJsZVNTT1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiGoLT5JMCFDoBKiIPL3YxL3Nzby9kaXNhYmxlMogCCg5CaWxsaW5nU2VydmljZRJ+CgpPcGVuUG9ydGFsEiMuY3VzdG9tZXJzLk9wZW5CaWxsaW5nUG9ydGFsUmVxdWVzdBokLmN1c3RvbWVycy5PcGVuQmlsbGluZ1BvcnRhbFJlc3BvbnNlIiWC0+STAh86ASoiGi92MS9iaWxsaW5nL2Nvbm5lY3QvcG9ydGFsEnYKDExpc3RJbnZvaWNlcxIeLmN1c3RvbWVycy5MaXN0SW52b2ljZXNSZXF1ZXN0Gh8uY3VzdG9tZXJzLkxpc3RJbnZvaWNlc1Jlc3BvbnNlIiWC0+STAh8SHS92MS9iaWxsaW5nL2ludm9pY2VzL3tvcmdfaWR9MtoBChNVc2VyU2V0dGluZ3NTZXJ2aWNlElwKA0dldBIhLmN1c3RvbWVycy5HZXRVc2VyU2V0dGluZ3NSZXF1ZXN0GhcuY3VzdG9tZXJzLlVzZXJTZXR0aW5ncyIZgtPkkwITEhEvdjEvdXNlci9zZXR0aW5ncxJlCgZVcGRhdGUSJC5jdXN0b21lcnMuVXBkYXRlVXNlclNldHRpbmdzUmVxdWVzdBoXLmN1c3RvbWVycy5Vc2VyU2V0dGluZ3MiHILT5JMCFjoBKiIRL3YxL3VzZXIvc2V0dGluZ3MyvAQKCk1GQVNlcnZpY2USZQoJU2V0dXBUT1RQEhsuY3VzdG9tZXJzLlNldHVwVE9UUFJlcXVlc3QaHC5jdXN0b21lcnMuU2V0dXBUT1RQUmVzcG9uc2UiHYLT5JMCFzoBKiISL3YxL21mYS90b3RwL3NldHVwEmkKClZlcmlmeVRPVFASHC5jdXN0b21lcnMuVmVyaWZ5VE9UUFJlcXVlc3QaHS5jdXN0b21lcnMuVmVyaWZ5VE9UUFJlc3BvbnNlIh6C0+STAhg6ASoiEy92MS9tZmEvdG90cC92ZXJpZnkSawoLTGlzdERldmljZXMSIC5jdXN0b21lcnMuTGlzdE1GQURldmljZXNSZXF1ZXN0GiEuY3VzdG9tZXJzLkxpc3RNRkFEZXZpY2VzUmVzcG9uc2UiF4LT5JMCERIPL3YxL21mYS9kZXZpY2VzEmcKDFJldm9rZURldmljZRIhLmN1c3RvbWVycy5SZXZva2VNRkFEZXZpY2VSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhyC0+STAhYqFC92MS9tZmEvZGV2aWNlcy97aWR9EoUBChNHZW5lcmF0ZUJhY2t1cENvZGVzEiUuY3VzdG9tZXJzLkdlbmVyYXRlQmFja3VwQ29kZXNSZXF1ZXN0GiYuY3VzdG9tZXJzLkdlbmVyYXRlQmFja3VwQ29kZXNSZXNwb25zZSIfgtPkkwIZOgEqIhQvdjEvbWZhL2JhY2t1cC1jb2RlczKTAQoUSW50cm9zcGVjdGlvblNlcnZpY2USewoOR2V0U2VydmljZUluZm8SIC5jdXN0b21lcnMuR2V0U2VydmljZUluZm9SZXF1ZXN0GiEuY3VzdG9tZXJzLkdldFNlcnZpY2VJbmZvUmVzcG9uc2UiJILT5JMCHhIcL3YxLy53ZWxsLWtub3duL3NlcnZpY2UtaW5mb2IGcHJvdG8z", [file_google_api_annotations, file_google_protobuf_timestamp, file_google_protobuf_empty, file_google_protobuf_field_mask, file_buf_validate_validate]); + fileDesc("ChtzYWFzLXN0YXJ0ZXJfYXBpX2dycGMucHJvdG8SCWN1c3RvbWVycyIQCg5WZXJzaW9uUmVxdWVzdCIrCg9WZXJzaW9uUmVzcG9uc2USGAoHdmVyc2lvbhgBIAEoCUIHukgEcgIQASLsAgoEVXNlchIWCgR1dWlkGAEgASgJQgi6SAVyA7ABARIeCg1wcmltYXJ5X2VtYWlsGAIgASgJQge6SARyAmABEi4KCmNyZWF0ZWRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCmxhc3RfbG9naW4YBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiUKBnN0YXR1cxgGIAEoDjIVLmN1c3RvbWVycy5Vc2VyU3RhdHVzEi0KB3Byb2ZpbGUYByADKAsyHC5jdXN0b21lcnMuVXNlci5Qcm9maWxlRW50cnkSFgoOZW1haWxfdmVyaWZpZWQYCCABKAgaLgoMUHJvZmlsZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEijgMKDFVzZXJJZGVudGl0eRIMCgR1dWlkGAEgASgJEhEKCXVzZXJfdXVpZBgCIAEoCRItCghwcm92aWRlchgDIAEoCUIbukgYchYQARgyMhBeW2EtekEtWjAtOV8tXSskEh8KC3Byb3ZpZGVyX2lkGAQgASgJQgq6SAdyBRABGP8BEh8KDnByb3ZpZGVyX2VtYWlsGAUgASgJQge6SARyAmABEi4KCmNyZWF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCWxhc3RfdXNlZBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQAoNcHJvdmlkZXJfZGF0YRgIIAMoCzIpLmN1c3RvbWVycy5Vc2VySWRlbnRpdHkuUHJvdmlkZXJEYXRhRW50cnkSFgoOZW1haWxfdmVyaWZpZWQYCSABKAgaMwoRUHJvdmlkZXJEYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASK+AQoMT3JnYW5pemF0aW9uEhQKAmlkGAEgASgJQgi6SAVyA7ABARIVCgRuYW1lGAIgASgJQge6SARyAhABEjUKBHNsdWcYAyABKAlCJ7pIJHIiEAEYPzIcXlthLXowLTldW2EtejAtOS1dKlthLXowLTldJBIaCghvd25lcl9pZBgEIAEoCUIIukgFcgOwAQESLgoKY3JlYXRlZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAigQEKDU9yZ01lbWJlcnNoaXASDgoGb3JnX2lkGAEgASgJEg8KB3VzZXJfaWQYAiABKAkSIAoEcm9sZRgDIAEoDjISLmN1c3RvbWVycy5PcmdSb2xlEi0KCWpvaW5lZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAixgEKBFRlYW0SFAoCaWQYASABKAlCCLpIBXIDsAEBEhgKBm9yZ19pZBgCIAEoCUIIukgFcgOwAQESFQoEbmFtZRgDIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgEIAEoCRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIWCg5wYXJlbnRfdGVhbV9pZBgGIAEoCRIMCgRzbHVnGAcgASgJEgwKBHBhdGgYCCABKAkihAEKDlRlYW1NZW1iZXJzaGlwEg8KB3RlYW1faWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCRIhCgRyb2xlGAMgASgOMhMuY3VzdG9tZXJzLlRlYW1Sb2xlEi0KCWpvaW5lZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiQAoKUGVybWlzc2lvbhIZCghyZXNvdXJjZRgBIAEoCUIHukgEcgIQARIXCgZhY3Rpb24YAiABKAlCB7pIBHICEAEilgEKBFJvbGUSFAoCaWQYASABKAlCCLpIBXIDsAEBEhUKBG5hbWUYAiABKAlCB7pIBHICEAESEwoLZGVzY3JpcHRpb24YAyABKAkSKgoLcGVybWlzc2lvbnMYBCADKAsyFS5jdXN0b21lcnMuUGVybWlzc2lvbhIQCghidWlsdF9pbhgFIAEoCBIOCgZvcmdfaWQYBiABKAki0wEKDlJvbGVBc3NpZ25tZW50EgoKAmlkGAEgASgJEhwKCnN1YmplY3RfaWQYAiABKAlCCLpIBXIDsAEBEiwKDHN1YmplY3Rfa2luZBgDIAEoDjIWLmN1c3RvbWVycy5TdWJqZWN0S2luZBIZCgdyb2xlX2lkGAQgASgJQgi6SAVyA7ABARIOCgZvcmdfaWQYBSABKAkSDQoFc2NvcGUYBiABKAkSLwoLYXNzaWduZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIp4CCglQcmluY2lwYWwSFAoCaWQYASABKAlCCLpIBXIDsAEBEiYKBGtpbmQYAiABKA4yGC5jdXN0b21lcnMuUHJpbmNpcGFsS2luZBIdCgxkaXNwbGF5X25hbWUYAyABKAlCB7pIBHICEAESDgoGb3JnX2lkGAQgASgJEhgKEGFnZW50X2lkZW50aWZpZXIYBSABKAkSLgoKY3JlYXRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKcmV2b2tlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFgoOcmV2b2tlZF9yZWFzb24YCCABKAkSEgoKY3JlYXRlZF9ieRgJIAEoCSLOAQoTUmVnaXN0ZXJVc2VyUmVxdWVzdBIeCg1wcmltYXJ5X2VtYWlsGAEgASgJQge6SARyAmABEjwKB3Byb2ZpbGUYAiADKAsyKy5jdXN0b21lcnMuUmVnaXN0ZXJVc2VyUmVxdWVzdC5Qcm9maWxlRW50cnkSKQoIaWRlbnRpdHkYAyABKAsyFy5jdXN0b21lcnMuVXNlcklkZW50aXR5Gi4KDFByb2ZpbGVFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBImAKFFJlZ2lzdGVyVXNlclJlc3BvbnNlEh0KBHVzZXIYASABKAsyDy5jdXN0b21lcnMuVXNlchIpCghpZGVudGl0eRgCIAEoCzIXLmN1c3RvbWVycy5Vc2VySWRlbnRpdHkiWQoOR2V0VXNlclJlcXVlc3QSGAoEdXVpZBgBIAEoCUIIukgFcgOwAQFIABIYCgVlbWFpbBgCIAEoCUIHukgEcgJgAUgAQhMKCmlkZW50aWZpZXISBbpIAggBIhAKDkdldFNlbGZSZXF1ZXN0IsIBCg9HZXRTZWxmUmVzcG9uc2USHQoEdXNlchgBIAEoCzIPLmN1c3RvbWVycy5Vc2VyEisKCmlkZW50aXRpZXMYAiADKAsyFy5jdXN0b21lcnMuVXNlcklkZW50aXR5Ei4KDW9yZ2FuaXphdGlvbnMYAyADKAsyFy5jdXN0b21lcnMuT3JnYW5pemF0aW9uEjMKEHJvbGVfYXNzaWdubWVudHMYBCADKAsyGS5jdXN0b21lcnMuUm9sZUFzc2lnbm1lbnQiawoQTGlzdFVzZXJzUmVxdWVzdBIcCglwYWdlX3NpemUYASABKAVCCbpIBhoEGGQgABISCgpwYWdlX3Rva2VuGAIgASgJEiUKBnN0YXR1cxgDIAEoDjIVLmN1c3RvbWVycy5Vc2VyU3RhdHVzIkwKEUxpc3RVc2Vyc1Jlc3BvbnNlEh4KBXVzZXJzGAEgAygLMg8uY3VzdG9tZXJzLlVzZXISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJInsKEVVwZGF0ZVVzZXJSZXF1ZXN0EhYKBHV1aWQYASABKAlCCLpIBXIDsAEBEh0KBHVzZXIYAiABKAsyDy5jdXN0b21lcnMuVXNlchIvCgt1cGRhdGVfbWFzaxgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5GaWVsZE1hc2siXAoSQWRkSWRlbnRpdHlSZXF1ZXN0EhsKCXVzZXJfdXVpZBgBIAEoCUIIukgFcgOwAQESKQoIaWRlbnRpdHkYAiABKAsyFy5jdXN0b21lcnMuVXNlcklkZW50aXR5ImsKGUZpbmRVc2VyQnlJZGVudGl0eVJlcXVlc3QSLQoIcHJvdmlkZXIYASABKAlCG7pIGHIWEAEYMjIQXlthLXpBLVowLTlfLV0rJBIfCgtwcm92aWRlcl9pZBgCIAEoCUIKukgHcgUQARj/ASI4ChlMaXN0VXNlcklkZW50aXRpZXNSZXF1ZXN0EhsKCXVzZXJfdXVpZBgBIAEoCUIIukgFcgOwAQEiSQoaTGlzdFVzZXJJZGVudGl0aWVzUmVzcG9uc2USKwoKaWRlbnRpdGllcxgBIAMoCzIXLmN1c3RvbWVycy5Vc2VySWRlbnRpdHkicgoLT3JnU2V0dGluZ3MSDgoGb3JnX2lkGAEgASgJEhAKCGxvZ29fdXJsGAIgASgJEhUKDXByaW1hcnlfY29sb3IYAyABKAkSFQoNY3VzdG9tX2RvbWFpbhgEIAEoCRITCgtmYXZpY29uX3VybBgFIAEoCSIxChVHZXRPcmdTZXR0aW5nc1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABASKJAQoYVXBkYXRlT3JnU2V0dGluZ3NSZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQESEAoIbG9nb191cmwYAiABKAkSFQoNcHJpbWFyeV9jb2xvchgDIAEoCRIVCg1jdXN0b21fZG9tYWluGAQgASgJEhMKC2Zhdmljb25fdXJsGAUgASgJImkKGUNyZWF0ZU9yZ2FuaXphdGlvblJlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARI1CgRzbHVnGAIgASgJQie6SCRyIhABGD8yHF5bYS16MC05XVthLXowLTktXSpbYS16MC05XSQiSwoaQ3JlYXRlT3JnYW5pemF0aW9uUmVzcG9uc2USLQoMb3JnYW5pemF0aW9uGAEgASgLMhcuY3VzdG9tZXJzLk9yZ2FuaXphdGlvbiIuChZHZXRPcmdhbml6YXRpb25SZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASIaChhMaXN0T3JnYW5pemF0aW9uc1JlcXVlc3QiSwoZTGlzdE9yZ2FuaXphdGlvbnNSZXNwb25zZRIuCg1vcmdhbml6YXRpb25zGAEgAygLMhcuY3VzdG9tZXJzLk9yZ2FuaXphdGlvbiJsChNBZGRPcmdNZW1iZXJSZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQESGQoHdXNlcl9pZBgCIAEoCUIIukgFcgOwAQESIAoEcm9sZRgDIAEoDjISLmN1c3RvbWVycy5PcmdSb2xlIk0KFlJlbW92ZU9yZ01lbWJlclJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIZCgd1c2VyX2lkGAIgASgJQgi6SAVyA7ABASIxChVMaXN0T3JnTWVtYmVyc1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABASJDChZMaXN0T3JnTWVtYmVyc1Jlc3BvbnNlEikKB21lbWJlcnMYASADKAsyGC5jdXN0b21lcnMuT3JnTWVtYmVyc2hpcCJ/ChFDcmVhdGVUZWFtUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEhUKBG5hbWUYAiABKAlCB7pIBHICEAESEwoLZGVzY3JpcHRpb24YAyABKAkSFgoOcGFyZW50X3RlYW1faWQYBCABKAkSDAoEc2x1ZxgFIAEoCSIzChJDcmVhdGVUZWFtUmVzcG9uc2USHQoEdGVhbRgBIAEoCzIPLmN1c3RvbWVycy5UZWFtIiwKEExpc3RUZWFtc1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABASIzChFMaXN0VGVhbXNSZXNwb25zZRIeCgV0ZWFtcxgBIAMoCzIPLmN1c3RvbWVycy5UZWFtIm8KFEFkZFRlYW1NZW1iZXJSZXF1ZXN0EhkKB3RlYW1faWQYASABKAlCCLpIBXIDsAEBEhkKB3VzZXJfaWQYAiABKAlCCLpIBXIDsAEBEiEKBHJvbGUYAyABKA4yEy5jdXN0b21lcnMuVGVhbVJvbGUiTwoXUmVtb3ZlVGVhbU1lbWJlclJlcXVlc3QSGQoHdGVhbV9pZBgBIAEoCUIIukgFcgOwAQESGQoHdXNlcl9pZBgCIAEoCUIIukgFcgOwAQEiWgoRVXBkYXRlVGVhbVJlcXVlc3QSGQoHdGVhbV9pZBgBIAEoCUIIukgFcgOwAQESFQoEbmFtZRgCIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgDIAEoCSIzChJVcGRhdGVUZWFtUmVzcG9uc2USHQoEdGVhbRgBIAEoCzIPLmN1c3RvbWVycy5UZWFtIi4KEURlbGV0ZVRlYW1SZXF1ZXN0EhkKB3RlYW1faWQYASABKAlCCLpIBXIDsAEBIjMKFkxpc3RUZWFtTWVtYmVyc1JlcXVlc3QSGQoHdGVhbV9pZBgBIAEoCUIIukgFcgOwAQEiRQoXTGlzdFRlYW1NZW1iZXJzUmVzcG9uc2USKgoHbWVtYmVycxgBIAMoCzIZLmN1c3RvbWVycy5UZWFtTWVtYmVyc2hpcCJ7ChFDcmVhdGVSb2xlUmVxdWVzdBIVCgRuYW1lGAEgASgJQge6SARyAhABEhMKC2Rlc2NyaXB0aW9uGAIgASgJEioKC3Blcm1pc3Npb25zGAMgAygLMhUuY3VzdG9tZXJzLlBlcm1pc3Npb24SDgoGb3JnX2lkGAQgASgJIjMKEkNyZWF0ZVJvbGVSZXNwb25zZRIdCgRyb2xlGAEgASgLMg8uY3VzdG9tZXJzLlJvbGUiIgoQTGlzdFJvbGVzUmVxdWVzdBIOCgZvcmdfaWQYASABKAkiMwoRTGlzdFJvbGVzUmVzcG9uc2USHgoFcm9sZXMYASADKAsyDy5jdXN0b21lcnMuUm9sZSIpChFEZWxldGVSb2xlUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQEimQEKEUFzc2lnblJvbGVSZXF1ZXN0EhwKCnN1YmplY3RfaWQYASABKAlCCLpIBXIDsAEBEiwKDHN1YmplY3Rfa2luZBgCIAEoDjIWLmN1c3RvbWVycy5TdWJqZWN0S2luZBIZCgdyb2xlX2lkGAMgASgJQgi6SAVyA7ABARIOCgZvcmdfaWQYBCABKAkSDQoFc2NvcGUYBSABKAkiQwoSQXNzaWduUm9sZVJlc3BvbnNlEi0KCmFzc2lnbm1lbnQYASABKAsyGS5jdXN0b21lcnMuUm9sZUFzc2lnbm1lbnQiawoRUmV2b2tlUm9sZVJlcXVlc3QSHAoKc3ViamVjdF9pZBgBIAEoCUIIukgFcgOwAQESGQoHcm9sZV9pZBgCIAEoCUIIukgFcgOwAQESDgoGb3JnX2lkGAMgASgJEg0KBXNjb3BlGAQgASgJIngKGkxpc3RSb2xlQXNzaWdubWVudHNSZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQESEgoKc3ViamVjdF9pZBgCIAEoCRIsCgxzdWJqZWN0X2tpbmQYAyABKA4yFi5jdXN0b21lcnMuU3ViamVjdEtpbmQiTQobTGlzdFJvbGVBc3NpZ25tZW50c1Jlc3BvbnNlEi4KC2Fzc2lnbm1lbnRzGAEgAygLMhkuY3VzdG9tZXJzLlJvbGVBc3NpZ25tZW50IrcBChZDaGVja1Blcm1pc3Npb25SZXF1ZXN0EhwKCnN1YmplY3RfaWQYASABKAlCCLpIBXIDsAEBEiwKDHN1YmplY3Rfa2luZBgCIAEoDjIWLmN1c3RvbWVycy5TdWJqZWN0S2luZBIZCghyZXNvdXJjZRgDIAEoCUIHukgEcgIQARIXCgZhY3Rpb24YBCABKAlCB7pIBHICEAESDgoGb3JnX2lkGAUgASgJEg0KBXNjb3BlGAYgASgJIjoKF0NoZWNrUGVybWlzc2lvblJlc3BvbnNlEg8KB2FsbG93ZWQYASABKAgSDgoGcmVhc29uGAIgASgJIowCCg1EZWNpZGVSZXF1ZXN0Eh4KDHByaW5jaXBhbF9pZBgBIAEoCUIIukgFcgOwAQESFwoGYWN0aW9uGAIgASgJQge6SARyAhABEhAKCHJlc291cmNlGAMgASgJEhMKC3Jlc291cmNlX2lkGAQgASgJEg4KBm9yZ19pZBgFIAEoCRIoCgdjb250ZXh0GAYgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBISCgpyaXNrX2xldmVsGAcgASgJEhgKEGRlbGVnYXRpb25fcHJvb2YYCCABKAwSMwoUZGVjbGFyZWRfcGVybWlzc2lvbnMYCSADKAsyFS5jdXN0b21lcnMuUGVybWlzc2lvbiJ7Cg5EZWNpZGVSZXNwb25zZRIlCghkZWNpc2lvbhgBIAEoDjITLmN1c3RvbWVycy5EZWNpc2lvbhIOCgZyZWFzb24YAiABKAkSFQoNZGVjaXNpb25fcGF0aBgDIAEoCRIbChNhcHByb3ZhbF9yZXF1ZXN0X2lkGAQgASgJIisKE0dldFByaW5jaXBhbFJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIlcKGEdldEFnZW50UHJpbmNpcGFsUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEiEKEGFnZW50X2lkZW50aWZpZXIYAiABKAlCB7pIBHICEAEicAobQ3JlYXRlQWdlbnRQcmluY2lwYWxSZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQESIQoQYWdlbnRfaWRlbnRpZmllchgCIAEoCUIHukgEcgIQARIUCgxkaXNwbGF5X25hbWUYAyABKAkiRwoWUmV2b2tlUHJpbmNpcGFsUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESFwoGcmVhc29uGAIgASgJQge6SARyAhABIowBChVMaXN0UHJpbmNpcGFsc1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARImCgRraW5kGAIgASgOMhguY3VzdG9tZXJzLlByaW5jaXBhbEtpbmQSHQoJcGFnZV9zaXplGAMgASgFQgq6SAcaBRjIASgAEhIKCnBhZ2VfdG9rZW4YBCABKAkiWwoWTGlzdFByaW5jaXBhbHNSZXNwb25zZRIoCgpwcmluY2lwYWxzGAEgAygLMhQuY3VzdG9tZXJzLlByaW5jaXBhbBIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkiaAoWUmVzb2x2ZUlkZW50aXR5UmVxdWVzdBItCghwcm92aWRlchgBIAEoCUIbukgYchYQARgyMhBeW2EtekEtWjAtOV8tXSskEh8KC3Byb3ZpZGVyX2lkGAIgASgJQgq6SAdyBRABGP8BIoEBChdSZXNvbHZlSWRlbnRpdHlSZXNwb25zZRIPCgd1c2VyX2lkGAEgASgJEg4KBm9yZ19pZBgCIAEoCRINCgVyb2xlcxgDIAMoCRINCgVmb3VuZBgEIAEoCBIQCghvcmdfcm9sZRgFIAEoCRIVCg1wbGF0Zm9ybV9yb2xlGAYgASgJIrgCChhSZXF1ZXN0RGVsZWdhdGlvblJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIkChJhY3Rvcl9wcmluY2lwYWxfaWQYAiABKAlCCLpIBXIDsAEBEhcKBmFjdGlvbhgDIAEoCUIHukgEcgIQARIQCghyZXNvdXJjZRgEIAEoCRITCgtyZXNvdXJjZV9pZBgFIAEoCRIeCg1qdXN0aWZpY2F0aW9uGAYgASgJQge6SARyAhABEigKB2NvbnRleHQYByABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhIKCnJpc2tfbGV2ZWwYCCABKAkSFwoPdGltZW91dF9zZWNvbmRzGAkgASgFEg8KB2dyYW50b3IYCiABKAkSFAoMcmVxdWVzdF9oYXNoGAsgASgJImcKGVJlcXVlc3REZWxlZ2F0aW9uUmVzcG9uc2USCgoCaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEi4KCmV4cGlyZXNfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIkoKGFdhaXRGb3JEZWxlZ2F0aW9uUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESGAoGb3JnX2lkGAIgASgJQgi6SAVyA7ABASK/AQoPRGVsZWdhdGlvbkV2ZW50EgoKAmlkGAEgASgJEg4KBnN0YXR1cxgCIAEoCRIuCgpkZWNpZGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIcChRncmFudG9yX3ByaW5jaXBhbF9pZBgEIAEoCRIOCgZyZWFzb24YBSABKAkSGQoRc2NvcGVkX2F1dGhfdG9rZW4YBiABKAkSFwoPbWludGVkX3Rva2VuX2lkGAcgASgJInQKF0RlY2lkZURlbGVnYXRpb25SZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABARIYCgZvcmdfaWQYAiABKAlCCLpIBXIDsAEBEhkKCGRlY2lzaW9uGAMgASgJQge6SARyAhABEg4KBnJlYXNvbhgEIAEoCSKpAwoPRGVsZWdhdGlvbkdyYW50EgoKAmlkGAEgASgJEg4KBm9yZ19pZBgCIAEoCRIaChJhY3Rvcl9wcmluY2lwYWxfaWQYAyABKAkSHAoUZ3JhbnRvcl9wcmluY2lwYWxfaWQYBCABKAkSDgoGYWN0aW9uGAUgASgJEhAKCHJlc291cmNlGAYgASgJEhMKC3Jlc291cmNlX2lkGAcgASgJEhUKDWp1c3RpZmljYXRpb24YCCABKAkSDgoGc3RhdHVzGAkgASgJEhIKCnJpc2tfbGV2ZWwYCiABKAkSDAoEa2luZBgLIAEoCRIuCgpjcmVhdGVkX2F0GAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpkZWNpZGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpleHBpcmVzX2F0GA4gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIXCg9kZWNpc2lvbl9yZWFzb24YDyABKAkSFwoPbWludGVkX3Rva2VuX2lkGBAgASgJImwKHUxpc3RQZW5kaW5nRGVsZWdhdGlvbnNSZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQESHQoJcGFnZV9zaXplGAIgASgFQgq6SAcaBRjIASgAEhIKCnBhZ2VfdG9rZW4YAyABKAkiZQoeTGlzdFBlbmRpbmdEZWxlZ2F0aW9uc1Jlc3BvbnNlEioKBmdyYW50cxgBIAMoCzIaLmN1c3RvbWVycy5EZWxlZ2F0aW9uR3JhbnQSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIvgCCgZBUElLZXkSCgoCaWQYASABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAIgASgJEg8KB3VzZXJfaWQYAyABKAkSDAoEbmFtZRgEIAEoCRIOCgZwcmVmaXgYBSABKAkSJQoGc2NvcGVzGAYgAygLMhUuY3VzdG9tZXJzLlBlcm1pc3Npb24SMQoLZW52aXJvbm1lbnQYByABKA4yHC5jdXN0b21lcnMuQVBJS2V5RW52aXJvbm1lbnQSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKZXhwaXJlc19hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMbGFzdF91c2VkX2F0GAogASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpyZXZva2VkX2F0GAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLcAQoTQ3JlYXRlQVBJS2V5UmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhgKBG5hbWUYAiABKAlCCrpIB3IFEAEY/wESJQoGc2NvcGVzGAMgAygLMhUuY3VzdG9tZXJzLlBlcm1pc3Npb24SMQoLZW52aXJvbm1lbnQYBCABKA4yHC5jdXN0b21lcnMuQVBJS2V5RW52aXJvbm1lbnQSLgoKZXhwaXJlc19hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiTQoUQ3JlYXRlQVBJS2V5UmVzcG9uc2USHgoDa2V5GAEgASgLMhEuY3VzdG9tZXJzLkFQSUtleRIVCg1wbGFpbnRleHRfa2V5GAIgASgJImkKEkxpc3RBUElLZXlzUmVxdWVzdBIhCg9vcmdhbml6YXRpb25faWQYASABKAlCCLpIBXIDsAEBEhwKCXBhZ2Vfc2l6ZRgCIAEoBUIJukgGGgQYZCAAEhIKCnBhZ2VfdG9rZW4YAyABKAkiTwoTTGlzdEFQSUtleXNSZXNwb25zZRIfCgRrZXlzGAEgAygLMhEuY3VzdG9tZXJzLkFQSUtleRIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkiTgoTUmV2b2tlQVBJS2V5UmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESIQoPb3JnYW5pemF0aW9uX2lkGAIgASgJQgi6SAVyA7ABASItChVWYWxpZGF0ZUFQSUtleVJlcXVlc3QSFAoDa2V5GAEgASgJQge6SARyAhABIpYCChZWYWxpZGF0ZUFQSUtleVJlc3BvbnNlEg0KBXZhbGlkGAEgASgIEg8KB3VzZXJfaWQYAiABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAMgASgJEg4KBnNjb3BlcxgEIAMoCRISCgp3b3Jrc3BhY2VzGAUgAygJEg0KBXJvbGVzGAYgAygJEkUKCmF0dHJpYnV0ZXMYByADKAsyMS5jdXN0b21lcnMuVmFsaWRhdGVBUElLZXlSZXNwb25zZS5BdHRyaWJ1dGVzRW50cnkSFgoOcHJpbmNpcGFsX2tpbmQYCCABKAkaMQoPQXR0cmlidXRlc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEimAIKE0F1dGhlbnRpY2F0ZVJlcXVlc3QSLQoIcHJvdmlkZXIYASABKAlCG7pIGHIWEAEYMjIQXlthLXpBLVowLTlfLV0rJBIfCgtwcm92aWRlcl9pZBgCIAEoCUIKukgHcgUQARj/ARIWCg5wcm92aWRlcl9lbWFpbBgDIAEoCRIWCg5lbWFpbF92ZXJpZmllZBgEIAEoCBI8Cgdwcm9maWxlGAUgAygLMisuY3VzdG9tZXJzLkF1dGhlbnRpY2F0ZVJlcXVlc3QuUHJvZmlsZUVudHJ5EhMKC2RldmljZV9pbmZvGAYgASgJGi4KDFByb2ZpbGVFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIp8BChRBdXRoZW50aWNhdGVSZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkSFQoNcmVmcmVzaF90b2tlbhgCIAEoCRISCgpleHBpcmVzX2luGAMgASgDEh0KBHVzZXIYBCABKAsyDy5jdXN0b21lcnMuVXNlchIUCgxtZmFfcmVxdWlyZWQYBSABKAgSEQoJbWZhX3Rva2VuGAYgASgJIjUKE1JlZnJlc2hUb2tlblJlcXVlc3QSHgoNcmVmcmVzaF90b2tlbhgBIAEoCUIHukgEcgIQASJXChRSZWZyZXNoVG9rZW5SZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkSFQoNcmVmcmVzaF90b2tlbhgCIAEoCRISCgpleHBpcmVzX2luGAMgASgDIi8KDUxvZ291dFJlcXVlc3QSHgoNcmVmcmVzaF90b2tlbhgBIAEoCUIHukgEcgIQASIhCgxKV0tTUmVzcG9uc2USEQoJa2V5c19qc29uGAEgASgJIk0KEUJlZ2luT0F1dGhSZXF1ZXN0EhkKCHByb3ZpZGVyGAEgASgJQge6SARyAhABEh0KDHJlZGlyZWN0X3VyaRgCIAEoCUIHukgEcgIQASIjChJCZWdpbk9BdXRoUmVzcG9uc2USDQoFc3RhdGUYASABKAki5gIKEUF1ZGl0RXhwb3J0Q29uZmlnEgoKAmlkGAEgASgJEhgKBm9yZ19pZBgCIAEoCUIIukgFcgOwAQESFwoGYnVja2V0GAMgASgJQge6SARyAhABEg4KBnJlZ2lvbhgEIAEoCRIQCghlbmRwb2ludBgFIAEoCRIOCgZwcmVmaXgYBiABKAkSFQoNYWNjZXNzX2tleV9pZBgHIAEoCRIZChFzZWNyZXRfYWNjZXNzX2tleRgIIAEoCRIgCg9jYWRlbmNlX21pbnV0ZXMYCSABKAVCB7pIBBoCKAUSDwoHZW5hYmxlZBgKIAEoCBI0ChBsYXN0X2V4cG9ydGVkX2F0GAsgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBISCgpsYXN0X2Vycm9yGAwgASgJEjEKDWxhc3RfZXJyb3JfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIjcKG0dldEF1ZGl0RXhwb3J0Q29uZmlnUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBIkwKHFNhdmVBdWRpdEV4cG9ydENvbmZpZ1JlcXVlc3QSLAoGY29uZmlnGAEgASgLMhwuY3VzdG9tZXJzLkF1ZGl0RXhwb3J0Q29uZmlnIjoKHkRlbGV0ZUF1ZGl0RXhwb3J0Q29uZmlnUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBInMKDUNvbnNlbnRTdGF0dXMSGAoQYWNjZXB0ZWRfdmVyc2lvbhgBIAEoCRIvCgthY2NlcHRlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASFwoPY3VycmVudF92ZXJzaW9uGAMgASgJIhkKF0dldENvbnNlbnRTdGF0dXNSZXF1ZXN0IjAKFEFjY2VwdENvbnNlbnRSZXF1ZXN0EhgKB3ZlcnNpb24YASABKAlCB7pIBHICEAEisQIKCkF1ZGl0RXZlbnQSCgoCaWQYASABKAkSEAoIYWN0b3JfaWQYAiABKAkSEgoKYWN0b3JfdHlwZRgDIAEoCRIOCgZhY3Rpb24YBCABKAkSEAoIcmVzb3VyY2UYBSABKAkSEwoLcmVzb3VyY2VfaWQYBiABKAkSDgoGb3JnX2lkGAcgASgJEjUKCG1ldGFkYXRhGAggAygLMiMuY3VzdG9tZXJzLkF1ZGl0RXZlbnQuTWV0YWRhdGFFbnRyeRISCgppcF9hZGRyZXNzGAkgASgJEi4KCmNyZWF0ZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wGi8KDU1ldGFkYXRhRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASLzAQoUUXVlcnlBdWRpdExvZ1JlcXVlc3QSDgoGb3JnX2lkGAEgASgJEhAKCGFjdG9yX2lkGAIgASgJEg4KBmFjdGlvbhgDIAEoCRIQCghyZXNvdXJjZRgEIAEoCRITCgtyZXNvdXJjZV9pZBgFIAEoCRIoCgRmcm9tGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBImCgJ0bxgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASHAoJcGFnZV9zaXplGAggASgFQgm6SAYaBBhkIAASEgoKcGFnZV90b2tlbhgJIAEoCSJsChVRdWVyeUF1ZGl0TG9nUmVzcG9uc2USJQoGZXZlbnRzGAEgAygLMhUuY3VzdG9tZXJzLkF1ZGl0RXZlbnQSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgFIlkKFUV4cG9ydEF1ZGl0TG9nUmVxdWVzdBIOCgZvcmdfaWQYASABKAkSDgoGZm9ybWF0GAIgASgJEhAKCGFjdG9yX2lkGAMgASgJEg4KBmFjdGlvbhgEIAEoCSJOChZFeHBvcnRBdWRpdExvZ1Jlc3BvbnNlEgwKBGRhdGEYASABKAwSFAoMY29udGVudF90eXBlGAIgASgJEhAKCGZpbGVuYW1lGAMgASgJIuYBCgpJbnZpdGF0aW9uEgoKAmlkGAEgASgJEg4KBm9yZ19pZBgCIAEoCRISCgppbnZpdGVyX2lkGAMgASgJEg0KBWVtYWlsGAQgASgJEgwKBHJvbGUYBSABKAkSKwoGc3RhdHVzGAYgASgOMhsuY3VzdG9tZXJzLkludml0YXRpb25TdGF0dXMSLgoKZXhwaXJlc19hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiWQoXQ3JlYXRlSW52aXRhdGlvblJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIWCgVlbWFpbBgCIAEoCUIHukgEcgJgARIMCgRyb2xlGAMgASgJIlsKGENyZWF0ZUludml0YXRpb25SZXNwb25zZRIpCgppbnZpdGF0aW9uGAEgASgLMhUuY3VzdG9tZXJzLkludml0YXRpb24SFAoMaW52aXRlX3Rva2VuGAIgASgJIjEKF0FjY2VwdEludml0YXRpb25SZXF1ZXN0EhYKBXRva2VuGAEgASgJQge6SARyAhABIkkKGEFjY2VwdEludml0YXRpb25SZXNwb25zZRItCgxvcmdhbml6YXRpb24YASABKAsyFy5jdXN0b21lcnMuT3JnYW5pemF0aW9uIl8KFkxpc3RJbnZpdGF0aW9uc1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIrCgZzdGF0dXMYAiABKA4yGy5jdXN0b21lcnMuSW52aXRhdGlvblN0YXR1cyJFChdMaXN0SW52aXRhdGlvbnNSZXNwb25zZRIqCgtpbnZpdGF0aW9ucxgBIAMoCzIVLmN1c3RvbWVycy5JbnZpdGF0aW9uIi8KF1Jldm9rZUludml0YXRpb25SZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASJVChJTZWFyY2hVc2Vyc1JlcXVlc3QSDQoFcXVlcnkYASABKAkSHAoJcGFnZV9zaXplGAIgASgFQgm6SAYaBBhkIAASEgoKcGFnZV90b2tlbhgDIAEoCSJjChNTZWFyY2hVc2Vyc1Jlc3BvbnNlEh4KBXVzZXJzGAEgAygLMg8uY3VzdG9tZXJzLlVzZXISFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEhMKC3RvdGFsX2NvdW50GAMgASgFIj8KElN1c3BlbmRVc2VyUmVxdWVzdBIZCgd1c2VyX2lkGAEgASgJQgi6SAVyA7ABARIOCgZyZWFzb24YAiABKAkiMQoUVW5zdXNwZW5kVXNlclJlcXVlc3QSGQoHdXNlcl9pZBgBIAEoCUIIukgFcgOwAQEiMwoWSW1wZXJzb25hdGVVc2VyUmVxdWVzdBIZCgd1c2VyX2lkGAEgASgJQgi6SAVyA7ABASJDChdJbXBlcnNvbmF0ZVVzZXJSZXNwb25zZRIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEgoKZXhwaXJlc19pbhgCIAEoAyJeChlMaXN0QWN0aXZlU2Vzc2lvbnNSZXF1ZXN0Eg8KB3VzZXJfaWQYASABKAkSHAoJcGFnZV9zaXplGAIgASgFQgm6SAYaBBhkIAASEgoKcGFnZV90b2tlbhgDIAEoCSLCAgoLU2Vzc2lvbkluZm8SCgoCaWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCRISCgppcF9hZGRyZXNzGAMgASgJEjsKC2RldmljZV9pbmZvGAQgAygLMiYuY3VzdG9tZXJzLlNlc3Npb25JbmZvLkRldmljZUluZm9FbnRyeRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIyCg5sYXN0X2FjdGl2ZV9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKZXhwaXJlc19hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAaMQoPRGV2aWNlSW5mb0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiXwoaTGlzdEFjdGl2ZVNlc3Npb25zUmVzcG9uc2USKAoIc2Vzc2lvbnMYASADKAsyFi5jdXN0b21lcnMuU2Vzc2lvbkluZm8SFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIkMKFFJldm9rZVNlc3Npb25SZXF1ZXN0EhsKCnNlc3Npb25faWQYASABKAlCB7pIBHICEAESDgoGcmVhc29uGAIgASgJIjUKGUdldE9yZ0VudGl0bGVtZW50c1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABASJhChpHZXRPcmdFbnRpdGxlbWVudHNSZXNwb25zZRIRCglwbGFuX25hbWUYASABKAkSMAoMZW50aXRsZW1lbnRzGAIgAygLMhouY3VzdG9tZXJzLkVudGl0bGVtZW50SW5mbyJVCg9FbnRpdGxlbWVudEluZm8SDwoHZmVhdHVyZRgBIAEoCRINCgVsaW1pdBgCIAEoAxIMCgR1c2VkGAMgASgDEhQKDGhhc19vdmVycmlkZRgEIAEoCCJ1ChpPdmVycmlkZUVudGl0bGVtZW50UmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEhgKB2ZlYXR1cmUYAiABKAlCB7pIBHICEAESEwoLbGltaXRfdmFsdWUYAyABKAMSDgoGcmVhc29uGAQgASgJIikKG092ZXJyaWRlRW50aXRsZW1lbnRSZXNwb25zZRIKCgJpZBgBIAEoCSJyChhHcmFudFBsYXRmb3JtUm9sZVJlcXVlc3QSGQoHdXNlcl9pZBgBIAEoCUIIukgFcgOwAQESOwoNcGxhdGZvcm1fcm9sZRgCIAEoCUIkukghch9SC3N1cGVyX2FkbWluUgdzdXBwb3J0UgdiaWxsaW5nIjYKGVJldm9rZVBsYXRmb3JtUm9sZVJlcXVlc3QSGQoHdXNlcl9pZBgBIAEoCUIIukgFcgOwAQEiGwoZTGlzdFBsYXRmb3JtQWRtaW5zUmVxdWVzdCKAAQoSUGxhdGZvcm1BZG1pbkVudHJ5Eg8KB3VzZXJfaWQYASABKAkSFQoNcGxhdGZvcm1fcm9sZRgCIAEoCRISCgpncmFudGVkX2J5GAMgASgJEi4KCmdyYW50ZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIksKGkxpc3RQbGF0Zm9ybUFkbWluc1Jlc3BvbnNlEi0KBmFkbWlucxgBIAMoCzIdLmN1c3RvbWVycy5QbGF0Zm9ybUFkbWluRW50cnkiGQoXTGlzdEZlYXR1cmVGbGFnc1JlcXVlc3QidwoQRmVhdHVyZUZsYWdFbnRyeRIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEg8KB2VuYWJsZWQYAyABKAgSFwoPcm9sbG91dF9wZXJjZW50GAQgASgFEhYKDnRhcmdldF9vcmdfaWRzGAUgAygJIkYKGExpc3RGZWF0dXJlRmxhZ3NSZXNwb25zZRIqCgVmbGFncxgBIAMoCzIbLmN1c3RvbWVycy5GZWF0dXJlRmxhZ0VudHJ5IogBChhVcHNlcnRGZWF0dXJlRmxhZ1JlcXVlc3QSFQoEbmFtZRgBIAEoCUIHukgEcgIQARITCgtkZXNjcmlwdGlvbhgCIAEoCRIPCgdlbmFibGVkGAMgASgIEhcKD3JvbGxvdXRfcGVyY2VudBgEIAEoBRIWCg50YXJnZXRfb3JnX2lkcxgFIAMoCSIpChlVcHNlcnRGZWF0dXJlRmxhZ1Jlc3BvbnNlEgwKBG5hbWUYASABKAkiwQEKE1dlYmhvb2tTdWJzY3JpcHRpb24SFAoCaWQYASABKAlCCLpIBXIDsAEBEhgKBm9yZ19pZBgCIAEoCUIIukgFcgOwAQESFQoDdXJsGAMgASgJQgi6SAVyA4gBARIOCgZldmVudHMYBCADKAkSDgoGYWN0aXZlGAUgASgIEhMKC2Rlc2NyaXB0aW9uGAYgASgJEi4KCmNyZWF0ZWRfYXQYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIvQCCg9XZWJob29rRGVsaXZlcnkSFAoCaWQYASABKAlCCLpIBXIDsAEBEiEKD3N1YnNjcmlwdGlvbl9pZBgCIAEoCUIIukgFcgOwAQESEgoKZXZlbnRfdHlwZRgDIAEoCRIPCgdwYXlsb2FkGAQgASgJEjAKBnN0YXR1cxgFIAEoDjIgLmN1c3RvbWVycy5XZWJob29rRGVsaXZlcnlTdGF0dXMSEAoIYXR0ZW1wdHMYBiABKAUSEwoLaHR0cF9zdGF0dXMYByABKAUSLgoKY3JlYXRlZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMZGVsaXZlcmVkX2F0GAkgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCg1yZXNwb25zZV9ib2R5GAogASgJEjEKDW5leHRfcmV0cnlfYXQYCyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIngKIENyZWF0ZVdlYmhvb2tTdWJzY3JpcHRpb25SZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQESFQoDdXJsGAIgASgJQgi6SAVyA4gBARIOCgZldmVudHMYAyADKAkSEwoLZGVzY3JpcHRpb24YBCABKAkiOAogRGVsZXRlV2ViaG9va1N1YnNjcmlwdGlvblJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIm0KH0xpc3RXZWJob29rU3Vic2NyaXB0aW9uc1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIcCglwYWdlX3NpemUYAiABKAVCCbpIBhoEGGQgABISCgpwYWdlX3Rva2VuGAMgASgJInIKIExpc3RXZWJob29rU3Vic2NyaXB0aW9uc1Jlc3BvbnNlEjUKDXN1YnNjcmlwdGlvbnMYASADKAsyHi5jdXN0b21lcnMuV2ViaG9va1N1YnNjcmlwdGlvbhIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkicwocTGlzdFdlYmhvb2tEZWxpdmVyaWVzUmVxdWVzdBIhCg9zdWJzY3JpcHRpb25faWQYASABKAlCCLpIBXIDsAEBEhwKCXBhZ2Vfc2l6ZRgCIAEoBUIJukgGGgQYZCAAEhIKCnBhZ2VfdG9rZW4YAyABKAkiaAodTGlzdFdlYmhvb2tEZWxpdmVyaWVzUmVzcG9uc2USLgoKZGVsaXZlcmllcxgBIAMoCzIaLmN1c3RvbWVycy5XZWJob29rRGVsaXZlcnkSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJIj4KElRlc3RXZWJob29rUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESEgoKZXZlbnRfdHlwZRgCIAEoCSIxChlHZXRXZWJob29rRGVsaXZlcnlSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASI0ChxSZXBsYXlXZWJob29rRGVsaXZlcnlSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASJQChpSb3RhdGVXZWJob29rU2VjcmV0UmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQESHAoUZ3JhY2VfcGVyaW9kX3NlY29uZHMYAiABKAUiaAobUm90YXRlV2ViaG9va1NlY3JldFJlc3BvbnNlEg4KBnNlY3JldBgBIAEoCRI5ChVvbGRfc2VjcmV0X2V4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIvUBCgxOb3RpZmljYXRpb24SFAoCaWQYASABKAlCCLpIBXIDsAEBEhkKB3VzZXJfaWQYAiABKAlCCLpIBXIDsAEBEhgKBm9yZ19pZBgDIAEoCUIIukgFcgOwAQESDQoFdGl0bGUYBCABKAkSDAoEYm9keRgFIAEoCRIMCgR0eXBlGAYgASgJEhIKCmFjdGlvbl91cmwYByABKAkSKwoHcmVhZF9hdBgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiTAoYTGlzdE5vdGlmaWNhdGlvbnNSZXF1ZXN0EhwKCXBhZ2Vfc2l6ZRgBIAEoBUIJukgGGgQYZCAAEhIKCnBhZ2VfdG9rZW4YAiABKAkiZAoZTGlzdE5vdGlmaWNhdGlvbnNSZXNwb25zZRIuCg1ub3RpZmljYXRpb25zGAEgAygLMhcuY3VzdG9tZXJzLk5vdGlmaWNhdGlvbhIXCg9uZXh0X3BhZ2VfdG9rZW4YAiABKAkiFwoVR2V0VW5yZWFkQ291bnRSZXF1ZXN0IicKFkdldFVucmVhZENvdW50UmVzcG9uc2USDQoFY291bnQYASABKAUiMwobTWFya05vdGlmaWNhdGlvblJlYWRSZXF1ZXN0EhQKAmlkGAEgASgJQgi6SAVyA7ABASIhCh9NYXJrQWxsTm90aWZpY2F0aW9uc1JlYWRSZXF1ZXN0IjEKGURlbGV0ZU5vdGlmaWNhdGlvblJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIo8BCg5PbmJvYXJkaW5nU3RlcBIaCglzdGVwX25hbWUYASABKAlCB7pIBHICEAESLwoGc3RhdHVzGAIgASgOMh8uY3VzdG9tZXJzLk9uYm9hcmRpbmdTdGVwU3RhdHVzEjAKDGNvbXBsZXRlZF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiUQoST25ib2FyZGluZ1Byb2dyZXNzEigKBXN0ZXBzGAEgAygLMhkuY3VzdG9tZXJzLk9uYm9hcmRpbmdTdGVwEhEKCWNvbXBsZXRlZBgCIAEoCCIeChxHZXRPbmJvYXJkaW5nUHJvZ3Jlc3NSZXF1ZXN0IjsKHUNvbXBsZXRlT25ib2FyZGluZ1N0ZXBSZXF1ZXN0EhoKCXN0ZXBfbmFtZRgBIAEoCUIHukgEcgIQASI3ChlTa2lwT25ib2FyZGluZ1N0ZXBSZXF1ZXN0EhoKCXN0ZXBfbmFtZRgBIAEoCUIHukgEcgIQASK+AgoLR0RQUlJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBEhkKB3VzZXJfaWQYAiABKAlCCLpIBXIDsAEBEigKBHR5cGUYAyABKA4yGi5jdXN0b21lcnMuR0RQUlJlcXVlc3RUeXBlEiwKBnN0YXR1cxgEIAEoDjIcLmN1c3RvbWVycy5HRFBSUmVxdWVzdFN0YXR1cxIUCgxkb3dubG9hZF91cmwYBSABKAkSLgoKZXhwaXJlc19hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMY29tcGxldGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIaChhSZXF1ZXN0RGF0YUV4cG9ydFJlcXVlc3QiLgoWR2V0RXhwb3J0U3RhdHVzUmVxdWVzdBIUCgJpZBgBIAEoCUIIukgFcgOwAQEiGAoWUmVxdWVzdERlbGV0aW9uUmVxdWVzdCIwChhHZXREZWxldGlvblN0YXR1c1JlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIowCCglNRkFEZXZpY2USFAoCaWQYASABKAlCCLpIBXIDsAEBEhkKB3VzZXJfaWQYAiABKAlCCLpIBXIDsAEBEi0KC2RldmljZV90eXBlGAMgASgOMhguY3VzdG9tZXJzLk1GQURldmljZVR5cGUSDAoEbmFtZRgEIAEoCRIvCgt2ZXJpZmllZF9hdBgFIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMbGFzdF91c2VkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgpjcmVhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCISChBTZXR1cFRPVFBSZXF1ZXN0IlMKEVNldHVwVE9UUFJlc3BvbnNlEg4KBnNlY3JldBgBIAEoCRIYChBwcm92aXNpb25pbmdfdXJpGAIgASgJEhQKDGJhY2t1cF9jb2RlcxgDIAMoCSI2ChFWZXJpZnlUT1RQUmVxdWVzdBIhCgRjb2RlGAEgASgJQhO6SBByDhAGGAYyCF5bMC05XSskIkkKElZlcmlmeVRPVFBSZXNwb25zZRINCgV2YWxpZBgBIAEoCBIkCgZkZXZpY2UYAiABKAsyFC5jdXN0b21lcnMuTUZBRGV2aWNlIhcKFUxpc3RNRkFEZXZpY2VzUmVxdWVzdCI/ChZMaXN0TUZBRGV2aWNlc1Jlc3BvbnNlEiUKB2RldmljZXMYASADKAsyFC5jdXN0b21lcnMuTUZBRGV2aWNlIi4KFlJldm9rZU1GQURldmljZVJlcXVlc3QSFAoCaWQYASABKAlCCLpIBXIDsAEBIhwKGkdlbmVyYXRlQmFja3VwQ29kZXNSZXF1ZXN0IjMKG0dlbmVyYXRlQmFja3VwQ29kZXNSZXNwb25zZRIUCgxiYWNrdXBfY29kZXMYASADKAkirQEKDE9yZ1NTT0NvbmZpZxIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEhAKCHByb3ZpZGVyGAIgASgJEhUKDWNvbm5lY3Rpb25faWQYAyABKAkSFwoPb3JnYW5pemF0aW9uX2lkGAQgASgJEg4KBnN0YXR1cxgFIAEoCRIxCg1jb25maWd1cmVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCIsChBHZXRPcmdTU09SZXF1ZXN0EhgKBm9yZ19pZBgBIAEoCUIIukgFcgOwAQEiTgoUU3RhcnRTU09TZXR1cFJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIcCgpyZXR1cm5fdXJsGAIgASgJQgi6SAVyA4gBASIsChVTdGFydFNTT1NldHVwUmVzcG9uc2USEwoLcG9ydGFsX2xpbmsYASABKAkiLQoRRGlzYWJsZVNTT1JlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABASJSChhPcGVuQmlsbGluZ1BvcnRhbFJlcXVlc3QSGAoGb3JnX2lkGAEgASgJQgi6SAVyA7ABARIcCgpyZXR1cm5fdXJsGAIgASgJQgi6SAVyA4gBASIoChlPcGVuQmlsbGluZ1BvcnRhbFJlc3BvbnNlEgsKA3VybBgBIAEoCSKwAgoHSW52b2ljZRIKCgJpZBgBIAEoCRIOCgZudW1iZXIYAiABKAkSDgoGc3RhdHVzGAMgASgJEhIKCmFtb3VudF9kdWUYBCABKAMSEwoLYW1vdW50X3BhaWQYBSABKAMSEAoIY3VycmVuY3kYBiABKAkSKwoHY3JlYXRlZBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASGgoSaG9zdGVkX2ludm9pY2VfdXJsGAggASgJEhMKC2ludm9pY2VfcGRmGAkgASgJEjAKDHBlcmlvZF9zdGFydBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKcGVyaW9kX2VuZBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiPgoTTGlzdEludm9pY2VzUmVxdWVzdBIYCgZvcmdfaWQYASABKAlCCLpIBXIDsAEBEg0KBWxpbWl0GAIgASgFIjwKFExpc3RJbnZvaWNlc1Jlc3BvbnNlEiQKCGludm9pY2VzGAEgAygLMhIuY3VzdG9tZXJzLkludm9pY2UirQEKEVVzZXJFbWFpbFNldHRpbmdzEhQKB3Byb2R1Y3QYASABKAhIAIgBARIWCgltYXJrZXRpbmcYAiABKAhIAYgBARIVCghzZWN1cml0eRgDIAEoCEgCiAEBEhoKDXdlZWtseV9kaWdlc3QYBCABKAhIA4gBAUIKCghfcHJvZHVjdEIMCgpfbWFya2V0aW5nQgsKCV9zZWN1cml0eUIQCg5fd2Vla2x5X2RpZ2VzdCJ0ChhVc2VyTm90aWZpY2F0aW9uU2V0dGluZ3MSEwoGaW5fYXBwGAEgASgISACIAQESEQoEcHVzaBgCIAEoCEgBiAEBEhIKBXNvdW5kGAMgASgISAKIAQFCCQoHX2luX2FwcEIHCgVfcHVzaEIICgZfc291bmQi0wIKDFVzZXJTZXR0aW5ncxISCgV0aGVtZRgBIAEoCUgAiAEBEhMKBmxvY2FsZRgCIAEoCUgBiAEBEhUKCHRpbWV6b25lGAMgASgJSAKIAQESGAoLZGF0ZV9mb3JtYXQYBCABKAlIA4gBARIYCgt0aW1lX2Zvcm1hdBgFIAEoCUgEiAEBEjAKBWVtYWlsGAYgASgLMhwuY3VzdG9tZXJzLlVzZXJFbWFpbFNldHRpbmdzSAWIAQESPwoNbm90aWZpY2F0aW9ucxgHIAEoCzIjLmN1c3RvbWVycy5Vc2VyTm90aWZpY2F0aW9uU2V0dGluZ3NIBogBAUIICgZfdGhlbWVCCQoHX2xvY2FsZUILCglfdGltZXpvbmVCDgoMX2RhdGVfZm9ybWF0Qg4KDF90aW1lX2Zvcm1hdEIICgZfZW1haWxCEAoOX25vdGlmaWNhdGlvbnMiGAoWR2V0VXNlclNldHRpbmdzUmVxdWVzdCJDChlVcGRhdGVVc2VyU2V0dGluZ3NSZXF1ZXN0EiYKBXBhdGNoGAEgASgLMhcuY3VzdG9tZXJzLlVzZXJTZXR0aW5ncyJjCgtTZXJ2aWNlSW5mbxIMCgRuYW1lGAEgASgJEg4KBm1vZHVsZRgCIAEoCRIPCgd2ZXJzaW9uGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhAKCHJlcG9fdXJsGAUgASgJIqMBCgdSUENJbmZvEg8KB3NlcnZpY2UYASABKAkSDgoGbWV0aG9kGAIgASgJEhMKC2h0dHBfbWV0aG9kGAMgASgJEhEKCWh0dHBfcGF0aBgEIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCRIOCgZzY29wZXMYBiADKAkSFQoNaGFuZGxlcl9hdXRoehgHIAEoCRITCgtlbWl0c19hdWRpdBgIIAEoCCJfCg5QZXJtaXNzaW9uSW5mbxIQCghyZXNvdXJjZRgBIAEoCRIOCgZhY3Rpb24YAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSFgoOYnVpbHRfaW5fcm9sZXMYBCADKAkibgoNUkxTUG9saWN5SW5mbxINCgV0YWJsZRgBIAEoCRIUCgxwb2xpY3lfc2hhcGUYAiABKAkSEwoLZmFpbF9jbG9zZWQYAyABKAgSFAoMc2NvcGVfY29sdW1uGAQgASgJEg0KBW5vdGVzGAUgASgJIi8KCVNjb3BlSW5mbxINCgVzY29wZRgBIAEoCRITCgtkZXNjcmlwdGlvbhgCIAEoCSLhAQoTU2VydmljZUNhcGFiaWxpdGllcxIkCgRpbmZvGAEgASgLMhYuY3VzdG9tZXJzLlNlcnZpY2VJbmZvEiAKBHJwY3MYAiADKAsyEi5jdXN0b21lcnMuUlBDSW5mbxIuCgtwZXJtaXNzaW9ucxgDIAMoCzIZLmN1c3RvbWVycy5QZXJtaXNzaW9uSW5mbxIsCgpybHNfdGFibGVzGAQgAygLMhguY3VzdG9tZXJzLlJMU1BvbGljeUluZm8SJAoGc2NvcGVzGAUgAygLMhQuY3VzdG9tZXJzLlNjb3BlSW5mbyIXChVHZXRTZXJ2aWNlSW5mb1JlcXVlc3QiTgoWR2V0U2VydmljZUluZm9SZXNwb25zZRI0CgxjYXBhYmlsaXRpZXMYASABKAsyHi5jdXN0b21lcnMuU2VydmljZUNhcGFiaWxpdGllcyqPAQoKVXNlclN0YXR1cxIbChdVU0VSX1NUQVRVU19VTlNQRUNJRklFRBAAEhYKElVTRVJfU1RBVFVTX0FDVElWRRABEhgKFFVTRVJfU1RBVFVTX0lOQUNUSVZFEAISGQoVVVNFUl9TVEFUVVNfU1VTUEVOREVEEAMSFwoTVVNFUl9TVEFUVVNfREVMRVRFRBAEKmAKB09yZ1JvbGUSGAoUT1JHX1JPTEVfVU5TUEVDSUZJRUQQABITCg9PUkdfUk9MRV9NRU1CRVIQARISCg5PUkdfUk9MRV9BRE1JThACEhIKDk9SR19ST0xFX09XTkVSEAMqZQoIVGVhbVJvbGUSGQoVVEVBTV9ST0xFX1VOU1BFQ0lGSUVEEAASFAoQVEVBTV9ST0xFX01FTUJFUhABEhMKD1RFQU1fUk9MRV9BRE1JThACEhMKD1RFQU1fUk9MRV9PV05FUhADKlkKC1N1YmplY3RLaW5kEhwKGFNVQkpFQ1RfS0lORF9VTlNQRUNJRklFRBAAEhUKEVNVQkpFQ1RfS0lORF9VU0VSEAESFQoRU1VCSkVDVF9LSU5EX1RFQU0QAip/Cg1QcmluY2lwYWxLaW5kEh4KGlBSSU5DSVBBTF9LSU5EX1VOU1BFQ0lGSUVEEAASGAoUUFJJTkNJUEFMX0tJTkRfSFVNQU4QARIaChZQUklOQ0lQQUxfS0lORF9TRVJWSUNFEAISGAoUUFJJTkNJUEFMX0tJTkRfQUdFTlQQAypqCghEZWNpc2lvbhIYChRERUNJU0lPTl9VTlNQRUNJRklFRBAAEhIKDkRFQ0lTSU9OX0FMTE9XEAESEQoNREVDSVNJT05fREVOWRACEh0KGURFQ0lTSU9OX1JFUVVJUkVfQVBQUk9WQUwQAyp0ChFBUElLZXlFbnZpcm9ubWVudBIjCh9BUElfS0VZX0VOVklST05NRU5UX1VOU1BFQ0lGSUVEEAASHAoYQVBJX0tFWV9FTlZJUk9OTUVOVF9MSVZFEAESHAoYQVBJX0tFWV9FTlZJUk9OTUVOVF9URVNUEAIqsgEKEEludml0YXRpb25TdGF0dXMSIQodSU5WSVRBVElPTl9TVEFUVVNfVU5TUEVDSUZJRUQQABIdChlJTlZJVEFUSU9OX1NUQVRVU19QRU5ESU5HEAESHgoaSU5WSVRBVElPTl9TVEFUVVNfQUNDRVBURUQQAhIdChlJTlZJVEFUSU9OX1NUQVRVU19SRVZPS0VEEAMSHQoZSU5WSVRBVElPTl9TVEFUVVNfRVhQSVJFRBAEKq4BChVXZWJob29rRGVsaXZlcnlTdGF0dXMSJwojV0VCSE9PS19ERUxJVkVSWV9TVEFUVVNfVU5TUEVDSUZJRUQQABIjCh9XRUJIT09LX0RFTElWRVJZX1NUQVRVU19QRU5ESU5HEAESIwofV0VCSE9PS19ERUxJVkVSWV9TVEFUVVNfU1VDQ0VTUxACEiIKHldFQkhPT0tfREVMSVZFUllfU1RBVFVTX0ZBSUxFRBADKqwBChRPbmJvYXJkaW5nU3RlcFN0YXR1cxImCiJPTkJPQVJESU5HX1NURVBfU1RBVFVTX1VOU1BFQ0lGSUVEEAASIgoeT05CT0FSRElOR19TVEVQX1NUQVRVU19QRU5ESU5HEAESJAogT05CT0FSRElOR19TVEVQX1NUQVRVU19DT01QTEVURUQQAhIiCh5PTkJPQVJESU5HX1NURVBfU1RBVFVTX1NLSVBQRUQQAypyCg9HRFBSUmVxdWVzdFR5cGUSIQodR0RQUl9SRVFVRVNUX1RZUEVfVU5TUEVDSUZJRUQQABIcChhHRFBSX1JFUVVFU1RfVFlQRV9FWFBPUlQQARIeChpHRFBSX1JFUVVFU1RfVFlQRV9ERUxFVElPThACKsABChFHRFBSUmVxdWVzdFN0YXR1cxIjCh9HRFBSX1JFUVVFU1RfU1RBVFVTX1VOU1BFQ0lGSUVEEAASHwobR0RQUl9SRVFVRVNUX1NUQVRVU19QRU5ESU5HEAESIgoeR0RQUl9SRVFVRVNUX1NUQVRVU19QUk9DRVNTSU5HEAISIQodR0RQUl9SRVFVRVNUX1NUQVRVU19DT01QTEVURUQQAxIeChpHRFBSX1JFUVVFU1RfU1RBVFVTX0ZBSUxFRBAEKmgKDU1GQURldmljZVR5cGUSHwobTUZBX0RFVklDRV9UWVBFX1VOU1BFQ0lGSUVEEAASGAoUTUZBX0RFVklDRV9UWVBFX1RPVFAQARIcChhNRkFfREVWSUNFX1RZUEVfV0VCQVVUSE4QAjKWCAoLVXNlclNlcnZpY2USVQoHVmVyc2lvbhIZLmN1c3RvbWVycy5WZXJzaW9uUmVxdWVzdBoaLmN1c3RvbWVycy5WZXJzaW9uUmVzcG9uc2UiE4LT5JMCDRILL3YxL3ZlcnNpb24SWAoHR2V0U2VsZhIZLmN1c3RvbWVycy5HZXRTZWxmUmVxdWVzdBoaLmN1c3RvbWVycy5HZXRTZWxmUmVzcG9uc2UiFoLT5JMCEBIOL3YxL3VzZXJzL3NlbGYSZQoMUmVnaXN0ZXJVc2VyEh4uY3VzdG9tZXJzLlJlZ2lzdGVyVXNlclJlcXVlc3QaHy5jdXN0b21lcnMuUmVnaXN0ZXJVc2VyUmVzcG9uc2UiFILT5JMCDjoBKiIJL3YxL3VzZXJzEmQKB0dldFVzZXISGS5jdXN0b21lcnMuR2V0VXNlclJlcXVlc3QaDy5jdXN0b21lcnMuVXNlciItgtPkkwInWhMSES92MS91c2VyczpieUVtYWlsEhAvdjEvdXNlcnMve3V1aWR9ElkKCUxpc3RVc2VycxIbLmN1c3RvbWVycy5MaXN0VXNlcnNSZXF1ZXN0GhwuY3VzdG9tZXJzLkxpc3RVc2Vyc1Jlc3BvbnNlIhGC0+STAgsSCS92MS91c2VycxJbCgpVcGRhdGVVc2VyEhwuY3VzdG9tZXJzLlVwZGF0ZVVzZXJSZXF1ZXN0Gg8uY3VzdG9tZXJzLlVzZXIiHoLT5JMCGDoEdXNlcjIQL3YxL3VzZXJzL3t1dWlkfRJZCgpEZWxldGVVc2VyEhkuY3VzdG9tZXJzLkdldFVzZXJSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhiC0+STAhIqEC92MS91c2Vycy97dXVpZH0SeQoLQWRkSWRlbnRpdHkSHS5jdXN0b21lcnMuQWRkSWRlbnRpdHlSZXF1ZXN0GhcuY3VzdG9tZXJzLlVzZXJJZGVudGl0eSIygtPkkwIsOghpZGVudGl0eSIgL3YxL3VzZXJzL3t1c2VyX3V1aWR9L2lkZW50aXRpZXMSbQoSRmluZFVzZXJCeUlkZW50aXR5EiQuY3VzdG9tZXJzLkZpbmRVc2VyQnlJZGVudGl0eVJlcXVlc3QaDy5jdXN0b21lcnMuVXNlciIggtPkkwIaEhgvdjEvdXNlcnM6ZmluZEJ5SWRlbnRpdHkSiwEKEkxpc3RVc2VySWRlbnRpdGllcxIkLmN1c3RvbWVycy5MaXN0VXNlcklkZW50aXRpZXNSZXF1ZXN0GiUuY3VzdG9tZXJzLkxpc3RVc2VySWRlbnRpdGllc1Jlc3BvbnNlIiiC0+STAiISIC92MS91c2Vycy97dXNlcl91dWlkfS9pZGVudGl0aWVzMvEHChNPcmdhbml6YXRpb25TZXJ2aWNlEn8KEkNyZWF0ZU9yZ2FuaXphdGlvbhIkLmN1c3RvbWVycy5DcmVhdGVPcmdhbml6YXRpb25SZXF1ZXN0GiUuY3VzdG9tZXJzLkNyZWF0ZU9yZ2FuaXphdGlvblJlc3BvbnNlIhyC0+STAhY6ASoiES92MS9vcmdhbml6YXRpb25zEm0KD0dldE9yZ2FuaXphdGlvbhIhLmN1c3RvbWVycy5HZXRPcmdhbml6YXRpb25SZXF1ZXN0GhcuY3VzdG9tZXJzLk9yZ2FuaXphdGlvbiIegtPkkwIYEhYvdjEvb3JnYW5pemF0aW9ucy97aWR9EnkKEUxpc3RPcmdhbml6YXRpb25zEiMuY3VzdG9tZXJzLkxpc3RPcmdhbml6YXRpb25zUmVxdWVzdBokLmN1c3RvbWVycy5MaXN0T3JnYW5pemF0aW9uc1Jlc3BvbnNlIhmC0+STAhMSES92MS9vcmdhbml6YXRpb25zEnIKCUFkZE1lbWJlchIeLmN1c3RvbWVycy5BZGRPcmdNZW1iZXJSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Ii2C0+STAic6ASoiIi92MS9vcmdhbml6YXRpb25zL3tvcmdfaWR9L21lbWJlcnMSfwoMUmVtb3ZlTWVtYmVyEiEuY3VzdG9tZXJzLlJlbW92ZU9yZ01lbWJlclJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiNILT5JMCLiosL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vbWVtYmVycy97dXNlcl9pZH0SfgoLTGlzdE1lbWJlcnMSIC5jdXN0b21lcnMuTGlzdE9yZ01lbWJlcnNSZXF1ZXN0GiEuY3VzdG9tZXJzLkxpc3RPcmdNZW1iZXJzUmVzcG9uc2UiKoLT5JMCJBIiL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vbWVtYmVycxJ3Cg5HZXRPcmdTZXR0aW5ncxIgLmN1c3RvbWVycy5HZXRPcmdTZXR0aW5nc1JlcXVlc3QaFi5jdXN0b21lcnMuT3JnU2V0dGluZ3MiK4LT5JMCJRIjL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vc2V0dGluZ3MSgAEKEVVwZGF0ZU9yZ1NldHRpbmdzEiMuY3VzdG9tZXJzLlVwZGF0ZU9yZ1NldHRpbmdzUmVxdWVzdBoWLmN1c3RvbWVycy5PcmdTZXR0aW5ncyIugtPkkwIoOgEqGiMvdjEvb3JnYW5pemF0aW9ucy97b3JnX2lkfS9zZXR0aW5nczKnBgoLVGVhbVNlcnZpY2USdgoKQ3JlYXRlVGVhbRIcLmN1c3RvbWVycy5DcmVhdGVUZWFtUmVxdWVzdBodLmN1c3RvbWVycy5DcmVhdGVUZWFtUmVzcG9uc2UiK4LT5JMCJToBKiIgL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vdGVhbXMScAoJTGlzdFRlYW1zEhsuY3VzdG9tZXJzLkxpc3RUZWFtc1JlcXVlc3QaHC5jdXN0b21lcnMuTGlzdFRlYW1zUmVzcG9uc2UiKILT5JMCIhIgL3YxL29yZ2FuaXphdGlvbnMve29yZ19pZH0vdGVhbXMSbAoJQWRkTWVtYmVyEh8uY3VzdG9tZXJzLkFkZFRlYW1NZW1iZXJSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiaC0+STAiA6ASoiGy92MS90ZWFtcy97dGVhbV9pZH0vbWVtYmVycxJ5CgxSZW1vdmVNZW1iZXISIi5jdXN0b21lcnMuUmVtb3ZlVGVhbU1lbWJlclJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiLYLT5JMCJyolL3YxL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzL3t1c2VyX2lkfRJ5CgtMaXN0TWVtYmVycxIhLmN1c3RvbWVycy5MaXN0VGVhbU1lbWJlcnNSZXF1ZXN0GiIuY3VzdG9tZXJzLkxpc3RUZWFtTWVtYmVyc1Jlc3BvbnNlIiOC0+STAh0SGy92MS90ZWFtcy97dGVhbV9pZH0vbWVtYmVycxJpCgpVcGRhdGVUZWFtEhwuY3VzdG9tZXJzLlVwZGF0ZVRlYW1SZXF1ZXN0Gh0uY3VzdG9tZXJzLlVwZGF0ZVRlYW1SZXNwb25zZSIegtPkkwIYOgEqMhMvdjEvdGVhbXMve3RlYW1faWR9El8KCkRlbGV0ZVRlYW0SHC5jdXN0b21lcnMuRGVsZXRlVGVhbVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiG4LT5JMCFSoTL3YxL3RlYW1zL3t0ZWFtX2lkfTLcBgoRUGVybWlzc2lvblNlcnZpY2USXwoKQ3JlYXRlUm9sZRIcLmN1c3RvbWVycy5DcmVhdGVSb2xlUmVxdWVzdBodLmN1c3RvbWVycy5DcmVhdGVSb2xlUmVzcG9uc2UiFILT5JMCDjoBKiIJL3YxL3JvbGVzElkKCUxpc3RSb2xlcxIbLmN1c3RvbWVycy5MaXN0Um9sZXNSZXF1ZXN0GhwuY3VzdG9tZXJzLkxpc3RSb2xlc1Jlc3BvbnNlIhGC0+STAgsSCS92MS9yb2xlcxJaCgpEZWxldGVSb2xlEhwuY3VzdG9tZXJzLkRlbGV0ZVJvbGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IhaC0+STAhAqDi92MS9yb2xlcy97aWR9EmoKCkFzc2lnblJvbGUSHC5jdXN0b21lcnMuQXNzaWduUm9sZVJlcXVlc3QaHS5jdXN0b21lcnMuQXNzaWduUm9sZVJlc3BvbnNlIh+C0+STAhk6ASoiFC92MS9yb2xlLWFzc2lnbm1lbnRzEmAKClJldm9rZVJvbGUSHC5jdXN0b21lcnMuUmV2b2tlUm9sZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHILT5JMCFioUL3YxL3JvbGUtYXNzaWdubWVudHMSggEKE0xpc3RSb2xlQXNzaWdubWVudHMSJS5jdXN0b21lcnMuTGlzdFJvbGVBc3NpZ25tZW50c1JlcXVlc3QaJi5jdXN0b21lcnMuTGlzdFJvbGVBc3NpZ25tZW50c1Jlc3BvbnNlIhyC0+STAhYSFC92MS9yb2xlLWFzc2lnbm1lbnRzEnoKD0NoZWNrUGVybWlzc2lvbhIhLmN1c3RvbWVycy5DaGVja1Blcm1pc3Npb25SZXF1ZXN0GiIuY3VzdG9tZXJzLkNoZWNrUGVybWlzc2lvblJlc3BvbnNlIiCC0+STAho6ASoiFS92MS9wZXJtaXNzaW9uczpjaGVjaxJgCgZEZWNpZGUSGC5jdXN0b21lcnMuRGVjaWRlUmVxdWVzdBoZLmN1c3RvbWVycy5EZWNpZGVSZXNwb25zZSIhgtPkkwIbOgEqIhYvdjEvcGVybWlzc2lvbnM6ZGVjaWRlMsAEChBQcmluY2lwYWxTZXJ2aWNlEmEKDEdldFByaW5jaXBhbBIeLmN1c3RvbWVycy5HZXRQcmluY2lwYWxSZXF1ZXN0GhQuY3VzdG9tZXJzLlByaW5jaXBhbCIbgtPkkwIVEhMvdjEvcHJpbmNpcGFscy97aWR9Em4KEUdldEFnZW50UHJpbmNpcGFsEiMuY3VzdG9tZXJzLkdldEFnZW50UHJpbmNpcGFsUmVxdWVzdBoULmN1c3RvbWVycy5QcmluY2lwYWwiHoLT5JMCGBIWL3YxL3ByaW5jaXBhbHM6YnlBZ2VudBJ1ChRDcmVhdGVBZ2VudFByaW5jaXBhbBImLmN1c3RvbWVycy5DcmVhdGVBZ2VudFByaW5jaXBhbFJlcXVlc3QaFC5jdXN0b21lcnMuUHJpbmNpcGFsIh+C0+STAhk6ASoiFC92MS9wcmluY2lwYWxzOmFnZW50EnMKD1Jldm9rZVByaW5jaXBhbBIhLmN1c3RvbWVycy5SZXZva2VQcmluY2lwYWxSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiWC0+STAh86ASoiGi92MS9wcmluY2lwYWxzL3tpZH06cmV2b2tlEm0KDkxpc3RQcmluY2lwYWxzEiAuY3VzdG9tZXJzLkxpc3RQcmluY2lwYWxzUmVxdWVzdBohLmN1c3RvbWVycy5MaXN0UHJpbmNpcGFsc1Jlc3BvbnNlIhaC0+STAhASDi92MS9wcmluY2lwYWxzMpcEChFEZWxlZ2F0aW9uU2VydmljZRJ6ChFSZXF1ZXN0RGVsZWdhdGlvbhIjLmN1c3RvbWVycy5SZXF1ZXN0RGVsZWdhdGlvblJlcXVlc3QaJC5jdXN0b21lcnMuUmVxdWVzdERlbGVnYXRpb25SZXNwb25zZSIagtPkkwIUOgEqIg8vdjEvZGVsZWdhdGlvbnMSeQoRV2FpdEZvckRlbGVnYXRpb24SIy5jdXN0b21lcnMuV2FpdEZvckRlbGVnYXRpb25SZXF1ZXN0GhouY3VzdG9tZXJzLkRlbGVnYXRpb25FdmVudCIhgtPkkwIbEhkvdjEvZGVsZWdhdGlvbnMve2lkfTp3YWl0MAESegoQRGVjaWRlRGVsZWdhdGlvbhIiLmN1c3RvbWVycy5EZWNpZGVEZWxlZ2F0aW9uUmVxdWVzdBoaLmN1c3RvbWVycy5EZWxlZ2F0aW9uR3JhbnQiJoLT5JMCIDoBKiIbL3YxL2RlbGVnYXRpb25zL3tpZH06ZGVjaWRlEo4BChZMaXN0UGVuZGluZ0RlbGVnYXRpb25zEiguY3VzdG9tZXJzLkxpc3RQZW5kaW5nRGVsZWdhdGlvbnNSZXF1ZXN0GikuY3VzdG9tZXJzLkxpc3RQZW5kaW5nRGVsZWdhdGlvbnNSZXNwb25zZSIfgtPkkwIZEhcvdjEvZGVsZWdhdGlvbnM6cGVuZGluZzKMAQoPSWRlbnRpdHlTZXJ2aWNlEnkKD1Jlc29sdmVJZGVudGl0eRIhLmN1c3RvbWVycy5SZXNvbHZlSWRlbnRpdHlSZXF1ZXN0GiIuY3VzdG9tZXJzLlJlc29sdmVJZGVudGl0eVJlc3BvbnNlIh+C0+STAhk6ASoiFC92MS9pZGVudGl0eTpyZXNvbHZlMrkDCg1BUElLZXlTZXJ2aWNlEmgKDENyZWF0ZUFQSUtleRIeLmN1c3RvbWVycy5DcmVhdGVBUElLZXlSZXF1ZXN0Gh8uY3VzdG9tZXJzLkNyZWF0ZUFQSUtleVJlc3BvbnNlIheC0+STAhE6ASoiDC92MS9hcGkta2V5cxJiCgtMaXN0QVBJS2V5cxIdLmN1c3RvbWVycy5MaXN0QVBJS2V5c1JlcXVlc3QaHi5jdXN0b21lcnMuTGlzdEFQSUtleXNSZXNwb25zZSIUgtPkkwIOEgwvdjEvYXBpLWtleXMSYQoMUmV2b2tlQVBJS2V5Eh4uY3VzdG9tZXJzLlJldm9rZUFQSUtleVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiGYLT5JMCEyoRL3YxL2FwaS1rZXlzL3tpZH0SdwoOVmFsaWRhdGVBUElLZXkSIC5jdXN0b21lcnMuVmFsaWRhdGVBUElLZXlSZXF1ZXN0GiEuY3VzdG9tZXJzLlZhbGlkYXRlQVBJS2V5UmVzcG9uc2UiIILT5JMCGjoBKiIVL3YxL2FwaS1rZXlzOnZhbGlkYXRlMvICChJBdWRpdEV4cG9ydFNlcnZpY2USdAoJR2V0Q29uZmlnEiYuY3VzdG9tZXJzLkdldEF1ZGl0RXhwb3J0Q29uZmlnUmVxdWVzdBocLmN1c3RvbWVycy5BdWRpdEV4cG9ydENvbmZpZyIhgtPkkwIbEhkvdjEvYXVkaXQtZXhwb3J0L3tvcmdfaWR9EnAKClNhdmVDb25maWcSJy5jdXN0b21lcnMuU2F2ZUF1ZGl0RXhwb3J0Q29uZmlnUmVxdWVzdBocLmN1c3RvbWVycy5BdWRpdEV4cG9ydENvbmZpZyIbgtPkkwIVOgEqIhAvdjEvYXVkaXQtZXhwb3J0EnQKDERlbGV0ZUNvbmZpZxIpLmN1c3RvbWVycy5EZWxldGVBdWRpdEV4cG9ydENvbmZpZ1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiIYLT5JMCGyoZL3YxL2F1ZGl0LWV4cG9ydC97b3JnX2lkfTLbAQoOQ29uc2VudFNlcnZpY2USZQoJR2V0U3RhdHVzEiIuY3VzdG9tZXJzLkdldENvbnNlbnRTdGF0dXNSZXF1ZXN0GhguY3VzdG9tZXJzLkNvbnNlbnRTdGF0dXMiGoLT5JMCFBISL3YxL2NvbnNlbnQvc3RhdHVzEmIKBkFjY2VwdBIfLmN1c3RvbWVycy5BY2NlcHRDb25zZW50UmVxdWVzdBoYLmN1c3RvbWVycy5Db25zZW50U3RhdHVzIh2C0+STAhc6ASoiEi92MS9jb25zZW50L2FjY2VwdDKWBAoLQXV0aFNlcnZpY2USagoKQmVnaW5PQXV0aBIcLmN1c3RvbWVycy5CZWdpbk9BdXRoUmVxdWVzdBodLmN1c3RvbWVycy5CZWdpbk9BdXRoUmVzcG9uc2UiH4LT5JMCGToBKiIUL3YxL2F1dGgvb2F1dGgvYmVnaW4ScQoMQXV0aGVudGljYXRlEh4uY3VzdG9tZXJzLkF1dGhlbnRpY2F0ZVJlcXVlc3QaHy5jdXN0b21lcnMuQXV0aGVudGljYXRlUmVzcG9uc2UiIILT5JMCGjoBKiIVL3YxL2F1dGgvYXV0aGVudGljYXRlEmwKDFJlZnJlc2hUb2tlbhIeLmN1c3RvbWVycy5SZWZyZXNoVG9rZW5SZXF1ZXN0Gh8uY3VzdG9tZXJzLlJlZnJlc2hUb2tlblJlc3BvbnNlIhuC0+STAhU6ASoiEC92MS9hdXRoL3JlZnJlc2gSVgoGTG9nb3V0EhguY3VzdG9tZXJzLkxvZ291dFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiGoLT5JMCFDoBKiIPL3YxL2F1dGgvbG9nb3V0EmIKB0dldEpXS1MSFi5nb29nbGUucHJvdG9idWYuRW1wdHkaFy5jdXN0b21lcnMuSldLU1Jlc3BvbnNlIiaC0+STAiASHi92MS9hdXRoLy53ZWxsLWtub3duL2p3a3MuanNvbjLxAQoMQXVkaXRTZXJ2aWNlEmkKDVF1ZXJ5QXVkaXRMb2cSHy5jdXN0b21lcnMuUXVlcnlBdWRpdExvZ1JlcXVlc3QaIC5jdXN0b21lcnMuUXVlcnlBdWRpdExvZ1Jlc3BvbnNlIhWC0+STAg8SDS92MS9hdWRpdC1sb2cSdgoORXhwb3J0QXVkaXRMb2cSIC5jdXN0b21lcnMuRXhwb3J0QXVkaXRMb2dSZXF1ZXN0GiEuY3VzdG9tZXJzLkV4cG9ydEF1ZGl0TG9nUmVzcG9uc2UiH4LT5JMCGToBKiIUL3YxL2F1ZGl0LWxvZzpleHBvcnQyvA0KFFBsYXRmb3JtQWRtaW5TZXJ2aWNlEmgKC1NlYXJjaFVzZXJzEh0uY3VzdG9tZXJzLlNlYXJjaFVzZXJzUmVxdWVzdBoeLmN1c3RvbWVycy5TZWFyY2hVc2Vyc1Jlc3BvbnNlIhqC0+STAhQSEi92MS9wbGF0Zm9ybS91c2VycxJ1CgtTdXNwZW5kVXNlchIdLmN1c3RvbWVycy5TdXNwZW5kVXNlclJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiL4LT5JMCKToBKiIkL3YxL3BsYXRmb3JtL3VzZXJzL3t1c2VyX2lkfTpzdXNwZW5kEnsKDVVuc3VzcGVuZFVzZXISHy5jdXN0b21lcnMuVW5zdXNwZW5kVXNlclJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiMYLT5JMCKzoBKiImL3YxL3BsYXRmb3JtL3VzZXJzL3t1c2VyX2lkfTp1bnN1c3BlbmQSjQEKD0ltcGVyc29uYXRlVXNlchIhLmN1c3RvbWVycy5JbXBlcnNvbmF0ZVVzZXJSZXF1ZXN0GiIuY3VzdG9tZXJzLkltcGVyc29uYXRlVXNlclJlc3BvbnNlIjOC0+STAi06ASoiKC92MS9wbGF0Zm9ybS91c2Vycy97dXNlcl9pZH06aW1wZXJzb25hdGUSgAEKEkxpc3RBY3RpdmVTZXNzaW9ucxIkLmN1c3RvbWVycy5MaXN0QWN0aXZlU2Vzc2lvbnNSZXF1ZXN0GiUuY3VzdG9tZXJzLkxpc3RBY3RpdmVTZXNzaW9uc1Jlc3BvbnNlIh2C0+STAhcSFS92MS9wbGF0Zm9ybS9zZXNzaW9ucxJ0Cg1SZXZva2VTZXNzaW9uEh8uY3VzdG9tZXJzLlJldm9rZVNlc3Npb25SZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiqC0+STAiQqIi92MS9wbGF0Zm9ybS9zZXNzaW9ucy97c2Vzc2lvbl9pZH0SmwEKEkdldE9yZ0VudGl0bGVtZW50cxIkLmN1c3RvbWVycy5HZXRPcmdFbnRpdGxlbWVudHNSZXF1ZXN0GiUuY3VzdG9tZXJzLkdldE9yZ0VudGl0bGVtZW50c1Jlc3BvbnNlIjiC0+STAjISMC92MS9wbGF0Zm9ybS9vcmdhbml6YXRpb25zL3tvcmdfaWR9L2VudGl0bGVtZW50cxKhAQoTT3ZlcnJpZGVFbnRpdGxlbWVudBIlLmN1c3RvbWVycy5PdmVycmlkZUVudGl0bGVtZW50UmVxdWVzdBomLmN1c3RvbWVycy5PdmVycmlkZUVudGl0bGVtZW50UmVzcG9uc2UiO4LT5JMCNToBKiIwL3YxL3BsYXRmb3JtL29yZ2FuaXphdGlvbnMve29yZ19pZH0vZW50aXRsZW1lbnRzEnAKEUdyYW50UGxhdGZvcm1Sb2xlEiMuY3VzdG9tZXJzLkdyYW50UGxhdGZvcm1Sb2xlUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIegtPkkwIYOgEqIhMvdjEvcGxhdGZvcm0vYWRtaW5zEnkKElJldm9rZVBsYXRmb3JtUm9sZRIkLmN1c3RvbWVycy5SZXZva2VQbGF0Zm9ybVJvbGVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiWC0+STAh8qHS92MS9wbGF0Zm9ybS9hZG1pbnMve3VzZXJfaWR9En4KEkxpc3RQbGF0Zm9ybUFkbWlucxIkLmN1c3RvbWVycy5MaXN0UGxhdGZvcm1BZG1pbnNSZXF1ZXN0GiUuY3VzdG9tZXJzLkxpc3RQbGF0Zm9ybUFkbWluc1Jlc3BvbnNlIhuC0+STAhUSEy92MS9wbGF0Zm9ybS9hZG1pbnMSfwoQTGlzdEZlYXR1cmVGbGFncxIiLmN1c3RvbWVycy5MaXN0RmVhdHVyZUZsYWdzUmVxdWVzdBojLmN1c3RvbWVycy5MaXN0RmVhdHVyZUZsYWdzUmVzcG9uc2UiIoLT5JMCHBIaL3YxL3BsYXRmb3JtL2ZlYXR1cmUtZmxhZ3MSjAEKEVVwc2VydEZlYXR1cmVGbGFnEiMuY3VzdG9tZXJzLlVwc2VydEZlYXR1cmVGbGFnUmVxdWVzdBokLmN1c3RvbWVycy5VcHNlcnRGZWF0dXJlRmxhZ1Jlc3BvbnNlIiyC0+STAiY6ASoaIS92MS9wbGF0Zm9ybS9mZWF0dXJlLWZsYWdzL3tuYW1lfTLtAwoRSW52aXRhdGlvblNlcnZpY2USdwoQQ3JlYXRlSW52aXRhdGlvbhIiLmN1c3RvbWVycy5DcmVhdGVJbnZpdGF0aW9uUmVxdWVzdBojLmN1c3RvbWVycy5DcmVhdGVJbnZpdGF0aW9uUmVzcG9uc2UiGoLT5JMCFDoBKiIPL3YxL2ludml0YXRpb25zEn4KEEFjY2VwdEludml0YXRpb24SIi5jdXN0b21lcnMuQWNjZXB0SW52aXRhdGlvblJlcXVlc3QaIy5jdXN0b21lcnMuQWNjZXB0SW52aXRhdGlvblJlc3BvbnNlIiGC0+STAhs6ASoiFi92MS9pbnZpdGF0aW9uczphY2NlcHQScQoPTGlzdEludml0YXRpb25zEiEuY3VzdG9tZXJzLkxpc3RJbnZpdGF0aW9uc1JlcXVlc3QaIi5jdXN0b21lcnMuTGlzdEludml0YXRpb25zUmVzcG9uc2UiF4LT5JMCERIPL3YxL2ludml0YXRpb25zEmwKEFJldm9rZUludml0YXRpb24SIi5jdXN0b21lcnMuUmV2b2tlSW52aXRhdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHILT5JMCFioUL3YxL2ludml0YXRpb25zL3tpZH0ylwgKDldlYmhvb2tTZXJ2aWNlEnoKEkNyZWF0ZVN1YnNjcmlwdGlvbhIrLmN1c3RvbWVycy5DcmVhdGVXZWJob29rU3Vic2NyaXB0aW9uUmVxdWVzdBoeLmN1c3RvbWVycy5XZWJob29rU3Vic2NyaXB0aW9uIheC0+STAhE6ASoiDC92MS93ZWJob29rcxJ0ChJEZWxldGVTdWJzY3JpcHRpb24SKy5jdXN0b21lcnMuRGVsZXRlV2ViaG9va1N1YnNjcmlwdGlvblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiGYLT5JMCEyoRL3YxL3dlYmhvb2tzL3tpZH0SggEKEUxpc3RTdWJzY3JpcHRpb25zEiouY3VzdG9tZXJzLkxpc3RXZWJob29rU3Vic2NyaXB0aW9uc1JlcXVlc3QaKy5jdXN0b21lcnMuTGlzdFdlYmhvb2tTdWJzY3JpcHRpb25zUmVzcG9uc2UiFILT5JMCDhIML3YxL3dlYmhvb2tzEpYBCg5MaXN0RGVsaXZlcmllcxInLmN1c3RvbWVycy5MaXN0V2ViaG9va0RlbGl2ZXJpZXNSZXF1ZXN0GiguY3VzdG9tZXJzLkxpc3RXZWJob29rRGVsaXZlcmllc1Jlc3BvbnNlIjGC0+STAisSKS92MS93ZWJob29rcy97c3Vic2NyaXB0aW9uX2lkfS9kZWxpdmVyaWVzEnUKC0dldERlbGl2ZXJ5EiQuY3VzdG9tZXJzLkdldFdlYmhvb2tEZWxpdmVyeVJlcXVlc3QaGi5jdXN0b21lcnMuV2ViaG9va0RlbGl2ZXJ5IiSC0+STAh4SHC92MS93ZWJob29rcy9kZWxpdmVyaWVzL3tpZH0ShQEKDlJlcGxheURlbGl2ZXJ5EicuY3VzdG9tZXJzLlJlcGxheVdlYmhvb2tEZWxpdmVyeVJlcXVlc3QaGi5jdXN0b21lcnMuV2ViaG9va0RlbGl2ZXJ5Ii6C0+STAig6ASoiIy92MS93ZWJob29rcy9kZWxpdmVyaWVzL3tpZH06cmVwbGF5EmsKC1Rlc3RXZWJob29rEh0uY3VzdG9tZXJzLlRlc3RXZWJob29rUmVxdWVzdBoaLmN1c3RvbWVycy5XZWJob29rRGVsaXZlcnkiIYLT5JMCGzoBKiIWL3YxL3dlYmhvb2tzL3tpZH06dGVzdBKIAQoMUm90YXRlU2VjcmV0EiUuY3VzdG9tZXJzLlJvdGF0ZVdlYmhvb2tTZWNyZXRSZXF1ZXN0GiYuY3VzdG9tZXJzLlJvdGF0ZVdlYmhvb2tTZWNyZXRSZXNwb25zZSIpgtPkkwIjOgEqIh4vdjEvd2ViaG9va3Mve2lkfTpyb3RhdGVTZWNyZXQy8QQKE05vdGlmaWNhdGlvblNlcnZpY2USeQoRTGlzdE5vdGlmaWNhdGlvbnMSIy5jdXN0b21lcnMuTGlzdE5vdGlmaWNhdGlvbnNSZXF1ZXN0GiQuY3VzdG9tZXJzLkxpc3ROb3RpZmljYXRpb25zUmVzcG9uc2UiGYLT5JMCExIRL3YxL25vdGlmaWNhdGlvbnMSfQoOR2V0VW5yZWFkQ291bnQSIC5jdXN0b21lcnMuR2V0VW5yZWFkQ291bnRSZXF1ZXN0GiEuY3VzdG9tZXJzLkdldFVucmVhZENvdW50UmVzcG9uc2UiJoLT5JMCIBIeL3YxL25vdGlmaWNhdGlvbnMvdW5yZWFkLWNvdW50EnIKCE1hcmtSZWFkEiYuY3VzdG9tZXJzLk1hcmtOb3RpZmljYXRpb25SZWFkUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSImgtPkkwIgOgEqIhsvdjEvbm90aWZpY2F0aW9ucy97aWR9OnJlYWQSeAoLTWFya0FsbFJlYWQSKi5jdXN0b21lcnMuTWFya0FsbE5vdGlmaWNhdGlvbnNSZWFkUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIlgtPkkwIfOgEqIhovdjEvbm90aWZpY2F0aW9uczpyZWFkLWFsbBJyChJEZWxldGVOb3RpZmljYXRpb24SJC5jdXN0b21lcnMuRGVsZXRlTm90aWZpY2F0aW9uUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIegtPkkwIYKhYvdjEvbm90aWZpY2F0aW9ucy97aWR9MokDChFPbmJvYXJkaW5nU2VydmljZRJtCgtHZXRQcm9ncmVzcxInLmN1c3RvbWVycy5HZXRPbmJvYXJkaW5nUHJvZ3Jlc3NSZXF1ZXN0Gh0uY3VzdG9tZXJzLk9uYm9hcmRpbmdQcm9ncmVzcyIWgtPkkwIQEg4vdjEvb25ib2FyZGluZxKHAQoMQ29tcGxldGVTdGVwEiguY3VzdG9tZXJzLkNvbXBsZXRlT25ib2FyZGluZ1N0ZXBSZXF1ZXN0Gh0uY3VzdG9tZXJzLk9uYm9hcmRpbmdQcm9ncmVzcyIugtPkkwIoOgEqIiMvdjEvb25ib2FyZGluZy97c3RlcF9uYW1lfTpjb21wbGV0ZRJ7CghTa2lwU3RlcBIkLmN1c3RvbWVycy5Ta2lwT25ib2FyZGluZ1N0ZXBSZXF1ZXN0Gh0uY3VzdG9tZXJzLk9uYm9hcmRpbmdQcm9ncmVzcyIqgtPkkwIkOgEqIh8vdjEvb25ib2FyZGluZy97c3RlcF9uYW1lfTpza2lwMr0DCgtHRFBSU2VydmljZRJoCg1SZXF1ZXN0RXhwb3J0EiMuY3VzdG9tZXJzLlJlcXVlc3REYXRhRXhwb3J0UmVxdWVzdBoWLmN1c3RvbWVycy5HRFBSUmVxdWVzdCIagtPkkwIUOgEqIg8vdjEvZ2Rwci9leHBvcnQSagoPR2V0RXhwb3J0U3RhdHVzEiEuY3VzdG9tZXJzLkdldEV4cG9ydFN0YXR1c1JlcXVlc3QaFi5jdXN0b21lcnMuR0RQUlJlcXVlc3QiHILT5JMCFhIUL3YxL2dkcHIvZXhwb3J0L3tpZH0SaAoPUmVxdWVzdERlbGV0aW9uEiEuY3VzdG9tZXJzLlJlcXVlc3REZWxldGlvblJlcXVlc3QaFi5jdXN0b21lcnMuR0RQUlJlcXVlc3QiGoLT5JMCFDoBKiIPL3YxL2dkcHIvZGVsZXRlEm4KEUdldERlbGV0aW9uU3RhdHVzEiMuY3VzdG9tZXJzLkdldERlbGV0aW9uU3RhdHVzUmVxdWVzdBoWLmN1c3RvbWVycy5HRFBSUmVxdWVzdCIcgtPkkwIWEhQvdjEvZ2Rwci9kZWxldGUve2lkfTKzAgoPU1NPQWRtaW5TZXJ2aWNlElgKBkdldFNTTxIbLmN1c3RvbWVycy5HZXRPcmdTU09SZXF1ZXN0GhcuY3VzdG9tZXJzLk9yZ1NTT0NvbmZpZyIYgtPkkwISEhAvdjEvc3NvL3tvcmdfaWR9EmkKClN0YXJ0U2V0dXASHy5jdXN0b21lcnMuU3RhcnRTU09TZXR1cFJlcXVlc3QaIC5jdXN0b21lcnMuU3RhcnRTU09TZXR1cFJlc3BvbnNlIhiC0+STAhI6ASoiDS92MS9zc28vc2V0dXASWwoHRGlzYWJsZRIcLmN1c3RvbWVycy5EaXNhYmxlU1NPUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eSIagtPkkwIUOgEqIg8vdjEvc3NvL2Rpc2FibGUyiAIKDkJpbGxpbmdTZXJ2aWNlEn4KCk9wZW5Qb3J0YWwSIy5jdXN0b21lcnMuT3BlbkJpbGxpbmdQb3J0YWxSZXF1ZXN0GiQuY3VzdG9tZXJzLk9wZW5CaWxsaW5nUG9ydGFsUmVzcG9uc2UiJYLT5JMCHzoBKiIaL3YxL2JpbGxpbmcvY29ubmVjdC9wb3J0YWwSdgoMTGlzdEludm9pY2VzEh4uY3VzdG9tZXJzLkxpc3RJbnZvaWNlc1JlcXVlc3QaHy5jdXN0b21lcnMuTGlzdEludm9pY2VzUmVzcG9uc2UiJYLT5JMCHxIdL3YxL2JpbGxpbmcvaW52b2ljZXMve29yZ19pZH0y2gEKE1VzZXJTZXR0aW5nc1NlcnZpY2USXAoDR2V0EiEuY3VzdG9tZXJzLkdldFVzZXJTZXR0aW5nc1JlcXVlc3QaFy5jdXN0b21lcnMuVXNlclNldHRpbmdzIhmC0+STAhMSES92MS91c2VyL3NldHRpbmdzEmUKBlVwZGF0ZRIkLmN1c3RvbWVycy5VcGRhdGVVc2VyU2V0dGluZ3NSZXF1ZXN0GhcuY3VzdG9tZXJzLlVzZXJTZXR0aW5ncyIcgtPkkwIWOgEqIhEvdjEvdXNlci9zZXR0aW5nczK8BAoKTUZBU2VydmljZRJlCglTZXR1cFRPVFASGy5jdXN0b21lcnMuU2V0dXBUT1RQUmVxdWVzdBocLmN1c3RvbWVycy5TZXR1cFRPVFBSZXNwb25zZSIdgtPkkwIXOgEqIhIvdjEvbWZhL3RvdHAvc2V0dXASaQoKVmVyaWZ5VE9UUBIcLmN1c3RvbWVycy5WZXJpZnlUT1RQUmVxdWVzdBodLmN1c3RvbWVycy5WZXJpZnlUT1RQUmVzcG9uc2UiHoLT5JMCGDoBKiITL3YxL21mYS90b3RwL3ZlcmlmeRJrCgtMaXN0RGV2aWNlcxIgLmN1c3RvbWVycy5MaXN0TUZBRGV2aWNlc1JlcXVlc3QaIS5jdXN0b21lcnMuTGlzdE1GQURldmljZXNSZXNwb25zZSIXgtPkkwIREg8vdjEvbWZhL2RldmljZXMSZwoMUmV2b2tlRGV2aWNlEiEuY3VzdG9tZXJzLlJldm9rZU1GQURldmljZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiHILT5JMCFioUL3YxL21mYS9kZXZpY2VzL3tpZH0ShQEKE0dlbmVyYXRlQmFja3VwQ29kZXMSJS5jdXN0b21lcnMuR2VuZXJhdGVCYWNrdXBDb2Rlc1JlcXVlc3QaJi5jdXN0b21lcnMuR2VuZXJhdGVCYWNrdXBDb2Rlc1Jlc3BvbnNlIh+C0+STAhk6ASoiFC92MS9tZmEvYmFja3VwLWNvZGVzMpMBChRJbnRyb3NwZWN0aW9uU2VydmljZRJ7Cg5HZXRTZXJ2aWNlSW5mbxIgLmN1c3RvbWVycy5HZXRTZXJ2aWNlSW5mb1JlcXVlc3QaIS5jdXN0b21lcnMuR2V0U2VydmljZUluZm9SZXNwb25zZSIkgtPkkwIeEhwvdjEvLndlbGwta25vd24vc2VydmljZS1pbmZvYgZwcm90bzM", [file_google_api_annotations, file_google_protobuf_timestamp, file_google_protobuf_empty, file_google_protobuf_field_mask, file_google_protobuf_struct, file_buf_validate_validate]); /** * @generated from message customers.VersionRequest @@ -229,6 +229,12 @@ export const OrgMembershipSchema: GenMessage = /*@__PURE__*/ messageDesc(file_saas_starter_api_grpc, 5); /** + * Teams form a strict tree within an org: parent_team_id is the authoritative + * edge; path is the materialized slug-path ("engineering/platform"), unique per + * org, maintained on write. Membership is literal (you belong to the teams you + * joined); consumers that want subtree semantics expand the path (a member of + * "engineering/platform" is, by expansion, under "engineering"). + * * @generated from message customers.Team */ export type Team = Message<"customers.Team"> & { @@ -256,6 +262,27 @@ export type Team = Message<"customers.Team"> & { * @generated from field: google.protobuf.Timestamp created_at = 5; */ createdAt?: Timestamp; + + /** + * Empty for a root team. + * + * @generated from field: string parent_team_id = 6; + */ + parentTeamId: string; + + /** + * The team's own path segment: lowercase slug, derived from name if not given. + * + * @generated from field: string slug = 7; + */ + slug: string; + + /** + * Full slug-path from the root, e.g. "engineering/platform". Server-derived. + * + * @generated from field: string path = 8; + */ + path: string; }; /** @@ -412,6 +439,80 @@ export type RoleAssignment = Message<"customers.RoleAssignment"> & { export const RoleAssignmentSchema: GenMessage = /*@__PURE__*/ messageDesc(file_saas_starter_api_grpc, 10); +/** + * Principal mirrors the principals table 1:1 — the unified identity + * row used by every action, audit event, and delegation grant. + * + * id matches users.uuid for kind=HUMAN, api_keys.id for kind=SERVICE, + * and is a fresh server-generated UUID for kind=AGENT. We do NOT + * enforce these as foreign keys at the DB level (independent + * lifecycles); the equality is convention and the backfill migration. + * + * @generated from message customers.Principal + */ +export type Principal = Message<"customers.Principal"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: customers.PrincipalKind kind = 2; + */ + kind: PrincipalKind; + + /** + * @generated from field: string display_name = 3; + */ + displayName: string; + + /** + * org_id NULL/empty for kind=HUMAN (cross-org); required for + * SERVICE and AGENT. Server-side validation enforces. + * + * @generated from field: string org_id = 4; + */ + orgId: string; + + /** + * agent_identifier is "publisher/name:version" for kind=AGENT; + * empty otherwise. Required when kind=AGENT. + * + * @generated from field: string agent_identifier = 5; + */ + agentIdentifier: string; + + /** + * @generated from field: google.protobuf.Timestamp created_at = 6; + */ + createdAt?: Timestamp; + + /** + * @generated from field: google.protobuf.Timestamp revoked_at = 7; + */ + revokedAt?: Timestamp; + + /** + * @generated from field: string revoked_reason = 8; + */ + revokedReason: string; + + /** + * The principal that created this one — the authorship root a policy + * consumer chains authority back to. Empty = a root principal (humans). + * + * @generated from field: string created_by = 9; + */ + createdBy: string; +}; + +/** + * Describes the message customers.Principal. + * Use `create(PrincipalSchema)` to create a new message. + */ +export const PrincipalSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 11); + /** * @generated from message customers.RegisterUserRequest */ @@ -437,7 +538,7 @@ export type RegisterUserRequest = Message<"customers.RegisterUserRequest"> & { * Use `create(RegisterUserRequestSchema)` to create a new message. */ export const RegisterUserRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 11); + messageDesc(file_saas_starter_api_grpc, 12); /** * @generated from message customers.RegisterUserResponse @@ -459,7 +560,7 @@ export type RegisterUserResponse = Message<"customers.RegisterUserResponse"> & { * Use `create(RegisterUserResponseSchema)` to create a new message. */ export const RegisterUserResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 12); + messageDesc(file_saas_starter_api_grpc, 13); /** * @generated from message customers.GetUserRequest @@ -488,7 +589,7 @@ export type GetUserRequest = Message<"customers.GetUserRequest"> & { * Use `create(GetUserRequestSchema)` to create a new message. */ export const GetUserRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 13); + messageDesc(file_saas_starter_api_grpc, 14); /** * @generated from message customers.GetSelfRequest @@ -501,7 +602,7 @@ export type GetSelfRequest = Message<"customers.GetSelfRequest"> & { * Use `create(GetSelfRequestSchema)` to create a new message. */ export const GetSelfRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 14); + messageDesc(file_saas_starter_api_grpc, 15); /** * @generated from message customers.GetSelfResponse @@ -533,7 +634,7 @@ export type GetSelfResponse = Message<"customers.GetSelfResponse"> & { * Use `create(GetSelfResponseSchema)` to create a new message. */ export const GetSelfResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 15); + messageDesc(file_saas_starter_api_grpc, 16); /** * @generated from message customers.ListUsersRequest @@ -560,7 +661,7 @@ export type ListUsersRequest = Message<"customers.ListUsersRequest"> & { * Use `create(ListUsersRequestSchema)` to create a new message. */ export const ListUsersRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 16); + messageDesc(file_saas_starter_api_grpc, 17); /** * @generated from message customers.ListUsersResponse @@ -582,7 +683,7 @@ export type ListUsersResponse = Message<"customers.ListUsersResponse"> & { * Use `create(ListUsersResponseSchema)` to create a new message. */ export const ListUsersResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 17); + messageDesc(file_saas_starter_api_grpc, 18); /** * @generated from message customers.UpdateUserRequest @@ -609,7 +710,7 @@ export type UpdateUserRequest = Message<"customers.UpdateUserRequest"> & { * Use `create(UpdateUserRequestSchema)` to create a new message. */ export const UpdateUserRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 18); + messageDesc(file_saas_starter_api_grpc, 19); /** * @generated from message customers.AddIdentityRequest @@ -631,7 +732,7 @@ export type AddIdentityRequest = Message<"customers.AddIdentityRequest"> & { * Use `create(AddIdentityRequestSchema)` to create a new message. */ export const AddIdentityRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 19); + messageDesc(file_saas_starter_api_grpc, 20); /** * @generated from message customers.FindUserByIdentityRequest @@ -653,7 +754,7 @@ export type FindUserByIdentityRequest = Message<"customers.FindUserByIdentityReq * Use `create(FindUserByIdentityRequestSchema)` to create a new message. */ export const FindUserByIdentityRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 20); + messageDesc(file_saas_starter_api_grpc, 21); /** * @generated from message customers.ListUserIdentitiesRequest @@ -670,7 +771,7 @@ export type ListUserIdentitiesRequest = Message<"customers.ListUserIdentitiesReq * Use `create(ListUserIdentitiesRequestSchema)` to create a new message. */ export const ListUserIdentitiesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 21); + messageDesc(file_saas_starter_api_grpc, 22); /** * @generated from message customers.ListUserIdentitiesResponse @@ -687,7 +788,7 @@ export type ListUserIdentitiesResponse = Message<"customers.ListUserIdentitiesRe * Use `create(ListUserIdentitiesResponseSchema)` to create a new message. */ export const ListUserIdentitiesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 22); + messageDesc(file_saas_starter_api_grpc, 23); /** * @generated from message customers.OrgSettings @@ -724,7 +825,7 @@ export type OrgSettings = Message<"customers.OrgSettings"> & { * Use `create(OrgSettingsSchema)` to create a new message. */ export const OrgSettingsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 23); + messageDesc(file_saas_starter_api_grpc, 24); /** * @generated from message customers.GetOrgSettingsRequest @@ -741,7 +842,7 @@ export type GetOrgSettingsRequest = Message<"customers.GetOrgSettingsRequest"> & * Use `create(GetOrgSettingsRequestSchema)` to create a new message. */ export const GetOrgSettingsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 24); + messageDesc(file_saas_starter_api_grpc, 25); /** * @generated from message customers.UpdateOrgSettingsRequest @@ -778,7 +879,7 @@ export type UpdateOrgSettingsRequest = Message<"customers.UpdateOrgSettingsReque * Use `create(UpdateOrgSettingsRequestSchema)` to create a new message. */ export const UpdateOrgSettingsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 25); + messageDesc(file_saas_starter_api_grpc, 26); /** * @generated from message customers.CreateOrganizationRequest @@ -800,7 +901,7 @@ export type CreateOrganizationRequest = Message<"customers.CreateOrganizationReq * Use `create(CreateOrganizationRequestSchema)` to create a new message. */ export const CreateOrganizationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 26); + messageDesc(file_saas_starter_api_grpc, 27); /** * @generated from message customers.CreateOrganizationResponse @@ -817,7 +918,7 @@ export type CreateOrganizationResponse = Message<"customers.CreateOrganizationRe * Use `create(CreateOrganizationResponseSchema)` to create a new message. */ export const CreateOrganizationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 27); + messageDesc(file_saas_starter_api_grpc, 28); /** * @generated from message customers.GetOrganizationRequest @@ -834,7 +935,7 @@ export type GetOrganizationRequest = Message<"customers.GetOrganizationRequest"> * Use `create(GetOrganizationRequestSchema)` to create a new message. */ export const GetOrganizationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 28); + messageDesc(file_saas_starter_api_grpc, 29); /** * @generated from message customers.ListOrganizationsRequest @@ -847,7 +948,7 @@ export type ListOrganizationsRequest = Message<"customers.ListOrganizationsReque * Use `create(ListOrganizationsRequestSchema)` to create a new message. */ export const ListOrganizationsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 29); + messageDesc(file_saas_starter_api_grpc, 30); /** * @generated from message customers.ListOrganizationsResponse @@ -864,7 +965,7 @@ export type ListOrganizationsResponse = Message<"customers.ListOrganizationsResp * Use `create(ListOrganizationsResponseSchema)` to create a new message. */ export const ListOrganizationsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 30); + messageDesc(file_saas_starter_api_grpc, 31); /** * @generated from message customers.AddOrgMemberRequest @@ -891,7 +992,7 @@ export type AddOrgMemberRequest = Message<"customers.AddOrgMemberRequest"> & { * Use `create(AddOrgMemberRequestSchema)` to create a new message. */ export const AddOrgMemberRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 31); + messageDesc(file_saas_starter_api_grpc, 32); /** * @generated from message customers.RemoveOrgMemberRequest @@ -913,7 +1014,7 @@ export type RemoveOrgMemberRequest = Message<"customers.RemoveOrgMemberRequest"> * Use `create(RemoveOrgMemberRequestSchema)` to create a new message. */ export const RemoveOrgMemberRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 32); + messageDesc(file_saas_starter_api_grpc, 33); /** * @generated from message customers.ListOrgMembersRequest @@ -930,7 +1031,7 @@ export type ListOrgMembersRequest = Message<"customers.ListOrgMembersRequest"> & * Use `create(ListOrgMembersRequestSchema)` to create a new message. */ export const ListOrgMembersRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 33); + messageDesc(file_saas_starter_api_grpc, 34); /** * @generated from message customers.ListOrgMembersResponse @@ -947,7 +1048,7 @@ export type ListOrgMembersResponse = Message<"customers.ListOrgMembersResponse"> * Use `create(ListOrgMembersResponseSchema)` to create a new message. */ export const ListOrgMembersResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 34); + messageDesc(file_saas_starter_api_grpc, 35); /** * @generated from message customers.CreateTeamRequest @@ -967,6 +1068,20 @@ export type CreateTeamRequest = Message<"customers.CreateTeamRequest"> & { * @generated from field: string description = 3; */ description: string; + + /** + * Optional: create as a child of this team (must belong to the same org). + * + * @generated from field: string parent_team_id = 4; + */ + parentTeamId: string; + + /** + * Optional: explicit path segment; derived from name when empty. + * + * @generated from field: string slug = 5; + */ + slug: string; }; /** @@ -974,7 +1089,7 @@ export type CreateTeamRequest = Message<"customers.CreateTeamRequest"> & { * Use `create(CreateTeamRequestSchema)` to create a new message. */ export const CreateTeamRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 35); + messageDesc(file_saas_starter_api_grpc, 36); /** * @generated from message customers.CreateTeamResponse @@ -991,7 +1106,7 @@ export type CreateTeamResponse = Message<"customers.CreateTeamResponse"> & { * Use `create(CreateTeamResponseSchema)` to create a new message. */ export const CreateTeamResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 36); + messageDesc(file_saas_starter_api_grpc, 37); /** * @generated from message customers.ListTeamsRequest @@ -1008,7 +1123,7 @@ export type ListTeamsRequest = Message<"customers.ListTeamsRequest"> & { * Use `create(ListTeamsRequestSchema)` to create a new message. */ export const ListTeamsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 37); + messageDesc(file_saas_starter_api_grpc, 38); /** * @generated from message customers.ListTeamsResponse @@ -1025,7 +1140,7 @@ export type ListTeamsResponse = Message<"customers.ListTeamsResponse"> & { * Use `create(ListTeamsResponseSchema)` to create a new message. */ export const ListTeamsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 38); + messageDesc(file_saas_starter_api_grpc, 39); /** * @generated from message customers.AddTeamMemberRequest @@ -1052,7 +1167,7 @@ export type AddTeamMemberRequest = Message<"customers.AddTeamMemberRequest"> & { * Use `create(AddTeamMemberRequestSchema)` to create a new message. */ export const AddTeamMemberRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 39); + messageDesc(file_saas_starter_api_grpc, 40); /** * @generated from message customers.RemoveTeamMemberRequest @@ -1074,7 +1189,68 @@ export type RemoveTeamMemberRequest = Message<"customers.RemoveTeamMemberRequest * Use `create(RemoveTeamMemberRequestSchema)` to create a new message. */ export const RemoveTeamMemberRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 40); + messageDesc(file_saas_starter_api_grpc, 41); + +/** + * @generated from message customers.UpdateTeamRequest + */ +export type UpdateTeamRequest = Message<"customers.UpdateTeamRequest"> & { + /** + * @generated from field: string team_id = 1; + */ + teamId: string; + + /** + * @generated from field: string name = 2; + */ + name: string; + + /** + * @generated from field: string description = 3; + */ + description: string; +}; + +/** + * Describes the message customers.UpdateTeamRequest. + * Use `create(UpdateTeamRequestSchema)` to create a new message. + */ +export const UpdateTeamRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 42); + +/** + * @generated from message customers.UpdateTeamResponse + */ +export type UpdateTeamResponse = Message<"customers.UpdateTeamResponse"> & { + /** + * @generated from field: customers.Team team = 1; + */ + team?: Team; +}; + +/** + * Describes the message customers.UpdateTeamResponse. + * Use `create(UpdateTeamResponseSchema)` to create a new message. + */ +export const UpdateTeamResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 43); + +/** + * @generated from message customers.DeleteTeamRequest + */ +export type DeleteTeamRequest = Message<"customers.DeleteTeamRequest"> & { + /** + * @generated from field: string team_id = 1; + */ + teamId: string; +}; + +/** + * Describes the message customers.DeleteTeamRequest. + * Use `create(DeleteTeamRequestSchema)` to create a new message. + */ +export const DeleteTeamRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 44); /** * @generated from message customers.ListTeamMembersRequest @@ -1091,7 +1267,7 @@ export type ListTeamMembersRequest = Message<"customers.ListTeamMembersRequest"> * Use `create(ListTeamMembersRequestSchema)` to create a new message. */ export const ListTeamMembersRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 41); + messageDesc(file_saas_starter_api_grpc, 45); /** * @generated from message customers.ListTeamMembersResponse @@ -1108,7 +1284,7 @@ export type ListTeamMembersResponse = Message<"customers.ListTeamMembersResponse * Use `create(ListTeamMembersResponseSchema)` to create a new message. */ export const ListTeamMembersResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 42); + messageDesc(file_saas_starter_api_grpc, 46); /** * @generated from message customers.CreateRoleRequest @@ -1142,7 +1318,7 @@ export type CreateRoleRequest = Message<"customers.CreateRoleRequest"> & { * Use `create(CreateRoleRequestSchema)` to create a new message. */ export const CreateRoleRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 43); + messageDesc(file_saas_starter_api_grpc, 47); /** * @generated from message customers.CreateRoleResponse @@ -1159,7 +1335,7 @@ export type CreateRoleResponse = Message<"customers.CreateRoleResponse"> & { * Use `create(CreateRoleResponseSchema)` to create a new message. */ export const CreateRoleResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 44); + messageDesc(file_saas_starter_api_grpc, 48); /** * @generated from message customers.ListRolesRequest @@ -1178,7 +1354,7 @@ export type ListRolesRequest = Message<"customers.ListRolesRequest"> & { * Use `create(ListRolesRequestSchema)` to create a new message. */ export const ListRolesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 45); + messageDesc(file_saas_starter_api_grpc, 49); /** * @generated from message customers.ListRolesResponse @@ -1195,7 +1371,7 @@ export type ListRolesResponse = Message<"customers.ListRolesResponse"> & { * Use `create(ListRolesResponseSchema)` to create a new message. */ export const ListRolesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 46); + messageDesc(file_saas_starter_api_grpc, 50); /** * @generated from message customers.DeleteRoleRequest @@ -1212,7 +1388,7 @@ export type DeleteRoleRequest = Message<"customers.DeleteRoleRequest"> & { * Use `create(DeleteRoleRequestSchema)` to create a new message. */ export const DeleteRoleRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 47); + messageDesc(file_saas_starter_api_grpc, 51); /** * @generated from message customers.AssignRoleRequest @@ -1249,7 +1425,7 @@ export type AssignRoleRequest = Message<"customers.AssignRoleRequest"> & { * Use `create(AssignRoleRequestSchema)` to create a new message. */ export const AssignRoleRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 48); + messageDesc(file_saas_starter_api_grpc, 52); /** * @generated from message customers.AssignRoleResponse @@ -1266,7 +1442,7 @@ export type AssignRoleResponse = Message<"customers.AssignRoleResponse"> & { * Use `create(AssignRoleResponseSchema)` to create a new message. */ export const AssignRoleResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 49); + messageDesc(file_saas_starter_api_grpc, 53); /** * @generated from message customers.RevokeRoleRequest @@ -1298,7 +1474,7 @@ export type RevokeRoleRequest = Message<"customers.RevokeRoleRequest"> & { * Use `create(RevokeRoleRequestSchema)` to create a new message. */ export const RevokeRoleRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 50); + messageDesc(file_saas_starter_api_grpc, 54); /** * ListRoleAssignmentsRequest — read assignments scoped to an org. @@ -1334,7 +1510,7 @@ export type ListRoleAssignmentsRequest = Message<"customers.ListRoleAssignmentsR * Use `create(ListRoleAssignmentsRequestSchema)` to create a new message. */ export const ListRoleAssignmentsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 51); + messageDesc(file_saas_starter_api_grpc, 55); /** * @generated from message customers.ListRoleAssignmentsResponse @@ -1351,7 +1527,7 @@ export type ListRoleAssignmentsResponse = Message<"customers.ListRoleAssignments * Use `create(ListRoleAssignmentsResponseSchema)` to create a new message. */ export const ListRoleAssignmentsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 52); + messageDesc(file_saas_starter_api_grpc, 56); /** * @generated from message customers.CheckPermissionRequest @@ -1373,119 +1549,772 @@ export type CheckPermissionRequest = Message<"customers.CheckPermissionRequest"> resource: string; /** - * @generated from field: string action = 4; + * @generated from field: string action = 4; + */ + action: string; + + /** + * @generated from field: string org_id = 5; + */ + orgId: string; + + /** + * @generated from field: string scope = 6; + */ + scope: string; +}; + +/** + * Describes the message customers.CheckPermissionRequest. + * Use `create(CheckPermissionRequestSchema)` to create a new message. + */ +export const CheckPermissionRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 57); + +/** + * @generated from message customers.CheckPermissionResponse + */ +export type CheckPermissionResponse = Message<"customers.CheckPermissionResponse"> & { + /** + * @generated from field: bool allowed = 1; + */ + allowed: boolean; + + /** + * @generated from field: string reason = 2; + */ + reason: string; +}; + +/** + * Describes the message customers.CheckPermissionResponse. + * Use `create(CheckPermissionResponseSchema)` to create a new message. + */ +export const CheckPermissionResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 58); + +/** + * --- Decide (the new permission-check primitive) --- + * + * Decide is the principal-aware successor to CheckPermission. It + * accepts a single principal_id (no SubjectKind disambiguation — + * the principals table answers that), structured action and + * resource, optional context for caveat evaluation, and an + * optional delegation_proof carrying a Biscuit token (M6+). + * + * CheckPermission stays alongside Decide for backwards compat; new + * callers should use Decide. Once all callers migrate, CheckPermission + * becomes a thin wrapper over Decide. + * + * @generated from message customers.DecideRequest + */ +export type DecideRequest = Message<"customers.DecideRequest"> & { + /** + * @generated from field: string principal_id = 1; + */ + principalId: string; + + /** + * action is dotted, e.g. "github.merge_pr" or "fs.write". + * + * @generated from field: string action = 2; + */ + action: string; + + /** + * resource is typed, e.g. "repo:codefly-dev/codefly.dev" or + * "file:/etc/passwd". Empty string means "no specific resource" + * (rare; usually for global actions). + * + * @generated from field: string resource = 3; + */ + resource: string; + + /** + * resource_id is an optional sub-identifier (e.g. PR number). + * Pure metadata for audit; not used in authz today. + * + * @generated from field: string resource_id = 4; + */ + resourceId: string; + + /** + * @generated from field: string org_id = 5; + */ + orgId: string; + + /** + * context is a free-form structured map for caveat evaluation + * (Cedar/Rego rules consume it). Common keys: ci_status, labels, + * pr_number. Unknown keys ignored. + * + * @generated from field: google.protobuf.Struct context = 6; + */ + context?: JsonObject; + + /** + * risk_level is an advisory tier the caller's manifest declared + * for this action. The PDP MAY use it to gate approval flow; + * missing → treat as policy default. + * + * @generated from field: string risk_level = 7; + */ + riskLevel: string; + + /** + * delegation_proof is an optional Biscuit token proving the + * caller acquired delegated authority for this action. Until M6 + * lands, this field is unused — pass empty bytes. + * + * @generated from field: bytes delegation_proof = 8; + */ + delegationProof: Uint8Array; + + /** + * declared_permissions is the caller's manifest-declared + * permission set (M4+). The PDP enforces this as a ceiling: even + * if a role grants the action, the manifest must also have + * declared it. Until M4 lands, empty list = "no ceiling enforced + * at this layer." + * + * @generated from field: repeated customers.Permission declared_permissions = 9; + */ + declaredPermissions: Permission[]; +}; + +/** + * Describes the message customers.DecideRequest. + * Use `create(DecideRequestSchema)` to create a new message. + */ +export const DecideRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 59); + +/** + * @generated from message customers.DecideResponse + */ +export type DecideResponse = Message<"customers.DecideResponse"> & { + /** + * @generated from field: customers.Decision decision = 1; + */ + decision: Decision; + + /** + * @generated from field: string reason = 2; + */ + reason: string; + + /** + * decision_path traces the role/permission match for human- + * readable explanation. Format: "role:editor → perm:github.read_pr" + * or "manifest-ceiling: action not declared" or "no role grants". + * + * @generated from field: string decision_path = 3; + */ + decisionPath: string; + + /** + * approval_request_id is set when decision=REQUIRE_APPROVAL — + * identifies the saas-starter delegation_grants row created for + * this pending approval. Empty otherwise. + * + * @generated from field: string approval_request_id = 4; + */ + approvalRequestId: string; +}; + +/** + * Describes the message customers.DecideResponse. + * Use `create(DecideResponseSchema)` to create a new message. + */ +export const DecideResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 60); + +/** + * @generated from message customers.GetPrincipalRequest + */ +export type GetPrincipalRequest = Message<"customers.GetPrincipalRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; +}; + +/** + * Describes the message customers.GetPrincipalRequest. + * Use `create(GetPrincipalRequestSchema)` to create a new message. + */ +export const GetPrincipalRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 61); + +/** + * @generated from message customers.GetAgentPrincipalRequest + */ +export type GetAgentPrincipalRequest = Message<"customers.GetAgentPrincipalRequest"> & { + /** + * @generated from field: string org_id = 1; + */ + orgId: string; + + /** + * @generated from field: string agent_identifier = 2; + */ + agentIdentifier: string; +}; + +/** + * Describes the message customers.GetAgentPrincipalRequest. + * Use `create(GetAgentPrincipalRequestSchema)` to create a new message. + */ +export const GetAgentPrincipalRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 62); + +/** + * @generated from message customers.CreateAgentPrincipalRequest + */ +export type CreateAgentPrincipalRequest = Message<"customers.CreateAgentPrincipalRequest"> & { + /** + * @generated from field: string org_id = 1; + */ + orgId: string; + + /** + * agent_identifier in canonical "publisher/name:version" form. + * + * @generated from field: string agent_identifier = 2; + */ + agentIdentifier: string; + + /** + * @generated from field: string display_name = 3; + */ + displayName: string; +}; + +/** + * Describes the message customers.CreateAgentPrincipalRequest. + * Use `create(CreateAgentPrincipalRequestSchema)` to create a new message. + */ +export const CreateAgentPrincipalRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 63); + +/** + * @generated from message customers.RevokePrincipalRequest + */ +export type RevokePrincipalRequest = Message<"customers.RevokePrincipalRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string reason = 2; + */ + reason: string; +}; + +/** + * Describes the message customers.RevokePrincipalRequest. + * Use `create(RevokePrincipalRequestSchema)` to create a new message. + */ +export const RevokePrincipalRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 64); + +/** + * @generated from message customers.ListPrincipalsRequest + */ +export type ListPrincipalsRequest = Message<"customers.ListPrincipalsRequest"> & { + /** + * @generated from field: string org_id = 1; + */ + orgId: string; + + /** + * kind filters; UNSPECIFIED returns all kinds in the org + * (humans via membership, services + agents via direct org_id). + * + * @generated from field: customers.PrincipalKind kind = 2; + */ + kind: PrincipalKind; + + /** + * @generated from field: int32 page_size = 3; + */ + pageSize: number; + + /** + * @generated from field: string page_token = 4; + */ + pageToken: string; +}; + +/** + * Describes the message customers.ListPrincipalsRequest. + * Use `create(ListPrincipalsRequestSchema)` to create a new message. + */ +export const ListPrincipalsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 65); + +/** + * @generated from message customers.ListPrincipalsResponse + */ +export type ListPrincipalsResponse = Message<"customers.ListPrincipalsResponse"> & { + /** + * @generated from field: repeated customers.Principal principals = 1; + */ + principals: Principal[]; + + /** + * @generated from field: string next_page_token = 2; + */ + nextPageToken: string; +}; + +/** + * Describes the message customers.ListPrincipalsResponse. + * Use `create(ListPrincipalsResponseSchema)` to create a new message. + */ +export const ListPrincipalsResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 66); + +/** + * @generated from message customers.ResolveIdentityRequest + */ +export type ResolveIdentityRequest = Message<"customers.ResolveIdentityRequest"> & { + /** + * @generated from field: string provider = 1; + */ + provider: string; + + /** + * @generated from field: string provider_id = 2; + */ + providerId: string; +}; + +/** + * Describes the message customers.ResolveIdentityRequest. + * Use `create(ResolveIdentityRequestSchema)` to create a new message. + */ +export const ResolveIdentityRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 67); + +/** + * @generated from message customers.ResolveIdentityResponse + */ +export type ResolveIdentityResponse = Message<"customers.ResolveIdentityResponse"> & { + /** + * @generated from field: string user_id = 1; + */ + userId: string; + + /** + * @generated from field: string org_id = 2; + */ + orgId: string; + + /** + * deprecated, kept for backward compat + * + * @generated from field: repeated string roles = 3; + */ + roles: string[]; + + /** + * @generated from field: bool found = 4; + */ + found: boolean; + + /** + * "owner"|"admin"|"member" + * + * @generated from field: string org_role = 5; + */ + orgRole: string; + + /** + * "super_admin"|"support"|"billing"|absent + * + * @generated from field: string platform_role = 6; + */ + platformRole: string; +}; + +/** + * Describes the message customers.ResolveIdentityResponse. + * Use `create(ResolveIdentityResponseSchema)` to create a new message. + */ +export const ResolveIdentityResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 68); + +/** + * @generated from message customers.RequestDelegationRequest + */ +export type RequestDelegationRequest = Message<"customers.RequestDelegationRequest"> & { + /** + * @generated from field: string org_id = 1; + */ + orgId: string; + + /** + * @generated from field: string actor_principal_id = 2; + */ + actorPrincipalId: string; + + /** + * @generated from field: string action = 3; + */ + action: string; + + /** + * @generated from field: string resource = 4; + */ + resource: string; + + /** + * @generated from field: string resource_id = 5; + */ + resourceId: string; + + /** + * Justification — REQUIRED. Without it the grantor has no + * basis to decide; saas-starter rejects empty/whitespace. + * + * @generated from field: string justification = 6; + */ + justification: string; + + /** + * @generated from field: google.protobuf.Struct context = 7; + */ + context?: JsonObject; + + /** + * risk_level: low|medium|high|critical. Empty defaults to low. + * + * @generated from field: string risk_level = 8; + */ + riskLevel: string; + + /** + * timeout_seconds: how long to wait before auto-expiry. + * Defaults to 300 (5 min) if zero. + * + * @generated from field: int32 timeout_seconds = 9; + */ + timeoutSeconds: number; + + /** + * Grantor: optional explicit target ("user:" / "team:"); + * empty → default approver chain. + * + * @generated from field: string grantor = 10; + */ + grantor: string; + + /** + * Idempotency key. Server derives from request content if empty. + * + * @generated from field: string request_hash = 11; + */ + requestHash: string; +}; + +/** + * Describes the message customers.RequestDelegationRequest. + * Use `create(RequestDelegationRequestSchema)` to create a new message. + */ +export const RequestDelegationRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 69); + +/** + * @generated from message customers.RequestDelegationResponse + */ +export type RequestDelegationResponse = Message<"customers.RequestDelegationResponse"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * typically "pending"; may be "approved" if a pattern matches (M8) + * + * @generated from field: string status = 2; + */ + status: string; + + /** + * @generated from field: google.protobuf.Timestamp expires_at = 3; + */ + expiresAt?: Timestamp; +}; + +/** + * Describes the message customers.RequestDelegationResponse. + * Use `create(RequestDelegationResponseSchema)` to create a new message. + */ +export const RequestDelegationResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 70); + +/** + * @generated from message customers.WaitForDelegationRequest + */ +export type WaitForDelegationRequest = Message<"customers.WaitForDelegationRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string org_id = 2; + */ + orgId: string; +}; + +/** + * Describes the message customers.WaitForDelegationRequest. + * Use `create(WaitForDelegationRequestSchema)` to create a new message. + */ +export const WaitForDelegationRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 71); + +/** + * DelegationEvent is one streaming event delivered to a + * subscriber. The agent SDK reads exactly one event (the + * terminal decision) and disconnects. + * + * @generated from message customers.DelegationEvent + */ +export type DelegationEvent = Message<"customers.DelegationEvent"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * approved | denied | expired | cancelled + * + * @generated from field: string status = 2; + */ + status: string; + + /** + * @generated from field: google.protobuf.Timestamp decided_at = 3; + */ + decidedAt?: Timestamp; + + /** + * @generated from field: string grantor_principal_id = 4; + */ + grantorPrincipalId: string; + + /** + * @generated from field: string reason = 5; + */ + reason: string; + + /** + * On approve: the gateway's freshly minted scoped-auth token. + * Empty on deny / expired / cancelled. + * + * @generated from field: string scoped_auth_token = 6; + */ + scopedAuthToken: string; + + /** + * On approve: the unique id of the minted token (for audit + * correlation). Same value as the encoded token's `id` field. + * + * @generated from field: string minted_token_id = 7; + */ + mintedTokenId: string; +}; + +/** + * Describes the message customers.DelegationEvent. + * Use `create(DelegationEventSchema)` to create a new message. + */ +export const DelegationEventSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 72); + +/** + * @generated from message customers.DecideDelegationRequest + */ +export type DecideDelegationRequest = Message<"customers.DecideDelegationRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string org_id = 2; + */ + orgId: string; + + /** + * Decision: approved | denied. (expired/cancelled are state + * transitions handled by other paths.) + * + * @generated from field: string decision = 3; + */ + decision: string; + + /** + * Reason: required when decision=denied; optional on approve. + * + * @generated from field: string reason = 4; + */ + reason: string; +}; + +/** + * Describes the message customers.DecideDelegationRequest. + * Use `create(DecideDelegationRequestSchema)` to create a new message. + */ +export const DecideDelegationRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 73); + +/** + * @generated from message customers.DelegationGrant + */ +export type DelegationGrant = Message<"customers.DelegationGrant"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string org_id = 2; + */ + orgId: string; + + /** + * @generated from field: string actor_principal_id = 3; + */ + actorPrincipalId: string; + + /** + * @generated from field: string grantor_principal_id = 4; + */ + grantorPrincipalId: string; + + /** + * @generated from field: string action = 5; + */ + action: string; + + /** + * @generated from field: string resource = 6; + */ + resource: string; + + /** + * @generated from field: string resource_id = 7; + */ + resourceId: string; + + /** + * @generated from field: string justification = 8; + */ + justification: string; + + /** + * @generated from field: string status = 9; + */ + status: string; + + /** + * @generated from field: string risk_level = 10; */ - action: string; + riskLevel: string; /** - * @generated from field: string org_id = 5; + * one_shot | pattern + * + * @generated from field: string kind = 11; */ - orgId: string; + kind: string; /** - * @generated from field: string scope = 6; + * @generated from field: google.protobuf.Timestamp created_at = 12; */ - scope: string; -}; - -/** - * Describes the message customers.CheckPermissionRequest. - * Use `create(CheckPermissionRequestSchema)` to create a new message. - */ -export const CheckPermissionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 53); + createdAt?: Timestamp; -/** - * @generated from message customers.CheckPermissionResponse - */ -export type CheckPermissionResponse = Message<"customers.CheckPermissionResponse"> & { /** - * @generated from field: bool allowed = 1; + * @generated from field: google.protobuf.Timestamp decided_at = 13; */ - allowed: boolean; + decidedAt?: Timestamp; /** - * @generated from field: string reason = 2; + * @generated from field: google.protobuf.Timestamp expires_at = 14; */ - reason: string; -}; - -/** - * Describes the message customers.CheckPermissionResponse. - * Use `create(CheckPermissionResponseSchema)` to create a new message. - */ -export const CheckPermissionResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 54); + expiresAt?: Timestamp; -/** - * @generated from message customers.ResolveIdentityRequest - */ -export type ResolveIdentityRequest = Message<"customers.ResolveIdentityRequest"> & { /** - * @generated from field: string provider = 1; + * @generated from field: string decision_reason = 15; */ - provider: string; + decisionReason: string; /** - * @generated from field: string provider_id = 2; + * @generated from field: string minted_token_id = 16; */ - providerId: string; + mintedTokenId: string; }; /** - * Describes the message customers.ResolveIdentityRequest. - * Use `create(ResolveIdentityRequestSchema)` to create a new message. + * Describes the message customers.DelegationGrant. + * Use `create(DelegationGrantSchema)` to create a new message. */ -export const ResolveIdentityRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 55); +export const DelegationGrantSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 74); /** - * @generated from message customers.ResolveIdentityResponse + * @generated from message customers.ListPendingDelegationsRequest */ -export type ResolveIdentityResponse = Message<"customers.ResolveIdentityResponse"> & { +export type ListPendingDelegationsRequest = Message<"customers.ListPendingDelegationsRequest"> & { /** - * @generated from field: string user_id = 1; - */ - userId: string; - - /** - * @generated from field: string org_id = 2; + * @generated from field: string org_id = 1; */ orgId: string; /** - * deprecated, kept for backward compat - * - * @generated from field: repeated string roles = 3; + * @generated from field: int32 page_size = 2; */ - roles: string[]; + pageSize: number; /** - * @generated from field: bool found = 4; + * @generated from field: string page_token = 3; */ - found: boolean; + pageToken: string; +}; + +/** + * Describes the message customers.ListPendingDelegationsRequest. + * Use `create(ListPendingDelegationsRequestSchema)` to create a new message. + */ +export const ListPendingDelegationsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 75); +/** + * @generated from message customers.ListPendingDelegationsResponse + */ +export type ListPendingDelegationsResponse = Message<"customers.ListPendingDelegationsResponse"> & { /** - * "owner"|"admin"|"member" - * - * @generated from field: string org_role = 5; + * @generated from field: repeated customers.DelegationGrant grants = 1; */ - orgRole: string; + grants: DelegationGrant[]; /** - * "super_admin"|"support"|"billing"|absent - * - * @generated from field: string platform_role = 6; + * @generated from field: string next_page_token = 2; */ - platformRole: string; + nextPageToken: string; }; /** - * Describes the message customers.ResolveIdentityResponse. - * Use `create(ResolveIdentityResponseSchema)` to create a new message. + * Describes the message customers.ListPendingDelegationsResponse. + * Use `create(ListPendingDelegationsResponseSchema)` to create a new message. */ -export const ResolveIdentityResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 56); +export const ListPendingDelegationsResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 76); /** * @generated from message customers.APIKey @@ -1552,7 +2381,7 @@ export type APIKey = Message<"customers.APIKey"> & { * Use `create(APIKeySchema)` to create a new message. */ export const APIKeySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 57); + messageDesc(file_saas_starter_api_grpc, 77); /** * @generated from message customers.CreateAPIKeyRequest @@ -1589,7 +2418,7 @@ export type CreateAPIKeyRequest = Message<"customers.CreateAPIKeyRequest"> & { * Use `create(CreateAPIKeyRequestSchema)` to create a new message. */ export const CreateAPIKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 58); + messageDesc(file_saas_starter_api_grpc, 78); /** * @generated from message customers.CreateAPIKeyResponse @@ -1611,7 +2440,7 @@ export type CreateAPIKeyResponse = Message<"customers.CreateAPIKeyResponse"> & { * Use `create(CreateAPIKeyResponseSchema)` to create a new message. */ export const CreateAPIKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 59); + messageDesc(file_saas_starter_api_grpc, 79); /** * @generated from message customers.ListAPIKeysRequest @@ -1638,7 +2467,7 @@ export type ListAPIKeysRequest = Message<"customers.ListAPIKeysRequest"> & { * Use `create(ListAPIKeysRequestSchema)` to create a new message. */ export const ListAPIKeysRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 60); + messageDesc(file_saas_starter_api_grpc, 80); /** * @generated from message customers.ListAPIKeysResponse @@ -1660,7 +2489,7 @@ export type ListAPIKeysResponse = Message<"customers.ListAPIKeysResponse"> & { * Use `create(ListAPIKeysResponseSchema)` to create a new message. */ export const ListAPIKeysResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 61); + messageDesc(file_saas_starter_api_grpc, 81); /** * @generated from message customers.RevokeAPIKeyRequest @@ -1670,6 +2499,14 @@ export type RevokeAPIKeyRequest = Message<"customers.RevokeAPIKeyRequest"> & { * @generated from field: string id = 1; */ id: string; + + /** + * The owning org — lets the handler enforce org-admin (not platform-admin) + * revocation. Maps to a query param on the REST DELETE. + * + * @generated from field: string organization_id = 2; + */ + organizationId: string; }; /** @@ -1677,16 +2514,20 @@ export type RevokeAPIKeyRequest = Message<"customers.RevokeAPIKeyRequest"> & { * Use `create(RevokeAPIKeyRequestSchema)` to create a new message. */ export const RevokeAPIKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 62); + messageDesc(file_saas_starter_api_grpc, 82); /** * @generated from message customers.ValidateAPIKeyRequest */ export type ValidateAPIKeyRequest = Message<"customers.ValidateAPIKeyRequest"> & { /** - * @generated from field: string key_hash = 1; + * The PLAINTEXT key, over TLS. The server hashes (Vault transit HMAC, or + * SHA-256 fallback) — clients cannot precompute the HMAC, and the previous + * field name (`key_hash`) was a lie: the handler hashed whatever it received. + * + * @generated from field: string key = 1; */ - keyHash: string; + key: string; }; /** @@ -1694,9 +2535,13 @@ export type ValidateAPIKeyRequest = Message<"customers.ValidateAPIKeyRequest"> & * Use `create(ValidateAPIKeyRequestSchema)` to create a new message. */ export const ValidateAPIKeyRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 63); + messageDesc(file_saas_starter_api_grpc, 83); /** + * Identity Claims v1 — everything a policy-enforcement consumer (e.g. an AI + * gateway) needs to construct the caller's execution context in ONE call: + * who, in which org, in which teams (paths), with which roles/permissions. + * * @generated from message customers.ValidateAPIKeyResponse */ export type ValidateAPIKeyResponse = Message<"customers.ValidateAPIKeyResponse"> & { @@ -1716,9 +2561,40 @@ export type ValidateAPIKeyResponse = Message<"customers.ValidateAPIKeyResponse"> organizationId: string; /** + * API-key permission scopes, "resource:action" strings. + * * @generated from field: repeated string scopes = 4; */ scopes: string[]; + + /** + * Team PATHS the key's user belongs to (literal membership; consumers expand + * ancestors), e.g. "engineering/platform". + * + * @generated from field: repeated string workspaces = 5; + */ + workspaces: string[]; + + /** + * RBAC role names assigned to the user in this org. + * + * @generated from field: repeated string roles = 6; + */ + roles: string[]; + + /** + * The user's profile attributes (open metadata; policy may key on it). + * + * @generated from field: map attributes = 7; + */ + attributes: { [key: string]: string }; + + /** + * "human" | "service" | "agent" (PrincipalKind, lowercase). + * + * @generated from field: string principal_kind = 8; + */ + principalKind: string; }; /** @@ -1726,7 +2602,7 @@ export type ValidateAPIKeyResponse = Message<"customers.ValidateAPIKeyResponse"> * Use `create(ValidateAPIKeyResponseSchema)` to create a new message. */ export const ValidateAPIKeyResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 64); + messageDesc(file_saas_starter_api_grpc, 84); /** * @generated from message customers.AuthenticateRequest @@ -1768,7 +2644,7 @@ export type AuthenticateRequest = Message<"customers.AuthenticateRequest"> & { * Use `create(AuthenticateRequestSchema)` to create a new message. */ export const AuthenticateRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 65); + messageDesc(file_saas_starter_api_grpc, 85); /** * @generated from message customers.AuthenticateResponse @@ -1810,7 +2686,7 @@ export type AuthenticateResponse = Message<"customers.AuthenticateResponse"> & { * Use `create(AuthenticateResponseSchema)` to create a new message. */ export const AuthenticateResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 66); + messageDesc(file_saas_starter_api_grpc, 86); /** * @generated from message customers.RefreshTokenRequest @@ -1827,7 +2703,7 @@ export type RefreshTokenRequest = Message<"customers.RefreshTokenRequest"> & { * Use `create(RefreshTokenRequestSchema)` to create a new message. */ export const RefreshTokenRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 67); + messageDesc(file_saas_starter_api_grpc, 87); /** * @generated from message customers.RefreshTokenResponse @@ -1854,7 +2730,7 @@ export type RefreshTokenResponse = Message<"customers.RefreshTokenResponse"> & { * Use `create(RefreshTokenResponseSchema)` to create a new message. */ export const RefreshTokenResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 68); + messageDesc(file_saas_starter_api_grpc, 88); /** * @generated from message customers.LogoutRequest @@ -1871,7 +2747,7 @@ export type LogoutRequest = Message<"customers.LogoutRequest"> & { * Use `create(LogoutRequestSchema)` to create a new message. */ export const LogoutRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 69); + messageDesc(file_saas_starter_api_grpc, 89); /** * @generated from message customers.JWKSResponse @@ -1888,7 +2764,7 @@ export type JWKSResponse = Message<"customers.JWKSResponse"> & { * Use `create(JWKSResponseSchema)` to create a new message. */ export const JWKSResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 70); + messageDesc(file_saas_starter_api_grpc, 90); /** * BeginOAuthRequest is the FE's first hop on the authorization-code @@ -1916,7 +2792,7 @@ export type BeginOAuthRequest = Message<"customers.BeginOAuthRequest"> & { * Use `create(BeginOAuthRequestSchema)` to create a new message. */ export const BeginOAuthRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 71); + messageDesc(file_saas_starter_api_grpc, 91); /** * @generated from message customers.BeginOAuthResponse @@ -1936,7 +2812,7 @@ export type BeginOAuthResponse = Message<"customers.BeginOAuthResponse"> & { * Use `create(BeginOAuthResponseSchema)` to create a new message. */ export const BeginOAuthResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 72); + messageDesc(file_saas_starter_api_grpc, 92); /** * @generated from message customers.AuditExportConfig @@ -2018,7 +2894,7 @@ export type AuditExportConfig = Message<"customers.AuditExportConfig"> & { * Use `create(AuditExportConfigSchema)` to create a new message. */ export const AuditExportConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 73); + messageDesc(file_saas_starter_api_grpc, 93); /** * @generated from message customers.GetAuditExportConfigRequest @@ -2035,7 +2911,7 @@ export type GetAuditExportConfigRequest = Message<"customers.GetAuditExportConfi * Use `create(GetAuditExportConfigRequestSchema)` to create a new message. */ export const GetAuditExportConfigRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 74); + messageDesc(file_saas_starter_api_grpc, 94); /** * @generated from message customers.SaveAuditExportConfigRequest @@ -2052,7 +2928,7 @@ export type SaveAuditExportConfigRequest = Message<"customers.SaveAuditExportCon * Use `create(SaveAuditExportConfigRequestSchema)` to create a new message. */ export const SaveAuditExportConfigRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 75); + messageDesc(file_saas_starter_api_grpc, 95); /** * @generated from message customers.DeleteAuditExportConfigRequest @@ -2069,7 +2945,7 @@ export type DeleteAuditExportConfigRequest = Message<"customers.DeleteAuditExpor * Use `create(DeleteAuditExportConfigRequestSchema)` to create a new message. */ export const DeleteAuditExportConfigRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 76); + messageDesc(file_saas_starter_api_grpc, 96); /** * @generated from message customers.ConsentStatus @@ -2102,7 +2978,7 @@ export type ConsentStatus = Message<"customers.ConsentStatus"> & { * Use `create(ConsentStatusSchema)` to create a new message. */ export const ConsentStatusSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 77); + messageDesc(file_saas_starter_api_grpc, 97); /** * @generated from message customers.GetConsentStatusRequest @@ -2115,7 +2991,7 @@ export type GetConsentStatusRequest = Message<"customers.GetConsentStatusRequest * Use `create(GetConsentStatusRequestSchema)` to create a new message. */ export const GetConsentStatusRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 78); + messageDesc(file_saas_starter_api_grpc, 98); /** * @generated from message customers.AcceptConsentRequest @@ -2132,7 +3008,7 @@ export type AcceptConsentRequest = Message<"customers.AcceptConsentRequest"> & { * Use `create(AcceptConsentRequestSchema)` to create a new message. */ export const AcceptConsentRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 79); + messageDesc(file_saas_starter_api_grpc, 99); /** * @generated from message customers.AuditEvent @@ -2194,7 +3070,7 @@ export type AuditEvent = Message<"customers.AuditEvent"> & { * Use `create(AuditEventSchema)` to create a new message. */ export const AuditEventSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 80); + messageDesc(file_saas_starter_api_grpc, 100); /** * @generated from message customers.QueryAuditLogRequest @@ -2251,7 +3127,7 @@ export type QueryAuditLogRequest = Message<"customers.QueryAuditLogRequest"> & { * Use `create(QueryAuditLogRequestSchema)` to create a new message. */ export const QueryAuditLogRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 81); + messageDesc(file_saas_starter_api_grpc, 101); /** * @generated from message customers.QueryAuditLogResponse @@ -2278,7 +3154,7 @@ export type QueryAuditLogResponse = Message<"customers.QueryAuditLogResponse"> & * Use `create(QueryAuditLogResponseSchema)` to create a new message. */ export const QueryAuditLogResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 82); + messageDesc(file_saas_starter_api_grpc, 102); /** * @generated from message customers.ExportAuditLogRequest @@ -2312,7 +3188,7 @@ export type ExportAuditLogRequest = Message<"customers.ExportAuditLogRequest"> & * Use `create(ExportAuditLogRequestSchema)` to create a new message. */ export const ExportAuditLogRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 83); + messageDesc(file_saas_starter_api_grpc, 103); /** * @generated from message customers.ExportAuditLogResponse @@ -2339,7 +3215,7 @@ export type ExportAuditLogResponse = Message<"customers.ExportAuditLogResponse"> * Use `create(ExportAuditLogResponseSchema)` to create a new message. */ export const ExportAuditLogResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 84); + messageDesc(file_saas_starter_api_grpc, 104); /** * @generated from message customers.Invitation @@ -2391,7 +3267,7 @@ export type Invitation = Message<"customers.Invitation"> & { * Use `create(InvitationSchema)` to create a new message. */ export const InvitationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 85); + messageDesc(file_saas_starter_api_grpc, 105); /** * @generated from message customers.CreateInvitationRequest @@ -2418,7 +3294,7 @@ export type CreateInvitationRequest = Message<"customers.CreateInvitationRequest * Use `create(CreateInvitationRequestSchema)` to create a new message. */ export const CreateInvitationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 86); + messageDesc(file_saas_starter_api_grpc, 106); /** * @generated from message customers.CreateInvitationResponse @@ -2440,7 +3316,7 @@ export type CreateInvitationResponse = Message<"customers.CreateInvitationRespon * Use `create(CreateInvitationResponseSchema)` to create a new message. */ export const CreateInvitationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 87); + messageDesc(file_saas_starter_api_grpc, 107); /** * @generated from message customers.AcceptInvitationRequest @@ -2457,7 +3333,7 @@ export type AcceptInvitationRequest = Message<"customers.AcceptInvitationRequest * Use `create(AcceptInvitationRequestSchema)` to create a new message. */ export const AcceptInvitationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 88); + messageDesc(file_saas_starter_api_grpc, 108); /** * @generated from message customers.AcceptInvitationResponse @@ -2474,7 +3350,7 @@ export type AcceptInvitationResponse = Message<"customers.AcceptInvitationRespon * Use `create(AcceptInvitationResponseSchema)` to create a new message. */ export const AcceptInvitationResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 89); + messageDesc(file_saas_starter_api_grpc, 109); /** * @generated from message customers.ListInvitationsRequest @@ -2496,7 +3372,7 @@ export type ListInvitationsRequest = Message<"customers.ListInvitationsRequest"> * Use `create(ListInvitationsRequestSchema)` to create a new message. */ export const ListInvitationsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 90); + messageDesc(file_saas_starter_api_grpc, 110); /** * @generated from message customers.ListInvitationsResponse @@ -2513,7 +3389,7 @@ export type ListInvitationsResponse = Message<"customers.ListInvitationsResponse * Use `create(ListInvitationsResponseSchema)` to create a new message. */ export const ListInvitationsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 91); + messageDesc(file_saas_starter_api_grpc, 111); /** * @generated from message customers.RevokeInvitationRequest @@ -2530,7 +3406,7 @@ export type RevokeInvitationRequest = Message<"customers.RevokeInvitationRequest * Use `create(RevokeInvitationRequestSchema)` to create a new message. */ export const RevokeInvitationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 92); + messageDesc(file_saas_starter_api_grpc, 112); /** * @generated from message customers.SearchUsersRequest @@ -2557,7 +3433,7 @@ export type SearchUsersRequest = Message<"customers.SearchUsersRequest"> & { * Use `create(SearchUsersRequestSchema)` to create a new message. */ export const SearchUsersRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 93); + messageDesc(file_saas_starter_api_grpc, 113); /** * @generated from message customers.SearchUsersResponse @@ -2584,7 +3460,7 @@ export type SearchUsersResponse = Message<"customers.SearchUsersResponse"> & { * Use `create(SearchUsersResponseSchema)` to create a new message. */ export const SearchUsersResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 94); + messageDesc(file_saas_starter_api_grpc, 114); /** * @generated from message customers.SuspendUserRequest @@ -2606,7 +3482,7 @@ export type SuspendUserRequest = Message<"customers.SuspendUserRequest"> & { * Use `create(SuspendUserRequestSchema)` to create a new message. */ export const SuspendUserRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 95); + messageDesc(file_saas_starter_api_grpc, 115); /** * @generated from message customers.UnsuspendUserRequest @@ -2623,7 +3499,7 @@ export type UnsuspendUserRequest = Message<"customers.UnsuspendUserRequest"> & { * Use `create(UnsuspendUserRequestSchema)` to create a new message. */ export const UnsuspendUserRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 96); + messageDesc(file_saas_starter_api_grpc, 116); /** * @generated from message customers.ImpersonateUserRequest @@ -2640,7 +3516,7 @@ export type ImpersonateUserRequest = Message<"customers.ImpersonateUserRequest"> * Use `create(ImpersonateUserRequestSchema)` to create a new message. */ export const ImpersonateUserRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 97); + messageDesc(file_saas_starter_api_grpc, 117); /** * @generated from message customers.ImpersonateUserResponse @@ -2662,7 +3538,7 @@ export type ImpersonateUserResponse = Message<"customers.ImpersonateUserResponse * Use `create(ImpersonateUserResponseSchema)` to create a new message. */ export const ImpersonateUserResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 98); + messageDesc(file_saas_starter_api_grpc, 118); /** * @generated from message customers.ListActiveSessionsRequest @@ -2689,7 +3565,7 @@ export type ListActiveSessionsRequest = Message<"customers.ListActiveSessionsReq * Use `create(ListActiveSessionsRequestSchema)` to create a new message. */ export const ListActiveSessionsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 99); + messageDesc(file_saas_starter_api_grpc, 119); /** * @generated from message customers.SessionInfo @@ -2736,7 +3612,7 @@ export type SessionInfo = Message<"customers.SessionInfo"> & { * Use `create(SessionInfoSchema)` to create a new message. */ export const SessionInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 100); + messageDesc(file_saas_starter_api_grpc, 120); /** * @generated from message customers.ListActiveSessionsResponse @@ -2758,7 +3634,29 @@ export type ListActiveSessionsResponse = Message<"customers.ListActiveSessionsRe * Use `create(ListActiveSessionsResponseSchema)` to create a new message. */ export const ListActiveSessionsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 101); + messageDesc(file_saas_starter_api_grpc, 121); + +/** + * @generated from message customers.RevokeSessionRequest + */ +export type RevokeSessionRequest = Message<"customers.RevokeSessionRequest"> & { + /** + * @generated from field: string session_id = 1; + */ + sessionId: string; + + /** + * @generated from field: string reason = 2; + */ + reason: string; +}; + +/** + * Describes the message customers.RevokeSessionRequest. + * Use `create(RevokeSessionRequestSchema)` to create a new message. + */ +export const RevokeSessionRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_saas_starter_api_grpc, 122); /** * @generated from message customers.GetOrgEntitlementsRequest @@ -2775,7 +3673,7 @@ export type GetOrgEntitlementsRequest = Message<"customers.GetOrgEntitlementsReq * Use `create(GetOrgEntitlementsRequestSchema)` to create a new message. */ export const GetOrgEntitlementsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 102); + messageDesc(file_saas_starter_api_grpc, 123); /** * @generated from message customers.GetOrgEntitlementsResponse @@ -2797,7 +3695,7 @@ export type GetOrgEntitlementsResponse = Message<"customers.GetOrgEntitlementsRe * Use `create(GetOrgEntitlementsResponseSchema)` to create a new message. */ export const GetOrgEntitlementsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 103); + messageDesc(file_saas_starter_api_grpc, 124); /** * @generated from message customers.EntitlementInfo @@ -2831,7 +3729,7 @@ export type EntitlementInfo = Message<"customers.EntitlementInfo"> & { * Use `create(EntitlementInfoSchema)` to create a new message. */ export const EntitlementInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 104); + messageDesc(file_saas_starter_api_grpc, 125); /** * @generated from message customers.OverrideEntitlementRequest @@ -2863,7 +3761,7 @@ export type OverrideEntitlementRequest = Message<"customers.OverrideEntitlementR * Use `create(OverrideEntitlementRequestSchema)` to create a new message. */ export const OverrideEntitlementRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 105); + messageDesc(file_saas_starter_api_grpc, 126); /** * @generated from message customers.OverrideEntitlementResponse @@ -2880,7 +3778,7 @@ export type OverrideEntitlementResponse = Message<"customers.OverrideEntitlement * Use `create(OverrideEntitlementResponseSchema)` to create a new message. */ export const OverrideEntitlementResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 106); + messageDesc(file_saas_starter_api_grpc, 127); /** * @generated from message customers.GrantPlatformRoleRequest @@ -2902,7 +3800,7 @@ export type GrantPlatformRoleRequest = Message<"customers.GrantPlatformRoleReque * Use `create(GrantPlatformRoleRequestSchema)` to create a new message. */ export const GrantPlatformRoleRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 107); + messageDesc(file_saas_starter_api_grpc, 128); /** * @generated from message customers.RevokePlatformRoleRequest @@ -2919,7 +3817,7 @@ export type RevokePlatformRoleRequest = Message<"customers.RevokePlatformRoleReq * Use `create(RevokePlatformRoleRequestSchema)` to create a new message. */ export const RevokePlatformRoleRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 108); + messageDesc(file_saas_starter_api_grpc, 129); /** * @generated from message customers.ListPlatformAdminsRequest @@ -2932,7 +3830,7 @@ export type ListPlatformAdminsRequest = Message<"customers.ListPlatformAdminsReq * Use `create(ListPlatformAdminsRequestSchema)` to create a new message. */ export const ListPlatformAdminsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 109); + messageDesc(file_saas_starter_api_grpc, 130); /** * @generated from message customers.PlatformAdminEntry @@ -2964,7 +3862,7 @@ export type PlatformAdminEntry = Message<"customers.PlatformAdminEntry"> & { * Use `create(PlatformAdminEntrySchema)` to create a new message. */ export const PlatformAdminEntrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 110); + messageDesc(file_saas_starter_api_grpc, 131); /** * @generated from message customers.ListPlatformAdminsResponse @@ -2981,7 +3879,7 @@ export type ListPlatformAdminsResponse = Message<"customers.ListPlatformAdminsRe * Use `create(ListPlatformAdminsResponseSchema)` to create a new message. */ export const ListPlatformAdminsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 111); + messageDesc(file_saas_starter_api_grpc, 132); /** * @generated from message customers.ListFeatureFlagsRequest @@ -2994,7 +3892,7 @@ export type ListFeatureFlagsRequest = Message<"customers.ListFeatureFlagsRequest * Use `create(ListFeatureFlagsRequestSchema)` to create a new message. */ export const ListFeatureFlagsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 112); + messageDesc(file_saas_starter_api_grpc, 133); /** * @generated from message customers.FeatureFlagEntry @@ -3031,7 +3929,7 @@ export type FeatureFlagEntry = Message<"customers.FeatureFlagEntry"> & { * Use `create(FeatureFlagEntrySchema)` to create a new message. */ export const FeatureFlagEntrySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 113); + messageDesc(file_saas_starter_api_grpc, 134); /** * @generated from message customers.ListFeatureFlagsResponse @@ -3048,7 +3946,7 @@ export type ListFeatureFlagsResponse = Message<"customers.ListFeatureFlagsRespon * Use `create(ListFeatureFlagsResponseSchema)` to create a new message. */ export const ListFeatureFlagsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 114); + messageDesc(file_saas_starter_api_grpc, 135); /** * @generated from message customers.UpsertFeatureFlagRequest @@ -3085,7 +3983,7 @@ export type UpsertFeatureFlagRequest = Message<"customers.UpsertFeatureFlagReque * Use `create(UpsertFeatureFlagRequestSchema)` to create a new message. */ export const UpsertFeatureFlagRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 115); + messageDesc(file_saas_starter_api_grpc, 136); /** * @generated from message customers.UpsertFeatureFlagResponse @@ -3102,7 +4000,7 @@ export type UpsertFeatureFlagResponse = Message<"customers.UpsertFeatureFlagResp * Use `create(UpsertFeatureFlagResponseSchema)` to create a new message. */ export const UpsertFeatureFlagResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 116); + messageDesc(file_saas_starter_api_grpc, 137); /** * @generated from message customers.WebhookSubscription @@ -3149,7 +4047,7 @@ export type WebhookSubscription = Message<"customers.WebhookSubscription"> & { * Use `create(WebhookSubscriptionSchema)` to create a new message. */ export const WebhookSubscriptionSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 117); + messageDesc(file_saas_starter_api_grpc, 138); /** * @generated from message customers.WebhookDelivery @@ -3222,7 +4120,7 @@ export type WebhookDelivery = Message<"customers.WebhookDelivery"> & { * Use `create(WebhookDeliverySchema)` to create a new message. */ export const WebhookDeliverySchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 118); + messageDesc(file_saas_starter_api_grpc, 139); /** * @generated from message customers.CreateWebhookSubscriptionRequest @@ -3254,7 +4152,7 @@ export type CreateWebhookSubscriptionRequest = Message<"customers.CreateWebhookS * Use `create(CreateWebhookSubscriptionRequestSchema)` to create a new message. */ export const CreateWebhookSubscriptionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 119); + messageDesc(file_saas_starter_api_grpc, 140); /** * @generated from message customers.DeleteWebhookSubscriptionRequest @@ -3271,7 +4169,7 @@ export type DeleteWebhookSubscriptionRequest = Message<"customers.DeleteWebhookS * Use `create(DeleteWebhookSubscriptionRequestSchema)` to create a new message. */ export const DeleteWebhookSubscriptionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 120); + messageDesc(file_saas_starter_api_grpc, 141); /** * @generated from message customers.ListWebhookSubscriptionsRequest @@ -3298,7 +4196,7 @@ export type ListWebhookSubscriptionsRequest = Message<"customers.ListWebhookSubs * Use `create(ListWebhookSubscriptionsRequestSchema)` to create a new message. */ export const ListWebhookSubscriptionsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 121); + messageDesc(file_saas_starter_api_grpc, 142); /** * @generated from message customers.ListWebhookSubscriptionsResponse @@ -3320,7 +4218,7 @@ export type ListWebhookSubscriptionsResponse = Message<"customers.ListWebhookSub * Use `create(ListWebhookSubscriptionsResponseSchema)` to create a new message. */ export const ListWebhookSubscriptionsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 122); + messageDesc(file_saas_starter_api_grpc, 143); /** * @generated from message customers.ListWebhookDeliveriesRequest @@ -3347,7 +4245,7 @@ export type ListWebhookDeliveriesRequest = Message<"customers.ListWebhookDeliver * Use `create(ListWebhookDeliveriesRequestSchema)` to create a new message. */ export const ListWebhookDeliveriesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 123); + messageDesc(file_saas_starter_api_grpc, 144); /** * @generated from message customers.ListWebhookDeliveriesResponse @@ -3369,7 +4267,7 @@ export type ListWebhookDeliveriesResponse = Message<"customers.ListWebhookDelive * Use `create(ListWebhookDeliveriesResponseSchema)` to create a new message. */ export const ListWebhookDeliveriesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 124); + messageDesc(file_saas_starter_api_grpc, 145); /** * @generated from message customers.TestWebhookRequest @@ -3395,7 +4293,7 @@ export type TestWebhookRequest = Message<"customers.TestWebhookRequest"> & { * Use `create(TestWebhookRequestSchema)` to create a new message. */ export const TestWebhookRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 125); + messageDesc(file_saas_starter_api_grpc, 146); /** * @generated from message customers.GetWebhookDeliveryRequest @@ -3412,7 +4310,7 @@ export type GetWebhookDeliveryRequest = Message<"customers.GetWebhookDeliveryReq * Use `create(GetWebhookDeliveryRequestSchema)` to create a new message. */ export const GetWebhookDeliveryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 126); + messageDesc(file_saas_starter_api_grpc, 147); /** * @generated from message customers.ReplayWebhookDeliveryRequest @@ -3433,7 +4331,7 @@ export type ReplayWebhookDeliveryRequest = Message<"customers.ReplayWebhookDeliv * Use `create(ReplayWebhookDeliveryRequestSchema)` to create a new message. */ export const ReplayWebhookDeliveryRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 127); + messageDesc(file_saas_starter_api_grpc, 148); /** * @generated from message customers.RotateWebhookSecretRequest @@ -3460,7 +4358,7 @@ export type RotateWebhookSecretRequest = Message<"customers.RotateWebhookSecretR * Use `create(RotateWebhookSecretRequestSchema)` to create a new message. */ export const RotateWebhookSecretRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 128); + messageDesc(file_saas_starter_api_grpc, 149); /** * @generated from message customers.RotateWebhookSecretResponse @@ -3485,7 +4383,7 @@ export type RotateWebhookSecretResponse = Message<"customers.RotateWebhookSecret * Use `create(RotateWebhookSecretResponseSchema)` to create a new message. */ export const RotateWebhookSecretResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 129); + messageDesc(file_saas_starter_api_grpc, 150); /** * @generated from message customers.Notification @@ -3542,7 +4440,7 @@ export type Notification = Message<"customers.Notification"> & { * Use `create(NotificationSchema)` to create a new message. */ export const NotificationSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 130); + messageDesc(file_saas_starter_api_grpc, 151); /** * @generated from message customers.ListNotificationsRequest @@ -3564,7 +4462,7 @@ export type ListNotificationsRequest = Message<"customers.ListNotificationsReque * Use `create(ListNotificationsRequestSchema)` to create a new message. */ export const ListNotificationsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 131); + messageDesc(file_saas_starter_api_grpc, 152); /** * @generated from message customers.ListNotificationsResponse @@ -3586,7 +4484,7 @@ export type ListNotificationsResponse = Message<"customers.ListNotificationsResp * Use `create(ListNotificationsResponseSchema)` to create a new message. */ export const ListNotificationsResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 132); + messageDesc(file_saas_starter_api_grpc, 153); /** * @generated from message customers.GetUnreadCountRequest @@ -3599,7 +4497,7 @@ export type GetUnreadCountRequest = Message<"customers.GetUnreadCountRequest"> & * Use `create(GetUnreadCountRequestSchema)` to create a new message. */ export const GetUnreadCountRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 133); + messageDesc(file_saas_starter_api_grpc, 154); /** * @generated from message customers.GetUnreadCountResponse @@ -3616,7 +4514,7 @@ export type GetUnreadCountResponse = Message<"customers.GetUnreadCountResponse"> * Use `create(GetUnreadCountResponseSchema)` to create a new message. */ export const GetUnreadCountResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 134); + messageDesc(file_saas_starter_api_grpc, 155); /** * @generated from message customers.MarkNotificationReadRequest @@ -3633,7 +4531,7 @@ export type MarkNotificationReadRequest = Message<"customers.MarkNotificationRea * Use `create(MarkNotificationReadRequestSchema)` to create a new message. */ export const MarkNotificationReadRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 135); + messageDesc(file_saas_starter_api_grpc, 156); /** * @generated from message customers.MarkAllNotificationsReadRequest @@ -3646,7 +4544,7 @@ export type MarkAllNotificationsReadRequest = Message<"customers.MarkAllNotifica * Use `create(MarkAllNotificationsReadRequestSchema)` to create a new message. */ export const MarkAllNotificationsReadRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 136); + messageDesc(file_saas_starter_api_grpc, 157); /** * @generated from message customers.DeleteNotificationRequest @@ -3663,7 +4561,7 @@ export type DeleteNotificationRequest = Message<"customers.DeleteNotificationReq * Use `create(DeleteNotificationRequestSchema)` to create a new message. */ export const DeleteNotificationRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 137); + messageDesc(file_saas_starter_api_grpc, 158); /** * @generated from message customers.OnboardingStep @@ -3690,7 +4588,7 @@ export type OnboardingStep = Message<"customers.OnboardingStep"> & { * Use `create(OnboardingStepSchema)` to create a new message. */ export const OnboardingStepSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 138); + messageDesc(file_saas_starter_api_grpc, 159); /** * @generated from message customers.OnboardingProgress @@ -3712,7 +4610,7 @@ export type OnboardingProgress = Message<"customers.OnboardingProgress"> & { * Use `create(OnboardingProgressSchema)` to create a new message. */ export const OnboardingProgressSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 139); + messageDesc(file_saas_starter_api_grpc, 160); /** * @generated from message customers.GetOnboardingProgressRequest @@ -3725,7 +4623,7 @@ export type GetOnboardingProgressRequest = Message<"customers.GetOnboardingProgr * Use `create(GetOnboardingProgressRequestSchema)` to create a new message. */ export const GetOnboardingProgressRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 140); + messageDesc(file_saas_starter_api_grpc, 161); /** * @generated from message customers.CompleteOnboardingStepRequest @@ -3742,7 +4640,7 @@ export type CompleteOnboardingStepRequest = Message<"customers.CompleteOnboardin * Use `create(CompleteOnboardingStepRequestSchema)` to create a new message. */ export const CompleteOnboardingStepRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 141); + messageDesc(file_saas_starter_api_grpc, 162); /** * @generated from message customers.SkipOnboardingStepRequest @@ -3759,7 +4657,7 @@ export type SkipOnboardingStepRequest = Message<"customers.SkipOnboardingStepReq * Use `create(SkipOnboardingStepRequestSchema)` to create a new message. */ export const SkipOnboardingStepRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 142); + messageDesc(file_saas_starter_api_grpc, 163); /** * @generated from message customers.GDPRRequest @@ -3811,7 +4709,7 @@ export type GDPRRequest = Message<"customers.GDPRRequest"> & { * Use `create(GDPRRequestSchema)` to create a new message. */ export const GDPRRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 143); + messageDesc(file_saas_starter_api_grpc, 164); /** * @generated from message customers.RequestDataExportRequest @@ -3824,7 +4722,7 @@ export type RequestDataExportRequest = Message<"customers.RequestDataExportReque * Use `create(RequestDataExportRequestSchema)` to create a new message. */ export const RequestDataExportRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 144); + messageDesc(file_saas_starter_api_grpc, 165); /** * @generated from message customers.GetExportStatusRequest @@ -3841,7 +4739,7 @@ export type GetExportStatusRequest = Message<"customers.GetExportStatusRequest"> * Use `create(GetExportStatusRequestSchema)` to create a new message. */ export const GetExportStatusRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 145); + messageDesc(file_saas_starter_api_grpc, 166); /** * @generated from message customers.RequestDeletionRequest @@ -3854,7 +4752,7 @@ export type RequestDeletionRequest = Message<"customers.RequestDeletionRequest"> * Use `create(RequestDeletionRequestSchema)` to create a new message. */ export const RequestDeletionRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 146); + messageDesc(file_saas_starter_api_grpc, 167); /** * @generated from message customers.GetDeletionStatusRequest @@ -3871,7 +4769,7 @@ export type GetDeletionStatusRequest = Message<"customers.GetDeletionStatusReque * Use `create(GetDeletionStatusRequestSchema)` to create a new message. */ export const GetDeletionStatusRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 147); + messageDesc(file_saas_starter_api_grpc, 168); /** * @generated from message customers.MFADevice @@ -3918,7 +4816,7 @@ export type MFADevice = Message<"customers.MFADevice"> & { * Use `create(MFADeviceSchema)` to create a new message. */ export const MFADeviceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 148); + messageDesc(file_saas_starter_api_grpc, 169); /** * @generated from message customers.SetupTOTPRequest @@ -3931,7 +4829,7 @@ export type SetupTOTPRequest = Message<"customers.SetupTOTPRequest"> & { * Use `create(SetupTOTPRequestSchema)` to create a new message. */ export const SetupTOTPRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 149); + messageDesc(file_saas_starter_api_grpc, 170); /** * @generated from message customers.SetupTOTPResponse @@ -3958,7 +4856,7 @@ export type SetupTOTPResponse = Message<"customers.SetupTOTPResponse"> & { * Use `create(SetupTOTPResponseSchema)` to create a new message. */ export const SetupTOTPResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 150); + messageDesc(file_saas_starter_api_grpc, 171); /** * @generated from message customers.VerifyTOTPRequest @@ -3975,7 +4873,7 @@ export type VerifyTOTPRequest = Message<"customers.VerifyTOTPRequest"> & { * Use `create(VerifyTOTPRequestSchema)` to create a new message. */ export const VerifyTOTPRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 151); + messageDesc(file_saas_starter_api_grpc, 172); /** * @generated from message customers.VerifyTOTPResponse @@ -3997,7 +4895,7 @@ export type VerifyTOTPResponse = Message<"customers.VerifyTOTPResponse"> & { * Use `create(VerifyTOTPResponseSchema)` to create a new message. */ export const VerifyTOTPResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 152); + messageDesc(file_saas_starter_api_grpc, 173); /** * @generated from message customers.ListMFADevicesRequest @@ -4010,7 +4908,7 @@ export type ListMFADevicesRequest = Message<"customers.ListMFADevicesRequest"> & * Use `create(ListMFADevicesRequestSchema)` to create a new message. */ export const ListMFADevicesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 153); + messageDesc(file_saas_starter_api_grpc, 174); /** * @generated from message customers.ListMFADevicesResponse @@ -4027,7 +4925,7 @@ export type ListMFADevicesResponse = Message<"customers.ListMFADevicesResponse"> * Use `create(ListMFADevicesResponseSchema)` to create a new message. */ export const ListMFADevicesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 154); + messageDesc(file_saas_starter_api_grpc, 175); /** * @generated from message customers.RevokeMFADeviceRequest @@ -4044,7 +4942,7 @@ export type RevokeMFADeviceRequest = Message<"customers.RevokeMFADeviceRequest"> * Use `create(RevokeMFADeviceRequestSchema)` to create a new message. */ export const RevokeMFADeviceRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 155); + messageDesc(file_saas_starter_api_grpc, 176); /** * @generated from message customers.GenerateBackupCodesRequest @@ -4057,7 +4955,7 @@ export type GenerateBackupCodesRequest = Message<"customers.GenerateBackupCodesR * Use `create(GenerateBackupCodesRequestSchema)` to create a new message. */ export const GenerateBackupCodesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 156); + messageDesc(file_saas_starter_api_grpc, 177); /** * @generated from message customers.GenerateBackupCodesResponse @@ -4074,7 +4972,7 @@ export type GenerateBackupCodesResponse = Message<"customers.GenerateBackupCodes * Use `create(GenerateBackupCodesResponseSchema)` to create a new message. */ export const GenerateBackupCodesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 157); + messageDesc(file_saas_starter_api_grpc, 178); /** * OrgSSOConfig is the per-org SSO state. Empty connection_id means @@ -4131,7 +5029,7 @@ export type OrgSSOConfig = Message<"customers.OrgSSOConfig"> & { * Use `create(OrgSSOConfigSchema)` to create a new message. */ export const OrgSSOConfigSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 158); + messageDesc(file_saas_starter_api_grpc, 179); /** * @generated from message customers.GetOrgSSORequest @@ -4148,7 +5046,7 @@ export type GetOrgSSORequest = Message<"customers.GetOrgSSORequest"> & { * Use `create(GetOrgSSORequestSchema)` to create a new message. */ export const GetOrgSSORequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 159); + messageDesc(file_saas_starter_api_grpc, 180); /** * StartSSOSetupRequest kicks off the admin portal flow. The backend @@ -4177,7 +5075,7 @@ export type StartSSOSetupRequest = Message<"customers.StartSSOSetupRequest"> & { * Use `create(StartSSOSetupRequestSchema)` to create a new message. */ export const StartSSOSetupRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 160); + messageDesc(file_saas_starter_api_grpc, 181); /** * @generated from message customers.StartSSOSetupResponse @@ -4198,7 +5096,7 @@ export type StartSSOSetupResponse = Message<"customers.StartSSOSetupResponse"> & * Use `create(StartSSOSetupResponseSchema)` to create a new message. */ export const StartSSOSetupResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 161); + messageDesc(file_saas_starter_api_grpc, 182); /** * @generated from message customers.DisableSSORequest @@ -4215,7 +5113,7 @@ export type DisableSSORequest = Message<"customers.DisableSSORequest"> & { * Use `create(DisableSSORequestSchema)` to create a new message. */ export const DisableSSORequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 162); + messageDesc(file_saas_starter_api_grpc, 183); /** * @generated from message customers.OpenBillingPortalRequest @@ -4240,7 +5138,7 @@ export type OpenBillingPortalRequest = Message<"customers.OpenBillingPortalReque * Use `create(OpenBillingPortalRequestSchema)` to create a new message. */ export const OpenBillingPortalRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 163); + messageDesc(file_saas_starter_api_grpc, 184); /** * @generated from message customers.OpenBillingPortalResponse @@ -4259,7 +5157,7 @@ export type OpenBillingPortalResponse = Message<"customers.OpenBillingPortalResp * Use `create(OpenBillingPortalResponseSchema)` to create a new message. */ export const OpenBillingPortalResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 164); + messageDesc(file_saas_starter_api_grpc, 185); /** * Invoice — trimmed view of Stripe's invoice object. Amounts are in @@ -4331,7 +5229,7 @@ export type Invoice = Message<"customers.Invoice"> & { * Use `create(InvoiceSchema)` to create a new message. */ export const InvoiceSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 165); + messageDesc(file_saas_starter_api_grpc, 186); /** * @generated from message customers.ListInvoicesRequest @@ -4355,7 +5253,7 @@ export type ListInvoicesRequest = Message<"customers.ListInvoicesRequest"> & { * Use `create(ListInvoicesRequestSchema)` to create a new message. */ export const ListInvoicesRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 166); + messageDesc(file_saas_starter_api_grpc, 187); /** * @generated from message customers.ListInvoicesResponse @@ -4372,7 +5270,7 @@ export type ListInvoicesResponse = Message<"customers.ListInvoicesResponse"> & { * Use `create(ListInvoicesResponseSchema)` to create a new message. */ export const ListInvoicesResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 167); + messageDesc(file_saas_starter_api_grpc, 188); /** * UserEmailSettings — top-level transactional email opt-ins. @@ -4408,7 +5306,7 @@ export type UserEmailSettings = Message<"customers.UserEmailSettings"> & { * Use `create(UserEmailSettingsSchema)` to create a new message. */ export const UserEmailSettingsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 168); + messageDesc(file_saas_starter_api_grpc, 189); /** * @generated from message customers.UserNotificationSettings @@ -4435,7 +5333,7 @@ export type UserNotificationSettings = Message<"customers.UserNotificationSettin * Use `create(UserNotificationSettingsSchema)` to create a new message. */ export const UserNotificationSettingsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 169); + messageDesc(file_saas_starter_api_grpc, 190); /** * UserSettings — per-user preferences. All fields optional. The @@ -4496,7 +5394,7 @@ export type UserSettings = Message<"customers.UserSettings"> & { * Use `create(UserSettingsSchema)` to create a new message. */ export const UserSettingsSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 170); + messageDesc(file_saas_starter_api_grpc, 191); /** * @generated from message customers.GetUserSettingsRequest @@ -4509,7 +5407,7 @@ export type GetUserSettingsRequest = Message<"customers.GetUserSettingsRequest"> * Use `create(GetUserSettingsRequestSchema)` to create a new message. */ export const GetUserSettingsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 171); + messageDesc(file_saas_starter_api_grpc, 192); /** * @generated from message customers.UpdateUserSettingsRequest @@ -4529,7 +5427,7 @@ export type UpdateUserSettingsRequest = Message<"customers.UpdateUserSettingsReq * Use `create(UpdateUserSettingsRequestSchema)` to create a new message. */ export const UpdateUserSettingsRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 172); + messageDesc(file_saas_starter_api_grpc, 193); /** * ServiceInfo — top-level identity of the service this catalog @@ -4576,7 +5474,7 @@ export type ServiceInfo = Message<"customers.ServiceInfo"> & { * Use `create(ServiceInfoSchema)` to create a new message. */ export const ServiceInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 173); + messageDesc(file_saas_starter_api_grpc, 194); /** * RPCInfo — one entry per gRPC RPC this service exposes. @@ -4644,7 +5542,7 @@ export type RPCInfo = Message<"customers.RPCInfo"> & { * Use `create(RPCInfoSchema)` to create a new message. */ export const RPCInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 174); + messageDesc(file_saas_starter_api_grpc, 195); /** * PermissionInfo — RBAC vocabulary this service enforces. @@ -4678,7 +5576,7 @@ export type PermissionInfo = Message<"customers.PermissionInfo"> & { * Use `create(PermissionInfoSchema)` to create a new message. */ export const PermissionInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 175); + messageDesc(file_saas_starter_api_grpc, 196); /** * RLSPolicyInfo — RLS-protected table this service depends on (the @@ -4723,7 +5621,7 @@ export type RLSPolicyInfo = Message<"customers.RLSPolicyInfo"> & { * Use `create(RLSPolicyInfoSchema)` to create a new message. */ export const RLSPolicyInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 176); + messageDesc(file_saas_starter_api_grpc, 197); /** * ScopeInfo — API-key scope this service accepts. @@ -4749,7 +5647,7 @@ export type ScopeInfo = Message<"customers.ScopeInfo"> & { * Use `create(ScopeInfoSchema)` to create a new message. */ export const ScopeInfoSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 177); + messageDesc(file_saas_starter_api_grpc, 198); /** * ServiceCapabilities — the full self-description of one service. @@ -4788,7 +5686,7 @@ export type ServiceCapabilities = Message<"customers.ServiceCapabilities"> & { * Use `create(ServiceCapabilitiesSchema)` to create a new message. */ export const ServiceCapabilitiesSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 178); + messageDesc(file_saas_starter_api_grpc, 199); /** * @generated from message customers.GetServiceInfoRequest @@ -4801,7 +5699,7 @@ export type GetServiceInfoRequest = Message<"customers.GetServiceInfoRequest"> & * Use `create(GetServiceInfoRequestSchema)` to create a new message. */ export const GetServiceInfoRequestSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 179); + messageDesc(file_saas_starter_api_grpc, 200); /** * @generated from message customers.GetServiceInfoResponse @@ -4818,7 +5716,7 @@ export type GetServiceInfoResponse = Message<"customers.GetServiceInfoResponse"> * Use `create(GetServiceInfoResponseSchema)` to create a new message. */ export const GetServiceInfoResponseSchema: GenMessage = /*@__PURE__*/ - messageDesc(file_saas_starter_api_grpc, 180); + messageDesc(file_saas_starter_api_grpc, 201); /** * @generated from enum customers.UserStatus @@ -4944,6 +5842,80 @@ export enum SubjectKind { export const SubjectKindSchema: GenEnum = /*@__PURE__*/ enumDesc(file_saas_starter_api_grpc, 3); +/** + * PrincipalKind classifies a principal — humans, services, or agents + * — for filtering/UI without affecting authorization. The auth layer + * itself treats every Principal uniformly. ANY change here MUST stay + * in sync with the SQL CHECK constraint on principals.kind and with + * codefly's policy.Principal Kind constants. + * + * @generated from enum customers.PrincipalKind + */ +export enum PrincipalKind { + /** + * @generated from enum value: PRINCIPAL_KIND_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: PRINCIPAL_KIND_HUMAN = 1; + */ + HUMAN = 1, + + /** + * @generated from enum value: PRINCIPAL_KIND_SERVICE = 2; + */ + SERVICE = 2, + + /** + * @generated from enum value: PRINCIPAL_KIND_AGENT = 3; + */ + AGENT = 3, +} + +/** + * Describes the enum customers.PrincipalKind. + */ +export const PrincipalKindSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_saas_starter_api_grpc, 4); + +/** + * Decision is what the PDP returns for a Decide call. ALLOW means + * proceed; DENY means refuse with reason; REQUIRE_APPROVAL means + * the action is conditionally permitted but needs a grantor's + * approval first (used by the M7+ synchronous escalation flow). The + * agent SDK turns REQUIRE_APPROVAL into a RequestEscalation call. + * + * @generated from enum customers.Decision + */ +export enum Decision { + /** + * @generated from enum value: DECISION_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: DECISION_ALLOW = 1; + */ + ALLOW = 1, + + /** + * @generated from enum value: DECISION_DENY = 2; + */ + DENY = 2, + + /** + * @generated from enum value: DECISION_REQUIRE_APPROVAL = 3; + */ + REQUIRE_APPROVAL = 3, +} + +/** + * Describes the enum customers.Decision. + */ +export const DecisionSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_saas_starter_api_grpc, 5); + /** * @generated from enum customers.APIKeyEnvironment */ @@ -4968,7 +5940,7 @@ export enum APIKeyEnvironment { * Describes the enum customers.APIKeyEnvironment. */ export const APIKeyEnvironmentSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_saas_starter_api_grpc, 4); + enumDesc(file_saas_starter_api_grpc, 6); /** * @generated from enum customers.InvitationStatus @@ -5004,7 +5976,7 @@ export enum InvitationStatus { * Describes the enum customers.InvitationStatus. */ export const InvitationStatusSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_saas_starter_api_grpc, 5); + enumDesc(file_saas_starter_api_grpc, 7); /** * @generated from enum customers.WebhookDeliveryStatus @@ -5035,7 +6007,7 @@ export enum WebhookDeliveryStatus { * Describes the enum customers.WebhookDeliveryStatus. */ export const WebhookDeliveryStatusSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_saas_starter_api_grpc, 6); + enumDesc(file_saas_starter_api_grpc, 8); /** * @generated from enum customers.OnboardingStepStatus @@ -5066,7 +6038,7 @@ export enum OnboardingStepStatus { * Describes the enum customers.OnboardingStepStatus. */ export const OnboardingStepStatusSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_saas_starter_api_grpc, 7); + enumDesc(file_saas_starter_api_grpc, 9); /** * @generated from enum customers.GDPRRequestType @@ -5092,7 +6064,7 @@ export enum GDPRRequestType { * Describes the enum customers.GDPRRequestType. */ export const GDPRRequestTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_saas_starter_api_grpc, 8); + enumDesc(file_saas_starter_api_grpc, 10); /** * @generated from enum customers.GDPRRequestStatus @@ -5128,7 +6100,7 @@ export enum GDPRRequestStatus { * Describes the enum customers.GDPRRequestStatus. */ export const GDPRRequestStatusSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_saas_starter_api_grpc, 9); + enumDesc(file_saas_starter_api_grpc, 11); /** * @generated from enum customers.MFADeviceType @@ -5154,7 +6126,7 @@ export enum MFADeviceType { * Describes the enum customers.MFADeviceType. */ export const MFADeviceTypeSchema: GenEnum = /*@__PURE__*/ - enumDesc(file_saas_starter_api_grpc, 10); + enumDesc(file_saas_starter_api_grpc, 12); /** * UserService — user CRUD and identity management @@ -5364,6 +6336,22 @@ export const TeamService: GenService<{ input: typeof ListTeamMembersRequestSchema; output: typeof ListTeamMembersResponseSchema; }, + /** + * @generated from rpc customers.TeamService.UpdateTeam + */ + updateTeam: { + methodKind: "unary"; + input: typeof UpdateTeamRequestSchema; + output: typeof UpdateTeamResponseSchema; + }, + /** + * @generated from rpc customers.TeamService.DeleteTeam + */ + deleteTeam: { + methodKind: "unary"; + input: typeof DeleteTeamRequestSchema; + output: typeof EmptySchema; + }, }> = /*@__PURE__*/ serviceDesc(file_saas_starter_api_grpc, 2); @@ -5429,9 +6417,131 @@ export const PermissionService: GenService<{ input: typeof CheckPermissionRequestSchema; output: typeof CheckPermissionResponseSchema; }, + /** + * Decide is the principal-aware permission check (M2). New + * callers should use Decide; CheckPermission is kept for backward + * compatibility while existing clients migrate. Both RPCs route + * through the same Postgres CheckPermission query in M2; they + * diverge starting at M4 (manifest ceiling) and M7 (approval flow). + * + * @generated from rpc customers.PermissionService.Decide + */ + decide: { + methodKind: "unary"; + input: typeof DecideRequestSchema; + output: typeof DecideResponseSchema; + }, }> = /*@__PURE__*/ serviceDesc(file_saas_starter_api_grpc, 3); +/** + * PrincipalService — unified principal management (M1 + M2). Humans, + * services, and agents are all rows in the principals table; this + * service is the public CRUD over them. Read paths are admin-only; + * CreateAgent is org-admin scoped (called by the codefly CLI on + * `codefly install`). + * + * @generated from service customers.PrincipalService + */ +export const PrincipalService: GenService<{ + /** + * @generated from rpc customers.PrincipalService.GetPrincipal + */ + getPrincipal: { + methodKind: "unary"; + input: typeof GetPrincipalRequestSchema; + output: typeof PrincipalSchema; + }, + /** + * @generated from rpc customers.PrincipalService.GetAgentPrincipal + */ + getAgentPrincipal: { + methodKind: "unary"; + input: typeof GetAgentPrincipalRequestSchema; + output: typeof PrincipalSchema; + }, + /** + * @generated from rpc customers.PrincipalService.CreateAgentPrincipal + */ + createAgentPrincipal: { + methodKind: "unary"; + input: typeof CreateAgentPrincipalRequestSchema; + output: typeof PrincipalSchema; + }, + /** + * @generated from rpc customers.PrincipalService.RevokePrincipal + */ + revokePrincipal: { + methodKind: "unary"; + input: typeof RevokePrincipalRequestSchema; + output: typeof EmptySchema; + }, + /** + * @generated from rpc customers.PrincipalService.ListPrincipals + */ + listPrincipals: { + methodKind: "unary"; + input: typeof ListPrincipalsRequestSchema; + output: typeof ListPrincipalsResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_saas_starter_api_grpc, 4); + +/** + * @generated from service customers.DelegationService + */ +export const DelegationService: GenService<{ + /** + * RequestDelegation creates a new pending grant. Idempotent on + * (org_id, request_hash) — same request from a retrying actor + * returns the original row's id. + * + * @generated from rpc customers.DelegationService.RequestDelegation + */ + requestDelegation: { + methodKind: "unary"; + input: typeof RequestDelegationRequestSchema; + output: typeof RequestDelegationResponseSchema; + }, + /** + * WaitForDelegation streams one terminal event for a grant. + * Backed by Postgres LISTEN — no polling. + * + * @generated from rpc customers.DelegationService.WaitForDelegation + */ + waitForDelegation: { + methodKind: "server_streaming"; + input: typeof WaitForDelegationRequestSchema; + output: typeof DelegationEventSchema; + }, + /** + * DecideDelegation is the grantor's approve/deny action. Called + * from the approval UI; transitions the row + (on approve) + * mints the scoped-auth token + fires NOTIFY for any waiting + * streams. + * + * @generated from rpc customers.DelegationService.DecideDelegation + */ + decideDelegation: { + methodKind: "unary"; + input: typeof DecideDelegationRequestSchema; + output: typeof DelegationGrantSchema; + }, + /** + * ListPendingDelegations returns paginated pending grants for + * the approver UI. Sorted critical → high → medium → low, + * newest-first within tier. + * + * @generated from rpc customers.DelegationService.ListPendingDelegations + */ + listPendingDelegations: { + methodKind: "unary"; + input: typeof ListPendingDelegationsRequestSchema; + output: typeof ListPendingDelegationsResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_saas_starter_api_grpc, 5); + /** * IdentityService — auth provider ID resolution (used by auth sidecar) * @@ -5447,7 +6557,7 @@ export const IdentityService: GenService<{ output: typeof ResolveIdentityResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 4); + serviceDesc(file_saas_starter_api_grpc, 6); /** * APIKeyService — programmatic access management @@ -5480,6 +6590,9 @@ export const APIKeyService: GenService<{ output: typeof EmptySchema; }, /** + * REST-mapped so non-gRPC consumers (e.g. an AI gateway's REST identity + * backend) can validate keys without a generated client. + * * @generated from rpc customers.APIKeyService.ValidateAPIKey */ validateAPIKey: { @@ -5488,7 +6601,7 @@ export const APIKeyService: GenService<{ output: typeof ValidateAPIKeyResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 5); + serviceDesc(file_saas_starter_api_grpc, 7); /** * @generated from service customers.AuditExportService @@ -5519,7 +6632,7 @@ export const AuditExportService: GenService<{ output: typeof EmptySchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 6); + serviceDesc(file_saas_starter_api_grpc, 8); /** * @generated from service customers.ConsentService @@ -5542,7 +6655,7 @@ export const ConsentService: GenService<{ output: typeof ConsentStatusSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 7); + serviceDesc(file_saas_starter_api_grpc, 9); /** * AuthService — JWT token issuance and session management @@ -5595,7 +6708,7 @@ export const AuthService: GenService<{ output: typeof JWKSResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 8); + serviceDesc(file_saas_starter_api_grpc, 10); /** * AuditService — append-only audit event log @@ -5620,7 +6733,7 @@ export const AuditService: GenService<{ output: typeof ExportAuditLogResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 9); + serviceDesc(file_saas_starter_api_grpc, 11); /** * PlatformAdminService — cross-tenant operations for platform operators. @@ -5673,6 +6786,14 @@ export const PlatformAdminService: GenService<{ input: typeof ListActiveSessionsRequestSchema; output: typeof ListActiveSessionsResponseSchema; }, + /** + * @generated from rpc customers.PlatformAdminService.RevokeSession + */ + revokeSession: { + methodKind: "unary"; + input: typeof RevokeSessionRequestSchema; + output: typeof EmptySchema; + }, /** * Entitlements & billing * @@ -5736,7 +6857,7 @@ export const PlatformAdminService: GenService<{ output: typeof UpsertFeatureFlagResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 10); + serviceDesc(file_saas_starter_api_grpc, 12); /** * InvitationService — org member invitation management @@ -5777,7 +6898,7 @@ export const InvitationService: GenService<{ output: typeof EmptySchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 11); + serviceDesc(file_saas_starter_api_grpc, 13); /** * WebhookService — webhook subscription and delivery management @@ -5850,7 +6971,7 @@ export const WebhookService: GenService<{ output: typeof RotateWebhookSecretResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 12); + serviceDesc(file_saas_starter_api_grpc, 14); /** * NotificationService — user notification management @@ -5899,7 +7020,7 @@ export const NotificationService: GenService<{ output: typeof EmptySchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 13); + serviceDesc(file_saas_starter_api_grpc, 15); /** * OnboardingService — user onboarding flow management @@ -5932,7 +7053,7 @@ export const OnboardingService: GenService<{ output: typeof OnboardingProgressSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 14); + serviceDesc(file_saas_starter_api_grpc, 16); /** * GDPRService — GDPR data export and deletion requests @@ -5973,7 +7094,7 @@ export const GDPRService: GenService<{ output: typeof GDPRRequestSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 15); + serviceDesc(file_saas_starter_api_grpc, 17); /** * SSOAdminService — org-admin-gated. Lets paying customers wire up @@ -6010,7 +7131,7 @@ export const SSOAdminService: GenService<{ output: typeof EmptySchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 16); + serviceDesc(file_saas_starter_api_grpc, 18); /** * @generated from service customers.BillingService @@ -6033,7 +7154,7 @@ export const BillingService: GenService<{ output: typeof ListInvoicesResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 17); + serviceDesc(file_saas_starter_api_grpc, 19); /** * UserSettingsService — per-caller (no org scoping). The auth @@ -6061,7 +7182,7 @@ export const UserSettingsService: GenService<{ output: typeof UserSettingsSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 18); + serviceDesc(file_saas_starter_api_grpc, 20); /** * MFAService — multi-factor authentication device and TOTP management @@ -6110,7 +7231,7 @@ export const MFAService: GenService<{ output: typeof GenerateBackupCodesResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 19); + serviceDesc(file_saas_starter_api_grpc, 21); /** * IntrospectionService — describes THIS service only. @@ -6137,5 +7258,5 @@ export const IntrospectionService: GenService<{ output: typeof GetServiceInfoResponseSchema; }, }> = /*@__PURE__*/ - serviceDesc(file_saas_starter_api_grpc, 20); + serviceDesc(file_saas_starter_api_grpc, 22); From c521d187dcbf17d8b11aa1f4a7f91795d2a08ec3 Mon Sep 17 00:00:00 2001 From: Antoine Toussaint Date: Mon, 6 Jul 2026 16:29:05 -0400 Subject: [PATCH 2/2] ci: build the accounts service (renamed from api) + refresh base manifest The build matrix still pointed at the deleted module/services/api/code path (renamed to accounts), so that job failed on a missing dir; point it at accounts/code. Regenerate the base-file manifest for the edited base files so base-integrity passes. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/ci.yml | 2 +- module/tools/base-manifest.json | 523 ++++++++++++++++---------------- 2 files changed, 264 insertions(+), 261 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 552d7d2c..0bc900c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: # Go service. Build + vet each independently against published core. module: - "." - - "module/services/api/code" + - "module/services/accounts/code" - "module/services/auth-sidecar/code" steps: - uses: actions/checkout@v4 diff --git a/module/tools/base-manifest.json b/module/tools/base-manifest.json index 3f879a85..a12994e9 100644 --- a/module/tools/base-manifest.json +++ b/module/tools/base-manifest.json @@ -1,6 +1,6 @@ { "note": "Base-file integrity manifest for the saas-starter module. Generated FROM canonical by `node tools/base-integrity.mjs gen`. Consumers MUST NOT hand-edit base files — only add files on the side. Regenerated on every codefly sync from canonical.", - "fileCount": 744, + "fileCount": 747, "files": { "FEATURES.md": "c6a61fbf10f57f84a8fa34c8725646e2f005b0af127adea6dda654b5a7cf9ad6", "GETTING_STARTED.md": "649044e1e6f9375e4a0425fde679b8e6db78bb827df9df00ff2c6ccb5448feba", @@ -13,7 +13,7 @@ "deployment/kustomize/base/network-policy.yaml": "3f2319e89dfca80808b2cc6380c16b53c75191a498b69461637c5511f4472230", "deployment/kustomize/base/project.yaml": "81112c911211f70bec5e6ab5fe6498300b460c24c19dbd77813ec7d905da5c93", "deployment/kustomize/base/resource-quota.yaml": "79f9afb9daaffade89c4a4a6825a402353c7a850e58dfdcec98bb28fd2a3bae3", - "deployment/kustomize/overlays/aws/applications/api.yaml": "b640a46140be3aabcc69bdc7d5a7961e15c7dad5b276b5a5c966b86559a238f7", + "deployment/kustomize/overlays/aws/applications/accounts.yaml": "d2cccb3b7503b0a19d67725e867fdb3c4457aa0d0d19893ad5019ee3e2482aea", "deployment/kustomize/overlays/aws/applications/auth-sidecar.yaml": "6fcc26100462230f9be2b2cf2c8f916aa5dc0a24346112a48415f9488d14cbf4", "deployment/kustomize/overlays/aws/applications/frontend.yaml": "65a73c9ccfd8cd3a5cdcb67f4dab34561b5b6005228b3117805167490a39303b", "deployment/kustomize/overlays/aws/externalname-services/cache.yaml": "8654fc88f7f5e70fb7ab64e39b0b9765db7c5f50b35e2ea50110f98074c07da1", @@ -21,7 +21,7 @@ "deployment/kustomize/overlays/aws/externalname-services/store.yaml": "553a2d9ddf82bb4558d8943b6648cb8ee348e2f74a3afb748ba2297ab11867c3", "deployment/kustomize/overlays/aws/externalname-services/vault.yaml": "7753ffb1ed8036f96d19c3a7dbe2d8f80f47b5aa6b81a0f443755f1d064f148f", "deployment/kustomize/overlays/aws/kustomization.yaml": "c652adf35b69223b5b04eb351a12fd3ca9872eabc519babb3e38d3f601ea0a19", - "deployment/kustomize/overlays/local/applications/api.yaml": "5f5935df070198de9e397af71e16a32546629ac50d0c11a64b8f0c6e0ee17192", + "deployment/kustomize/overlays/local/applications/accounts.yaml": "4e08c5acfeeca4aa324e7ff1e3aa819edaeeffb07c57dac30a523e689d4dc81a", "deployment/kustomize/overlays/local/applications/auth-sidecar.yaml": "1014631cad5e9a1c8c788b6d1da12b766e75917c65db0d51e8492b62bae3e589", "deployment/kustomize/overlays/local/applications/cache.yaml": "a984467f25a1226a999043da9c7c579aa437b560bead879057a03abf062b3e3a", "deployment/kustomize/overlays/local/applications/frontend.yaml": "4b41cc65c58ff2f938b67d93693e313351ee39dafc99d74a512ef33b36f1e04c", @@ -32,257 +32,257 @@ "fixtures/dev-admin.yaml": "ff21f9d2c6e8136a58c31c5d054f07aa7f5d3f925b951033876ee58142368278", "fixtures/simple.yaml": "a7d1899145c3d33073dbe4cea0bb41a64d4b1f1bb63d0fc1cf571117f9d1c4cb", "flake.nix": "84cd5e985ee280d50c9b50310e3a00f59ed7d4b63fcc43a76d212f9e4ea0b99c", - "module.codefly.yaml": "774e6969f71240226bc3e2cba8be1bf7643d97183f27649c1f01381647124823", + "module.codefly.yaml": "ee901731482840dff7bc2dbe525c76ce9db9caa2e8ef8634838af48552409ca0", "policies/authz.rego": "9a2a5f3a89e645d1e6e6f7e8da082e93c7f9f0c10c1cd70a04990fc8690116ee", "policies/authz_test.rego": "89e2efbb0f40aff38cc9a2920f110f60bd159b74c9ae5fd5df1d738650c650d2", "policies/method_permissions/data.json": "b7dcfa74a0d3614a59054c2f63a52406f9a44aba5f5a9c04844ddc209384946b", "services/README.md": "8014e06603733064c84b892222c58000c4b75f2bcea7b07db90365b855c931d9", - "services/api/GETTING_STARTED.md": "643bde7b68eb6bbe72988fde4c25a17512601f720f234043a51a7a521b5949c9", - "services/api/README.md": "e9677ce854f88f0b8ca6652737ad18b7a10e6348ee9e53cdd5317d230c0af209", - "services/api/builder/Dockerfile": "4fab07983bf9b072f9655b5a493d9c38bb3f866ca9832045f7fe3a0ec411883c", - "services/api/builder/dockerignore": "4b9b48f9f70aa850b3508754c0564e9155c4039206601eaa2952f58067757dfb", - "services/api/code/.env.example": "7743a1a5c26011779923ea91006030d1f71a9e78ffadd700e0fc1c03a932d18f", - "services/api/code/cmd/local/main.go": "c8d247d1db78b33737f2e11ceb6fc48ae3c1735f9da87d92a962b65d3eb47c86", - "services/api/code/cmd/module-info/main.go": "178f70943956773506b68b4040ffa75954e889b5cdf870f3a298cf60d3ad96ca", - "services/api/code/fixtures/dev_admin.go": "71bd88b50f40b0b44ed401ddd08a96a66d1dda11c5b5ede30a61a194df230bd5", - "services/api/code/fixtures/seed.go": "876b945b63631ddbd1a549119e1705f91f8f628728a7757ad087fb6da10e94f1", - "services/api/code/fixtures/simple.go": "a2d1f8fa850e962c07834300695478a8ba149088c4f66af9d9819e388ac5d5ea", - "services/api/code/go.mod": "f0006e399e24a24dd28e089aaa295cf5e06b3f37ed3b18f9ba7b7fe3d8be4882", - "services/api/code/go.sum": "c957877fe224c3135c2d4896297e71e5d94aead2b1744ce7ecacd75bf38666ab", - "services/api/code/main.go": "087ebfc1da69270335d2e78767df2ef534ed2ac26ca28e5c5f853767a694b951", - "services/api/code/pkg/adapters/README.md": "9755fba39a2abe6cd9779ec4e728024b5148506c690da95525844cc9d815fea6", - "services/api/code/pkg/adapters/audit_export_handler.go": "c8a3bdb39a69aad07270e77e6cc125fe01ed782ce87325012536685c9b7d4843", - "services/api/code/pkg/adapters/auth.go": "e8e30096b72d6d010d16b704a47fa7e922c506a71ca7f4f6520b39473259e9a0", - "services/api/code/pkg/adapters/billing_handler.go": "1a58f7df89aef09a336965ed5ae2a5c8538b972e7794ee7b836942886f257ee1", - "services/api/code/pkg/adapters/billing_http.go": "9f9b688e304bed45305f9c1a99485f8e46eab9324f821466c81958c0b9617e7f", - "services/api/code/pkg/adapters/connect_auth_interceptor.go": "831d6caaa849e71101144b9a4b522373e28108af2173c7d503b8f897b3234f17", - "services/api/code/pkg/adapters/connect_gen.go": "630d54297653bf3a58faa353cc28f75da057aea80572c65418559d9ec1a7f406", - "services/api/code/pkg/adapters/connect_handlers.go": "35f568894bec042fbcdced963e69202e8e6ab745a4bdc09686b3779bfa850a58", - "services/api/code/pkg/adapters/connect_handlers_permissions.go": "dbd41bb6d373cc5b0ff54930c24f4b1b32e273458eea546d2a6d63f1eb60c273", - "services/api/code/pkg/adapters/consent_handler.go": "84956fd12ff27548c6fd1f0c39ff6fe3cea670c1766991e91f57bf4478ad0e1f", - "services/api/code/pkg/adapters/cors_gen.go": "6ab58ff29e649cd1cfade3d78fa97a722b70f9b5d09b649b8252f041d8f33afc", - "services/api/code/pkg/adapters/delegation_rpcs.go": "7af3a2d1dcf3f7e5b800e92952169c6442071ce6aa562a90cf79d9550f5ada34", - "services/api/code/pkg/adapters/grpc_auth_interceptor.go": "83fff3d5bcb378f7530042f1470c56fb0a1d1e8d73a46c143ce96ea556ab86af", - "services/api/code/pkg/adapters/grpc_gen.go": "a0adcc787f3bebad221f3d47c76765d318baa37df7f04acf8ffce536d18bb28e", - "services/api/code/pkg/adapters/grpc_register_extras.go": "abeb06c5231042d080ca9b977c460b383c6948496da195533f79d8b63836473b", - "services/api/code/pkg/adapters/http_mfa.go": "3f06453c22f65d494ca10f78ab3a713edf8054babdb581228b548bfc52378b16", - "services/api/code/pkg/adapters/principal_rpcs.go": "ef6d6405d094a012de04dc0ee2147558a5dae5bed2d46fd50ed338909fd1b8a2", - "services/api/code/pkg/adapters/quota_interceptor.go": "85e0fb7938f74c23b5b397559c663650c3a4ae1831299e2a40be46f569f84f90", - "services/api/code/pkg/adapters/rate_limit_interceptor.go": "2ff854a7cb22231a1dd11fe21410b7df5213e8cf7500e9f23c76ccc296529b77", - "services/api/code/pkg/adapters/rest_extras.go": "08cd9d6b568984449f00cc3d187900da03e5e087a4512c51d889559113d12f3f", - "services/api/code/pkg/adapters/rest_extras_test.go": "46b46d555a2387af2ebaff348aabb7f63d65f493c043a5cd08005a2e267f0852", - "services/api/code/pkg/adapters/rest_gen.go": "42ef89208392357aee5b59069940ff91963339c27b903bc68c8adf822b0a5c7d", - "services/api/code/pkg/adapters/rpcs.go": "c269bbfa10f83bb31ff01c5281b2e8e0f9a768a684070b7bf1ca978bdb15befd", - "services/api/code/pkg/adapters/rpcs_org_audit.go": "31ca07245557047639edfe55b3f90e682bd92e349e215e6917b78cef3239e763", - "services/api/code/pkg/adapters/scope_test.go": "d6086b7f42fc65be25badfe0dc9774e13c055d43b333009051183f2ddf76f8e4", - "services/api/code/pkg/adapters/server_gen.go": "14fdd9d02af120ace42740d6ea6541a8580c91167afd772ceda87da7dbcd332f", - "services/api/code/pkg/adapters/sso_admin_handler.go": "949f8a27cb99f5f97bd7104181042d35a05d6ed2024a76a83dfc825ad41a1eff", - "services/api/code/pkg/adapters/status_http.go": "5a13d9c60ec8b5afc847989a550aba4334dc5b0d45e1453d97ef914228ab03be", - "services/api/code/pkg/adapters/user_settings_handler.go": "e8851ed24418caeff38b5c7c706f9277f12f3b959d479668beeda1c74273c790", - "services/api/code/pkg/auth/claims.go": "6dccf30b96dba6fce12d3297e3577054495ab2d28b3810d08060d9e5e740c45d", - "services/api/code/pkg/auth/dev/validator.go": "8ae1d1d46f0e2c3fa4dea25a28adb261937f1799128e77678798eb8b6b1b22c1", - "services/api/code/pkg/auth/dev/validator_test.go": "685f63f3e7e857f1b263ffb87c70b8062ac9909effd2665597e4864abaa0a5ce", - "services/api/code/pkg/auth/ed25519/minter.go": "dae4326dd2d5b0f7f7c86d8b59d160161fa5d3368f30f652f5a18500873c528d", - "services/api/code/pkg/auth/ed25519/minter_test.go": "c4ed6f3c0a1ecce315819bc2ba131d14559e32c32ce46f2debf98bf55c21112f", - "services/api/code/pkg/auth/ed25519/vault_key.go": "c58f85070174d198a9b4c453e21b4ca1c81824e23cf5a4f196dc701d76d97841", - "services/api/code/pkg/auth/errors.go": "a25b7765d6047435608bde756e4f4ae43b6afa978c14d0c12df55869c9f80e70", - "services/api/code/pkg/auth/identity.go": "2bd0f9b72c4b642e0aca7dfb0783fbb4bccf588a9eba1221c03b8a2c5a96d247", - "services/api/code/pkg/auth/memory_store_test.go": "7f2dc982d84915e150196c67e0d39f5e048ff1848fdfe5479f34cf76faf96057", - "services/api/code/pkg/auth/minter.go": "d4708e11b68af98f4a6c4c41bdb2c99e95398dc8bf8aa7de6aa6603d9023e189", - "services/api/code/pkg/auth/oauth_state.go": "158b2058ff9808a9954b37006b3ece6068ee1409dbf912d198941564b4dfe3a2", - "services/api/code/pkg/auth/oauth_state_integration_test.go": "f1122cc54ba0b8d7b746f3d56eba91b6b57a61618852bc8dd417f16e4ab9874f", - "services/api/code/pkg/auth/oauth_state_test.go": "923d6ec6e163ea65b3614fcf5e64d4f6aff8d2d5c47db6541c20a701f1760ac9", - "services/api/code/pkg/auth/oidc/business_adapter.go": "de2ed86decba5f1dac449e129da50c8300d1f927f88b817d464fced2abbd5870", - "services/api/code/pkg/auth/oidc/exchanger.go": "e368ab5f4b49609499f2acf8fb7fb2e47c8c8badee5ac7115b3f2584a7c41fe6", - "services/api/code/pkg/auth/oidc/exchanger_test.go": "6e6c506c4c38c653d97a370be1efd43e0eaa5aecea65cd0c3ff07c71307b468a", - "services/api/code/pkg/auth/oidc/presets.go": "1f4136a68559961d545dc264a06cff7c97abf1488a48ff563ebb11c15aa033ec", - "services/api/code/pkg/auth/oidc/validator.go": "0383fe3bc735c5d18acb6e74cb6e5b9f7833b8c44f639834e703c2aa3179d93f", - "services/api/code/pkg/auth/oidc/validator_test.go": "7b988e0b1b20cef9556dc5d1339654c6c39025431c1a0530afa231ea7ebff8da", - "services/api/code/pkg/auth/pg/resolver.go": "fde32d93f4ca8b93ed68587f25e935c192b5f82f8089eba8e83bfbc91a7d8f20", - "services/api/code/pkg/auth/pg/resolver_test.go": "82481629fd4f30a3db522240358ce11dfad1b987fd0e664f6e32c7d72e186d0b", - "services/api/code/pkg/auth/pg/session_store.go": "fd152bccfc3e22f566f031df2e51eae70f1ddd815099655ee94f88efb567575c", - "services/api/code/pkg/auth/pg/session_store_test.go": "3172f28ca1cdcf6afb6445b556eb7ddc947b86032c6085255c7a9bbaa9607f6b", - "services/api/code/pkg/auth/revocation.go": "accea261b71b222e265aa870c77c9a489610d82ba54c6d2cea153113435d8397", - "services/api/code/pkg/auth/session_store.go": "dd2f8332304ae3bf26d5dd9bbd53f9d7f9a67233d958b6becbd841120f46908f", - "services/api/code/pkg/billing/client.go": "66f21e0e27756eeca20adcd7156deaf7490e6750f0e69be280495e9fb97a9a6a", - "services/api/code/pkg/billing/client_test.go": "f8cc7befb01782c72286842357dc9eaec940f1181bc518feedd668e7d549cbbf", - "services/api/code/pkg/billing/handler.go": "356af02332ae9968c3f056c6b246a33187145138a5f4af66b1904fa570bfb793", - "services/api/code/pkg/billing/handler_test.go": "c8eafbde768d2995292db6229179ecbbca14b956bb576a967025df87ab2cbede", - "services/api/code/pkg/billing/pg/store.go": "e1b92d397610a6c5ed38fe158d8abf015b8d2e667e6afc0ab1a601dd154f708f", - "services/api/code/pkg/billing/pg/store_test.go": "9d7eebe2e4c6e06adc84c590b223402ceead86e01f91187051582cafd873cd1d", - "services/api/code/pkg/billing/store.go": "1a8f3eecd0669228308ccf716e3d490f6d9288e55533144c2195d147ca9e0cbe", - "services/api/code/pkg/billing/webhook.go": "fe4ed790c2fc57136a6724c5fee44841a4f3dd3f1106e6a6c1780536cdd249db", - "services/api/code/pkg/billing/webhook_test.go": "f2af132c687d853d4943170ba741edc012e0da5dab0665aa70cbdcb2bd68fe51", - "services/api/code/pkg/business/README.md": "600327ef75b8a872b432793a74e6361ead547e7ea0cd860fbbb027e06494d943", - "services/api/code/pkg/business/api_keys.go": "e811aa0055d8179ba3c47f9e2c0fb4dcf0d0543da9c4fa07633c434768dc26ad", - "services/api/code/pkg/business/audit.go": "f174126480989c76723aa5c3ddcf39c1a8231468134388b5048c74072ffccb7d", - "services/api/code/pkg/business/audit_export.go": "79b1fa3e4bc39f6ee3d13872780f7247c5f97c826be977d4f9afc3d8ea337e4d", - "services/api/code/pkg/business/audit_export_s3.go": "7c03d51cfe1d3cd921850728e95a0c5aad2ca2be04ed1873a294912f92e4b58e", - "services/api/code/pkg/business/audit_exporter.go": "0e8e8fa98b5cb1bc75f68d238e83329a8bc25b53f28b18ab102356d588f51616", - "services/api/code/pkg/business/audit_exporter_test.go": "d69c233d807e45c634e474194d69885d403a84fa2ef8bf7b0895b17fbb63e58e", - "services/api/code/pkg/business/auth.go": "fa511e2029c271f0cf1d9e3a4b74b69683f530f48a98fea4f3a68cac7723eb59", - "services/api/code/pkg/business/auth_login_flow_test.go": "bd63de415ee1bc293a0cc219e0d1bcd8a1f7e56066ab9379956763fbeec2d3dd", - "services/api/code/pkg/business/auth_oauth_test.go": "362c7ec07e90e62fc5f0a87c12717a85a023ea5f5f74850ef311336b0932bfac", - "services/api/code/pkg/business/billing_ops.go": "d6172ad3014b8acca1d44f35db1200c79ab97aa4d7f5e25108271744b3a558de", - "services/api/code/pkg/business/bootstrap_admin_test.go": "d46cfbfed78bbb03b2c96ba932b2599aa8190ed8f75f8182308e886c38c5fb78", - "services/api/code/pkg/business/consent.go": "ea85b5afc5d84481147ff72b5ebd5abf1701a1a9d2a37ec88390f806523c0f95", - "services/api/code/pkg/business/delegation_grants.go": "262f50073f46c20509698aedf0ec8ed118fd68a00c2583aaae8f0c04008889ad", - "services/api/code/pkg/business/delegation_grants_test.go": "06211ea3c0ccb29e07a9bc11a316b0602c7dc4a45117c2bc1eee028d8d45da41", - "services/api/code/pkg/business/entitlements.go": "3e8eef1a69882c422a684a3a2f54d8da6af8572d07b651e009aebb66e7fd10d0", - "services/api/code/pkg/business/entitlements_tx_test.go": "643f4eea1ff7f279324b9cbc390e0c922da0c2caad3ad34d6f87727107e79211", - "services/api/code/pkg/business/features.go": "17555604642205cc7329f91c7da688578c825962974fd645fc17d29b4ede9829", - "services/api/code/pkg/business/gdpr.go": "3410c159bf9f5f131cc7af2ed85e2e9d854e4fc829d574fbc6b26bbc6430bde4", - "services/api/code/pkg/business/identity.go": "ff1b181948f232e22eebffcab6ad497524ac18a8fd16a21e4e68469c32677260", - "services/api/code/pkg/business/ids.go": "364807ea9ae9e48a950c8dd9c7193c502f678de7f69f8b87f528dbb094da385c", - "services/api/code/pkg/business/ids_test.go": "33a1656d7bb42d508521644800c677d9918e7d0aaab2e83eca484339ef3d65de", - "services/api/code/pkg/business/introspection.go": "931252d05a1eac26fbd70fe85f80acbf55b25e6ea9cf56c68bb5fd40ec011185", - "services/api/code/pkg/business/introspection_test.go": "a8a9e7b2466a39f43457c8c2ed4ce2fd7721a0d7954afea06192b4a373f4736d", - "services/api/code/pkg/business/invitations.go": "28f41211c325e09bb2ab6b1bfa702aa1daeac50ffdec8610112213f167f70ffc", - "services/api/code/pkg/business/magic_links.go": "c054c2fa4e06bc10f17fe7233feb879565aa4b88563ce130ebbee4fa70124f47", - "services/api/code/pkg/business/mfa.go": "f686f778922301901628e4993f80a5788b1ec7ae084448570437e4ae8edaab54", - "services/api/code/pkg/business/notifications.go": "873a757a4ed3409f179fd811a57d2c98b791b6e1d0b8f4ad0045bb7d0f028a38", - "services/api/code/pkg/business/onboarding.go": "a466c84b5141175971f2edc0031f8ee098325e590a35a52085e6ac6a734632ed", - "services/api/code/pkg/business/org_settings.go": "dddbb01d79c62a8a3239140d95ef685ddfa29c0ffcc18c87ab385abe3a060703", - "services/api/code/pkg/business/organizations.go": "ce5c18faef4076d0f13beae514c0a98909f49da177db0e09bc0395dddf8e6bcd", - "services/api/code/pkg/business/permission_matrix_test.go": "5c03898427f05e1dd9601f19b0b80c00930831c79e49f814d349dd572339bf26", - "services/api/code/pkg/business/permissions.go": "70a70c8e390005b56afaca47c2139c85f96becc6e0eed04e5b484fd7e00ca90c", - "services/api/code/pkg/business/platform_admin.go": "dfbff3b36dbf4efe3b187933de0fa2a6ea79e688e235ebc1d4242e0f81416127", - "services/api/code/pkg/business/principals.go": "c28cbcb3be961f068fcad214cc1367c73b0ad5eb34572d3b0713fed88e1fe8f0", - "services/api/code/pkg/business/principals_test.go": "51ca20d49cf21f859b4824e56a7f66c853eb6f9168b701b984005373a61d02a8", - "services/api/code/pkg/business/retention.go": "485e1a8764ee9f72f181f9c4b9d768c6216ed671a7541c6681b38382c041fe4e", - "services/api/code/pkg/business/rls_api_keys_test.go": "21bacb4d7fe367597ccb1f2ccbc989d507517265f8c1adc61fcd113b04e66415", - "services/api/code/pkg/business/rls_audit_events_test.go": "5d5cc1a767dc2f65c40325fcca7b718b5a5f2cce2e38ff06c6c18911d558c17b", - "services/api/code/pkg/business/rls_audit_export_test.go": "39890716f5cb984faea8baa271a6a0f3e78fbc9a83769154516eeffbea38b1ae", - "services/api/code/pkg/business/rls_bench_test.go": "96cc0a7084d41a7727875dc5bbb58b5750f4c552a53ffe4756d957fa38c503de", - "services/api/code/pkg/business/rls_check_test.go": "4430baf56387b1911e729de50b1f5f810fb26748425a6fbea899b51e73fdbde6", - "services/api/code/pkg/business/rls_organizations_test.go": "3aa5d58c4b6236dd35a58ee4a1b5a96e2801698532400b490fb8b75bc0b393ba", - "services/api/code/pkg/business/rls_phase_2b_test.go": "190f4d1ac43262a99fbb50b0813ad52b40f6d48124a61b906917c49847e209ad", - "services/api/code/pkg/business/rls_roles_test.go": "c481fc7a9932fdb0118403bbb5933b90edc87b3dfb891f2ef4053d309312b024", - "services/api/code/pkg/business/rls_teams_test.go": "e18d015a0fcf8c21eab10e86b8f597769d58804a43aa14e0523067919d969660", - "services/api/code/pkg/business/rls_user_scoped_test.go": "12ca33362ceaab65fc316d9d292b6b6b48646f1e98877a0f8dd278b1d62eb20e", - "services/api/code/pkg/business/rls_webhooks_test.go": "8d02e6c0d2c4c05c07c502251903b59c2bb96fc16bfb509229f0fbd1b72dc2a3", - "services/api/code/pkg/business/role_assignment_e2e_test.go": "70306864a62669c2cefbe44df8b0a6071175bf70542ae97d34a009fbe7fdccbc", - "services/api/code/pkg/business/service.go": "9486f20842b563946ae4e6e81ddd93ac6a3bb8768b3cede221b4b24ff50b057b", - "services/api/code/pkg/business/service_test.go": "a2a462fb81d3138b287b6867574b9fdb7cd2b72d302eb05d16b41ba612fe2b1b", - "services/api/code/pkg/business/slack.go": "5d5584fd78bd7aac51fbaad29204b3d0514e442e535c519943c77dfcede031bb", - "services/api/code/pkg/business/sso_admin.go": "85d62c96ff482c866fa3da05ab9f3d75e164f9904b3d3fd8c6cab7f734777394", - "services/api/code/pkg/business/sso_admin_test.go": "4ac176924dbec664afcb55a0287f328cba0318df6af36c89a67dfe4d47950a81", - "services/api/code/pkg/business/store.go": "697028670888a758143832bb5895edce773971d9b898e2fb857dda42d3b9b9db", - "services/api/code/pkg/business/teams.go": "6591e813a9e8b3d2a1ec3947ad936a88a3f56b5652597c2f80e09e970cedba61", - "services/api/code/pkg/business/teams_cache_test.go": "106a8a7b97cfdf977952365f576d44fa0444a8864c0b78759926affb2ad86d12", - "services/api/code/pkg/business/teams_test.go": "8e53d27d543ef9b2ec1ad15ed22d7f80a23a58d54a07d7436477084bd8d0e8e6", - "services/api/code/pkg/business/user_settings.go": "e9482deeab81e6afc3f8a2d5068a3925c0051e4b5f4368ed52ce5aa0d2eb67a4", - "services/api/code/pkg/business/user_settings_test.go": "c42b9ff1540bdc4b6e32b9933211351ee67ec04ef3fe20ce989095378e01f9f9", - "services/api/code/pkg/business/users.go": "e7c3141371379dfa2c22ad68b049029e7ce7f1fd7ae61399115eb79426a0000a", - "services/api/code/pkg/business/webhook_dispatcher.go": "6b846f51ac0e8825d0b3aa5cee79ae8c9133253472121a1f96372637f72b7894", - "services/api/code/pkg/business/webhook_sender.go": "fa61b1c4c47f69b02bf7bc3805bb67fbda402acf86b716c21af8069663f7ab37", - "services/api/code/pkg/business/webhook_sender_test.go": "7887cebaae4ca0a634771a97381d7ded402957476f6302ef286486d5b943a88d", - "services/api/code/pkg/business/webhooks.go": "da582851b5f1f3f17872cf42b2e8aaa2d8cec984947ef30fe331c2fb8124edf7", - "services/api/code/pkg/cache/cache.go": "19d435b4482c8ddc6edca623611bed1c96f3634e46028eba34de4c32872f31ad", - "services/api/code/pkg/cache/cache_test.go": "d54268a21a2974ef1c90c20c212dfd0fb81298e2b6e55b56af0ebfe456bb31b4", - "services/api/code/pkg/cache/org_membership.go": "525e55a1db849c6926e07fa7e4004f191cc700a99bfbe2b9c6a1598c242402f3", - "services/api/code/pkg/cache/rate_limiter.go": "e2dbf5a55ceea1a00c8128f37ddc7c2d5dd5c972f092ecf4bd13d514e820bff9", - "services/api/code/pkg/cache/rate_limiter_test.go": "6e576cd2fb4087375f464525c3732b94aa67358012dc5166411d8e0cda14ab16", - "services/api/code/pkg/cache/token_revoker.go": "43a9d94fa8167365cfbe074ce5cceabc83e31daba46ef93ad91600791bdcff07", - "services/api/code/pkg/email/email_test.go": "582167863980058379453fb73f2bacb1c2534c2a25ccb2ac8c94b966c9159b82", - "services/api/code/pkg/email/fake.go": "f99d9319eb5cc783750562b052ca90d157b39dfd96d62474be7be9c01a478a9c", - "services/api/code/pkg/email/resend.go": "3ec24b21eceee3ee1da3c4da78347aa59bae3fdef19474ec081e1b0f1318cff1", - "services/api/code/pkg/email/sender.go": "aaddd3c1880a467bad587f786328a929e696c14088d75d48d4b12196b8e5c4cb", - "services/api/code/pkg/email/templates.go": "0667865753228e84fc991acd4846c5690ec5ddfdd28c91655e8a80e86e395fdd", - "services/api/code/pkg/framework/plugin.go": "0a5ecaab74ab66b5c6b61df6ae36f56d90b8df6118b3eb142ca63e181cc2ea37", - "services/api/code/pkg/gen/api.pb.go": "f8210d9a0f0dafd9789f263c197a3a7e41a81be42ae1269b2c020fc530d72ab1", - "services/api/code/pkg/gen/api.pb.gw.go": "7ddb033fb8e8e2b5b7ccd356fed26c930c940eb80e19768d54128c736d9df791", - "services/api/code/pkg/gen/api_grpc.pb.go": "4666066586b54116e45912e831fd0f378825b9b7dbe4281fb994f32008c1e262", - "services/api/code/pkg/gen/genconnect/api.connect.go": "f14fa6fffe0f9ae92bed2ec27f67b5bf0efabc2bef6bf982ad72fc4beecf6b30", - "services/api/code/pkg/infra/README.md": "5e251a6e9149a81efe2fa6ae10026f0979354b56314d83b02ee30d4ba630fa89", - "services/api/code/pkg/infra/jwt.go": "21f03ede3f038de54f996c5e6ec48ea5031e0b73cd2caa02cd24d7f210277b24", - "services/api/code/pkg/infra/postgres.go": "88164689e33fc8607c7d09c00c26cb6a1371928b0309bcd04cbee7be70459d7b", - "services/api/code/pkg/infra/postgres_api_keys.go": "237d3bf96401ee125249b0c1ad6584dbdd9a22d029e0bb27cff7a0ed951ff387", - "services/api/code/pkg/infra/postgres_audit.go": "cce6968ff53b00dd31d9190bcc26577702b2c238bf8ede4d56ad622f89282191", - "services/api/code/pkg/infra/postgres_audit_export.go": "b761b06348441d9244d96b199c41bbba51cde5eb2069ab95f38ee3c673ef2f7a", - "services/api/code/pkg/infra/postgres_billing.go": "61940f4c8a21226a331b77c63a80e81fb8ec8fd664437571f967a63d1d5f85b4", - "services/api/code/pkg/infra/postgres_claims.go": "4daa0350299cd34a401e7c248abecb06de1e2370d8ab380aa288106cb77865f9", - "services/api/code/pkg/infra/postgres_consent.go": "cb8f39bd9dec41637c03165e1106a7b70150cc11c23ff1b99acdf0c3a4828353", - "services/api/code/pkg/infra/postgres_delegation_grants.go": "d7281bf87e105bc16e1094fbed90b82395cfaf84d5edbd9de6d95ad333faec3e", - "services/api/code/pkg/infra/postgres_delegation_grants_test.go": "f0ab019aaa45161d0138e99115d8cb231e2a4b18efc8d0388aad943230466a88", - "services/api/code/pkg/infra/postgres_email_templates.go": "c723425663f4be6f62eeaca1a1f2ae25724a6a9d2983a62ab51c5abe6dfce779", - "services/api/code/pkg/infra/postgres_email_templates_test.go": "8c8578f98a314120e0f07753d7336caac7d03dc69776b996ace89aaa2723801a", - "services/api/code/pkg/infra/postgres_entitlements.go": "b25f4ea45b1c0b2973f8d1da57698e0424e8009b56c65670cc527caca47933b7", - "services/api/code/pkg/infra/postgres_feature_flags.go": "422ebade6e7e7527a324037c2f456863e7749e0a6e37d956c23add4b9b074010", - "services/api/code/pkg/infra/postgres_gdpr.go": "88a1d137a2da0bf0e08ea2f5ea2fbb21acace9273de076a0ebf84c50326e3cbf", - "services/api/code/pkg/infra/postgres_gdpr_test.go": "2442d6be647f1df3eb667e3e2c126c22a8ae6119cf5f68dd0a34c4d244a1ec69", - "services/api/code/pkg/infra/postgres_invitations.go": "9b7383d70a5a556292cca3c8c8dc02605f26e84ae24ed352e722894808f892cb", - "services/api/code/pkg/infra/postgres_magic_links.go": "0d9def64320ee97e3ca7539b4284dce97c7b27e279639a6bba509a349c4030b6", - "services/api/code/pkg/infra/postgres_mfa.go": "09d3e9bdc290d5b010a45e44a372e9518cfaa507a8125b72f22e714f23a3c0a4", - "services/api/code/pkg/infra/postgres_mfa_test.go": "9f361a8f4eb27fed31c4b7f65fd3d5c04bd586a30406f84efa9ca99373e1979f", - "services/api/code/pkg/infra/postgres_notifications.go": "641de396760da395c9fda564e7c8739eaf8dcb26df6f89818f88693c167617c7", - "services/api/code/pkg/infra/postgres_notifications_test.go": "b3fa17ca560fa9db4f94e80449d5330532ca520e7c2ebb8da4b44f522a63c35f", - "services/api/code/pkg/infra/postgres_onboarding.go": "a6c90543e14c387714d4cb8ba99026e6007adc9343138ebea99a0b24a8368279", - "services/api/code/pkg/infra/postgres_onboarding_test.go": "9f1dc709163069d5c368f0e488c6f437463a1f77a7c668a6d1e063997d5e1c87", - "services/api/code/pkg/infra/postgres_org.go": "9bd0c23728676e7a741fab7c8b36a4fdd908f59c3c0c0ca37217a52bade80fda", - "services/api/code/pkg/infra/postgres_org_settings.go": "4e1fe114a6bb94d2dc21018ae4e95b7a98a7826fe15f55e0c5b474a9b64ed015", - "services/api/code/pkg/infra/postgres_permissions.go": "789426086c4353524eb8bdd8e3f3f88dd28ac3f7b3bc159e0b1894fd07580461", - "services/api/code/pkg/infra/postgres_platform_admin.go": "919c6194c028cae9e9cd6b42e909e47d67da6454eb2491deb49679efc4c305d0", - "services/api/code/pkg/infra/postgres_principals.go": "8f035a39a5092965ba348a46ff84daf26bac85eec8d07f835e4db03c026990e8", - "services/api/code/pkg/infra/postgres_principals_test.go": "e73938d51f7f6d4298112e938e3b25a27140975191b53f32ec426ddc2e970118", - "services/api/code/pkg/infra/postgres_retention.go": "68a465cb9bcb4bea5523962837b90f1d308462e3d5ef637f5c7d74b8f1625140", - "services/api/code/pkg/infra/postgres_sessions.go": "e52826dfc58f8c2027f438dcb9b6700305ec07f4f3af238a61307027e3f0d3f4", - "services/api/code/pkg/infra/postgres_sso.go": "4ed78ee285a2013e3d08f3720583a8cdaac5d2d4489034678b6c2fdd6d6b290c", - "services/api/code/pkg/infra/postgres_team.go": "153f7680546ab10c9903b82607f2372c8700c512af05647f15f9a4b6f49c6875", - "services/api/code/pkg/infra/postgres_user_settings.go": "b13aced4c002f9192e588e4757a2f7802d64f592f1917a19308668f0295a5603", - "services/api/code/pkg/infra/postgres_users.go": "34d349d22c58ed44ca83ccf4d1f8f31d836035ee584d85d61ca0765ecd614fbe", - "services/api/code/pkg/infra/postgres_webhooks.go": "c3c3b4f5fcd2b0de446fdf53a46bd9adb836f9907059632be1005270ad8393b5", - "services/api/code/pkg/infra/postgres_webhooks_test.go": "533d69b82cfe97c55240b9734ba43e1695f392b159bb3dbefe4366171f94e93f", - "services/api/code/pkg/infra/redis.go": "df6e3c1bdea3aaa9b0e5f6270311e59ebcab917a147613240beebd1a557162a6", - "services/api/code/pkg/infra/scoped.go": "9eb4a39c15822ca17c7ee75f0440ec7b4693703f74bb3b04fc72883f3f41dcbb", - "services/api/code/pkg/infra/tenant_tx.go": "a2a67fab28838021a36b3d3015d10019c7c5916505ac7b7eea6b4eddc3f3f596", - "services/api/code/pkg/infra/tenant_tx_test.go": "c762c8cbfd1512ef03d5cbe665e195aca37de3505994b87ac0dbfb6130957cb9", - "services/api/code/pkg/infra/vault.go": "f2560f129906dfb13ee9333edeb57de7991a89000101d9dc1ffaf73383a7d03b", - "services/api/code/pkg/infra/zz_rls_test_guard_test.go": "662e363d03d176a41318bb9283609f353bb76fa240039b965bea7b7104dddaa1", - "services/api/code/pkg/moduleinfo/aggregator.go": "4801ebb573f4138a0a73ba73039791821789e819106cecde30f46fa8808c2a31", - "services/api/code/pkg/moduleinfo/aggregator_test.go": "95cbe0ecfdc85ffd31e83d3e37beb239ccb38d035097552f69bb7b68cda40b8a", - "services/api/code/pkg/permissionsplugin/plugin.go": "9859eeff1a3793d61bc4c09d63cfb9775c2e1dbda098fbfaa9b2aa609973a415", - "services/api/code/plugins/plugins.yaml": "cffc28445c1dbc923655b22cf99316c852984346d7a5804e996d952d58ba3889", - "services/api/code/plugins/registry_gen.go": "f8e477388c2c9935a6eb567dbf7391a1f7a2ddd82284d6106f6b0043f053e499", - "services/api/code/work.go": "c671e5b19e452e3d35efeffa2e8330da2c26c53f8f76c4fae7f1fbf5a472bdf8", - "services/api/kreya/customers.krproj": "712a153d7e7051a9d3685c1e4856351af1c174e697911e48bbca16d3d7a138d5", - "services/api/kreya/customers/BackendService/CreateOrganization-request.json": "8d27b1aa4b83861a4e58a9af78178daf429539dbd5060f227746c25467458a8f", - "services/api/kreya/customers/BackendService/CreateOrganization.krop": "36fa827cb61dbcd47e4e7c3dd2c227687a3480ac1e5d92c353cb6f7d896c5d0c", - "services/api/kreya/customers/BackendService/Login-request.json": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "services/api/kreya/customers/BackendService/Login.krop": "da9c0cc69532aff25bf2986498631272424597566f282727ca28b8e5a6fb2aba", - "services/api/kreya/customers/BackendService/Register-request.json": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "services/api/kreya/customers/BackendService/Register.krop": "e1afac1b47e5d862cd902ec81f92ed1273d1072102030b36bddb4b5735ff17a0", - "services/api/kreya/customers/BackendService/Version-request.json": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", - "services/api/kreya/customers/BackendService/Version.krop": "6ec1e065c140f00168d080e597fc4f34b4fe297826199035f67954b09d30940a", - "services/api/kreya/directory.krpref": "c63b7bcfa98039211cd7c429684c666bcb017c55aa5c2041a3a4192abf50d443", - "services/api/kreya/grpc/reflection/v1/ServerReflection/ServerReflectionInfo-request-0.json": "206393591a3c283e137f17cf4ff18fa2d1e80a680d3ee65751ccabc9f89afa28", - "services/api/kreya/grpc/reflection/v1/ServerReflection/ServerReflectionInfo.krop": "8f022ffb673c00cd228857333f6464adb6c0a43b91307966ab6eb466caab467f", - "services/api/openapi/api.swagger.json": "d9710a396d80385a40dcb1fdc88ea6012976b1049bad1f93c824e8ddc3127569", - "services/api/proto/api.proto": "da588dcda80959ac435ba5eb8598f48e3874bd551ca3381d6b02ea79e55d31a8", - "services/api/proto/buf.gen.yaml": "1dae37703d5c37a9ed7fb8afc113d421b92cd493f5c5c3b72872c2783efd9662", - "services/api/proto/buf.lock": "25d8e6b948b86b3b1f221cce188a474e163e29582fed26a50fe7c57a9b6a617a", - "services/api/proto/buf.yaml": "32fa9f85ab452ac2fd831f36258d8bc01bab740c5d2f48931a3d145f17c252b4", - "services/api/service.codefly.yaml": "6aa1bf92d4c9ce255ba08404967dbec78d296a9fd3977fc0d3a4f7d115eb7ce8", + "services/accounts/GETTING_STARTED.md": "643bde7b68eb6bbe72988fde4c25a17512601f720f234043a51a7a521b5949c9", + "services/accounts/README.md": "e9677ce854f88f0b8ca6652737ad18b7a10e6348ee9e53cdd5317d230c0af209", + "services/accounts/builder/Dockerfile": "4fab07983bf9b072f9655b5a493d9c38bb3f866ca9832045f7fe3a0ec411883c", + "services/accounts/builder/dockerignore": "4b9b48f9f70aa850b3508754c0564e9155c4039206601eaa2952f58067757dfb", + "services/accounts/code/.env.example": "7743a1a5c26011779923ea91006030d1f71a9e78ffadd700e0fc1c03a932d18f", + "services/accounts/code/cmd/local/main.go": "fbbadba328ae172642ded1f27aa0079cca4a127e47d88aedbfecf534852d7383", + "services/accounts/code/cmd/module-info/main.go": "c16b763a63c7ad81fadeb629fc6131f9b8c065358e9db90b125592357c5edd77", + "services/accounts/code/fixtures/dev_admin.go": "6d85ceef11a73af3a78435269fbfe36cb82196fc2d946fb4058fd6e8111e5c23", + "services/accounts/code/fixtures/seed.go": "ca654bcdbf242c864a8429e3a717881a5780037bcff0f0f96aecee8560941260", + "services/accounts/code/fixtures/simple.go": "3b658f6d8278b5398849a66b5a40ebccb3871b87f4dbfab8a00d5be4eb96a554", + "services/accounts/code/go.mod": "f9e4ddca027010b07e7e45359d2f6c64a8ff4506a843942b0485a43d4510e3e9", + "services/accounts/code/go.sum": "145f96d3005e538f170e5c6907ba2b13906b9310590c51eb7077dcb390bf7e55", + "services/accounts/code/main.go": "ef349c38c6e42e10127b752e00b3f66f701867837941a1fcd860469e78640a11", + "services/accounts/code/pkg/adapters/README.md": "9755fba39a2abe6cd9779ec4e728024b5148506c690da95525844cc9d815fea6", + "services/accounts/code/pkg/adapters/audit_export_handler.go": "71d3a5225996ea9b1efa723d16bddaa7edcf6da06c8707f3de6f33d4d177945e", + "services/accounts/code/pkg/adapters/auth.go": "0535eb50c6809507de83f9466b9cdccfe26af82a0c7caa032b003806e0f20cfc", + "services/accounts/code/pkg/adapters/billing_handler.go": "6d2cdceaed75c3c82d05c554cd57e5283199a5a491693a7827bf93050ad53679", + "services/accounts/code/pkg/adapters/billing_http.go": "0216a454876ab105dabb3717053f2f12b5edcecf9f4dd873d019fec335a3a970", + "services/accounts/code/pkg/adapters/connect_auth_interceptor.go": "b0e187b5681f86ddf4d273c99528e931cf79bbbf2ffdd8697889c9d060949a7c", + "services/accounts/code/pkg/adapters/connect_gen.go": "2995f60db3dbaf38b97aba81dff487cc36d2f9144eaa06ee863d04bea6338808", + "services/accounts/code/pkg/adapters/connect_handlers.go": "ef3cfcc7fc24df825a56682537c84ef9ef37e253aba19457bdad97c9cfdcadf5", + "services/accounts/code/pkg/adapters/connect_handlers_permissions.go": "3118caba00a14ed778fff75df2c40fca41cebe7de3861f4cda2de1e458aa6872", + "services/accounts/code/pkg/adapters/consent_handler.go": "bc1a5121caa9be6df085fb93c6b444d30211b3281f6307cfc51ca765689eb2e9", + "services/accounts/code/pkg/adapters/cors_gen.go": "6ab58ff29e649cd1cfade3d78fa97a722b70f9b5d09b649b8252f041d8f33afc", + "services/accounts/code/pkg/adapters/delegation_rpcs.go": "2bc9d846fd102e5e44b5b97a13f1a7114f5c8ec49e6c3fe721c4c47f2ce37af6", + "services/accounts/code/pkg/adapters/grpc_auth_interceptor.go": "2e751266f1cb52a233e019b1fd76635626e2a613ce83e82a11c3cf74eb814f66", + "services/accounts/code/pkg/adapters/grpc_gen.go": "cedad66307f14ee161abdbb857d3bf46bac855132f38db9ac4bf39f14ae5992a", + "services/accounts/code/pkg/adapters/grpc_register_extras.go": "2f6ee516402e526ac7b926dbc30fcb6851771decef9f2e9668892e61392f00a0", + "services/accounts/code/pkg/adapters/http_mfa.go": "10c91f11d682e6415222871044d3f2276299d6c31aa706616d8cc737e7aa5831", + "services/accounts/code/pkg/adapters/principal_rpcs.go": "bfc74163c52bca403d87a834812ea972cbe2c303eb1c9e13b8e42cf9030a0389", + "services/accounts/code/pkg/adapters/quota_interceptor.go": "a3621dfe2c1286932ea44d1ebe3c1e5795327cbc158f58b9b158143bec0b1a1f", + "services/accounts/code/pkg/adapters/rate_limit_interceptor.go": "fa25d8b1a8de17d292451a7335c3265428e48b4c6b6d1388e480e71fc1b1beca", + "services/accounts/code/pkg/adapters/rest_extras.go": "08cd9d6b568984449f00cc3d187900da03e5e087a4512c51d889559113d12f3f", + "services/accounts/code/pkg/adapters/rest_extras_test.go": "46b46d555a2387af2ebaff348aabb7f63d65f493c043a5cd08005a2e267f0852", + "services/accounts/code/pkg/adapters/rest_gen.go": "20291f0e5a92437ef70a6b801553a41c27b8a61cec0c1dd111047705ff208267", + "services/accounts/code/pkg/adapters/rpcs.go": "068a6d5cafab7143f0d2008330a3d5e88947279bea587c1ee0e5613d88928c50", + "services/accounts/code/pkg/adapters/rpcs_org_audit.go": "5055079605c4fe60d8b2e414ba82e265bbcc9a6e18858a76514c570d34cffbae", + "services/accounts/code/pkg/adapters/scope_test.go": "d6086b7f42fc65be25badfe0dc9774e13c055d43b333009051183f2ddf76f8e4", + "services/accounts/code/pkg/adapters/server_gen.go": "27ad1a81ef5b78da39d5395869fce238fbb3d078585a753db3c820ca732491b9", + "services/accounts/code/pkg/adapters/sso_admin_handler.go": "21a19aa461ed6830748361293d8233899991150af81f0dc6edff05f564e9ef4c", + "services/accounts/code/pkg/adapters/status_http.go": "c88b0827cb3a09d4f751207aac815e3cba559f439669d91f457749a9541a94a2", + "services/accounts/code/pkg/adapters/user_settings_handler.go": "db9bfd75e93fded567da140fc2329345a18cc2725466eac4ae236bd3236c6505", + "services/accounts/code/pkg/auth/claims.go": "2276a341e62f0608c680d294b7bb4286353c7c17a4e719ee421fae22e2270bb1", + "services/accounts/code/pkg/auth/dev/validator.go": "ac2abeb2da72dc920b972f5a50fa14da619bdcff7932eb6b706c763ce5f6ea60", + "services/accounts/code/pkg/auth/dev/validator_test.go": "a271dd996c7e07e073343386a0cb885f980c6f7859cf4dfb150acfa24fc0eaa7", + "services/accounts/code/pkg/auth/ed25519/minter.go": "9a92b493219e67bfad97de78f306543719aee281ff6b7dcca0f4ba2a2e98bfd4", + "services/accounts/code/pkg/auth/ed25519/minter_test.go": "0b1e978c93d2638bcec8f50bb13be2a7fe865572ae45b97df83bbf7d9a8f6da0", + "services/accounts/code/pkg/auth/ed25519/vault_key.go": "c58f85070174d198a9b4c453e21b4ca1c81824e23cf5a4f196dc701d76d97841", + "services/accounts/code/pkg/auth/errors.go": "a25b7765d6047435608bde756e4f4ae43b6afa978c14d0c12df55869c9f80e70", + "services/accounts/code/pkg/auth/identity.go": "2bd0f9b72c4b642e0aca7dfb0783fbb4bccf588a9eba1221c03b8a2c5a96d247", + "services/accounts/code/pkg/auth/memory_store_test.go": "98e489aa86b1c76ac50278f165d94eda5da602f397ba96edc3b2a95f49b553b1", + "services/accounts/code/pkg/auth/minter.go": "d4708e11b68af98f4a6c4c41bdb2c99e95398dc8bf8aa7de6aa6603d9023e189", + "services/accounts/code/pkg/auth/oauth_state.go": "158b2058ff9808a9954b37006b3ece6068ee1409dbf912d198941564b4dfe3a2", + "services/accounts/code/pkg/auth/oauth_state_integration_test.go": "5f46f63f1a9efab55844a16a78cbbd6747dfa75ecde44eb7f7189de66c0b0d89", + "services/accounts/code/pkg/auth/oauth_state_test.go": "44ee97cc323fa26b7fbbb0951f61c233eafee9f28d56a83a88bf06c7f0ac89df", + "services/accounts/code/pkg/auth/oidc/business_adapter.go": "467e7cd01f22880fd2f217d96137e016745c7ef6c4bb61a69d71988dfaeb4730", + "services/accounts/code/pkg/auth/oidc/exchanger.go": "e368ab5f4b49609499f2acf8fb7fb2e47c8c8badee5ac7115b3f2584a7c41fe6", + "services/accounts/code/pkg/auth/oidc/exchanger_test.go": "1c3bf5fec589a3b31266acf205771c5fea45b6394dab6ef091d70b2785f22df8", + "services/accounts/code/pkg/auth/oidc/presets.go": "1f4136a68559961d545dc264a06cff7c97abf1488a48ff563ebb11c15aa033ec", + "services/accounts/code/pkg/auth/oidc/validator.go": "f50ef6f6b98b6e5853333178e68f89ad8f0abb263e3500d4416f8323f7e51b79", + "services/accounts/code/pkg/auth/oidc/validator_test.go": "6b2b20f655cb2639cb3a9c33dd7c28be104e3695f42aa0c5e4c735785781e840", + "services/accounts/code/pkg/auth/pg/resolver.go": "e7db19bb9b8c0d78afc5e1921088c064b0c8f1710ab995d3a6630bb53a4afe7c", + "services/accounts/code/pkg/auth/pg/resolver_test.go": "84e8c058680d355deaa3f5ae40254923efa60f42534793b9b0dd629ba2d00f17", + "services/accounts/code/pkg/auth/pg/session_store.go": "c78f877954c7c47080bfcc727855a719775b750cbc307e94b3ee7974836bdb5d", + "services/accounts/code/pkg/auth/pg/session_store_test.go": "fe916130d380481689408e7246fa31589c542482405a042eb33b5b411ae288a0", + "services/accounts/code/pkg/auth/revocation.go": "accea261b71b222e265aa870c77c9a489610d82ba54c6d2cea153113435d8397", + "services/accounts/code/pkg/auth/session_store.go": "dd2f8332304ae3bf26d5dd9bbd53f9d7f9a67233d958b6becbd841120f46908f", + "services/accounts/code/pkg/billing/client.go": "66f21e0e27756eeca20adcd7156deaf7490e6750f0e69be280495e9fb97a9a6a", + "services/accounts/code/pkg/billing/client_test.go": "ab961c22ecf3040afab0a1ce2ce83fea09a64976b2b0387431ed960cd80ef842", + "services/accounts/code/pkg/billing/handler.go": "356af02332ae9968c3f056c6b246a33187145138a5f4af66b1904fa570bfb793", + "services/accounts/code/pkg/billing/handler_test.go": "f4a22f4ab3403662336d29343d91194ccba92641fb3fe49669159fdaa82c70cf", + "services/accounts/code/pkg/billing/pg/store.go": "d2ba7f75dbf98948d00b9a7875da7921b2cc5aeda9ccbb27471aa6e8c58373c3", + "services/accounts/code/pkg/billing/pg/store_test.go": "3afb386315babfaead38fc0709af4cd65e6f14c9893552310420962ac6bd0605", + "services/accounts/code/pkg/billing/store.go": "1a8f3eecd0669228308ccf716e3d490f6d9288e55533144c2195d147ca9e0cbe", + "services/accounts/code/pkg/billing/webhook.go": "fe4ed790c2fc57136a6724c5fee44841a4f3dd3f1106e6a6c1780536cdd249db", + "services/accounts/code/pkg/billing/webhook_test.go": "2d3670fe1770b3f230dcad502a3f88c9797034c191f30f402357855e7dd8aa00", + "services/accounts/code/pkg/business/README.md": "600327ef75b8a872b432793a74e6361ead547e7ea0cd860fbbb027e06494d943", + "services/accounts/code/pkg/business/api_keys.go": "0c87b00dcbaff5a1044e7fcf3f83f9db33abb46ba3879349e108aa62db200237", + "services/accounts/code/pkg/business/audit.go": "f174126480989c76723aa5c3ddcf39c1a8231468134388b5048c74072ffccb7d", + "services/accounts/code/pkg/business/audit_export.go": "79b1fa3e4bc39f6ee3d13872780f7247c5f97c826be977d4f9afc3d8ea337e4d", + "services/accounts/code/pkg/business/audit_export_s3.go": "7c03d51cfe1d3cd921850728e95a0c5aad2ca2be04ed1873a294912f92e4b58e", + "services/accounts/code/pkg/business/audit_exporter.go": "0e8e8fa98b5cb1bc75f68d238e83329a8bc25b53f28b18ab102356d588f51616", + "services/accounts/code/pkg/business/audit_exporter_test.go": "d69c233d807e45c634e474194d69885d403a84fa2ef8bf7b0895b17fbb63e58e", + "services/accounts/code/pkg/business/auth.go": "131b841fec338a8dc3b69ba04a7d1b86bb26bfeb8dccab79d97f0648464fd6f3", + "services/accounts/code/pkg/business/auth_login_flow_test.go": "8ca1bea11ce0ae434c6e4a71c911dc019e3524c1612838b3e04ac9f409600b27", + "services/accounts/code/pkg/business/auth_oauth_test.go": "d3f6d6ae9b6fafb9330582a329d979e63924f350d58f01623afaaf3e2c398acc", + "services/accounts/code/pkg/business/billing_ops.go": "450cd0e56a11907c698c0387d5b9c54ecf0255a0d1613c133901947b17483c14", + "services/accounts/code/pkg/business/bootstrap_admin_test.go": "d0902f71b26dc7db66508c4690a42d48c3799c14a4c859f0135763b2e584811d", + "services/accounts/code/pkg/business/consent.go": "099b72aeaced018d28140edc06c7c674a2bc55b93514a0c051dc5c4e8e57faf5", + "services/accounts/code/pkg/business/delegation_grants.go": "262f50073f46c20509698aedf0ec8ed118fd68a00c2583aaae8f0c04008889ad", + "services/accounts/code/pkg/business/delegation_grants_test.go": "06211ea3c0ccb29e07a9bc11a316b0602c7dc4a45117c2bc1eee028d8d45da41", + "services/accounts/code/pkg/business/entitlements.go": "3e8eef1a69882c422a684a3a2f54d8da6af8572d07b651e009aebb66e7fd10d0", + "services/accounts/code/pkg/business/entitlements_tx_test.go": "21f7a90c0be515ffeac870a42f39d7309a2d3ecbdbcafebb1f909a71c0fb2553", + "services/accounts/code/pkg/business/features.go": "17555604642205cc7329f91c7da688578c825962974fd645fc17d29b4ede9829", + "services/accounts/code/pkg/business/gdpr.go": "7fa408bd23e2dd3f8df7f157661dfbfd23dee46679142c2b5717aae090aa5980", + "services/accounts/code/pkg/business/identity.go": "ff1b181948f232e22eebffcab6ad497524ac18a8fd16a21e4e68469c32677260", + "services/accounts/code/pkg/business/ids.go": "364807ea9ae9e48a950c8dd9c7193c502f678de7f69f8b87f528dbb094da385c", + "services/accounts/code/pkg/business/ids_test.go": "33a1656d7bb42d508521644800c677d9918e7d0aaab2e83eca484339ef3d65de", + "services/accounts/code/pkg/business/introspection.go": "764bb3bf43abac951c980edae7dfe0b05efe6126ec286dc669e8dbbaecd1bb88", + "services/accounts/code/pkg/business/introspection_test.go": "7742ed1deddc6e194cb5e303aad7e91da942e9025ed72d08573b922d664f528f", + "services/accounts/code/pkg/business/invitations.go": "acec356dffc099d409b77b081266aa90132424eb073a19212d8e48cc8861a8c5", + "services/accounts/code/pkg/business/magic_links.go": "8dfaeca38af77472625e13760a9d05cb916f49ea5554c8560df609e34adce14a", + "services/accounts/code/pkg/business/mfa.go": "f686f778922301901628e4993f80a5788b1ec7ae084448570437e4ae8edaab54", + "services/accounts/code/pkg/business/notifications.go": "873a757a4ed3409f179fd811a57d2c98b791b6e1d0b8f4ad0045bb7d0f028a38", + "services/accounts/code/pkg/business/onboarding.go": "2d5f2d737cf8705d3f734cdb7fd41aa2957fb448bc19d97c3cb15adf2c7e1e57", + "services/accounts/code/pkg/business/org_settings.go": "dddbb01d79c62a8a3239140d95ef685ddfa29c0ffcc18c87ab385abe3a060703", + "services/accounts/code/pkg/business/organizations.go": "fbbfd32a9d153a4e8c25f1910cf2b92e1a732a8eee9b234e43e0291050bc5332", + "services/accounts/code/pkg/business/permission_matrix_test.go": "cd462c70a0513d6053dd0e50454d7da197bb7c61df10d99264b0ae1b0e05a698", + "services/accounts/code/pkg/business/permissions.go": "fd9864ca2d0c2e3361cc08677183f03cfee2f5c642b60eae8a8969a6c71a99c5", + "services/accounts/code/pkg/business/platform_admin.go": "dcc7c0f79fd2b350b5b960f3e7e1922b15676903074c84a1c38b7413e45e5546", + "services/accounts/code/pkg/business/principals.go": "c28cbcb3be961f068fcad214cc1367c73b0ad5eb34572d3b0713fed88e1fe8f0", + "services/accounts/code/pkg/business/principals_test.go": "51ca20d49cf21f859b4824e56a7f66c853eb6f9168b701b984005373a61d02a8", + "services/accounts/code/pkg/business/retention.go": "485e1a8764ee9f72f181f9c4b9d768c6216ed671a7541c6681b38382c041fe4e", + "services/accounts/code/pkg/business/rls_api_keys_test.go": "cadf6552a712c31cf64079211757a7e9d3f37ead7ca064c8a78c4d6e18c1de95", + "services/accounts/code/pkg/business/rls_audit_events_test.go": "0a3e2805940e31141fac35e1775fa38b1654db7612eb39641936369f36079306", + "services/accounts/code/pkg/business/rls_audit_export_test.go": "e6372d9f97a72a7bfb90cf9fa84006f40cd957efc45d113315cf6c61dbb70a91", + "services/accounts/code/pkg/business/rls_bench_test.go": "97188778d4e18a9d420929292636cc9fba7d27967cdfeff3376296bffb4c3045", + "services/accounts/code/pkg/business/rls_check_test.go": "dc6479a479a96f72e90daf5fb3fd645fb8efed3911b518d6ea3fd61d3745c03b", + "services/accounts/code/pkg/business/rls_organizations_test.go": "6655706aec936a5a560413a90f63006d2b36782e44f7a9dc2a354b568ca884b8", + "services/accounts/code/pkg/business/rls_phase_2b_test.go": "1db3b4c6bb35642700709fb54c89d46336bc20692559b543a8dc6ba3e30e3d65", + "services/accounts/code/pkg/business/rls_roles_test.go": "b077463ec7498c677df5b944733ab61802f69430a543aaf4be7ed050c9f92a19", + "services/accounts/code/pkg/business/rls_teams_test.go": "1518aa6c6ddae767bbbfd7b548cab2f6f0f4eae79ddb3982f8c6acb28729a573", + "services/accounts/code/pkg/business/rls_user_scoped_test.go": "52fb0ad1577b409775fa5e54fea7a51549c7d16530f0b26bee7bc9f786c2f3e4", + "services/accounts/code/pkg/business/rls_webhooks_test.go": "9c7b60bfd7226237f70b1ee446981a24f70b48d55659e06f4753a75d034e59ca", + "services/accounts/code/pkg/business/role_assignment_e2e_test.go": "86bb5dc7fd22fe08b55b4513777e1ff2875c52574d7ea085d2e9724be02f564d", + "services/accounts/code/pkg/business/service.go": "6393c1422fdaea8f4cee8428090bf6b64f3505c50ace5870921431f804993c72", + "services/accounts/code/pkg/business/service_test.go": "504033178d3360c166cbe0777e81f809aa5e63c8e3775edd82e170923cfe6b80", + "services/accounts/code/pkg/business/slack.go": "5d5584fd78bd7aac51fbaad29204b3d0514e442e535c519943c77dfcede031bb", + "services/accounts/code/pkg/business/sso_admin.go": "85d62c96ff482c866fa3da05ab9f3d75e164f9904b3d3fd8c6cab7f734777394", + "services/accounts/code/pkg/business/sso_admin_test.go": "99fe79b5e3299dc7397fe518043902547da8ba0307979fc9c1969c02a9b07cc1", + "services/accounts/code/pkg/business/store.go": "5741bd60131aeb056156dc28ec6c1b11a91cabf058def4d93ea2d447b28078ce", + "services/accounts/code/pkg/business/teams.go": "de059472a984292eff0c15b2ccfe2f7f7d520306a9a3ba03305f864a052d2656", + "services/accounts/code/pkg/business/teams_cache_test.go": "b9bacb467b1ae90c539f8143e0eef6d6d70af0d74a22f6ab15b94eac529d238d", + "services/accounts/code/pkg/business/teams_test.go": "8e53d27d543ef9b2ec1ad15ed22d7f80a23a58d54a07d7436477084bd8d0e8e6", + "services/accounts/code/pkg/business/user_settings.go": "77a8f239ac71e3dfdb8d505fd1230848e12cd7300dd564e73705b9f0368b9431", + "services/accounts/code/pkg/business/user_settings_test.go": "33d790062db5cd49ff0ead1c40e8425e7f107675fb6c7feb9d92a8c3c9c4a377", + "services/accounts/code/pkg/business/users.go": "2bd3c2fb70abe5c6a7c8e8ae0d96450ffce469064986fc1eba538b4128d0dd78", + "services/accounts/code/pkg/business/webhook_dispatcher.go": "6b846f51ac0e8825d0b3aa5cee79ae8c9133253472121a1f96372637f72b7894", + "services/accounts/code/pkg/business/webhook_sender.go": "fa61b1c4c47f69b02bf7bc3805bb67fbda402acf86b716c21af8069663f7ab37", + "services/accounts/code/pkg/business/webhook_sender_test.go": "186b7f35613e168d84d46232597d90668b8a952972e0ac256eff7c372dfec25e", + "services/accounts/code/pkg/business/webhooks.go": "da582851b5f1f3f17872cf42b2e8aaa2d8cec984947ef30fe331c2fb8124edf7", + "services/accounts/code/pkg/cache/cache.go": "19d435b4482c8ddc6edca623611bed1c96f3634e46028eba34de4c32872f31ad", + "services/accounts/code/pkg/cache/cache_test.go": "3803b3c860c4e53b8ced0ee18524b1f121ac98fc56b53af531381d252f934bf5", + "services/accounts/code/pkg/cache/org_membership.go": "525e55a1db849c6926e07fa7e4004f191cc700a99bfbe2b9c6a1598c242402f3", + "services/accounts/code/pkg/cache/rate_limiter.go": "e2dbf5a55ceea1a00c8128f37ddc7c2d5dd5c972f092ecf4bd13d514e820bff9", + "services/accounts/code/pkg/cache/rate_limiter_test.go": "1883c4ca9af5cc9b2d06b902297db0411b86ff1b732781b32e2cc05d69292df3", + "services/accounts/code/pkg/cache/token_revoker.go": "43a9d94fa8167365cfbe074ce5cceabc83e31daba46ef93ad91600791bdcff07", + "services/accounts/code/pkg/email/email_test.go": "4e8aa4457d25a929ee336b85a4b68977b95c90d0db36284f0a58e45b782e2525", + "services/accounts/code/pkg/email/fake.go": "f99d9319eb5cc783750562b052ca90d157b39dfd96d62474be7be9c01a478a9c", + "services/accounts/code/pkg/email/resend.go": "3ec24b21eceee3ee1da3c4da78347aa59bae3fdef19474ec081e1b0f1318cff1", + "services/accounts/code/pkg/email/sender.go": "aaddd3c1880a467bad587f786328a929e696c14088d75d48d4b12196b8e5c4cb", + "services/accounts/code/pkg/email/templates.go": "0667865753228e84fc991acd4846c5690ec5ddfdd28c91655e8a80e86e395fdd", + "services/accounts/code/pkg/framework/plugin.go": "0a5ecaab74ab66b5c6b61df6ae36f56d90b8df6118b3eb142ca63e181cc2ea37", + "services/accounts/code/pkg/gen/api.pb.go": "5d44fc8105265b8d15533930bba3e3f7a2849f4202c42a4bde81c01d11fec0e5", + "services/accounts/code/pkg/gen/api.pb.gw.go": "18d280195e8f470f0828ab747223fd8b8ac5921ebfbf00034e3f3e93a69dd7db", + "services/accounts/code/pkg/gen/api_grpc.pb.go": "53ec7076f239f0e2f14921b1015468ef4648827a3453135a20757d1e27e4ed52", + "services/accounts/code/pkg/gen/genconnect/api.connect.go": "2293ca9bda76521341c82806acca0a8ce56b678398dcc4ee75f12518c8eb734c", + "services/accounts/code/pkg/infra/README.md": "5e251a6e9149a81efe2fa6ae10026f0979354b56314d83b02ee30d4ba630fa89", + "services/accounts/code/pkg/infra/jwt.go": "21f03ede3f038de54f996c5e6ec48ea5031e0b73cd2caa02cd24d7f210277b24", + "services/accounts/code/pkg/infra/postgres.go": "0b36a7348e2cb7aa405ea176d99a95fb70269c3fb2a50e67b722fe6e14af66bb", + "services/accounts/code/pkg/infra/postgres_api_keys.go": "dd000e4891acab0583aeebed5efb8cb54ac2d1d56562cc371492ca25b7ea02e1", + "services/accounts/code/pkg/infra/postgres_audit.go": "aee32c451e0da074d45317d04801c7055c006a6575c3e60130e2b114d0240ff9", + "services/accounts/code/pkg/infra/postgres_audit_export.go": "20ea0a9be5c279e166cb13caf7953a4f3742ff5cffd0f15b4637abec85f91dea", + "services/accounts/code/pkg/infra/postgres_billing.go": "fb50dd7ee16e311367a9ad488797e4ab0d5e31a54307bedb919c50e351164503", + "services/accounts/code/pkg/infra/postgres_claims.go": "4daa0350299cd34a401e7c248abecb06de1e2370d8ab380aa288106cb77865f9", + "services/accounts/code/pkg/infra/postgres_consent.go": "cb8f39bd9dec41637c03165e1106a7b70150cc11c23ff1b99acdf0c3a4828353", + "services/accounts/code/pkg/infra/postgres_delegation_grants.go": "c112e67b769b1731437fac1f1361b5a19a928126229e2cd9e3a21344f01ee39a", + "services/accounts/code/pkg/infra/postgres_delegation_grants_test.go": "cc7688fd6851fdaa80870e3741ec40858d5c55d82dbaad4c3538a38d8879051f", + "services/accounts/code/pkg/infra/postgres_email_templates.go": "e76249a96009b22b0726404327db2be81345e625b32e6f9eb3165a16e4678d64", + "services/accounts/code/pkg/infra/postgres_email_templates_test.go": "4ec665833f10471451dc9de36df5eac65b2a92e07044084fbba6a1866b96857c", + "services/accounts/code/pkg/infra/postgres_entitlements.go": "084accd2a4b9b35b4e60eebde9ad4cbddac9938373b081e24ca3b4576ed9ae77", + "services/accounts/code/pkg/infra/postgres_feature_flags.go": "f9c9f2a44c9572ad1822ea94bbb6f6e4bb54b49eb578a7e032207d57abd6ab41", + "services/accounts/code/pkg/infra/postgres_gdpr.go": "0078cfe89343900077e8b68243867a9bc63643c60707b7aa118c0bb3d198e30a", + "services/accounts/code/pkg/infra/postgres_gdpr_test.go": "9bc0d6cf7174008236857c4d483c3c96c04f87ef2ddfaf43adbd257f7fa244b2", + "services/accounts/code/pkg/infra/postgres_invitations.go": "04742460866ae74fed670c82864dfaf97f79169c6bb38864db782b76ec69e255", + "services/accounts/code/pkg/infra/postgres_magic_links.go": "290b4cd52a5e1be98410f75dd7d5d67a9dc9f3c7cee513ea7d3c031b54f4401c", + "services/accounts/code/pkg/infra/postgres_mfa.go": "9a5946479ccb0019f0ff1396821d8918abb30da83f53f2ed265197ec2de15ec7", + "services/accounts/code/pkg/infra/postgres_mfa_test.go": "e3adcf765ac5a6ffe6757ea0b3e84f560fe0947f334c11de921bd049a318f1e7", + "services/accounts/code/pkg/infra/postgres_notifications.go": "81cdfca65471d5898c629523e89c06b30145148a1e3037af8a6b5aed88493c6c", + "services/accounts/code/pkg/infra/postgres_notifications_test.go": "755e7eb339f353405fa6f3939f1c7e315b23f2376421cd08cc1916d8c83f4c96", + "services/accounts/code/pkg/infra/postgres_onboarding.go": "44f4fb484b2e11339ce426d08dfe15ccf1ad9c66a3e0b19162dcab0cb77adaf6", + "services/accounts/code/pkg/infra/postgres_onboarding_test.go": "2dd008004e541ff7703281e8bea2c8107fda2543c85d7d3ffda0038369ca61e3", + "services/accounts/code/pkg/infra/postgres_org.go": "dfba986bac1f9fe1140422c17248637fe41d7e35730e2a40fe27e1fbba9fccef", + "services/accounts/code/pkg/infra/postgres_org_settings.go": "adc756bff3bd054bc91c2b6072b0776ca7c3a7a32c1e6ffb2b8fd23ecb53d10f", + "services/accounts/code/pkg/infra/postgres_permissions.go": "a60f465b9e3ede5df97becaeb0b7e1b69ef6a6f4cfce403c38cbcbee6858ec6f", + "services/accounts/code/pkg/infra/postgres_platform_admin.go": "97dbc9a07062d6957eb56a0893a5b0f7b8e9e7b456a5e6b66dbe23595c445352", + "services/accounts/code/pkg/infra/postgres_principals.go": "232c8783a6385358861edd07dd42008a52f2c1efea594fd275b365c61961879c", + "services/accounts/code/pkg/infra/postgres_principals_test.go": "6f6dc619e60f1e56b807311e843120830ce1247104283cc23f5e3caa841f3568", + "services/accounts/code/pkg/infra/postgres_retention.go": "43242d1a27b136c4d8ca299cecf3f526186d8c9f2ff9c932636307e84dd69226", + "services/accounts/code/pkg/infra/postgres_sessions.go": "d5a552584ba6787af1bed61d471d86d8fab209b4b8b4d76c7fd9ced58f511a98", + "services/accounts/code/pkg/infra/postgres_sso.go": "77cc105773442c40cfc7141f03eab8fd9a7a7c29ed6a5280abdf55e7943ff103", + "services/accounts/code/pkg/infra/postgres_team.go": "95daebb915bbbacbfd28abc9ef7b3d8d59ad81cdfbae20e0f36f7dc09a0cf534", + "services/accounts/code/pkg/infra/postgres_user_settings.go": "d9850a94523d9df5d43197db5979e7d909c688a0c6dcc853365bdadb1fc70f15", + "services/accounts/code/pkg/infra/postgres_users.go": "79a2623dd72bc8c2a7277b51f0e521b497f671df2973f219341dd45c700380b0", + "services/accounts/code/pkg/infra/postgres_webhooks.go": "a676e5056dc7eb222b31d9714bcd87125ada6038fecf4231eb1b428b274d753d", + "services/accounts/code/pkg/infra/postgres_webhooks_test.go": "2c3b32e6146f2cbc02601abbccf660da0713c6e79b185d112f8d906de5fa90df", + "services/accounts/code/pkg/infra/redis.go": "6cdd61b24bf4669d5bc311d22ebdc9fb9b6a4d6e2cb2ec4156d2999b04a7840f", + "services/accounts/code/pkg/infra/scoped.go": "3ed119bc471211fddf0035c94e999e1555ca043ea23ea21feaafe106aacb194f", + "services/accounts/code/pkg/infra/tenant_tx.go": "a2a67fab28838021a36b3d3015d10019c7c5916505ac7b7eea6b4eddc3f3f596", + "services/accounts/code/pkg/infra/tenant_tx_test.go": "cacc31b51149925a84bf118c5989ac895fbb904ae48524327bb904f252458539", + "services/accounts/code/pkg/infra/vault.go": "f2560f129906dfb13ee9333edeb57de7991a89000101d9dc1ffaf73383a7d03b", + "services/accounts/code/pkg/infra/zz_rls_test_guard_test.go": "662e363d03d176a41318bb9283609f353bb76fa240039b965bea7b7104dddaa1", + "services/accounts/code/pkg/moduleinfo/aggregator.go": "b9b401f2418c88eab6313424435e2f51b5295f772641c0e656a24d6dd3ab59b0", + "services/accounts/code/pkg/moduleinfo/aggregator_test.go": "e259707187961fed8976f13e315a61d17fce6dc3254c92874cde4b66bdc65c11", + "services/accounts/code/pkg/permissionsplugin/plugin.go": "ec84cc1a78c6f04e9c2fc10fb60897a3f2e88ed207795071de61eeb3f0e416cd", + "services/accounts/code/plugins/plugins.yaml": "3dfe3d0457ade6f09e58286350cb65cf1f9dbc18daef8ce3e999412714221a86", + "services/accounts/code/plugins/registry_gen.go": "86ed97ff02cb39100bcab9e3bc7c0a11ea57d0d9a94d45c254901e71b07ae6db", + "services/accounts/code/work.go": "15d1ba4e18724cdf8f3d953a12a2f23dc8ede784ee0078763585bca0b5f68a04", + "services/accounts/kreya/customers.krproj": "712a153d7e7051a9d3685c1e4856351af1c174e697911e48bbca16d3d7a138d5", + "services/accounts/kreya/customers/BackendService/CreateOrganization-request.json": "8d27b1aa4b83861a4e58a9af78178daf429539dbd5060f227746c25467458a8f", + "services/accounts/kreya/customers/BackendService/CreateOrganization.krop": "36fa827cb61dbcd47e4e7c3dd2c227687a3480ac1e5d92c353cb6f7d896c5d0c", + "services/accounts/kreya/customers/BackendService/Login-request.json": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "services/accounts/kreya/customers/BackendService/Login.krop": "da9c0cc69532aff25bf2986498631272424597566f282727ca28b8e5a6fb2aba", + "services/accounts/kreya/customers/BackendService/Register-request.json": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "services/accounts/kreya/customers/BackendService/Register.krop": "e1afac1b47e5d862cd902ec81f92ed1273d1072102030b36bddb4b5735ff17a0", + "services/accounts/kreya/customers/BackendService/Version-request.json": "44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a", + "services/accounts/kreya/customers/BackendService/Version.krop": "6ec1e065c140f00168d080e597fc4f34b4fe297826199035f67954b09d30940a", + "services/accounts/kreya/directory.krpref": "c63b7bcfa98039211cd7c429684c666bcb017c55aa5c2041a3a4192abf50d443", + "services/accounts/kreya/grpc/reflection/v1/ServerReflection/ServerReflectionInfo-request-0.json": "206393591a3c283e137f17cf4ff18fa2d1e80a680d3ee65751ccabc9f89afa28", + "services/accounts/kreya/grpc/reflection/v1/ServerReflection/ServerReflectionInfo.krop": "8f022ffb673c00cd228857333f6464adb6c0a43b91307966ab6eb466caab467f", + "services/accounts/openapi/api.swagger.json": "3aa10c2646308b067738dbf59b31086308348dc673f3c8b02144ccc0a9ee8993", + "services/accounts/proto/api.proto": "686ddd9be8d3cbb21518617ef09a0641f7bd40e37b14f24b3457a0d69d487554", + "services/accounts/proto/buf.gen.yaml": "0459065a39efac333db966846e150c8ac5562a6c00fb8a5f29cf4fe0b5bdfbe2", + "services/accounts/proto/buf.lock": "25d8e6b948b86b3b1f221cce188a474e163e29582fed26a50fe7c57a9b6a617a", + "services/accounts/proto/buf.yaml": "32fa9f85ab452ac2fd831f36258d8bc01bab740c5d2f48931a3d145f17c252b4", + "services/accounts/service.codefly.yaml": "3df1824e227d7ca6301e127fbf9a9cb1841482e2ace41957a7c3c0631d601dc4", "services/auth-sidecar/builder/Dockerfile": "4fab07983bf9b072f9655b5a493d9c38bb3f866ca9832045f7fe3a0ec411883c", "services/auth-sidecar/builder/dockerignore": "4b9b48f9f70aa850b3508754c0564e9155c4039206601eaa2952f58067757dfb", "services/auth-sidecar/code/envoy.go": "4bdd9e3d8fced992fadb3c1b3c50ee9759dee777f6c535d2bbc552a9a570c514", - "services/auth-sidecar/code/envoy_test.go": "30bbd85f7e68ab0e70812035d7476f0ac3bd2fe124663173598a59b3298693ca", + "services/auth-sidecar/code/envoy_test.go": "4b43aff3f98c2ecf3b17bd836bd4e14796afd7e32847f05d5edb876f9cdf1c82", "services/auth-sidecar/code/external/users/backend/README": "f4e492b86f47ef1b263b02b52c11bb3cac9315851ef6f32ddc7ac5dcf83436cb", "services/auth-sidecar/code/external/users/backend/users_backend_grpc.pb.go": "6a61a70061b0eeff46e1f7b2c09255ec91b0260f9213ecf0f0e024ddce0314a2", "services/auth-sidecar/code/gateway.go": "a35edf2bb5eb1daa275ce75d2eb87fc167a114b51c61fc7cd224f7bd43276e44", - "services/auth-sidecar/code/gateway_integration_test.go": "1ab2a4feea59b787f5ecd7925c0d0876538d1acd2390d10c14d9b1622508ae55", - "services/auth-sidecar/code/gateway_test.go": "a50d10e9044da8292dc6c0084cbd730b06b4418273776bc34c5a4a5b0becaaa6", - "services/auth-sidecar/code/go.mod": "ed5a23ab97b567af05a51d9463e7d194e9c68af38e0d05e9a236c0c43e65a1e7", - "services/auth-sidecar/code/go.sum": "307f3c3b4be59b9712e9f7c7cd27fbaa0c90f4ade6fd54e968a5f9f327a34010", - "services/auth-sidecar/code/main.go": "28004f885bfce692c8744a18fa7ab7a86553db27a3793a6dca159debd9d247b3", + "services/auth-sidecar/code/gateway_integration_test.go": "49d7d5b848ed9b9b216665d98aaa3cbdda3955976dc229ce91016c8f4b1b67af", + "services/auth-sidecar/code/gateway_test.go": "bd70116e5ab9b4e83899b0a0f8e8b3ae5ce71e080e079dc76717bbc4ef4c682b", + "services/auth-sidecar/code/go.mod": "2e16de07632ce95bbf7176839a84fc10ecaf25de4b483ad1c16e3f6f63831b9f", + "services/auth-sidecar/code/go.sum": "2c8f5ba09e5342ccf66f5570038c76cf9045b76efcee1a64505dc3466e468c94", + "services/auth-sidecar/code/main.go": "3e78de99580ef5de0c27e90f6dae7083a56a637f4712684a845df0b3db208d64", "services/auth-sidecar/code/pkg/gen/sidecar.pb.go": "223e1ee23a3a8cf8991d093eb098890e6cf29cf10940dbf9b9597685bf8212a2", "services/auth-sidecar/code/pkg/gen/sidecar.pb.gw.go": "e9a5e9b0269d9f16afc3391c23ded843413f09ac4ec1eebf5513a6090a733da8", "services/auth-sidecar/code/pkg/gen/sidecar_grpc.pb.go": "43b40a29be81a087c75ce4fc7ce3d57773bf5444d9d41360120c60c809120c28", "services/auth-sidecar/code/ratelimit.go": "f426943be529a312a15827e5055e28e36ca648237816db37007742ea8b4e4819", - "services/auth-sidecar/code/routing.go": "3e3cc6db1642041d14f75143e5ac0efb2b754dfbaafc475106b63cc74c9da218", - "services/auth-sidecar/code/routing_connect.go": "8dc38e672004f6b24a903b16b61f9cf341da0bcc269ca341c465862550d0e1a3", - "services/auth-sidecar/code/sidecar.go": "95904365a2ef95d758dff4cb63ee77831315c76da7e42cb5c10e01f58ba91645", - "services/auth-sidecar/code/sidecar_integration_test.go": "d575c9c7d2be8f10d05706f7b3a7b4c4a4183fc1f567be7f99c693546d387ac6", + "services/auth-sidecar/code/routing.go": "244fc361065549568321a393de24de1468fa49221adcaeb30ca52f51a7f6935e", + "services/auth-sidecar/code/routing_connect.go": "69f38e8118d56c49b0f1fd9b60bfe91980ee7f12fd2e274be335c90b50f6dd33", + "services/auth-sidecar/code/sidecar.go": "2ae6e53d2d25543683376fc41be51e76adcfa29391448520d7636f4a181055eb", + "services/auth-sidecar/code/sidecar_integration_test.go": "15e664937d1cf50772d59a0c4fae3d47595f8ba588544a15a25d1505e712ad7f", "services/auth-sidecar/code/sidecar_unit_test.go": "6d98af93d89cfc110b8f37ff91fb7e7d1cc3f64aaf2289b659b3adba1c1c6d2f", "services/auth-sidecar/proto/buf.gen.yaml": "1a0e1855f1061be1ec5af3fe06b395ada8b3ed94bac75b6ca195eae3a1b7a8a1", "services/auth-sidecar/proto/buf.lock": "5dda02b7e288386cf747d0a117870423e9522e6016e298069128f72643056a24", @@ -307,7 +307,7 @@ "services/auth-sidecar/routing/rest/saas-starter/api/users.rest.codefly.yaml": "374347b106ba3a4a63b18dec69150f5c64cdb1748820666a2e706e905ee42d4a", "services/auth-sidecar/routing/rest/saas-starter/api/version.rest.codefly.yaml": "7a4f18874a9392b4d39ddc7b4b2f3ce566c2bb778163fa5e18f8fccc9c24c371", "services/auth-sidecar/routing/rest/saas-starter/api/webhooks.rest.codefly.yaml": "9607e25324404bd3a682bc4767608939da6516073700cc1a5b65f0297f640e88", - "services/auth-sidecar/service.codefly.yaml": "a126a67aa0c6f3fa87f707559ea1ed9b17eeda858552ffa3ca61c5259921d170", + "services/auth-sidecar/service.codefly.yaml": "20647083a684f331307cc3f3314c5f96b284109474b7bf5e55dbbe5fa4d60108", "services/cache/README.md": "9ebd83f74b81616ede663f2e73bba53d85b736136749a8d9427a12b2a3c7fd98", "services/cache/configurations/local/README.md": "425504c16430bcac6648b2b07ab1afff9c6a7914d601517aa989722f5be01a8c", "services/cache/service.codefly.yaml": "9bba712310133733709951cad9c06ff2d11fab156deb530d45d008f1b3aa61f6", @@ -324,7 +324,7 @@ "services/frontend/code/package.json": "ce1608812f46351ddbeb67716811f19052e4acc9f18f764b46c43dd3a46d59fd", "services/frontend/code/playwright.config.ts": "b77b613da2a0e60ae1c334b11004ad9ca9e9379ae115072684145c22a9886a8d", "services/frontend/code/postcss.config.mjs": "ab4805b77935e8d8a2036e5de3d3a15d6e21229e8e3a1a4aea10b09327709460", - "services/frontend/code/scripts/generate-plugin-registry.mjs": "3b5af6a71397b166bb19b68a8638e2eeedbac671aa4ce05e271166e2874edf02", + "services/frontend/code/scripts/generate-plugin-registry.mjs": "86b596ccbf70a976295685f547b288cf7b9b9368a3826a479798d8c735885eee", "services/frontend/code/src/app/(auth)/auth/callback/page.tsx": "ff8d1a8901bf782b45f3c2ec555f83e66b2d6e0a7aacf7866f1a6da62f3d2c03", "services/frontend/code/src/app/(auth)/auth/login/page.tsx": "493dbef443953cbc6cb948a34e33549cdf45656349c68c0bb95d4deec1ba04f2", "services/frontend/code/src/app/(auth)/auth/magic-link/page.tsx": "bcbe67bcc8a6704c8948395d64674d2ecfaa07b0278bb73de91e727287e6b32d", @@ -342,6 +342,7 @@ "services/frontend/code/src/app/(dashboard)/settings/mfa/page.tsx": "f98b845ce1d0980d8ca7ea72b2f10cd89aa86c370153bfc359e1922acaaffe56", "services/frontend/code/src/app/(dashboard)/settings/notifications/page.tsx": "a3bc3b061751ca6c4f1036a523e02a513567877bda18f5ab9319466660f9a8d6", "services/frontend/code/src/app/(dashboard)/settings/page.tsx": "0b8ef1ab9f2a3aa07208170f29bd1db634f11333125cd0c2f3b0205a9d3b3c21", + "services/frontend/code/src/app/admin/[...slug]/page.tsx": "b6af20853be36c2f3ad7a8098374089aee5751b8ea3168a8aa86bf5d2e066a1c", "services/frontend/code/src/app/admin/api-keys/page.tsx": "7dc535b6f76d23714e5e7e6dfd6c5432ff573e0e01d17e258925e123358d83cd", "services/frontend/code/src/app/admin/audit-export/page.tsx": "7d5575400cdd2fe68d1e608dc3dab3ebbc3f7c8bc39681bcf6ab8d5e29498311", "services/frontend/code/src/app/admin/audit-log/page.tsx": "70124d6d91979f860e9cd58e6f17078351441e7c16300804492324f14229a127", @@ -438,7 +439,7 @@ "services/frontend/code/src/features/auth/model/types.ts": "fac8a151486d1e0eafe353c5017daf1678901251c3db474b846be316a746299e", "services/frontend/code/src/features/auth/service/mutations.ts": "4172407cb01284c1decff9af61fb65481c5b228c5cde57456579810dcd5f4c8a", "services/frontend/code/src/features/auth/ui/callback-page.tsx": "a31c4e1916c28f39f7eb68e25f7e2e1a45ae25fe09c09ed0eb62f4ae55b29d05", - "services/frontend/code/src/features/auth/ui/login-page.tsx": "307749e21afa7fbce2c31735e09ca79ffc94d7afe74f4383907a83d6d1cd9707", + "services/frontend/code/src/features/auth/ui/login-page.tsx": "72f8ec16cc7eca4d21ca7399d3a07dd82ad355ea0cfcff9bb03e8b5c2ee6f56c", "services/frontend/code/src/features/billing/core/plans.test.ts": "2efe1590e60ef60cfd43693135541bc3154fb8ed10d5e7750025101c0d6665c6", "services/frontend/code/src/features/billing/core/plans.ts": "9fe717123aafe5a3f5a45f1558dafc23f1d489bc0f9165c032df0772e832ef9d", "services/frontend/code/src/features/billing/ui/billing-admin-page.tsx": "614bb50c8cb377ccfb8f9b8cb47ca3877e1e562c0921e997aef19bc4a293e6c0", @@ -477,7 +478,7 @@ "services/frontend/code/src/features/notifications/service/queries.ts": "2d7ef32afcecf1b378ce35a37ece2d0f5f83b338ab01471582b50ae72eed613c", "services/frontend/code/src/features/notifications/ui/notification-bell.tsx": "33022214217e66a5b01c452cd5686d89582550588aeb7e5abbe6bd6a62a527a1", "services/frontend/code/src/features/notifications/ui/notification-panel.tsx": "718545c4fa39ac4bc4a02226266202608a7e2e708c21a304a9c29b002e6b0204", - "services/frontend/code/src/features/notifications/ui/notification-settings.tsx": "65bde21bfbc25cb46fa0cbf8425e5a30e390ad5f06e7987b87bdf5385b82dbec", + "services/frontend/code/src/features/notifications/ui/notification-settings.tsx": "80942aa55ab7f7137546f146a970055fcc04b003725f4dc753aa54f8a5de0be2", "services/frontend/code/src/features/notifications/ui/notifications-page.tsx": "618de05b60e4b228a056d06338ed62586fb945c014ce6c462a5b14911dca5de7", "services/frontend/code/src/features/onboarding/index.ts": "011e45920efb0d28fc850fe6a3be2ca70e44cf33371f7ea5120bb832b09b568a", "services/frontend/code/src/features/onboarding/model/transforms.ts": "3a67147ba22e36a1e6791111a7f732049d22032d17f615d9e37e02e95ae10ce8", @@ -502,12 +503,12 @@ "services/frontend/code/src/features/organizations/ui/organizations-table.tsx": "e80e982150ca6d064a81e5c6d248a881bd5e59cdb08f25f66dadb45380803ffa", "services/frontend/code/src/features/platform/index.ts": "a4452294bfafb061b6f3a984d573db065b5fe4a99007ce90a754df4c33647cd2", "services/frontend/code/src/features/platform/model/types.ts": "6a8c53b1983ca5c19c8e9c98c16a9cbec1d2b21a3731e8de5374f80fd1fbacfb", - "services/frontend/code/src/features/platform/service/mutations.ts": "29eb4f70b68fe4adbaaac32392586b84cd8a007b926a7e7364aa2c5e90c050e9", + "services/frontend/code/src/features/platform/service/mutations.ts": "aaa073840481fa80458f31a696dfb9f4d5a4a8925111752516f7fb888b2dfe00", "services/frontend/code/src/features/platform/service/queries.ts": "a5dc9001ac78bad4038049e676e583dc2712546924182b11f3eb98dce0c9c76d", "services/frontend/code/src/features/platform/ui/admins-page.tsx": "0e66a8f7c7928529aeaa074e071a701813384b18c3c33f23897ffc857ceb8cc0", "services/frontend/code/src/features/platform/ui/entitlements-page.tsx": "dddfaed913b34fead6506dd2b59ed3a33200bff288a53e08b15ba0e843134a12", "services/frontend/code/src/features/platform/ui/flags-page.tsx": "9f64b53684495dd9f1558749bea665c5b642e94fe20d1a1e02792adace93bf43", - "services/frontend/code/src/features/platform/ui/sessions-page.tsx": "cdf75212d8468121e50ae7b746a69b1b1c50de04183e0241bafbfc095261ba17", + "services/frontend/code/src/features/platform/ui/sessions-page.tsx": "d104d3fc4a7c018cbbcf2eb6021c6571e14150c5c96c16784ad7e664e9a38275", "services/frontend/code/src/features/roles/index.ts": "6a207bad8b9715a385a1220cc1f60f1636c8fa820aa1d59d09b974f0e2808b7e", "services/frontend/code/src/features/roles/model/__tests__/schemas.test.ts": "bacd194a5f183e6bc849575587a6adc0742057c5ac7a6b5118ad32131009ad77", "services/frontend/code/src/features/roles/model/__tests__/transforms.test.ts": "f271d81e5af20ba8283bf11b449c41297b2bb24427428d209f2ba072be8254fd", @@ -529,27 +530,29 @@ "services/frontend/code/src/features/teams/model/schemas.ts": "100848f946c18810c3c1a1f0a049c2a294e164bc4346cdacac7fb18f9786c15d", "services/frontend/code/src/features/teams/model/transforms.ts": "7ad48815a1c5ec1c77512ba3d8402e586c52f49a818a51e9b7ec7b46c07bda12", "services/frontend/code/src/features/teams/model/types.ts": "2585319d4d129dabfc24972f054067c6b08cbd1ef79a7f039c4bc357d17e3133", - "services/frontend/code/src/features/teams/service/mutations.ts": "1e5c7d9bbd0cde1382ea7ffbe280834a004566e0d8e110b865174527bb83639b", + "services/frontend/code/src/features/teams/service/mutations.ts": "56e301393de89e49618957f5ebd8fd8be2f869bbe6867dc33845cfd4afb21f46", "services/frontend/code/src/features/teams/service/queries.ts": "d7fe54e274a33a16648219497568e3862d14f4623d447f641804175151456056", - "services/frontend/code/src/features/teams/ui/team-form.tsx": "056eb926211cc51e05d3c86ad58677443286ec9068da6dfc95c90f86fd58fc68", + "services/frontend/code/src/features/teams/ui/team-form.tsx": "c0ad7c33a23b82496ad8bc9d73dd3325a3de29b429cb0611d0a31ef7c01f6df8", "services/frontend/code/src/features/teams/ui/team-members-panel.tsx": "1b0d3318d9680f3202fc41384f6658a937db8b467dca9e41eb7f16f96a68d2e3", - "services/frontend/code/src/features/teams/ui/teams-page.tsx": "d6d7aa8138c31c419ff9cb5a235a3d53a4aa06594e183da7a938e2f7002de2cc", - "services/frontend/code/src/features/teams/ui/teams-table.tsx": "ec50f0a83d0a9fb5a06632eaf19ed00783134a8156de3b30005c9e5df9e833c8", - "services/frontend/code/src/features/user-settings/service/mutations.ts": "7fba90a32c62d2064b838873849cd0e20e53deec8d64fe2f6aa40489c13a3374", + "services/frontend/code/src/features/teams/ui/teams-page.tsx": "09566f91152a95865907613e9b13810ef280f75446e6240dec977cfc334d9940", + "services/frontend/code/src/features/teams/ui/teams-table.tsx": "3dd4add0ee771f24aebd3d63aa9f0eb7025ca09718aefa1ec8e17b768a85070b", + "services/frontend/code/src/features/user-settings/service/mutations.ts": "d13eee54c5398540d28d8edc9dfc52b243ebd152d6666a5043003979a9647282", "services/frontend/code/src/features/user-settings/service/queries.ts": "17ad3fd019dc130e0e1df8dc7d6dc44849446949364ed5dd393667f3f71ec87f", "services/frontend/code/src/features/user-settings/ui/general-settings-page.tsx": "437f66f33b3525aee300f11c52f79afdc073301fe1d965ca73f008876a155e02", "services/frontend/code/src/features/user-settings/ui/theme-sync.tsx": "5014d32dffab6256526cd757a331a20360e4b206a2273bd8dfa6d5b8ecae337e", "services/frontend/code/src/features/users/index.ts": "f978a95999cf5e85a07ff439939f46bea007eec14f9b466e3ef440edeb3b8631", "services/frontend/code/src/features/users/model/__tests__/schemas.test.ts": "fb98264c24040ce002807b0bc491967e466ee4d628042eefa46c10d38ebc8f40", "services/frontend/code/src/features/users/model/__tests__/transforms.test.ts": "d03f942746b775995faf5ce3387bcf6f8202c338fa2842b7bb1f25753c4365d7", - "services/frontend/code/src/features/users/model/schemas.ts": "af5784f9ff78d0ce73949d1b265cd9e6adfbf18e56e97b9a039390814e571561", + "services/frontend/code/src/features/users/model/schemas.ts": "aeb1fe36cbea46c3e9ce47bf7824880eb603abae0f8181d6f453b9f256282819", "services/frontend/code/src/features/users/model/transforms.ts": "00a345b5664572c7593aecb936a17b97538d996c8e0fc51de1dd684bd7bf6b62", "services/frontend/code/src/features/users/model/types.ts": "275a3a26a294dfe60abc12b50ac7a42451c4cf39da2289f3da87dbe9ec0649fd", - "services/frontend/code/src/features/users/service/mutations.ts": "f349705c93ff95591eaa0a213dc962f4348b9a9479552499765c88726586aaef", + "services/frontend/code/src/features/users/service/mutations.ts": "d1495f810f0936efe0469bb8aca6e7aa8a7ed8be69cf32f6cc4badd8d673a3d9", "services/frontend/code/src/features/users/service/queries.ts": "6b5a5cdb83ddfc1e3d70a32195bf6275ef3299cb6d578d939bf28eee78d38b7b", + "services/frontend/code/src/features/users/ui/delete-user-dialog.tsx": "57f37926227d87b23d73218ae335d773d1d12522d6af8c4187bc6be396eb3089", + "services/frontend/code/src/features/users/ui/edit-user-form.tsx": "c74868089dda16314a5342936b203303e22dc863e2b877d9c1e11ad03658cbb8", "services/frontend/code/src/features/users/ui/suspend-form.tsx": "6b75310a176f4b70a6beb178a91d2a205678dd05e88c53156b4562e817fde15e", - "services/frontend/code/src/features/users/ui/users-page.tsx": "b2c08e5ac94b8b3cdb4767e96f9009459ce527c31497791e900d35fd768151c6", - "services/frontend/code/src/features/users/ui/users-table.tsx": "f3929569adeb954da51af51ec05c11fdf50af9ad3da0381a7419044e0726d1b9", + "services/frontend/code/src/features/users/ui/users-page.tsx": "aaa42325476144e79a388e47d9e8d0b86e6aed6f7c4c97386f16fccfbb587da3", + "services/frontend/code/src/features/users/ui/users-table.tsx": "4428954b9f0a3c66755a8f795c495853cbcadff7dddd345851c4fd32a080b8cd", "services/frontend/code/src/features/webhooks/index.ts": "42d1d9dbf57462e662d9de3f2b1b0d18a3a68e7bf732b683774be68b2490adfa", "services/frontend/code/src/features/webhooks/model/schemas.ts": "079b779bcd9bb88bc5668e3dc4590f9721cae5667f9040beafd098f72afeea83", "services/frontend/code/src/features/webhooks/model/transforms.ts": "e0e9099c4fecbc5ef5fa00c8205ea9b6af708df0047d3f07effa8dba48147a0a", @@ -563,12 +566,12 @@ "services/frontend/code/src/gen/buf/validate/validate_pb.ts": "6f9c6992335cea666e6cc369916afd0e3d0948315fae11ef58dd39c180e615fa", "services/frontend/code/src/gen/google/api/annotations_pb.ts": "ba54588fe97d87e3aec2a52ca22281f012dd2b068d1375c786acec4655a06dc4", "services/frontend/code/src/gen/google/api/http_pb.ts": "822b6231571f7e2a59a42848f154ebfd894cf124358914f4ffe9b588c455592c", - "services/frontend/code/src/gen/saas-starter_api_grpc_pb.ts": "26386d347517ebad7819d33259949ac7e413df544313f822e998a214dcb4a6c5", + "services/frontend/code/src/gen/saas-starter_api_grpc_pb.ts": "3f21649e6aea905a164712efb42f84323ea6d6433d9df98eb121a8801a5f7213", "services/frontend/code/src/hooks/use-mobile.ts": "ad0936f84f1df79d3697bfbff9c18f8ad58431c1cbaf2359c6a853b0fcc9f28b", "services/frontend/code/src/lib/__tests__/auth.test.ts": "d9008ee14355536c01228ed43149b3f7fbacdc147c421b276d92fe7278209e75", "services/frontend/code/src/lib/__tests__/utils.test.ts": "abd5b02593f8d649028018babb3bc8db2ddc459a9b8fcf2d1d0956469e8d3034", "services/frontend/code/src/lib/admin-config.ts": "e666f3e6af59dc2a115046837af684cbe9e4416078a990659ed77c273caff42e", - "services/frontend/code/src/lib/admin-core.ts": "a24ce86da1a0bf4a8c1252f124e8121f0828af892b550e52947cc2230c088c20", + "services/frontend/code/src/lib/admin-core.ts": "a6da7128678f0b5ff32591e8f7b1cdfd095510f9300c32030236475cfee0a5c2", "services/frontend/code/src/lib/auth.tsx": "74c7cc2c55c854a20b96b5aa4142d61d752d458883bd1cfa3c488e59d7670926", "services/frontend/code/src/lib/connect/rate-limit-tracker.ts": "95225eec58292135bfd588d0588a97402659950398362613d0932be0fc6e877d", "services/frontend/code/src/lib/connect/token-store.ts": "3d84658f7b38b00ecca2e5481cab16305dd0e0c81de8f9a2064aafd115e7833c", @@ -629,8 +632,8 @@ "services/frontend/code/tests/sdk-smoke.mjs": "5b7b35b0cf37e27caea3be4f9521fcb70cfd827c76198d06f20fb57ca8e838b1", "services/frontend/code/tsconfig.json": "84bc7afb83ea58e56a63754132b130f028e26a00d7eb47c9aa7fe002bbb2a659", "services/frontend/code/vitest.config.ts": "e053643075f3be434a9320f288a65d9458a35eb1f4d0e8705c08c9ac8d3a7c41", - "services/frontend/service.codefly.yaml": "602a20ce5f7c3a6cdcc4cbe3333ffe48447e96235655c5a5815dd012df63efc3", - "services/object-storage/service.codefly.yaml": "80eade252f8d97106510b9008d57ac990dba268c684b4ab0ef8a53c8901c5ed5", + "services/frontend/service.codefly.yaml": "f94fff07e64afafc0fae74fbb499c46e845364d1b2ab76ae3545698f5daf4338", + "services/object-storage/service.codefly.yaml": "5793f1dbeae80716ab5f1ffca5a5d4ec703b110d0ec3464c6cb343e3febc04fd", "services/store/GETTING_STARTED.md": "2161b63730b0bebc097c747fcb2b4018682d66ce6b34c43dd9db4585ddb5d1c5", "services/store/README.md": "31140bfda90838a6a9996bb396d1e0aa3ee8e7ff6c26153023da6dfaae32e524", "services/store/builder/Dockerfile": "5c6016c36ad4d24ce67142ef958eab43bcf7c58939e14b689082c0437979d55c", @@ -744,7 +747,7 @@ "services/store/old_migration/3_create_teams_table.up.sql": "8dfa5332db49a1385ad73150c6952f9d4aec728f289317946ac4da3970065a48", "services/store/service.codefly.yaml": "537c39c731d9023a3fdd6449c68fffb724332bf3f903212ed2b4f969d68975fc", "services/vault/configurations/local/vault.secret.env": "81f4aa569247292ec88ce61dfda9053b516bea3655f2a971e5cecb8a6b901105", - "services/vault/service.codefly.yaml": "3531b28475c5d8c08f2678d9c8afedd93b223c13d833505289f721dd94e1df7a", + "services/vault/service.codefly.yaml": "defa80daf85665cf661fd31248cc28ced49c9a285748e6ffeede17fb87cd83f3", "tools/base-integrity.mjs": "578908095c6d42816fff818c6459f27f0047faf86d45d157b8c454b60dfd6291" } }