mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	restructure command/api to use stable IDs (#2261)
This commit is contained in:
		
							parent
							
								
									08bd4b9bc5
								
							
						
					
					
						commit
						64fd1f9483
					
				@ -80,16 +80,21 @@ This will also affect the way you [reference users in policies](https://github.c
 | 
			
		||||
  - Having usernames in magic DNS is no longer possible.
 | 
			
		||||
- Remove versions older than 1.56 [#2149](https://github.com/juanfont/headscale/pull/2149)
 | 
			
		||||
  - Clean up old code required by old versions
 | 
			
		||||
- User gRPC/API [#2261](https://github.com/juanfont/headscale/pull/2261):
 | 
			
		||||
  - If you depend on a Headscale Web UI, you should wait with this update until the UI have been updated to match the new API.
 | 
			
		||||
  - `GET /api/v1/user/{name}` and `GetUser` have been removed in favour of `ListUsers` with and ID parameter
 | 
			
		||||
  - `RenameUser` and `DeleteUser` now requires and ID instead of a name.
 | 
			
		||||
 | 
			
		||||
### Changes
 | 
			
		||||
 | 
			
		||||
- Improved compatibilty of built-in DERP server with clients connecting over WebSocket.
 | 
			
		||||
- Improved compatibilty of built-in DERP server with clients connecting over WebSocket [#2132](https://github.com/juanfont/headscale/pull/2132)
 | 
			
		||||
- Allow nodes to use SSH agent forwarding [#2145](https://github.com/juanfont/headscale/pull/2145)
 | 
			
		||||
- Fixed processing of fields in post request in MoveNode rpc [#2179](https://github.com/juanfont/headscale/pull/2179)
 | 
			
		||||
- Added conversion of 'Hostname' to 'givenName' in a node with FQDN rules applied [#2198](https://github.com/juanfont/headscale/pull/2198)
 | 
			
		||||
- Fixed updating of hostname and givenName when it is updated in HostInfo [#2199](https://github.com/juanfont/headscale/pull/2199)
 | 
			
		||||
- Fixed missing `stable-debug` container tag [#2232](https://github.com/juanfont/headscale/pr/2232)
 | 
			
		||||
- Loosened up `server_url` and `base_domain` check. It was overly strict in some cases.
 | 
			
		||||
- Loosened up `server_url` and `base_domain` check. It was overly strict in some cases. [#2248](https://github.com/juanfont/headscale/pull/2248)
 | 
			
		||||
- CLI for managing users now accepts `--identifier` in addition to `--name`, usage of `--identifier` is recommended [#2261](https://github.com/juanfont/headscale/pull/2261)
 | 
			
		||||
 | 
			
		||||
## 0.23.0 (2024-09-18)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										10
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								Makefile
									
									
									
									
									
								
							@ -38,10 +38,16 @@ test_integration:
 | 
			
		||||
lint:
 | 
			
		||||
	golangci-lint run --fix --timeout 10m
 | 
			
		||||
 | 
			
		||||
fmt:
 | 
			
		||||
fmt: fmt-go fmt-prettier fmt-proto
 | 
			
		||||
 | 
			
		||||
fmt-prettier:
 | 
			
		||||
	prettier --write '**/**.{ts,js,md,yaml,yml,sass,css,scss,html}'
 | 
			
		||||
 | 
			
		||||
fmt-go:
 | 
			
		||||
	golines --max-len=88 --base-formatter=gofumpt -w $(GO_SOURCES)
 | 
			
		||||
	clang-format -style="{BasedOnStyle: Google, IndentWidth: 4, AlignConsecutiveDeclarations: true, AlignConsecutiveAssignments: true, ColumnLimit: 0}" -i $(PROTO_SOURCES)
 | 
			
		||||
 | 
			
		||||
fmt-proto:
 | 
			
		||||
	clang-format -i $(PROTO_SOURCES)
 | 
			
		||||
 | 
			
		||||
proto-lint:
 | 
			
		||||
	cd proto/ && go run github.com/bufbuild/buf/cmd/buf lint
 | 
			
		||||
 | 
			
		||||
@ -12,12 +12,43 @@ import (
 | 
			
		||||
	"google.golang.org/grpc/status"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func usernameAndIDFlag(cmd *cobra.Command) {
 | 
			
		||||
	cmd.Flags().Int64P("identifier", "i", -1, "User identifier (ID)")
 | 
			
		||||
	cmd.Flags().StringP("name", "n", "", "Username")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// usernameAndIDFromFlag returns the username and ID from the flags of the command.
 | 
			
		||||
// If both are empty, it will exit the program with an error.
 | 
			
		||||
func usernameAndIDFromFlag(cmd *cobra.Command) (uint64, string) {
 | 
			
		||||
	username, _ := cmd.Flags().GetString("name")
 | 
			
		||||
	identifier, _ := cmd.Flags().GetInt64("identifier")
 | 
			
		||||
	if username == "" && identifier < 0 {
 | 
			
		||||
		err := errors.New("--name or --identifier flag is required")
 | 
			
		||||
		ErrorOutput(
 | 
			
		||||
			err,
 | 
			
		||||
			fmt.Sprintf(
 | 
			
		||||
				"Cannot rename user: %s",
 | 
			
		||||
				status.Convert(err).Message(),
 | 
			
		||||
			),
 | 
			
		||||
			"",
 | 
			
		||||
		)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return uint64(identifier), username
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	rootCmd.AddCommand(userCmd)
 | 
			
		||||
	userCmd.AddCommand(createUserCmd)
 | 
			
		||||
	userCmd.AddCommand(listUsersCmd)
 | 
			
		||||
	usernameAndIDFlag(listUsersCmd)
 | 
			
		||||
	listUsersCmd.Flags().StringP("email", "e", "", "Email")
 | 
			
		||||
	userCmd.AddCommand(destroyUserCmd)
 | 
			
		||||
	usernameAndIDFlag(destroyUserCmd)
 | 
			
		||||
	userCmd.AddCommand(renameUserCmd)
 | 
			
		||||
	usernameAndIDFlag(renameUserCmd)
 | 
			
		||||
	renameUserCmd.Flags().StringP("new-name", "r", "", "New username")
 | 
			
		||||
	renameNodeCmd.MarkFlagRequired("new-name")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var errMissingParameter = errors.New("missing parameters")
 | 
			
		||||
@ -70,30 +101,23 @@ var createUserCmd = &cobra.Command{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var destroyUserCmd = &cobra.Command{
 | 
			
		||||
	Use:     "destroy NAME",
 | 
			
		||||
	Use:     "destroy --identifier ID or --name NAME",
 | 
			
		||||
	Short:   "Destroys a user",
 | 
			
		||||
	Aliases: []string{"delete"},
 | 
			
		||||
	Args: func(cmd *cobra.Command, args []string) error {
 | 
			
		||||
		if len(args) < 1 {
 | 
			
		||||
			return errMissingParameter
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return nil
 | 
			
		||||
	},
 | 
			
		||||
	Run: func(cmd *cobra.Command, args []string) {
 | 
			
		||||
		output, _ := cmd.Flags().GetString("output")
 | 
			
		||||
 | 
			
		||||
		userName := args[0]
 | 
			
		||||
 | 
			
		||||
		request := &v1.GetUserRequest{
 | 
			
		||||
			Name: userName,
 | 
			
		||||
		id, username := usernameAndIDFromFlag(cmd)
 | 
			
		||||
		request := &v1.ListUsersRequest{
 | 
			
		||||
			Name: username,
 | 
			
		||||
			Id:   id,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		ctx, client, conn, cancel := newHeadscaleCLIWithConfig()
 | 
			
		||||
		defer cancel()
 | 
			
		||||
		defer conn.Close()
 | 
			
		||||
 | 
			
		||||
		_, err := client.GetUser(ctx, request)
 | 
			
		||||
		users, err := client.ListUsers(ctx, request)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ErrorOutput(
 | 
			
		||||
				err,
 | 
			
		||||
@ -102,13 +126,24 @@ var destroyUserCmd = &cobra.Command{
 | 
			
		||||
			)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if len(users.GetUsers()) != 1 {
 | 
			
		||||
			err := fmt.Errorf("Unable to determine user to delete, query returned multiple users, use ID")
 | 
			
		||||
			ErrorOutput(
 | 
			
		||||
				err,
 | 
			
		||||
				fmt.Sprintf("Error: %s", status.Convert(err).Message()),
 | 
			
		||||
				output,
 | 
			
		||||
			)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		user := users.GetUsers()[0]
 | 
			
		||||
 | 
			
		||||
		confirm := false
 | 
			
		||||
		force, _ := cmd.Flags().GetBool("force")
 | 
			
		||||
		if !force {
 | 
			
		||||
			prompt := &survey.Confirm{
 | 
			
		||||
				Message: fmt.Sprintf(
 | 
			
		||||
					"Do you want to remove the user '%s' and any associated preauthkeys?",
 | 
			
		||||
					userName,
 | 
			
		||||
					"Do you want to remove the user %q (%d) and any associated preauthkeys?",
 | 
			
		||||
					user.GetName(), user.GetId(),
 | 
			
		||||
				),
 | 
			
		||||
			}
 | 
			
		||||
			err := survey.AskOne(prompt, &confirm)
 | 
			
		||||
@ -118,7 +153,7 @@ var destroyUserCmd = &cobra.Command{
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if confirm || force {
 | 
			
		||||
			request := &v1.DeleteUserRequest{Name: userName}
 | 
			
		||||
			request := &v1.DeleteUserRequest{Id: user.GetId()}
 | 
			
		||||
 | 
			
		||||
			response, err := client.DeleteUser(ctx, request)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
@ -151,6 +186,23 @@ var listUsersCmd = &cobra.Command{
 | 
			
		||||
 | 
			
		||||
		request := &v1.ListUsersRequest{}
 | 
			
		||||
 | 
			
		||||
		id, _ := cmd.Flags().GetInt64("identifier")
 | 
			
		||||
		username, _ := cmd.Flags().GetString("name")
 | 
			
		||||
		email, _ := cmd.Flags().GetString("email")
 | 
			
		||||
 | 
			
		||||
		// filter by one param at most
 | 
			
		||||
		switch {
 | 
			
		||||
		case id > 0:
 | 
			
		||||
			request.Id = uint64(id)
 | 
			
		||||
			break
 | 
			
		||||
		case username != "":
 | 
			
		||||
			request.Name = username
 | 
			
		||||
			break
 | 
			
		||||
		case email != "":
 | 
			
		||||
			request.Email = email
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		response, err := client.ListUsers(ctx, request)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ErrorOutput(
 | 
			
		||||
@ -169,7 +221,7 @@ var listUsersCmd = &cobra.Command{
 | 
			
		||||
			tableData = append(
 | 
			
		||||
				tableData,
 | 
			
		||||
				[]string{
 | 
			
		||||
					user.GetId(),
 | 
			
		||||
					fmt.Sprintf("%d", user.GetId()),
 | 
			
		||||
					user.GetDisplayName(),
 | 
			
		||||
					user.GetName(),
 | 
			
		||||
					user.GetEmail(),
 | 
			
		||||
@ -189,17 +241,9 @@ var listUsersCmd = &cobra.Command{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var renameUserCmd = &cobra.Command{
 | 
			
		||||
	Use:     "rename OLD_NAME NEW_NAME",
 | 
			
		||||
	Use:     "rename",
 | 
			
		||||
	Short:   "Renames a user",
 | 
			
		||||
	Aliases: []string{"mv"},
 | 
			
		||||
	Args: func(cmd *cobra.Command, args []string) error {
 | 
			
		||||
		expectedArguments := 2
 | 
			
		||||
		if len(args) < expectedArguments {
 | 
			
		||||
			return errMissingParameter
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return nil
 | 
			
		||||
	},
 | 
			
		||||
	Run: func(cmd *cobra.Command, args []string) {
 | 
			
		||||
		output, _ := cmd.Flags().GetString("output")
 | 
			
		||||
 | 
			
		||||
@ -207,12 +251,38 @@ var renameUserCmd = &cobra.Command{
 | 
			
		||||
		defer cancel()
 | 
			
		||||
		defer conn.Close()
 | 
			
		||||
 | 
			
		||||
		request := &v1.RenameUserRequest{
 | 
			
		||||
			OldName: args[0],
 | 
			
		||||
			NewName: args[1],
 | 
			
		||||
		id, username := usernameAndIDFromFlag(cmd)
 | 
			
		||||
		listReq := &v1.ListUsersRequest{
 | 
			
		||||
			Name: username,
 | 
			
		||||
			Id:   id,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		response, err := client.RenameUser(ctx, request)
 | 
			
		||||
		users, err := client.ListUsers(ctx, listReq)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ErrorOutput(
 | 
			
		||||
				err,
 | 
			
		||||
				fmt.Sprintf("Error: %s", status.Convert(err).Message()),
 | 
			
		||||
				output,
 | 
			
		||||
			)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if len(users.GetUsers()) != 1 {
 | 
			
		||||
			err := fmt.Errorf("Unable to determine user to delete, query returned multiple users, use ID")
 | 
			
		||||
			ErrorOutput(
 | 
			
		||||
				err,
 | 
			
		||||
				fmt.Sprintf("Error: %s", status.Convert(err).Message()),
 | 
			
		||||
				output,
 | 
			
		||||
			)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		newName, _ := cmd.Flags().GetString("new-name")
 | 
			
		||||
 | 
			
		||||
		renameReq := &v1.RenameUserRequest{
 | 
			
		||||
			OldId:   id,
 | 
			
		||||
			NewName: newName,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		response, err := client.RenameUser(ctx, renameReq)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			ErrorOutput(
 | 
			
		||||
				err,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								flake.nix
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								flake.nix
									
									
									
									
									
								
							@ -41,22 +41,38 @@
 | 
			
		||||
 | 
			
		||||
        protoc-gen-grpc-gateway = buildGo rec {
 | 
			
		||||
          pname = "grpc-gateway";
 | 
			
		||||
          version = "2.22.0";
 | 
			
		||||
          version = "2.24.0";
 | 
			
		||||
 | 
			
		||||
          src = pkgs.fetchFromGitHub {
 | 
			
		||||
            owner = "grpc-ecosystem";
 | 
			
		||||
            repo = "grpc-gateway";
 | 
			
		||||
            rev = "v${version}";
 | 
			
		||||
            sha256 = "sha256-I1w3gfV06J8xG1xJ+XuMIGkV2/Ofszo7SCC+z4Xb6l4=";
 | 
			
		||||
            sha256 = "sha256-lUEoqXJF1k4/il9bdDTinkUV5L869njZNYqObG/mHyA=";
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          vendorHash = "sha256-S4hcD5/BSGxM2qdJHMxOkxsJ5+Ks6m4lKHSS9+yZ17c=";
 | 
			
		||||
          vendorHash = "sha256-Ttt7bPKU+TMKRg5550BS6fsPwYp0QJqcZ7NLrhttSdw=";
 | 
			
		||||
 | 
			
		||||
          nativeBuildInputs = [pkgs.installShellFiles];
 | 
			
		||||
 | 
			
		||||
          subPackages = ["protoc-gen-grpc-gateway" "protoc-gen-openapiv2"];
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        protobuf-language-server = buildGo rec {
 | 
			
		||||
          pname = "protobuf-language-server";
 | 
			
		||||
          version = "2546944";
 | 
			
		||||
 | 
			
		||||
          src = pkgs.fetchFromGitHub {
 | 
			
		||||
            owner = "lasorda";
 | 
			
		||||
            repo = "protobuf-language-server";
 | 
			
		||||
            rev = "${version}";
 | 
			
		||||
            sha256 = "sha256-Cbr3ktT86RnwUntOiDKRpNTClhdyrKLTQG2ZEd6fKDc=";
 | 
			
		||||
          };
 | 
			
		||||
 | 
			
		||||
          vendorHash = "sha256-PfT90dhfzJZabzLTb1D69JCO+kOh2khrlpF5mCDeypk=";
 | 
			
		||||
 | 
			
		||||
          subPackages = ["."];
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        # Upstream does not override buildGoModule properly,
 | 
			
		||||
        # importing a specific module, so comment out for now.
 | 
			
		||||
        # golangci-lint = prev.golangci-lint.override {
 | 
			
		||||
@ -115,6 +131,7 @@
 | 
			
		||||
          protoc-gen-grpc-gateway
 | 
			
		||||
          buf
 | 
			
		||||
          clang-tools # clang-format
 | 
			
		||||
          protobuf-language-server
 | 
			
		||||
        ];
 | 
			
		||||
 | 
			
		||||
      # Add entry to build a docker image with headscale
 | 
			
		||||
@ -191,7 +208,7 @@
 | 
			
		||||
            ${pkgs.golangci-lint}/bin/golangci-lint run --fix --timeout 10m
 | 
			
		||||
            ${pkgs.nodePackages.prettier}/bin/prettier --write '**/**.{ts,js,md,yaml,yml,sass,css,scss,html}'
 | 
			
		||||
            ${pkgs.golines}/bin/golines --max-len=88 --base-formatter=gofumpt -w ${./.}
 | 
			
		||||
            ${pkgs.clang-tools}/bin/clang-format -style="{BasedOnStyle: Google, IndentWidth: 4, AlignConsecutiveDeclarations: true, AlignConsecutiveAssignments: true, ColumnLimit: 0}" -i ${./.}
 | 
			
		||||
            ${pkgs.clang-tools}/bin/clang-format -i ${./.}
 | 
			
		||||
          '';
 | 
			
		||||
      };
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.34.2
 | 
			
		||||
// 	protoc-gen-go v1.35.1
 | 
			
		||||
// 	protoc        (unknown)
 | 
			
		||||
// source: headscale/v1/apikey.proto
 | 
			
		||||
 | 
			
		||||
@ -35,12 +35,10 @@ type ApiKey struct {
 | 
			
		||||
 | 
			
		||||
func (x *ApiKey) Reset() {
 | 
			
		||||
	*x = ApiKey{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[0]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ApiKey) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -50,7 +48,7 @@ func (*ApiKey) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ApiKey) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[0]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -110,12 +108,10 @@ type CreateApiKeyRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *CreateApiKeyRequest) Reset() {
 | 
			
		||||
	*x = CreateApiKeyRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[1]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CreateApiKeyRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -125,7 +121,7 @@ func (*CreateApiKeyRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *CreateApiKeyRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[1]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -157,12 +153,10 @@ type CreateApiKeyResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *CreateApiKeyResponse) Reset() {
 | 
			
		||||
	*x = CreateApiKeyResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[2]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CreateApiKeyResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -172,7 +166,7 @@ func (*CreateApiKeyResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *CreateApiKeyResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[2]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -204,12 +198,10 @@ type ExpireApiKeyRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *ExpireApiKeyRequest) Reset() {
 | 
			
		||||
	*x = ExpireApiKeyRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[3]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ExpireApiKeyRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -219,7 +211,7 @@ func (*ExpireApiKeyRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ExpireApiKeyRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[3]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -249,12 +241,10 @@ type ExpireApiKeyResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *ExpireApiKeyResponse) Reset() {
 | 
			
		||||
	*x = ExpireApiKeyResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[4]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ExpireApiKeyResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -264,7 +254,7 @@ func (*ExpireApiKeyResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ExpireApiKeyResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[4]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -287,12 +277,10 @@ type ListApiKeysRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *ListApiKeysRequest) Reset() {
 | 
			
		||||
	*x = ListApiKeysRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[5]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListApiKeysRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -302,7 +290,7 @@ func (*ListApiKeysRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ListApiKeysRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[5]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -327,12 +315,10 @@ type ListApiKeysResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *ListApiKeysResponse) Reset() {
 | 
			
		||||
	*x = ListApiKeysResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[6]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListApiKeysResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -342,7 +328,7 @@ func (*ListApiKeysResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ListApiKeysResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[6]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -374,12 +360,10 @@ type DeleteApiKeyRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteApiKeyRequest) Reset() {
 | 
			
		||||
	*x = DeleteApiKeyRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[7]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteApiKeyRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -389,7 +373,7 @@ func (*DeleteApiKeyRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteApiKeyRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[7]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -419,12 +403,10 @@ type DeleteApiKeyResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteApiKeyResponse) Reset() {
 | 
			
		||||
	*x = DeleteApiKeyResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[8]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteApiKeyResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -434,7 +416,7 @@ func (*DeleteApiKeyResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteApiKeyResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_apikey_proto_msgTypes[8]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -542,116 +524,6 @@ func file_headscale_v1_apikey_proto_init() {
 | 
			
		||||
	if File_headscale_v1_apikey_proto != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if !protoimpl.UnsafeEnabled {
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[0].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ApiKey); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[1].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*CreateApiKeyRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[2].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*CreateApiKeyResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[3].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ExpireApiKeyRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[4].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ExpireApiKeyResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[5].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ListApiKeysRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[6].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ListApiKeysResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[7].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteApiKeyRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_apikey_proto_msgTypes[8].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteApiKeyResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	type x struct{}
 | 
			
		||||
	out := protoimpl.TypeBuilder{
 | 
			
		||||
		File: protoimpl.DescBuilder{
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.34.2
 | 
			
		||||
// 	protoc-gen-go v1.35.1
 | 
			
		||||
// 	protoc        (unknown)
 | 
			
		||||
// source: headscale/v1/device.proto
 | 
			
		||||
 | 
			
		||||
@ -32,12 +32,10 @@ type Latency struct {
 | 
			
		||||
 | 
			
		||||
func (x *Latency) Reset() {
 | 
			
		||||
	*x = Latency{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[0]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *Latency) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -47,7 +45,7 @@ func (*Latency) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *Latency) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[0]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -91,12 +89,10 @@ type ClientSupports struct {
 | 
			
		||||
 | 
			
		||||
func (x *ClientSupports) Reset() {
 | 
			
		||||
	*x = ClientSupports{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[1]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ClientSupports) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -106,7 +102,7 @@ func (*ClientSupports) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ClientSupports) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[1]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -177,12 +173,10 @@ type ClientConnectivity struct {
 | 
			
		||||
 | 
			
		||||
func (x *ClientConnectivity) Reset() {
 | 
			
		||||
	*x = ClientConnectivity{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[2]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ClientConnectivity) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -192,7 +186,7 @@ func (*ClientConnectivity) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ClientConnectivity) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[2]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -252,12 +246,10 @@ type GetDeviceRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRequest) Reset() {
 | 
			
		||||
	*x = GetDeviceRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[3]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -267,7 +259,7 @@ func (*GetDeviceRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[3]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -318,12 +310,10 @@ type GetDeviceResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceResponse) Reset() {
 | 
			
		||||
	*x = GetDeviceResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[4]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -333,7 +323,7 @@ func (*GetDeviceResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[4]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -498,12 +488,10 @@ type DeleteDeviceRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteDeviceRequest) Reset() {
 | 
			
		||||
	*x = DeleteDeviceRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[5]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteDeviceRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -513,7 +501,7 @@ func (*DeleteDeviceRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteDeviceRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[5]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -543,12 +531,10 @@ type DeleteDeviceResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteDeviceResponse) Reset() {
 | 
			
		||||
	*x = DeleteDeviceResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[6]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteDeviceResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -558,7 +544,7 @@ func (*DeleteDeviceResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteDeviceResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[6]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -583,12 +569,10 @@ type GetDeviceRoutesRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRoutesRequest) Reset() {
 | 
			
		||||
	*x = GetDeviceRoutesRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[7]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRoutesRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -598,7 +582,7 @@ func (*GetDeviceRoutesRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRoutesRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[7]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -631,12 +615,10 @@ type GetDeviceRoutesResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRoutesResponse) Reset() {
 | 
			
		||||
	*x = GetDeviceRoutesResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[8]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRoutesResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -646,7 +628,7 @@ func (*GetDeviceRoutesResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetDeviceRoutesResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[8]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -686,12 +668,10 @@ type EnableDeviceRoutesRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *EnableDeviceRoutesRequest) Reset() {
 | 
			
		||||
	*x = EnableDeviceRoutesRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[9]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *EnableDeviceRoutesRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -701,7 +681,7 @@ func (*EnableDeviceRoutesRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *EnableDeviceRoutesRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[9]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -741,12 +721,10 @@ type EnableDeviceRoutesResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *EnableDeviceRoutesResponse) Reset() {
 | 
			
		||||
	*x = EnableDeviceRoutesResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[10]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *EnableDeviceRoutesResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -756,7 +734,7 @@ func (*EnableDeviceRoutesResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *EnableDeviceRoutesResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_device_proto_msgTypes[10]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -960,140 +938,6 @@ func file_headscale_v1_device_proto_init() {
 | 
			
		||||
	if File_headscale_v1_device_proto != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if !protoimpl.UnsafeEnabled {
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[0].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*Latency); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[1].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ClientSupports); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[2].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ClientConnectivity); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[3].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetDeviceRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[4].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetDeviceResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[5].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteDeviceRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[6].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteDeviceResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[7].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetDeviceRoutesRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[8].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetDeviceRoutesResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[9].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*EnableDeviceRoutesRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_device_proto_msgTypes[10].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*EnableDeviceRoutesResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	type x struct{}
 | 
			
		||||
	out := protoimpl.TypeBuilder{
 | 
			
		||||
		File: protoimpl.DescBuilder{
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.34.2
 | 
			
		||||
// 	protoc-gen-go v1.35.1
 | 
			
		||||
// 	protoc        (unknown)
 | 
			
		||||
// source: headscale/v1/headscale.proto
 | 
			
		||||
 | 
			
		||||
@ -37,347 +37,336 @@ var file_headscale_v1_headscale_proto_rawDesc = []byte{
 | 
			
		||||
	0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74,
 | 
			
		||||
	0x6f, 0x1a, 0x19, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f,
 | 
			
		||||
	0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xd2, 0x1a, 0x0a,
 | 
			
		||||
	0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xe9, 0x19, 0x0a,
 | 
			
		||||
	0x10, 0x48, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
 | 
			
		||||
	0x65, 0x12, 0x63, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55,
 | 
			
		||||
	0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65,
 | 
			
		||||
	0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02,
 | 
			
		||||
	0x15, 0x12, 0x13, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f,
 | 
			
		||||
	0x7b, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x68, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
 | 
			
		||||
	0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
 | 
			
		||||
	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a,
 | 
			
		||||
	0x01, 0x2a, 0x22, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72,
 | 
			
		||||
	0x12, 0x82, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12,
 | 
			
		||||
	0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52,
 | 
			
		||||
	0x65, 0x6e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x65, 0x12, 0x68, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12,
 | 
			
		||||
	0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43,
 | 
			
		||||
	0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x1a, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x22, 0x31, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2b, 0x22, 0x29, 0x2f, 0x61, 0x70, 0x69,
 | 
			
		||||
	0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x7b, 0x6f, 0x6c, 0x64, 0x5f, 0x6e, 0x61,
 | 
			
		||||
	0x6d, 0x65, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x6e, 0x65, 0x77, 0x5f,
 | 
			
		||||
	0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6c, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55,
 | 
			
		||||
	0x73, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71,
 | 
			
		||||
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
 | 
			
		||||
	0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65,
 | 
			
		||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x15, 0x2a, 0x13,
 | 
			
		||||
	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x7b, 0x6e, 0x61,
 | 
			
		||||
	0x6d, 0x65, 0x7d, 0x12, 0x62, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73,
 | 
			
		||||
	0x12, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x1a, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
 | 
			
		||||
	0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f,
 | 
			
		||||
	0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61,
 | 
			
		||||
	0x74, 0x65, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61,
 | 
			
		||||
	0x74, 0x65, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75,
 | 
			
		||||
	0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4,
 | 
			
		||||
	0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f,
 | 
			
		||||
	0x70, 0x72, 0x65, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x87, 0x01, 0x0a, 0x10, 0x45,
 | 
			
		||||
	0x78, 0x70, 0x69, 0x72, 0x65, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12,
 | 
			
		||||
	0x25, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45,
 | 
			
		||||
	0x78, 0x70, 0x69, 0x72, 0x65, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x52,
 | 
			
		||||
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x50, 0x72, 0x65, 0x41,
 | 
			
		||||
	0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24,
 | 
			
		||||
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a, 0x22, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f,
 | 
			
		||||
	0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x2f, 0x65, 0x78,
 | 
			
		||||
	0x70, 0x69, 0x72, 0x65, 0x12, 0x7a, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x41,
 | 
			
		||||
	0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x24, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x41, 0x75,
 | 
			
		||||
	0x74, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73,
 | 
			
		||||
	0x74, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70,
 | 
			
		||||
	0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61,
 | 
			
		||||
	0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79,
 | 
			
		||||
	0x12, 0x7d, 0x0a, 0x0f, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x12, 0x24, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x64,
 | 
			
		||||
	0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x72,
 | 
			
		||||
	0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
			
		||||
	0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f, 0x61, 0x70,
 | 
			
		||||
	0x69, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x12,
 | 
			
		||||
	0x66, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73,
 | 
			
		||||
	0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12,
 | 
			
		||||
	0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x6e, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x54, 0x61,
 | 
			
		||||
	0x67, 0x73, 0x12, 0x1c, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
 | 
			
		||||
	0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x1a, 0x1d, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x53, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
 | 
			
		||||
	0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69,
 | 
			
		||||
	0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69,
 | 
			
		||||
	0x64, 0x7d, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x74, 0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73,
 | 
			
		||||
	0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74,
 | 
			
		||||
	0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d,
 | 
			
		||||
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x12, 0x6f, 0x0a,
 | 
			
		||||
	0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x2e, 0x68, 0x65,
 | 
			
		||||
	0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
 | 
			
		||||
	0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68,
 | 
			
		||||
	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x22, 0x17, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x11, 0x3a, 0x01, 0x2a, 0x22, 0x0c, 0x2f,
 | 
			
		||||
	0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x0a,
 | 
			
		||||
	0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x65,
 | 
			
		||||
	0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d,
 | 
			
		||||
	0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82,
 | 
			
		||||
	0xd3, 0xe4, 0x93, 0x02, 0x29, 0x22, 0x27, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75,
 | 
			
		||||
	0x73, 0x65, 0x72, 0x2f, 0x7b, 0x6f, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6e,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x6a,
 | 
			
		||||
	0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x12, 0x1f, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65,
 | 
			
		||||
	0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e,
 | 
			
		||||
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x76,
 | 
			
		||||
	0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69,
 | 
			
		||||
	0x72, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70,
 | 
			
		||||
	0x69, 0x72, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
 | 
			
		||||
	0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31,
 | 
			
		||||
	0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
 | 
			
		||||
	0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x12, 0x81, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x6e, 0x61, 0x6d,
 | 
			
		||||
	0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52,
 | 
			
		||||
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65,
 | 
			
		||||
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a,
 | 
			
		||||
	0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x2f,
 | 
			
		||||
	0x7b, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x7d, 0x12, 0x62, 0x0a, 0x09, 0x4c, 0x69,
 | 
			
		||||
	0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73,
 | 
			
		||||
	0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c,
 | 
			
		||||
	0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
 | 
			
		||||
	0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x2a, 0x11, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31,
 | 
			
		||||
	0x2f, 0x75, 0x73, 0x65, 0x72, 0x2f, 0x7b, 0x69, 0x64, 0x7d, 0x12, 0x62, 0x0a, 0x09, 0x4c, 0x69,
 | 
			
		||||
	0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x12, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73,
 | 
			
		||||
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73,
 | 
			
		||||
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e,
 | 
			
		||||
	0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x71,
 | 
			
		||||
	0x0a, 0x08, 0x4d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1d, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x4e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64,
 | 
			
		||||
	0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02,
 | 
			
		||||
	0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65,
 | 
			
		||||
	0x72, 0x12, 0x80, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x4e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x49, 0x50, 0x73, 0x12, 0x24, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x49, 0x50, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x65,
 | 
			
		||||
	0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66,
 | 
			
		||||
	0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x50, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x22, 0x18, 0x2f, 0x61, 0x70, 0x69,
 | 
			
		||||
	0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c,
 | 
			
		||||
	0x6c, 0x69, 0x70, 0x73, 0x12, 0x64, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65,
 | 
			
		||||
	0x73, 0x12, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31,
 | 
			
		||||
	0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 | 
			
		||||
	0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31,
 | 
			
		||||
	0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69,
 | 
			
		||||
	0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x7c, 0x0a, 0x0b, 0x45, 0x6e,
 | 
			
		||||
	0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64,
 | 
			
		||||
	0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52,
 | 
			
		||||
	0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x65,
 | 
			
		||||
	0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c,
 | 
			
		||||
	0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28,
 | 
			
		||||
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x20, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f,
 | 
			
		||||
	0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64,
 | 
			
		||||
	0x7d, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x80, 0x01, 0x0a, 0x0c, 0x44, 0x69, 0x73,
 | 
			
		||||
	0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64,
 | 
			
		||||
	0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65,
 | 
			
		||||
	0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x61,
 | 
			
		||||
	0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
			
		||||
	0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22, 0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76,
 | 
			
		||||
	0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f,
 | 
			
		||||
	0x69, 0x64, 0x7d, 0x2f, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x7f, 0x0a, 0x0d, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x1a, 0x23, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f,
 | 
			
		||||
	0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x12, 0x80,
 | 
			
		||||
	0x01, 0x0a, 0x10, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x12, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a, 0x01, 0x2a, 0x22, 0x12, 0x2f,
 | 
			
		||||
	0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x61, 0x75, 0x74, 0x68, 0x6b, 0x65,
 | 
			
		||||
	0x79, 0x12, 0x87, 0x01, 0x0a, 0x10, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x50, 0x72, 0x65, 0x41,
 | 
			
		||||
	0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x12, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x50, 0x72, 0x65, 0x41,
 | 
			
		||||
	0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70,
 | 
			
		||||
	0x69, 0x72, 0x65, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x24, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1e, 0x3a, 0x01, 0x2a,
 | 
			
		||||
	0x22, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65, 0x61, 0x75, 0x74,
 | 
			
		||||
	0x68, 0x6b, 0x65, 0x79, 0x2f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x12, 0x7a, 0x0a, 0x0f, 0x4c,
 | 
			
		||||
	0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x24,
 | 
			
		||||
	0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69,
 | 
			
		||||
	0x73, 0x74, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71,
 | 
			
		||||
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
 | 
			
		||||
	0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x50, 0x72, 0x65, 0x41, 0x75, 0x74, 0x68, 0x4b,
 | 
			
		||||
	0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x82, 0xd3, 0xe4,
 | 
			
		||||
	0x93, 0x02, 0x14, 0x12, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x72, 0x65,
 | 
			
		||||
	0x61, 0x75, 0x74, 0x68, 0x6b, 0x65, 0x79, 0x12, 0x7d, 0x0a, 0x0f, 0x44, 0x65, 0x62, 0x75, 0x67,
 | 
			
		||||
	0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x24, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x43,
 | 
			
		||||
	0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x1a, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x44, 0x65, 0x62, 0x75, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x3a,
 | 
			
		||||
	0x01, 0x2a, 0x22, 0x12, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x64, 0x65, 0x62, 0x75,
 | 
			
		||||
	0x67, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x66, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x12, 0x1c, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31,
 | 
			
		||||
	0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
 | 
			
		||||
	0x1d, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e,
 | 
			
		||||
	0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f,
 | 
			
		||||
	0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x6e,
 | 
			
		||||
	0x0a, 0x07, 0x53, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x12, 0x1c, 0x2e, 0x68, 0x65, 0x61, 0x64,
 | 
			
		||||
	0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73,
 | 
			
		||||
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x61, 0x67, 0x73, 0x52, 0x65,
 | 
			
		||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01,
 | 
			
		||||
	0x2a, 0x22, 0x1b, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f,
 | 
			
		||||
	0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x74, 0x61, 0x67, 0x73, 0x12, 0x74,
 | 
			
		||||
	0x0a, 0x0c, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x21,
 | 
			
		||||
	0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65,
 | 
			
		||||
	0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
 | 
			
		||||
	0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31,
 | 
			
		||||
	0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1d, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x17, 0x22, 0x15, 0x2f,
 | 
			
		||||
	0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x72, 0x65, 0x67, 0x69,
 | 
			
		||||
	0x73, 0x74, 0x65, 0x72, 0x12, 0x6f, 0x0a, 0x0a, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x12, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
 | 
			
		||||
	0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75,
 | 
			
		||||
	0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x2a, 0x16, 0x2f,
 | 
			
		||||
	0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x75, 0x0a, 0x0b,
 | 
			
		||||
	0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x20, 0x2e, 0x68, 0x65,
 | 
			
		||||
	0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74,
 | 
			
		||||
	0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c,
 | 
			
		||||
	0x65, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
			
		||||
	0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a, 0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76,
 | 
			
		||||
	0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f,
 | 
			
		||||
	0x69, 0x64, 0x7d, 0x12, 0x70, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52,
 | 
			
		||||
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b,
 | 
			
		||||
	0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93,
 | 
			
		||||
	0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x61,
 | 
			
		||||
	0x70, 0x69, 0x6b, 0x65, 0x79, 0x12, 0x77, 0x0a, 0x0c, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41,
 | 
			
		||||
	0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65,
 | 
			
		||||
	0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73,
 | 
			
		||||
	0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70,
 | 
			
		||||
	0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3,
 | 
			
		||||
	0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31,
 | 
			
		||||
	0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x12, 0x6a,
 | 
			
		||||
	0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x20, 0x2e,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73,
 | 
			
		||||
	0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
 | 
			
		||||
	0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c,
 | 
			
		||||
	0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69,
 | 
			
		||||
	0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x12, 0x76, 0x0a, 0x0c, 0x44, 0x65,
 | 
			
		||||
	0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65,
 | 
			
		||||
	0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x76, 0x0a, 0x0a, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x4e,
 | 
			
		||||
	0x6f, 0x64, 0x65, 0x12, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71,
 | 
			
		||||
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
 | 
			
		||||
	0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65,
 | 
			
		||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x22, 0x1d,
 | 
			
		||||
	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x12, 0x81, 0x01,
 | 
			
		||||
	0x0a, 0x0a, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1f, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x61,
 | 
			
		||||
	0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e,
 | 
			
		||||
	0x61, 0x6d, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
 | 
			
		||||
	0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x28, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31,
 | 
			
		||||
	0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f,
 | 
			
		||||
	0x72, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x2f, 0x7b, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x7d, 0x12, 0x62, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1e,
 | 
			
		||||
	0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69,
 | 
			
		||||
	0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f,
 | 
			
		||||
	0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69,
 | 
			
		||||
	0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22,
 | 
			
		||||
	0x14, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x0e, 0x12, 0x0c, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31,
 | 
			
		||||
	0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x12, 0x71, 0x0a, 0x08, 0x4d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64,
 | 
			
		||||
	0x65, 0x12, 0x1d, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31,
 | 
			
		||||
	0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x1a, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x4d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
			
		||||
	0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x3a, 0x01, 0x2a, 0x22, 0x1b, 0x2f, 0x61, 0x70,
 | 
			
		||||
	0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f,
 | 
			
		||||
	0x69, 0x64, 0x7d, 0x2f, 0x75, 0x73, 0x65, 0x72, 0x12, 0x80, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x63,
 | 
			
		||||
	0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x50, 0x73, 0x12, 0x24, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b,
 | 
			
		||||
	0x66, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x50, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x1a, 0x25, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
 | 
			
		||||
	0x31, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x50,
 | 
			
		||||
	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02,
 | 
			
		||||
	0x1a, 0x22, 0x18, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2f,
 | 
			
		||||
	0x62, 0x61, 0x63, 0x6b, 0x66, 0x69, 0x6c, 0x6c, 0x69, 0x70, 0x73, 0x12, 0x64, 0x0a, 0x09, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x12, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73,
 | 
			
		||||
	0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65,
 | 
			
		||||
	0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73,
 | 
			
		||||
	0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x52, 0x6f, 0x75, 0x74, 0x65,
 | 
			
		||||
	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02,
 | 
			
		||||
	0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65,
 | 
			
		||||
	0x73, 0x12, 0x7c, 0x0a, 0x0b, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65,
 | 
			
		||||
	0x12, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
 | 
			
		||||
	0x31, 0x2e, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x22, 0x20, 0x2f,
 | 
			
		||||
	0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2f, 0x7b, 0x72,
 | 
			
		||||
	0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x12,
 | 
			
		||||
	0x80, 0x01, 0x0a, 0x0c, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65,
 | 
			
		||||
	0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75,
 | 
			
		||||
	0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x29, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x23, 0x22,
 | 
			
		||||
	0x21, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2f,
 | 
			
		||||
	0x7b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x64, 0x69, 0x73, 0x61, 0x62,
 | 
			
		||||
	0x6c, 0x65, 0x12, 0x7f, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x6f, 0x75,
 | 
			
		||||
	0x74, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e,
 | 
			
		||||
	0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x73,
 | 
			
		||||
	0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x6f,
 | 
			
		||||
	0x75, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x25, 0x82, 0xd3,
 | 
			
		||||
	0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x6e, 0x6f,
 | 
			
		||||
	0x64, 0x65, 0x2f, 0x7b, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x72, 0x6f, 0x75,
 | 
			
		||||
	0x74, 0x65, 0x73, 0x12, 0x75, 0x0a, 0x0b, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x75,
 | 
			
		||||
	0x74, 0x65, 0x12, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76,
 | 
			
		||||
	0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71,
 | 
			
		||||
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
 | 
			
		||||
	0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x2a,
 | 
			
		||||
	0x19, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x2f,
 | 
			
		||||
	0x7b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x70, 0x0a, 0x0c, 0x43, 0x72,
 | 
			
		||||
	0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61,
 | 
			
		||||
	0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65,
 | 
			
		||||
	0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c,
 | 
			
		||||
	0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
 | 
			
		||||
	0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x2a, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f,
 | 
			
		||||
	0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69,
 | 
			
		||||
	0x78, 0x7d, 0x12, 0x64, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12,
 | 
			
		||||
	0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
 | 
			
		||||
	0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47,
 | 
			
		||||
	0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65,
 | 
			
		||||
	0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76,
 | 
			
		||||
	0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x67, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x50,
 | 
			
		||||
	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65,
 | 
			
		||||
	0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65,
 | 
			
		||||
	0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01,
 | 
			
		||||
	0x2a, 0x1a, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63,
 | 
			
		||||
	0x79, 0x42, 0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
 | 
			
		||||
	0x6a, 0x75, 0x61, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72,
 | 
			
		||||
	0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65,
 | 
			
		||||
	0x61, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
 | 
			
		||||
	0x65, 0x22, 0x19, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x22, 0x0e, 0x2f, 0x61,
 | 
			
		||||
	0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x12, 0x77, 0x0a, 0x0c,
 | 
			
		||||
	0x45, 0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x70, 0x69,
 | 
			
		||||
	0x72, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a,
 | 
			
		||||
	0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x45,
 | 
			
		||||
	0x78, 0x70, 0x69, 0x72, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f,
 | 
			
		||||
	0x6e, 0x73, 0x65, 0x22, 0x20, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1a, 0x3a, 0x01, 0x2a, 0x22, 0x15,
 | 
			
		||||
	0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79, 0x2f, 0x65,
 | 
			
		||||
	0x78, 0x70, 0x69, 0x72, 0x65, 0x12, 0x6a, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69,
 | 
			
		||||
	0x4b, 0x65, 0x79, 0x73, 0x12, 0x20, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
 | 
			
		||||
	0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x73, 0x52,
 | 
			
		||||
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79,
 | 
			
		||||
	0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02,
 | 
			
		||||
	0x10, 0x12, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65,
 | 
			
		||||
	0x79, 0x12, 0x76, 0x0a, 0x0c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65,
 | 
			
		||||
	0x79, 0x12, 0x21, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31,
 | 
			
		||||
	0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71,
 | 
			
		||||
	0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65,
 | 
			
		||||
	0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x70, 0x69, 0x4b, 0x65, 0x79,
 | 
			
		||||
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19,
 | 
			
		||||
	0x2a, 0x17, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x69, 0x6b, 0x65, 0x79,
 | 
			
		||||
	0x2f, 0x7b, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x7d, 0x12, 0x64, 0x0a, 0x09, 0x47, 0x65, 0x74,
 | 
			
		||||
	0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1e, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52,
 | 
			
		||||
	0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x10, 0x12,
 | 
			
		||||
	0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76, 0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12,
 | 
			
		||||
	0x67, 0x0a, 0x09, 0x53, 0x65, 0x74, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x1e, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50,
 | 
			
		||||
	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x50,
 | 
			
		||||
	0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x19, 0x82,
 | 
			
		||||
	0xd3, 0xe4, 0x93, 0x02, 0x13, 0x3a, 0x01, 0x2a, 0x1a, 0x0e, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x76,
 | 
			
		||||
	0x31, 0x2f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x42, 0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68,
 | 
			
		||||
	0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6a, 0x75, 0x61, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2f,
 | 
			
		||||
	0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f,
 | 
			
		||||
	0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var file_headscale_v1_headscale_proto_goTypes = []any{
 | 
			
		||||
	(*GetUserRequest)(nil),           // 0: headscale.v1.GetUserRequest
 | 
			
		||||
	(*CreateUserRequest)(nil),        // 1: headscale.v1.CreateUserRequest
 | 
			
		||||
	(*RenameUserRequest)(nil),        // 2: headscale.v1.RenameUserRequest
 | 
			
		||||
	(*DeleteUserRequest)(nil),        // 3: headscale.v1.DeleteUserRequest
 | 
			
		||||
	(*ListUsersRequest)(nil),         // 4: headscale.v1.ListUsersRequest
 | 
			
		||||
	(*CreatePreAuthKeyRequest)(nil),  // 5: headscale.v1.CreatePreAuthKeyRequest
 | 
			
		||||
	(*ExpirePreAuthKeyRequest)(nil),  // 6: headscale.v1.ExpirePreAuthKeyRequest
 | 
			
		||||
	(*ListPreAuthKeysRequest)(nil),   // 7: headscale.v1.ListPreAuthKeysRequest
 | 
			
		||||
	(*DebugCreateNodeRequest)(nil),   // 8: headscale.v1.DebugCreateNodeRequest
 | 
			
		||||
	(*GetNodeRequest)(nil),           // 9: headscale.v1.GetNodeRequest
 | 
			
		||||
	(*SetTagsRequest)(nil),           // 10: headscale.v1.SetTagsRequest
 | 
			
		||||
	(*RegisterNodeRequest)(nil),      // 11: headscale.v1.RegisterNodeRequest
 | 
			
		||||
	(*DeleteNodeRequest)(nil),        // 12: headscale.v1.DeleteNodeRequest
 | 
			
		||||
	(*ExpireNodeRequest)(nil),        // 13: headscale.v1.ExpireNodeRequest
 | 
			
		||||
	(*RenameNodeRequest)(nil),        // 14: headscale.v1.RenameNodeRequest
 | 
			
		||||
	(*ListNodesRequest)(nil),         // 15: headscale.v1.ListNodesRequest
 | 
			
		||||
	(*MoveNodeRequest)(nil),          // 16: headscale.v1.MoveNodeRequest
 | 
			
		||||
	(*BackfillNodeIPsRequest)(nil),   // 17: headscale.v1.BackfillNodeIPsRequest
 | 
			
		||||
	(*GetRoutesRequest)(nil),         // 18: headscale.v1.GetRoutesRequest
 | 
			
		||||
	(*EnableRouteRequest)(nil),       // 19: headscale.v1.EnableRouteRequest
 | 
			
		||||
	(*DisableRouteRequest)(nil),      // 20: headscale.v1.DisableRouteRequest
 | 
			
		||||
	(*GetNodeRoutesRequest)(nil),     // 21: headscale.v1.GetNodeRoutesRequest
 | 
			
		||||
	(*DeleteRouteRequest)(nil),       // 22: headscale.v1.DeleteRouteRequest
 | 
			
		||||
	(*CreateApiKeyRequest)(nil),      // 23: headscale.v1.CreateApiKeyRequest
 | 
			
		||||
	(*ExpireApiKeyRequest)(nil),      // 24: headscale.v1.ExpireApiKeyRequest
 | 
			
		||||
	(*ListApiKeysRequest)(nil),       // 25: headscale.v1.ListApiKeysRequest
 | 
			
		||||
	(*DeleteApiKeyRequest)(nil),      // 26: headscale.v1.DeleteApiKeyRequest
 | 
			
		||||
	(*GetPolicyRequest)(nil),         // 27: headscale.v1.GetPolicyRequest
 | 
			
		||||
	(*SetPolicyRequest)(nil),         // 28: headscale.v1.SetPolicyRequest
 | 
			
		||||
	(*GetUserResponse)(nil),          // 29: headscale.v1.GetUserResponse
 | 
			
		||||
	(*CreateUserResponse)(nil),       // 30: headscale.v1.CreateUserResponse
 | 
			
		||||
	(*RenameUserResponse)(nil),       // 31: headscale.v1.RenameUserResponse
 | 
			
		||||
	(*DeleteUserResponse)(nil),       // 32: headscale.v1.DeleteUserResponse
 | 
			
		||||
	(*ListUsersResponse)(nil),        // 33: headscale.v1.ListUsersResponse
 | 
			
		||||
	(*CreatePreAuthKeyResponse)(nil), // 34: headscale.v1.CreatePreAuthKeyResponse
 | 
			
		||||
	(*ExpirePreAuthKeyResponse)(nil), // 35: headscale.v1.ExpirePreAuthKeyResponse
 | 
			
		||||
	(*ListPreAuthKeysResponse)(nil),  // 36: headscale.v1.ListPreAuthKeysResponse
 | 
			
		||||
	(*DebugCreateNodeResponse)(nil),  // 37: headscale.v1.DebugCreateNodeResponse
 | 
			
		||||
	(*GetNodeResponse)(nil),          // 38: headscale.v1.GetNodeResponse
 | 
			
		||||
	(*SetTagsResponse)(nil),          // 39: headscale.v1.SetTagsResponse
 | 
			
		||||
	(*RegisterNodeResponse)(nil),     // 40: headscale.v1.RegisterNodeResponse
 | 
			
		||||
	(*DeleteNodeResponse)(nil),       // 41: headscale.v1.DeleteNodeResponse
 | 
			
		||||
	(*ExpireNodeResponse)(nil),       // 42: headscale.v1.ExpireNodeResponse
 | 
			
		||||
	(*RenameNodeResponse)(nil),       // 43: headscale.v1.RenameNodeResponse
 | 
			
		||||
	(*ListNodesResponse)(nil),        // 44: headscale.v1.ListNodesResponse
 | 
			
		||||
	(*MoveNodeResponse)(nil),         // 45: headscale.v1.MoveNodeResponse
 | 
			
		||||
	(*BackfillNodeIPsResponse)(nil),  // 46: headscale.v1.BackfillNodeIPsResponse
 | 
			
		||||
	(*GetRoutesResponse)(nil),        // 47: headscale.v1.GetRoutesResponse
 | 
			
		||||
	(*EnableRouteResponse)(nil),      // 48: headscale.v1.EnableRouteResponse
 | 
			
		||||
	(*DisableRouteResponse)(nil),     // 49: headscale.v1.DisableRouteResponse
 | 
			
		||||
	(*GetNodeRoutesResponse)(nil),    // 50: headscale.v1.GetNodeRoutesResponse
 | 
			
		||||
	(*DeleteRouteResponse)(nil),      // 51: headscale.v1.DeleteRouteResponse
 | 
			
		||||
	(*CreateApiKeyResponse)(nil),     // 52: headscale.v1.CreateApiKeyResponse
 | 
			
		||||
	(*ExpireApiKeyResponse)(nil),     // 53: headscale.v1.ExpireApiKeyResponse
 | 
			
		||||
	(*ListApiKeysResponse)(nil),      // 54: headscale.v1.ListApiKeysResponse
 | 
			
		||||
	(*DeleteApiKeyResponse)(nil),     // 55: headscale.v1.DeleteApiKeyResponse
 | 
			
		||||
	(*GetPolicyResponse)(nil),        // 56: headscale.v1.GetPolicyResponse
 | 
			
		||||
	(*SetPolicyResponse)(nil),        // 57: headscale.v1.SetPolicyResponse
 | 
			
		||||
	(*CreateUserRequest)(nil),        // 0: headscale.v1.CreateUserRequest
 | 
			
		||||
	(*RenameUserRequest)(nil),        // 1: headscale.v1.RenameUserRequest
 | 
			
		||||
	(*DeleteUserRequest)(nil),        // 2: headscale.v1.DeleteUserRequest
 | 
			
		||||
	(*ListUsersRequest)(nil),         // 3: headscale.v1.ListUsersRequest
 | 
			
		||||
	(*CreatePreAuthKeyRequest)(nil),  // 4: headscale.v1.CreatePreAuthKeyRequest
 | 
			
		||||
	(*ExpirePreAuthKeyRequest)(nil),  // 5: headscale.v1.ExpirePreAuthKeyRequest
 | 
			
		||||
	(*ListPreAuthKeysRequest)(nil),   // 6: headscale.v1.ListPreAuthKeysRequest
 | 
			
		||||
	(*DebugCreateNodeRequest)(nil),   // 7: headscale.v1.DebugCreateNodeRequest
 | 
			
		||||
	(*GetNodeRequest)(nil),           // 8: headscale.v1.GetNodeRequest
 | 
			
		||||
	(*SetTagsRequest)(nil),           // 9: headscale.v1.SetTagsRequest
 | 
			
		||||
	(*RegisterNodeRequest)(nil),      // 10: headscale.v1.RegisterNodeRequest
 | 
			
		||||
	(*DeleteNodeRequest)(nil),        // 11: headscale.v1.DeleteNodeRequest
 | 
			
		||||
	(*ExpireNodeRequest)(nil),        // 12: headscale.v1.ExpireNodeRequest
 | 
			
		||||
	(*RenameNodeRequest)(nil),        // 13: headscale.v1.RenameNodeRequest
 | 
			
		||||
	(*ListNodesRequest)(nil),         // 14: headscale.v1.ListNodesRequest
 | 
			
		||||
	(*MoveNodeRequest)(nil),          // 15: headscale.v1.MoveNodeRequest
 | 
			
		||||
	(*BackfillNodeIPsRequest)(nil),   // 16: headscale.v1.BackfillNodeIPsRequest
 | 
			
		||||
	(*GetRoutesRequest)(nil),         // 17: headscale.v1.GetRoutesRequest
 | 
			
		||||
	(*EnableRouteRequest)(nil),       // 18: headscale.v1.EnableRouteRequest
 | 
			
		||||
	(*DisableRouteRequest)(nil),      // 19: headscale.v1.DisableRouteRequest
 | 
			
		||||
	(*GetNodeRoutesRequest)(nil),     // 20: headscale.v1.GetNodeRoutesRequest
 | 
			
		||||
	(*DeleteRouteRequest)(nil),       // 21: headscale.v1.DeleteRouteRequest
 | 
			
		||||
	(*CreateApiKeyRequest)(nil),      // 22: headscale.v1.CreateApiKeyRequest
 | 
			
		||||
	(*ExpireApiKeyRequest)(nil),      // 23: headscale.v1.ExpireApiKeyRequest
 | 
			
		||||
	(*ListApiKeysRequest)(nil),       // 24: headscale.v1.ListApiKeysRequest
 | 
			
		||||
	(*DeleteApiKeyRequest)(nil),      // 25: headscale.v1.DeleteApiKeyRequest
 | 
			
		||||
	(*GetPolicyRequest)(nil),         // 26: headscale.v1.GetPolicyRequest
 | 
			
		||||
	(*SetPolicyRequest)(nil),         // 27: headscale.v1.SetPolicyRequest
 | 
			
		||||
	(*CreateUserResponse)(nil),       // 28: headscale.v1.CreateUserResponse
 | 
			
		||||
	(*RenameUserResponse)(nil),       // 29: headscale.v1.RenameUserResponse
 | 
			
		||||
	(*DeleteUserResponse)(nil),       // 30: headscale.v1.DeleteUserResponse
 | 
			
		||||
	(*ListUsersResponse)(nil),        // 31: headscale.v1.ListUsersResponse
 | 
			
		||||
	(*CreatePreAuthKeyResponse)(nil), // 32: headscale.v1.CreatePreAuthKeyResponse
 | 
			
		||||
	(*ExpirePreAuthKeyResponse)(nil), // 33: headscale.v1.ExpirePreAuthKeyResponse
 | 
			
		||||
	(*ListPreAuthKeysResponse)(nil),  // 34: headscale.v1.ListPreAuthKeysResponse
 | 
			
		||||
	(*DebugCreateNodeResponse)(nil),  // 35: headscale.v1.DebugCreateNodeResponse
 | 
			
		||||
	(*GetNodeResponse)(nil),          // 36: headscale.v1.GetNodeResponse
 | 
			
		||||
	(*SetTagsResponse)(nil),          // 37: headscale.v1.SetTagsResponse
 | 
			
		||||
	(*RegisterNodeResponse)(nil),     // 38: headscale.v1.RegisterNodeResponse
 | 
			
		||||
	(*DeleteNodeResponse)(nil),       // 39: headscale.v1.DeleteNodeResponse
 | 
			
		||||
	(*ExpireNodeResponse)(nil),       // 40: headscale.v1.ExpireNodeResponse
 | 
			
		||||
	(*RenameNodeResponse)(nil),       // 41: headscale.v1.RenameNodeResponse
 | 
			
		||||
	(*ListNodesResponse)(nil),        // 42: headscale.v1.ListNodesResponse
 | 
			
		||||
	(*MoveNodeResponse)(nil),         // 43: headscale.v1.MoveNodeResponse
 | 
			
		||||
	(*BackfillNodeIPsResponse)(nil),  // 44: headscale.v1.BackfillNodeIPsResponse
 | 
			
		||||
	(*GetRoutesResponse)(nil),        // 45: headscale.v1.GetRoutesResponse
 | 
			
		||||
	(*EnableRouteResponse)(nil),      // 46: headscale.v1.EnableRouteResponse
 | 
			
		||||
	(*DisableRouteResponse)(nil),     // 47: headscale.v1.DisableRouteResponse
 | 
			
		||||
	(*GetNodeRoutesResponse)(nil),    // 48: headscale.v1.GetNodeRoutesResponse
 | 
			
		||||
	(*DeleteRouteResponse)(nil),      // 49: headscale.v1.DeleteRouteResponse
 | 
			
		||||
	(*CreateApiKeyResponse)(nil),     // 50: headscale.v1.CreateApiKeyResponse
 | 
			
		||||
	(*ExpireApiKeyResponse)(nil),     // 51: headscale.v1.ExpireApiKeyResponse
 | 
			
		||||
	(*ListApiKeysResponse)(nil),      // 52: headscale.v1.ListApiKeysResponse
 | 
			
		||||
	(*DeleteApiKeyResponse)(nil),     // 53: headscale.v1.DeleteApiKeyResponse
 | 
			
		||||
	(*GetPolicyResponse)(nil),        // 54: headscale.v1.GetPolicyResponse
 | 
			
		||||
	(*SetPolicyResponse)(nil),        // 55: headscale.v1.SetPolicyResponse
 | 
			
		||||
}
 | 
			
		||||
var file_headscale_v1_headscale_proto_depIdxs = []int32{
 | 
			
		||||
	0,  // 0: headscale.v1.HeadscaleService.GetUser:input_type -> headscale.v1.GetUserRequest
 | 
			
		||||
	1,  // 1: headscale.v1.HeadscaleService.CreateUser:input_type -> headscale.v1.CreateUserRequest
 | 
			
		||||
	2,  // 2: headscale.v1.HeadscaleService.RenameUser:input_type -> headscale.v1.RenameUserRequest
 | 
			
		||||
	3,  // 3: headscale.v1.HeadscaleService.DeleteUser:input_type -> headscale.v1.DeleteUserRequest
 | 
			
		||||
	4,  // 4: headscale.v1.HeadscaleService.ListUsers:input_type -> headscale.v1.ListUsersRequest
 | 
			
		||||
	5,  // 5: headscale.v1.HeadscaleService.CreatePreAuthKey:input_type -> headscale.v1.CreatePreAuthKeyRequest
 | 
			
		||||
	6,  // 6: headscale.v1.HeadscaleService.ExpirePreAuthKey:input_type -> headscale.v1.ExpirePreAuthKeyRequest
 | 
			
		||||
	7,  // 7: headscale.v1.HeadscaleService.ListPreAuthKeys:input_type -> headscale.v1.ListPreAuthKeysRequest
 | 
			
		||||
	8,  // 8: headscale.v1.HeadscaleService.DebugCreateNode:input_type -> headscale.v1.DebugCreateNodeRequest
 | 
			
		||||
	9,  // 9: headscale.v1.HeadscaleService.GetNode:input_type -> headscale.v1.GetNodeRequest
 | 
			
		||||
	10, // 10: headscale.v1.HeadscaleService.SetTags:input_type -> headscale.v1.SetTagsRequest
 | 
			
		||||
	11, // 11: headscale.v1.HeadscaleService.RegisterNode:input_type -> headscale.v1.RegisterNodeRequest
 | 
			
		||||
	12, // 12: headscale.v1.HeadscaleService.DeleteNode:input_type -> headscale.v1.DeleteNodeRequest
 | 
			
		||||
	13, // 13: headscale.v1.HeadscaleService.ExpireNode:input_type -> headscale.v1.ExpireNodeRequest
 | 
			
		||||
	14, // 14: headscale.v1.HeadscaleService.RenameNode:input_type -> headscale.v1.RenameNodeRequest
 | 
			
		||||
	15, // 15: headscale.v1.HeadscaleService.ListNodes:input_type -> headscale.v1.ListNodesRequest
 | 
			
		||||
	16, // 16: headscale.v1.HeadscaleService.MoveNode:input_type -> headscale.v1.MoveNodeRequest
 | 
			
		||||
	17, // 17: headscale.v1.HeadscaleService.BackfillNodeIPs:input_type -> headscale.v1.BackfillNodeIPsRequest
 | 
			
		||||
	18, // 18: headscale.v1.HeadscaleService.GetRoutes:input_type -> headscale.v1.GetRoutesRequest
 | 
			
		||||
	19, // 19: headscale.v1.HeadscaleService.EnableRoute:input_type -> headscale.v1.EnableRouteRequest
 | 
			
		||||
	20, // 20: headscale.v1.HeadscaleService.DisableRoute:input_type -> headscale.v1.DisableRouteRequest
 | 
			
		||||
	21, // 21: headscale.v1.HeadscaleService.GetNodeRoutes:input_type -> headscale.v1.GetNodeRoutesRequest
 | 
			
		||||
	22, // 22: headscale.v1.HeadscaleService.DeleteRoute:input_type -> headscale.v1.DeleteRouteRequest
 | 
			
		||||
	23, // 23: headscale.v1.HeadscaleService.CreateApiKey:input_type -> headscale.v1.CreateApiKeyRequest
 | 
			
		||||
	24, // 24: headscale.v1.HeadscaleService.ExpireApiKey:input_type -> headscale.v1.ExpireApiKeyRequest
 | 
			
		||||
	25, // 25: headscale.v1.HeadscaleService.ListApiKeys:input_type -> headscale.v1.ListApiKeysRequest
 | 
			
		||||
	26, // 26: headscale.v1.HeadscaleService.DeleteApiKey:input_type -> headscale.v1.DeleteApiKeyRequest
 | 
			
		||||
	27, // 27: headscale.v1.HeadscaleService.GetPolicy:input_type -> headscale.v1.GetPolicyRequest
 | 
			
		||||
	28, // 28: headscale.v1.HeadscaleService.SetPolicy:input_type -> headscale.v1.SetPolicyRequest
 | 
			
		||||
	29, // 29: headscale.v1.HeadscaleService.GetUser:output_type -> headscale.v1.GetUserResponse
 | 
			
		||||
	30, // 30: headscale.v1.HeadscaleService.CreateUser:output_type -> headscale.v1.CreateUserResponse
 | 
			
		||||
	31, // 31: headscale.v1.HeadscaleService.RenameUser:output_type -> headscale.v1.RenameUserResponse
 | 
			
		||||
	32, // 32: headscale.v1.HeadscaleService.DeleteUser:output_type -> headscale.v1.DeleteUserResponse
 | 
			
		||||
	33, // 33: headscale.v1.HeadscaleService.ListUsers:output_type -> headscale.v1.ListUsersResponse
 | 
			
		||||
	34, // 34: headscale.v1.HeadscaleService.CreatePreAuthKey:output_type -> headscale.v1.CreatePreAuthKeyResponse
 | 
			
		||||
	35, // 35: headscale.v1.HeadscaleService.ExpirePreAuthKey:output_type -> headscale.v1.ExpirePreAuthKeyResponse
 | 
			
		||||
	36, // 36: headscale.v1.HeadscaleService.ListPreAuthKeys:output_type -> headscale.v1.ListPreAuthKeysResponse
 | 
			
		||||
	37, // 37: headscale.v1.HeadscaleService.DebugCreateNode:output_type -> headscale.v1.DebugCreateNodeResponse
 | 
			
		||||
	38, // 38: headscale.v1.HeadscaleService.GetNode:output_type -> headscale.v1.GetNodeResponse
 | 
			
		||||
	39, // 39: headscale.v1.HeadscaleService.SetTags:output_type -> headscale.v1.SetTagsResponse
 | 
			
		||||
	40, // 40: headscale.v1.HeadscaleService.RegisterNode:output_type -> headscale.v1.RegisterNodeResponse
 | 
			
		||||
	41, // 41: headscale.v1.HeadscaleService.DeleteNode:output_type -> headscale.v1.DeleteNodeResponse
 | 
			
		||||
	42, // 42: headscale.v1.HeadscaleService.ExpireNode:output_type -> headscale.v1.ExpireNodeResponse
 | 
			
		||||
	43, // 43: headscale.v1.HeadscaleService.RenameNode:output_type -> headscale.v1.RenameNodeResponse
 | 
			
		||||
	44, // 44: headscale.v1.HeadscaleService.ListNodes:output_type -> headscale.v1.ListNodesResponse
 | 
			
		||||
	45, // 45: headscale.v1.HeadscaleService.MoveNode:output_type -> headscale.v1.MoveNodeResponse
 | 
			
		||||
	46, // 46: headscale.v1.HeadscaleService.BackfillNodeIPs:output_type -> headscale.v1.BackfillNodeIPsResponse
 | 
			
		||||
	47, // 47: headscale.v1.HeadscaleService.GetRoutes:output_type -> headscale.v1.GetRoutesResponse
 | 
			
		||||
	48, // 48: headscale.v1.HeadscaleService.EnableRoute:output_type -> headscale.v1.EnableRouteResponse
 | 
			
		||||
	49, // 49: headscale.v1.HeadscaleService.DisableRoute:output_type -> headscale.v1.DisableRouteResponse
 | 
			
		||||
	50, // 50: headscale.v1.HeadscaleService.GetNodeRoutes:output_type -> headscale.v1.GetNodeRoutesResponse
 | 
			
		||||
	51, // 51: headscale.v1.HeadscaleService.DeleteRoute:output_type -> headscale.v1.DeleteRouteResponse
 | 
			
		||||
	52, // 52: headscale.v1.HeadscaleService.CreateApiKey:output_type -> headscale.v1.CreateApiKeyResponse
 | 
			
		||||
	53, // 53: headscale.v1.HeadscaleService.ExpireApiKey:output_type -> headscale.v1.ExpireApiKeyResponse
 | 
			
		||||
	54, // 54: headscale.v1.HeadscaleService.ListApiKeys:output_type -> headscale.v1.ListApiKeysResponse
 | 
			
		||||
	55, // 55: headscale.v1.HeadscaleService.DeleteApiKey:output_type -> headscale.v1.DeleteApiKeyResponse
 | 
			
		||||
	56, // 56: headscale.v1.HeadscaleService.GetPolicy:output_type -> headscale.v1.GetPolicyResponse
 | 
			
		||||
	57, // 57: headscale.v1.HeadscaleService.SetPolicy:output_type -> headscale.v1.SetPolicyResponse
 | 
			
		||||
	29, // [29:58] is the sub-list for method output_type
 | 
			
		||||
	0,  // [0:29] is the sub-list for method input_type
 | 
			
		||||
	0,  // 0: headscale.v1.HeadscaleService.CreateUser:input_type -> headscale.v1.CreateUserRequest
 | 
			
		||||
	1,  // 1: headscale.v1.HeadscaleService.RenameUser:input_type -> headscale.v1.RenameUserRequest
 | 
			
		||||
	2,  // 2: headscale.v1.HeadscaleService.DeleteUser:input_type -> headscale.v1.DeleteUserRequest
 | 
			
		||||
	3,  // 3: headscale.v1.HeadscaleService.ListUsers:input_type -> headscale.v1.ListUsersRequest
 | 
			
		||||
	4,  // 4: headscale.v1.HeadscaleService.CreatePreAuthKey:input_type -> headscale.v1.CreatePreAuthKeyRequest
 | 
			
		||||
	5,  // 5: headscale.v1.HeadscaleService.ExpirePreAuthKey:input_type -> headscale.v1.ExpirePreAuthKeyRequest
 | 
			
		||||
	6,  // 6: headscale.v1.HeadscaleService.ListPreAuthKeys:input_type -> headscale.v1.ListPreAuthKeysRequest
 | 
			
		||||
	7,  // 7: headscale.v1.HeadscaleService.DebugCreateNode:input_type -> headscale.v1.DebugCreateNodeRequest
 | 
			
		||||
	8,  // 8: headscale.v1.HeadscaleService.GetNode:input_type -> headscale.v1.GetNodeRequest
 | 
			
		||||
	9,  // 9: headscale.v1.HeadscaleService.SetTags:input_type -> headscale.v1.SetTagsRequest
 | 
			
		||||
	10, // 10: headscale.v1.HeadscaleService.RegisterNode:input_type -> headscale.v1.RegisterNodeRequest
 | 
			
		||||
	11, // 11: headscale.v1.HeadscaleService.DeleteNode:input_type -> headscale.v1.DeleteNodeRequest
 | 
			
		||||
	12, // 12: headscale.v1.HeadscaleService.ExpireNode:input_type -> headscale.v1.ExpireNodeRequest
 | 
			
		||||
	13, // 13: headscale.v1.HeadscaleService.RenameNode:input_type -> headscale.v1.RenameNodeRequest
 | 
			
		||||
	14, // 14: headscale.v1.HeadscaleService.ListNodes:input_type -> headscale.v1.ListNodesRequest
 | 
			
		||||
	15, // 15: headscale.v1.HeadscaleService.MoveNode:input_type -> headscale.v1.MoveNodeRequest
 | 
			
		||||
	16, // 16: headscale.v1.HeadscaleService.BackfillNodeIPs:input_type -> headscale.v1.BackfillNodeIPsRequest
 | 
			
		||||
	17, // 17: headscale.v1.HeadscaleService.GetRoutes:input_type -> headscale.v1.GetRoutesRequest
 | 
			
		||||
	18, // 18: headscale.v1.HeadscaleService.EnableRoute:input_type -> headscale.v1.EnableRouteRequest
 | 
			
		||||
	19, // 19: headscale.v1.HeadscaleService.DisableRoute:input_type -> headscale.v1.DisableRouteRequest
 | 
			
		||||
	20, // 20: headscale.v1.HeadscaleService.GetNodeRoutes:input_type -> headscale.v1.GetNodeRoutesRequest
 | 
			
		||||
	21, // 21: headscale.v1.HeadscaleService.DeleteRoute:input_type -> headscale.v1.DeleteRouteRequest
 | 
			
		||||
	22, // 22: headscale.v1.HeadscaleService.CreateApiKey:input_type -> headscale.v1.CreateApiKeyRequest
 | 
			
		||||
	23, // 23: headscale.v1.HeadscaleService.ExpireApiKey:input_type -> headscale.v1.ExpireApiKeyRequest
 | 
			
		||||
	24, // 24: headscale.v1.HeadscaleService.ListApiKeys:input_type -> headscale.v1.ListApiKeysRequest
 | 
			
		||||
	25, // 25: headscale.v1.HeadscaleService.DeleteApiKey:input_type -> headscale.v1.DeleteApiKeyRequest
 | 
			
		||||
	26, // 26: headscale.v1.HeadscaleService.GetPolicy:input_type -> headscale.v1.GetPolicyRequest
 | 
			
		||||
	27, // 27: headscale.v1.HeadscaleService.SetPolicy:input_type -> headscale.v1.SetPolicyRequest
 | 
			
		||||
	28, // 28: headscale.v1.HeadscaleService.CreateUser:output_type -> headscale.v1.CreateUserResponse
 | 
			
		||||
	29, // 29: headscale.v1.HeadscaleService.RenameUser:output_type -> headscale.v1.RenameUserResponse
 | 
			
		||||
	30, // 30: headscale.v1.HeadscaleService.DeleteUser:output_type -> headscale.v1.DeleteUserResponse
 | 
			
		||||
	31, // 31: headscale.v1.HeadscaleService.ListUsers:output_type -> headscale.v1.ListUsersResponse
 | 
			
		||||
	32, // 32: headscale.v1.HeadscaleService.CreatePreAuthKey:output_type -> headscale.v1.CreatePreAuthKeyResponse
 | 
			
		||||
	33, // 33: headscale.v1.HeadscaleService.ExpirePreAuthKey:output_type -> headscale.v1.ExpirePreAuthKeyResponse
 | 
			
		||||
	34, // 34: headscale.v1.HeadscaleService.ListPreAuthKeys:output_type -> headscale.v1.ListPreAuthKeysResponse
 | 
			
		||||
	35, // 35: headscale.v1.HeadscaleService.DebugCreateNode:output_type -> headscale.v1.DebugCreateNodeResponse
 | 
			
		||||
	36, // 36: headscale.v1.HeadscaleService.GetNode:output_type -> headscale.v1.GetNodeResponse
 | 
			
		||||
	37, // 37: headscale.v1.HeadscaleService.SetTags:output_type -> headscale.v1.SetTagsResponse
 | 
			
		||||
	38, // 38: headscale.v1.HeadscaleService.RegisterNode:output_type -> headscale.v1.RegisterNodeResponse
 | 
			
		||||
	39, // 39: headscale.v1.HeadscaleService.DeleteNode:output_type -> headscale.v1.DeleteNodeResponse
 | 
			
		||||
	40, // 40: headscale.v1.HeadscaleService.ExpireNode:output_type -> headscale.v1.ExpireNodeResponse
 | 
			
		||||
	41, // 41: headscale.v1.HeadscaleService.RenameNode:output_type -> headscale.v1.RenameNodeResponse
 | 
			
		||||
	42, // 42: headscale.v1.HeadscaleService.ListNodes:output_type -> headscale.v1.ListNodesResponse
 | 
			
		||||
	43, // 43: headscale.v1.HeadscaleService.MoveNode:output_type -> headscale.v1.MoveNodeResponse
 | 
			
		||||
	44, // 44: headscale.v1.HeadscaleService.BackfillNodeIPs:output_type -> headscale.v1.BackfillNodeIPsResponse
 | 
			
		||||
	45, // 45: headscale.v1.HeadscaleService.GetRoutes:output_type -> headscale.v1.GetRoutesResponse
 | 
			
		||||
	46, // 46: headscale.v1.HeadscaleService.EnableRoute:output_type -> headscale.v1.EnableRouteResponse
 | 
			
		||||
	47, // 47: headscale.v1.HeadscaleService.DisableRoute:output_type -> headscale.v1.DisableRouteResponse
 | 
			
		||||
	48, // 48: headscale.v1.HeadscaleService.GetNodeRoutes:output_type -> headscale.v1.GetNodeRoutesResponse
 | 
			
		||||
	49, // 49: headscale.v1.HeadscaleService.DeleteRoute:output_type -> headscale.v1.DeleteRouteResponse
 | 
			
		||||
	50, // 50: headscale.v1.HeadscaleService.CreateApiKey:output_type -> headscale.v1.CreateApiKeyResponse
 | 
			
		||||
	51, // 51: headscale.v1.HeadscaleService.ExpireApiKey:output_type -> headscale.v1.ExpireApiKeyResponse
 | 
			
		||||
	52, // 52: headscale.v1.HeadscaleService.ListApiKeys:output_type -> headscale.v1.ListApiKeysResponse
 | 
			
		||||
	53, // 53: headscale.v1.HeadscaleService.DeleteApiKey:output_type -> headscale.v1.DeleteApiKeyResponse
 | 
			
		||||
	54, // 54: headscale.v1.HeadscaleService.GetPolicy:output_type -> headscale.v1.GetPolicyResponse
 | 
			
		||||
	55, // 55: headscale.v1.HeadscaleService.SetPolicy:output_type -> headscale.v1.SetPolicyResponse
 | 
			
		||||
	28, // [28:56] is the sub-list for method output_type
 | 
			
		||||
	0,  // [0:28] is the sub-list for method input_type
 | 
			
		||||
	0,  // [0:0] is the sub-list for extension type_name
 | 
			
		||||
	0,  // [0:0] is the sub-list for extension extendee
 | 
			
		||||
	0,  // [0:0] is the sub-list for field type_name
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@ -19,7 +19,6 @@ import (
 | 
			
		||||
const _ = grpc.SupportPackageIsVersion7
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
	HeadscaleService_GetUser_FullMethodName          = "/headscale.v1.HeadscaleService/GetUser"
 | 
			
		||||
	HeadscaleService_CreateUser_FullMethodName       = "/headscale.v1.HeadscaleService/CreateUser"
 | 
			
		||||
	HeadscaleService_RenameUser_FullMethodName       = "/headscale.v1.HeadscaleService/RenameUser"
 | 
			
		||||
	HeadscaleService_DeleteUser_FullMethodName       = "/headscale.v1.HeadscaleService/DeleteUser"
 | 
			
		||||
@ -55,7 +54,6 @@ const (
 | 
			
		||||
// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.
 | 
			
		||||
type HeadscaleServiceClient interface {
 | 
			
		||||
	// --- User start ---
 | 
			
		||||
	GetUser(ctx context.Context, in *GetUserRequest, opts ...grpc.CallOption) (*GetUserResponse, error)
 | 
			
		||||
	CreateUser(ctx context.Context, in *CreateUserRequest, opts ...grpc.CallOption) (*CreateUserResponse, error)
 | 
			
		||||
	RenameUser(ctx context.Context, in *RenameUserRequest, opts ...grpc.CallOption) (*RenameUserResponse, error)
 | 
			
		||||
	DeleteUser(ctx context.Context, in *DeleteUserRequest, opts ...grpc.CallOption) (*DeleteUserResponse, error)
 | 
			
		||||
@ -99,15 +97,6 @@ func NewHeadscaleServiceClient(cc grpc.ClientConnInterface) HeadscaleServiceClie
 | 
			
		||||
	return &headscaleServiceClient{cc}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *headscaleServiceClient) GetUser(ctx context.Context, in *GetUserRequest, opts ...grpc.CallOption) (*GetUserResponse, error) {
 | 
			
		||||
	out := new(GetUserResponse)
 | 
			
		||||
	err := c.cc.Invoke(ctx, HeadscaleService_GetUser_FullMethodName, in, out, opts...)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	return out, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (c *headscaleServiceClient) CreateUser(ctx context.Context, in *CreateUserRequest, opts ...grpc.CallOption) (*CreateUserResponse, error) {
 | 
			
		||||
	out := new(CreateUserResponse)
 | 
			
		||||
	err := c.cc.Invoke(ctx, HeadscaleService_CreateUser_FullMethodName, in, out, opts...)
 | 
			
		||||
@ -365,7 +354,6 @@ func (c *headscaleServiceClient) SetPolicy(ctx context.Context, in *SetPolicyReq
 | 
			
		||||
// for forward compatibility
 | 
			
		||||
type HeadscaleServiceServer interface {
 | 
			
		||||
	// --- User start ---
 | 
			
		||||
	GetUser(context.Context, *GetUserRequest) (*GetUserResponse, error)
 | 
			
		||||
	CreateUser(context.Context, *CreateUserRequest) (*CreateUserResponse, error)
 | 
			
		||||
	RenameUser(context.Context, *RenameUserRequest) (*RenameUserResponse, error)
 | 
			
		||||
	DeleteUser(context.Context, *DeleteUserRequest) (*DeleteUserResponse, error)
 | 
			
		||||
@ -406,9 +394,6 @@ type HeadscaleServiceServer interface {
 | 
			
		||||
type UnimplementedHeadscaleServiceServer struct {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (UnimplementedHeadscaleServiceServer) GetUser(context.Context, *GetUserRequest) (*GetUserResponse, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method GetUser not implemented")
 | 
			
		||||
}
 | 
			
		||||
func (UnimplementedHeadscaleServiceServer) CreateUser(context.Context, *CreateUserRequest) (*CreateUserResponse, error) {
 | 
			
		||||
	return nil, status.Errorf(codes.Unimplemented, "method CreateUser not implemented")
 | 
			
		||||
}
 | 
			
		||||
@ -506,24 +491,6 @@ func RegisterHeadscaleServiceServer(s grpc.ServiceRegistrar, srv HeadscaleServic
 | 
			
		||||
	s.RegisterService(&HeadscaleService_ServiceDesc, srv)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _HeadscaleService_GetUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(GetUserRequest)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	if interceptor == nil {
 | 
			
		||||
		return srv.(HeadscaleServiceServer).GetUser(ctx, in)
 | 
			
		||||
	}
 | 
			
		||||
	info := &grpc.UnaryServerInfo{
 | 
			
		||||
		Server:     srv,
 | 
			
		||||
		FullMethod: HeadscaleService_GetUser_FullMethodName,
 | 
			
		||||
	}
 | 
			
		||||
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
 | 
			
		||||
		return srv.(HeadscaleServiceServer).GetUser(ctx, req.(*GetUserRequest))
 | 
			
		||||
	}
 | 
			
		||||
	return interceptor(ctx, in, info, handler)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func _HeadscaleService_CreateUser_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
 | 
			
		||||
	in := new(CreateUserRequest)
 | 
			
		||||
	if err := dec(in); err != nil {
 | 
			
		||||
@ -1035,10 +1002,6 @@ var HeadscaleService_ServiceDesc = grpc.ServiceDesc{
 | 
			
		||||
	ServiceName: "headscale.v1.HeadscaleService",
 | 
			
		||||
	HandlerType: (*HeadscaleServiceServer)(nil),
 | 
			
		||||
	Methods: []grpc.MethodDesc{
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "GetUser",
 | 
			
		||||
			Handler:    _HeadscaleService_GetUser_Handler,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			MethodName: "CreateUser",
 | 
			
		||||
			Handler:    _HeadscaleService_CreateUser_Handler,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.34.2
 | 
			
		||||
// 	protoc-gen-go v1.35.1
 | 
			
		||||
// 	protoc        (unknown)
 | 
			
		||||
// source: headscale/v1/node.proto
 | 
			
		||||
 | 
			
		||||
@ -99,12 +99,10 @@ type Node struct {
 | 
			
		||||
 | 
			
		||||
func (x *Node) Reset() {
 | 
			
		||||
	*x = Node{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[0]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *Node) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -114,7 +112,7 @@ func (*Node) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *Node) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[0]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -259,12 +257,10 @@ type RegisterNodeRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *RegisterNodeRequest) Reset() {
 | 
			
		||||
	*x = RegisterNodeRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[1]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RegisterNodeRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -274,7 +270,7 @@ func (*RegisterNodeRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *RegisterNodeRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[1]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -313,12 +309,10 @@ type RegisterNodeResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *RegisterNodeResponse) Reset() {
 | 
			
		||||
	*x = RegisterNodeResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[2]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RegisterNodeResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -328,7 +322,7 @@ func (*RegisterNodeResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *RegisterNodeResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[2]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -360,12 +354,10 @@ type GetNodeRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRequest) Reset() {
 | 
			
		||||
	*x = GetNodeRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[3]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -375,7 +367,7 @@ func (*GetNodeRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[3]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -407,12 +399,10 @@ type GetNodeResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeResponse) Reset() {
 | 
			
		||||
	*x = GetNodeResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[4]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -422,7 +412,7 @@ func (*GetNodeResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[4]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -455,12 +445,10 @@ type SetTagsRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *SetTagsRequest) Reset() {
 | 
			
		||||
	*x = SetTagsRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[5]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SetTagsRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -470,7 +458,7 @@ func (*SetTagsRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *SetTagsRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[5]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -509,12 +497,10 @@ type SetTagsResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *SetTagsResponse) Reset() {
 | 
			
		||||
	*x = SetTagsResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[6]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SetTagsResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -524,7 +510,7 @@ func (*SetTagsResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *SetTagsResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[6]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -556,12 +542,10 @@ type DeleteNodeRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteNodeRequest) Reset() {
 | 
			
		||||
	*x = DeleteNodeRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[7]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteNodeRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -571,7 +555,7 @@ func (*DeleteNodeRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteNodeRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[7]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -601,12 +585,10 @@ type DeleteNodeResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteNodeResponse) Reset() {
 | 
			
		||||
	*x = DeleteNodeResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[8]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteNodeResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -616,7 +598,7 @@ func (*DeleteNodeResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteNodeResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[8]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -641,12 +623,10 @@ type ExpireNodeRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *ExpireNodeRequest) Reset() {
 | 
			
		||||
	*x = ExpireNodeRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[9]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ExpireNodeRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -656,7 +636,7 @@ func (*ExpireNodeRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ExpireNodeRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[9]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -688,12 +668,10 @@ type ExpireNodeResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *ExpireNodeResponse) Reset() {
 | 
			
		||||
	*x = ExpireNodeResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[10]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ExpireNodeResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -703,7 +681,7 @@ func (*ExpireNodeResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ExpireNodeResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[10]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -736,12 +714,10 @@ type RenameNodeRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *RenameNodeRequest) Reset() {
 | 
			
		||||
	*x = RenameNodeRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[11]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RenameNodeRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -751,7 +727,7 @@ func (*RenameNodeRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *RenameNodeRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[11]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -790,12 +766,10 @@ type RenameNodeResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *RenameNodeResponse) Reset() {
 | 
			
		||||
	*x = RenameNodeResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[12]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RenameNodeResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -805,7 +779,7 @@ func (*RenameNodeResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *RenameNodeResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[12]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -837,12 +811,10 @@ type ListNodesRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *ListNodesRequest) Reset() {
 | 
			
		||||
	*x = ListNodesRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[13]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListNodesRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -852,7 +824,7 @@ func (*ListNodesRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ListNodesRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[13]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -884,12 +856,10 @@ type ListNodesResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *ListNodesResponse) Reset() {
 | 
			
		||||
	*x = ListNodesResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[14]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListNodesResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -899,7 +869,7 @@ func (*ListNodesResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ListNodesResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[14]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -932,12 +902,10 @@ type MoveNodeRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *MoveNodeRequest) Reset() {
 | 
			
		||||
	*x = MoveNodeRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[15]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *MoveNodeRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -947,7 +915,7 @@ func (*MoveNodeRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *MoveNodeRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[15]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -986,12 +954,10 @@ type MoveNodeResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *MoveNodeResponse) Reset() {
 | 
			
		||||
	*x = MoveNodeResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[16]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *MoveNodeResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -1001,7 +967,7 @@ func (*MoveNodeResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *MoveNodeResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[16]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -1036,12 +1002,10 @@ type DebugCreateNodeRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *DebugCreateNodeRequest) Reset() {
 | 
			
		||||
	*x = DebugCreateNodeRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[17]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DebugCreateNodeRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -1051,7 +1015,7 @@ func (*DebugCreateNodeRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DebugCreateNodeRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[17]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -1104,12 +1068,10 @@ type DebugCreateNodeResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *DebugCreateNodeResponse) Reset() {
 | 
			
		||||
	*x = DebugCreateNodeResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[18]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DebugCreateNodeResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -1119,7 +1081,7 @@ func (*DebugCreateNodeResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DebugCreateNodeResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[18]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -1151,12 +1113,10 @@ type BackfillNodeIPsRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *BackfillNodeIPsRequest) Reset() {
 | 
			
		||||
	*x = BackfillNodeIPsRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[19]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *BackfillNodeIPsRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -1166,7 +1126,7 @@ func (*BackfillNodeIPsRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *BackfillNodeIPsRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[19]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -1198,12 +1158,10 @@ type BackfillNodeIPsResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *BackfillNodeIPsResponse) Reset() {
 | 
			
		||||
	*x = BackfillNodeIPsResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[20]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *BackfillNodeIPsResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -1213,7 +1171,7 @@ func (*BackfillNodeIPsResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *BackfillNodeIPsResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_node_proto_msgTypes[20]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -1445,260 +1403,6 @@ func file_headscale_v1_node_proto_init() {
 | 
			
		||||
	}
 | 
			
		||||
	file_headscale_v1_preauthkey_proto_init()
 | 
			
		||||
	file_headscale_v1_user_proto_init()
 | 
			
		||||
	if !protoimpl.UnsafeEnabled {
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[0].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*Node); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[1].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*RegisterNodeRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[2].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*RegisterNodeResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[3].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetNodeRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[4].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetNodeResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[5].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*SetTagsRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[6].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*SetTagsResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[7].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteNodeRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[8].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteNodeResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[9].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ExpireNodeRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[10].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ExpireNodeResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[11].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*RenameNodeRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[12].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*RenameNodeResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[13].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ListNodesRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[14].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ListNodesResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[15].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*MoveNodeRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[16].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*MoveNodeResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[17].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DebugCreateNodeRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[18].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DebugCreateNodeResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[19].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*BackfillNodeIPsRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_node_proto_msgTypes[20].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*BackfillNodeIPsResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	type x struct{}
 | 
			
		||||
	out := protoimpl.TypeBuilder{
 | 
			
		||||
		File: protoimpl.DescBuilder{
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.34.2
 | 
			
		||||
// 	protoc-gen-go v1.35.1
 | 
			
		||||
// 	protoc        (unknown)
 | 
			
		||||
// source: headscale/v1/policy.proto
 | 
			
		||||
 | 
			
		||||
@ -31,12 +31,10 @@ type SetPolicyRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *SetPolicyRequest) Reset() {
 | 
			
		||||
	*x = SetPolicyRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_policy_proto_msgTypes[0]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SetPolicyRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -46,7 +44,7 @@ func (*SetPolicyRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *SetPolicyRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_policy_proto_msgTypes[0]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -79,12 +77,10 @@ type SetPolicyResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *SetPolicyResponse) Reset() {
 | 
			
		||||
	*x = SetPolicyResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_policy_proto_msgTypes[1]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *SetPolicyResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -94,7 +90,7 @@ func (*SetPolicyResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *SetPolicyResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_policy_proto_msgTypes[1]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -131,12 +127,10 @@ type GetPolicyRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetPolicyRequest) Reset() {
 | 
			
		||||
	*x = GetPolicyRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_policy_proto_msgTypes[2]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetPolicyRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -146,7 +140,7 @@ func (*GetPolicyRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetPolicyRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_policy_proto_msgTypes[2]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -172,12 +166,10 @@ type GetPolicyResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetPolicyResponse) Reset() {
 | 
			
		||||
	*x = GetPolicyResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_policy_proto_msgTypes[3]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetPolicyResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -187,7 +179,7 @@ func (*GetPolicyResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetPolicyResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_policy_proto_msgTypes[3]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -281,56 +273,6 @@ func file_headscale_v1_policy_proto_init() {
 | 
			
		||||
	if File_headscale_v1_policy_proto != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if !protoimpl.UnsafeEnabled {
 | 
			
		||||
		file_headscale_v1_policy_proto_msgTypes[0].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*SetPolicyRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_policy_proto_msgTypes[1].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*SetPolicyResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_policy_proto_msgTypes[2].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetPolicyRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_policy_proto_msgTypes[3].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetPolicyResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	type x struct{}
 | 
			
		||||
	out := protoimpl.TypeBuilder{
 | 
			
		||||
		File: protoimpl.DescBuilder{
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.34.2
 | 
			
		||||
// 	protoc-gen-go v1.35.1
 | 
			
		||||
// 	protoc        (unknown)
 | 
			
		||||
// source: headscale/v1/preauthkey.proto
 | 
			
		||||
 | 
			
		||||
@ -39,12 +39,10 @@ type PreAuthKey struct {
 | 
			
		||||
 | 
			
		||||
func (x *PreAuthKey) Reset() {
 | 
			
		||||
	*x = PreAuthKey{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[0]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *PreAuthKey) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -54,7 +52,7 @@ func (*PreAuthKey) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *PreAuthKey) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[0]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -146,12 +144,10 @@ type CreatePreAuthKeyRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *CreatePreAuthKeyRequest) Reset() {
 | 
			
		||||
	*x = CreatePreAuthKeyRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[1]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CreatePreAuthKeyRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -161,7 +157,7 @@ func (*CreatePreAuthKeyRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *CreatePreAuthKeyRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[1]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -221,12 +217,10 @@ type CreatePreAuthKeyResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *CreatePreAuthKeyResponse) Reset() {
 | 
			
		||||
	*x = CreatePreAuthKeyResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[2]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CreatePreAuthKeyResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -236,7 +230,7 @@ func (*CreatePreAuthKeyResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *CreatePreAuthKeyResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[2]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -269,12 +263,10 @@ type ExpirePreAuthKeyRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *ExpirePreAuthKeyRequest) Reset() {
 | 
			
		||||
	*x = ExpirePreAuthKeyRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[3]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ExpirePreAuthKeyRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -284,7 +276,7 @@ func (*ExpirePreAuthKeyRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ExpirePreAuthKeyRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[3]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -321,12 +313,10 @@ type ExpirePreAuthKeyResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *ExpirePreAuthKeyResponse) Reset() {
 | 
			
		||||
	*x = ExpirePreAuthKeyResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[4]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ExpirePreAuthKeyResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -336,7 +326,7 @@ func (*ExpirePreAuthKeyResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ExpirePreAuthKeyResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[4]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -361,12 +351,10 @@ type ListPreAuthKeysRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *ListPreAuthKeysRequest) Reset() {
 | 
			
		||||
	*x = ListPreAuthKeysRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[5]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListPreAuthKeysRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -376,7 +364,7 @@ func (*ListPreAuthKeysRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ListPreAuthKeysRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[5]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -408,12 +396,10 @@ type ListPreAuthKeysResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *ListPreAuthKeysResponse) Reset() {
 | 
			
		||||
	*x = ListPreAuthKeysResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[6]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListPreAuthKeysResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -423,7 +409,7 @@ func (*ListPreAuthKeysResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ListPreAuthKeysResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_preauthkey_proto_msgTypes[6]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -550,92 +536,6 @@ func file_headscale_v1_preauthkey_proto_init() {
 | 
			
		||||
	if File_headscale_v1_preauthkey_proto != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if !protoimpl.UnsafeEnabled {
 | 
			
		||||
		file_headscale_v1_preauthkey_proto_msgTypes[0].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*PreAuthKey); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_preauthkey_proto_msgTypes[1].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*CreatePreAuthKeyRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_preauthkey_proto_msgTypes[2].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*CreatePreAuthKeyResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_preauthkey_proto_msgTypes[3].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ExpirePreAuthKeyRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_preauthkey_proto_msgTypes[4].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ExpirePreAuthKeyResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_preauthkey_proto_msgTypes[5].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ListPreAuthKeysRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_preauthkey_proto_msgTypes[6].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ListPreAuthKeysResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	type x struct{}
 | 
			
		||||
	out := protoimpl.TypeBuilder{
 | 
			
		||||
		File: protoimpl.DescBuilder{
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.34.2
 | 
			
		||||
// 	protoc-gen-go v1.35.1
 | 
			
		||||
// 	protoc        (unknown)
 | 
			
		||||
// source: headscale/v1/routes.proto
 | 
			
		||||
 | 
			
		||||
@ -39,12 +39,10 @@ type Route struct {
 | 
			
		||||
 | 
			
		||||
func (x *Route) Reset() {
 | 
			
		||||
	*x = Route{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[0]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *Route) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -54,7 +52,7 @@ func (*Route) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *Route) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[0]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -140,12 +138,10 @@ type GetRoutesRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetRoutesRequest) Reset() {
 | 
			
		||||
	*x = GetRoutesRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[1]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetRoutesRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -155,7 +151,7 @@ func (*GetRoutesRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetRoutesRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[1]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -180,12 +176,10 @@ type GetRoutesResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetRoutesResponse) Reset() {
 | 
			
		||||
	*x = GetRoutesResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[2]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetRoutesResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -195,7 +189,7 @@ func (*GetRoutesResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetRoutesResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[2]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -227,12 +221,10 @@ type EnableRouteRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *EnableRouteRequest) Reset() {
 | 
			
		||||
	*x = EnableRouteRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[3]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *EnableRouteRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -242,7 +234,7 @@ func (*EnableRouteRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *EnableRouteRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[3]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -272,12 +264,10 @@ type EnableRouteResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *EnableRouteResponse) Reset() {
 | 
			
		||||
	*x = EnableRouteResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[4]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *EnableRouteResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -287,7 +277,7 @@ func (*EnableRouteResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *EnableRouteResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[4]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -312,12 +302,10 @@ type DisableRouteRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *DisableRouteRequest) Reset() {
 | 
			
		||||
	*x = DisableRouteRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[5]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DisableRouteRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -327,7 +315,7 @@ func (*DisableRouteRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DisableRouteRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[5]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -357,12 +345,10 @@ type DisableRouteResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *DisableRouteResponse) Reset() {
 | 
			
		||||
	*x = DisableRouteResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[6]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DisableRouteResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -372,7 +358,7 @@ func (*DisableRouteResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DisableRouteResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[6]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -397,12 +383,10 @@ type GetNodeRoutesRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRoutesRequest) Reset() {
 | 
			
		||||
	*x = GetNodeRoutesRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[7]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRoutesRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -412,7 +396,7 @@ func (*GetNodeRoutesRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRoutesRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[7]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -444,12 +428,10 @@ type GetNodeRoutesResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRoutesResponse) Reset() {
 | 
			
		||||
	*x = GetNodeRoutesResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[8]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRoutesResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -459,7 +441,7 @@ func (*GetNodeRoutesResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetNodeRoutesResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[8]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -491,12 +473,10 @@ type DeleteRouteRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteRouteRequest) Reset() {
 | 
			
		||||
	*x = DeleteRouteRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[9]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteRouteRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -506,7 +486,7 @@ func (*DeleteRouteRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteRouteRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[9]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -536,12 +516,10 @@ type DeleteRouteResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteRouteResponse) Reset() {
 | 
			
		||||
	*x = DeleteRouteResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[10]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteRouteResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -551,7 +529,7 @@ func (*DeleteRouteResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteRouteResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_routes_proto_msgTypes[10]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -678,140 +656,6 @@ func file_headscale_v1_routes_proto_init() {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	file_headscale_v1_node_proto_init()
 | 
			
		||||
	if !protoimpl.UnsafeEnabled {
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[0].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*Route); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[1].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetRoutesRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[2].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetRoutesResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[3].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*EnableRouteRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[4].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*EnableRouteResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[5].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DisableRouteRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[6].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DisableRouteResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[7].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetNodeRoutesRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[8].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetNodeRoutesResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[9].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteRouteRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_routes_proto_msgTypes[10].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteRouteResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	type x struct{}
 | 
			
		||||
	out := protoimpl.TypeBuilder{
 | 
			
		||||
		File: protoimpl.DescBuilder{
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
// Code generated by protoc-gen-go. DO NOT EDIT.
 | 
			
		||||
// versions:
 | 
			
		||||
// 	protoc-gen-go v1.34.2
 | 
			
		||||
// 	protoc-gen-go v1.35.1
 | 
			
		||||
// 	protoc        (unknown)
 | 
			
		||||
// source: headscale/v1/user.proto
 | 
			
		||||
 | 
			
		||||
@ -26,7 +26,7 @@ type User struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Id            string                 `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`
 | 
			
		||||
	Id            uint64                 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
 | 
			
		||||
	Name          string                 `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
 | 
			
		||||
	CreatedAt     *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=created_at,json=createdAt,proto3" json:"created_at,omitempty"`
 | 
			
		||||
	DisplayName   string                 `protobuf:"bytes,4,opt,name=display_name,json=displayName,proto3" json:"display_name,omitempty"`
 | 
			
		||||
@ -38,12 +38,10 @@ type User struct {
 | 
			
		||||
 | 
			
		||||
func (x *User) Reset() {
 | 
			
		||||
	*x = User{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[0]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *User) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -53,7 +51,7 @@ func (*User) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *User) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[0]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -68,11 +66,11 @@ func (*User) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{0}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *User) GetId() string {
 | 
			
		||||
func (x *User) GetId() uint64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Id
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *User) GetName() string {
 | 
			
		||||
@ -124,100 +122,6 @@ func (x *User) GetProfilePicUrl() string {
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GetUserRequest struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetUserRequest) Reset() {
 | 
			
		||||
	*x = GetUserRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[1]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetUserRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (*GetUserRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetUserRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[1]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
		}
 | 
			
		||||
		return ms
 | 
			
		||||
	}
 | 
			
		||||
	return mi.MessageOf(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use GetUserRequest.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*GetUserRequest) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetUserRequest) GetName() string {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Name
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type GetUserResponse struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	User *User `protobuf:"bytes,1,opt,name=user,proto3" json:"user,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetUserResponse) Reset() {
 | 
			
		||||
	*x = GetUserResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[2]
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		ms.StoreMessageInfo(mi)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetUserResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (*GetUserResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *GetUserResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[2]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
		}
 | 
			
		||||
		return ms
 | 
			
		||||
	}
 | 
			
		||||
	return mi.MessageOf(x)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use GetUserResponse.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*GetUserResponse) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *GetUserResponse) GetUser() *User {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.User
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type CreateUserRequest struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
@ -228,12 +132,10 @@ type CreateUserRequest struct {
 | 
			
		||||
 | 
			
		||||
func (x *CreateUserRequest) Reset() {
 | 
			
		||||
	*x = CreateUserRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[3]
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[1]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CreateUserRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -242,8 +144,8 @@ func (x *CreateUserRequest) String() string {
 | 
			
		||||
func (*CreateUserRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *CreateUserRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[3]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[1]
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -255,7 +157,7 @@ func (x *CreateUserRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use CreateUserRequest.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*CreateUserRequest) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{3}
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{1}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CreateUserRequest) GetName() string {
 | 
			
		||||
@ -275,12 +177,10 @@ type CreateUserResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *CreateUserResponse) Reset() {
 | 
			
		||||
	*x = CreateUserResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[4]
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[2]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CreateUserResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -289,8 +189,8 @@ func (x *CreateUserResponse) String() string {
 | 
			
		||||
func (*CreateUserResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *CreateUserResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[4]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[2]
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -302,7 +202,7 @@ func (x *CreateUserResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use CreateUserResponse.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*CreateUserResponse) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{4}
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{2}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *CreateUserResponse) GetUser() *User {
 | 
			
		||||
@ -317,18 +217,16 @@ type RenameUserRequest struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	OldName string `protobuf:"bytes,1,opt,name=old_name,json=oldName,proto3" json:"old_name,omitempty"`
 | 
			
		||||
	OldId   uint64 `protobuf:"varint,1,opt,name=old_id,json=oldId,proto3" json:"old_id,omitempty"`
 | 
			
		||||
	NewName string `protobuf:"bytes,2,opt,name=new_name,json=newName,proto3" json:"new_name,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserRequest) Reset() {
 | 
			
		||||
	*x = RenameUserRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[5]
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[3]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -337,8 +235,8 @@ func (x *RenameUserRequest) String() string {
 | 
			
		||||
func (*RenameUserRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[5]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[3]
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -350,14 +248,14 @@ func (x *RenameUserRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use RenameUserRequest.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*RenameUserRequest) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{5}
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{3}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserRequest) GetOldName() string {
 | 
			
		||||
func (x *RenameUserRequest) GetOldId() uint64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.OldName
 | 
			
		||||
		return x.OldId
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserRequest) GetNewName() string {
 | 
			
		||||
@ -377,12 +275,10 @@ type RenameUserResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserResponse) Reset() {
 | 
			
		||||
	*x = RenameUserResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[6]
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[4]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -391,8 +287,8 @@ func (x *RenameUserResponse) String() string {
 | 
			
		||||
func (*RenameUserResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[6]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[4]
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -404,7 +300,7 @@ func (x *RenameUserResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use RenameUserResponse.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*RenameUserResponse) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{6}
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{4}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *RenameUserResponse) GetUser() *User {
 | 
			
		||||
@ -419,17 +315,15 @@ type DeleteUserRequest struct {
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
 | 
			
		||||
	Id uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteUserRequest) Reset() {
 | 
			
		||||
	*x = DeleteUserRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[7]
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[5]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteUserRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -438,8 +332,8 @@ func (x *DeleteUserRequest) String() string {
 | 
			
		||||
func (*DeleteUserRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteUserRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[7]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[5]
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -451,14 +345,14 @@ func (x *DeleteUserRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use DeleteUserRequest.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*DeleteUserRequest) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{7}
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{5}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteUserRequest) GetName() string {
 | 
			
		||||
func (x *DeleteUserRequest) GetId() uint64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Name
 | 
			
		||||
		return x.Id
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type DeleteUserResponse struct {
 | 
			
		||||
@ -469,12 +363,10 @@ type DeleteUserResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *DeleteUserResponse) Reset() {
 | 
			
		||||
	*x = DeleteUserResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[8]
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[6]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteUserResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -483,8 +375,8 @@ func (x *DeleteUserResponse) String() string {
 | 
			
		||||
func (*DeleteUserResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *DeleteUserResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[8]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[6]
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -496,23 +388,25 @@ func (x *DeleteUserResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use DeleteUserResponse.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*DeleteUserResponse) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{8}
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{6}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ListUsersRequest struct {
 | 
			
		||||
	state         protoimpl.MessageState
 | 
			
		||||
	sizeCache     protoimpl.SizeCache
 | 
			
		||||
	unknownFields protoimpl.UnknownFields
 | 
			
		||||
 | 
			
		||||
	Id    uint64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"`
 | 
			
		||||
	Name  string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"`
 | 
			
		||||
	Email string `protobuf:"bytes,3,opt,name=email,proto3" json:"email,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersRequest) Reset() {
 | 
			
		||||
	*x = ListUsersRequest{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[9]
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[7]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersRequest) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -521,8 +415,8 @@ func (x *ListUsersRequest) String() string {
 | 
			
		||||
func (*ListUsersRequest) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[9]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[7]
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -534,7 +428,28 @@ func (x *ListUsersRequest) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use ListUsersRequest.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*ListUsersRequest) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{9}
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{7}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersRequest) GetId() uint64 {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Id
 | 
			
		||||
	}
 | 
			
		||||
	return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersRequest) GetName() string {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Name
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersRequest) GetEmail() string {
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		return x.Email
 | 
			
		||||
	}
 | 
			
		||||
	return ""
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ListUsersResponse struct {
 | 
			
		||||
@ -547,12 +462,10 @@ type ListUsersResponse struct {
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersResponse) Reset() {
 | 
			
		||||
	*x = ListUsersResponse{}
 | 
			
		||||
	if protoimpl.UnsafeEnabled {
 | 
			
		||||
		mi := &file_headscale_v1_user_proto_msgTypes[10]
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[8]
 | 
			
		||||
	ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
	ms.StoreMessageInfo(mi)
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersResponse) String() string {
 | 
			
		||||
	return protoimpl.X.MessageStringOf(x)
 | 
			
		||||
@ -561,8 +474,8 @@ func (x *ListUsersResponse) String() string {
 | 
			
		||||
func (*ListUsersResponse) ProtoMessage() {}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[10]
 | 
			
		||||
	if protoimpl.UnsafeEnabled && x != nil {
 | 
			
		||||
	mi := &file_headscale_v1_user_proto_msgTypes[8]
 | 
			
		||||
	if x != nil {
 | 
			
		||||
		ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
 | 
			
		||||
		if ms.LoadMessageInfo() == nil {
 | 
			
		||||
			ms.StoreMessageInfo(mi)
 | 
			
		||||
@ -574,7 +487,7 @@ func (x *ListUsersResponse) ProtoReflect() protoreflect.Message {
 | 
			
		||||
 | 
			
		||||
// Deprecated: Use ListUsersResponse.ProtoReflect.Descriptor instead.
 | 
			
		||||
func (*ListUsersResponse) Descriptor() ([]byte, []int) {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{10}
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescGZIP(), []int{8}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (x *ListUsersResponse) GetUsers() []*User {
 | 
			
		||||
@ -592,7 +505,7 @@ var file_headscale_v1_user_proto_rawDesc = []byte{
 | 
			
		||||
	0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f,
 | 
			
		||||
	0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61,
 | 
			
		||||
	0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x83, 0x02, 0x0a, 0x04, 0x55, 0x73, 0x65,
 | 
			
		||||
	0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69,
 | 
			
		||||
	0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69,
 | 
			
		||||
	0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64,
 | 
			
		||||
	0x5f, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
 | 
			
		||||
@ -607,41 +520,38 @@ var file_headscale_v1_user_proto_rawDesc = []byte{
 | 
			
		||||
	0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72,
 | 
			
		||||
	0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c,
 | 
			
		||||
	0x65, 0x5f, 0x70, 0x69, 0x63, 0x5f, 0x75, 0x72, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52,
 | 
			
		||||
	0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0x24,
 | 
			
		||||
	0x0a, 0x0e, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
 | 
			
		||||
	0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04,
 | 
			
		||||
	0x6e, 0x61, 0x6d, 0x65, 0x22, 0x39, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x55, 0x73, 0x65, 0x72, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18,
 | 
			
		||||
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22,
 | 
			
		||||
	0x27, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71,
 | 
			
		||||
	0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3c, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61,
 | 
			
		||||
	0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26,
 | 
			
		||||
	0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68,
 | 
			
		||||
	0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72,
 | 
			
		||||
	0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x49, 0x0a, 0x11, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65,
 | 
			
		||||
	0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x6f,
 | 
			
		||||
	0x6c, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6f,
 | 
			
		||||
	0x6c, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61,
 | 
			
		||||
	0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d,
 | 
			
		||||
	0x65, 0x22, 0x3c, 0x0a, 0x12, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18,
 | 
			
		||||
	0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c,
 | 
			
		||||
	0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22,
 | 
			
		||||
	0x27, 0x0a, 0x11, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71,
 | 
			
		||||
	0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01,
 | 
			
		||||
	0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65,
 | 
			
		||||
	0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x12,
 | 
			
		||||
	0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
 | 
			
		||||
	0x73, 0x74, 0x22, 0x3d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52,
 | 
			
		||||
	0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72, 0x73,
 | 
			
		||||
	0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65, 0x72,
 | 
			
		||||
	0x73, 0x42, 0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
 | 
			
		||||
	0x6a, 0x75, 0x61, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61,
 | 
			
		||||
	0x6c, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72,
 | 
			
		||||
	0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
	0x0d, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x50, 0x69, 0x63, 0x55, 0x72, 0x6c, 0x22, 0x27,
 | 
			
		||||
	0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75,
 | 
			
		||||
	0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
 | 
			
		||||
	0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3c, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74,
 | 
			
		||||
	0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a,
 | 
			
		||||
	0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x65,
 | 
			
		||||
	0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52,
 | 
			
		||||
	0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x45, 0x0a, 0x11, 0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x55,
 | 
			
		||||
	0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x15, 0x0a, 0x06, 0x6f, 0x6c,
 | 
			
		||||
	0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6f, 0x6c, 0x64, 0x49,
 | 
			
		||||
	0x64, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20,
 | 
			
		||||
	0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x3c, 0x0a, 0x12,
 | 
			
		||||
	0x52, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
 | 
			
		||||
	0x73, 0x65, 0x12, 0x26, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
 | 
			
		||||
	0x32, 0x12, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e,
 | 
			
		||||
	0x55, 0x73, 0x65, 0x72, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x23, 0x0a, 0x11, 0x44, 0x65,
 | 
			
		||||
	0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12,
 | 
			
		||||
	0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x22,
 | 
			
		||||
	0x14, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73,
 | 
			
		||||
	0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4c, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65,
 | 
			
		||||
	0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18,
 | 
			
		||||
	0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d,
 | 
			
		||||
	0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a,
 | 
			
		||||
	0x05, 0x65, 0x6d, 0x61, 0x69, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x6d,
 | 
			
		||||
	0x61, 0x69, 0x6c, 0x22, 0x3d, 0x0a, 0x11, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x73, 0x65, 0x72, 0x73,
 | 
			
		||||
	0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x75, 0x73, 0x65, 0x72,
 | 
			
		||||
	0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x05, 0x75, 0x73, 0x65,
 | 
			
		||||
	0x72, 0x73, 0x42, 0x29, 0x5a, 0x27, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
 | 
			
		||||
	0x2f, 0x6a, 0x75, 0x61, 0x6e, 0x66, 0x6f, 0x6e, 0x74, 0x2f, 0x68, 0x65, 0x61, 0x64, 0x73, 0x63,
 | 
			
		||||
	0x61, 0x6c, 0x65, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x67, 0x6f, 0x2f, 0x76, 0x31, 0x62, 0x06, 0x70,
 | 
			
		||||
	0x72, 0x6f, 0x74, 0x6f, 0x33,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var (
 | 
			
		||||
@ -656,32 +566,29 @@ func file_headscale_v1_user_proto_rawDescGZIP() []byte {
 | 
			
		||||
	return file_headscale_v1_user_proto_rawDescData
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var file_headscale_v1_user_proto_msgTypes = make([]protoimpl.MessageInfo, 11)
 | 
			
		||||
var file_headscale_v1_user_proto_msgTypes = make([]protoimpl.MessageInfo, 9)
 | 
			
		||||
var file_headscale_v1_user_proto_goTypes = []any{
 | 
			
		||||
	(*User)(nil),                  // 0: headscale.v1.User
 | 
			
		||||
	(*GetUserRequest)(nil),        // 1: headscale.v1.GetUserRequest
 | 
			
		||||
	(*GetUserResponse)(nil),       // 2: headscale.v1.GetUserResponse
 | 
			
		||||
	(*CreateUserRequest)(nil),     // 3: headscale.v1.CreateUserRequest
 | 
			
		||||
	(*CreateUserResponse)(nil),    // 4: headscale.v1.CreateUserResponse
 | 
			
		||||
	(*RenameUserRequest)(nil),     // 5: headscale.v1.RenameUserRequest
 | 
			
		||||
	(*RenameUserResponse)(nil),    // 6: headscale.v1.RenameUserResponse
 | 
			
		||||
	(*DeleteUserRequest)(nil),     // 7: headscale.v1.DeleteUserRequest
 | 
			
		||||
	(*DeleteUserResponse)(nil),    // 8: headscale.v1.DeleteUserResponse
 | 
			
		||||
	(*ListUsersRequest)(nil),      // 9: headscale.v1.ListUsersRequest
 | 
			
		||||
	(*ListUsersResponse)(nil),     // 10: headscale.v1.ListUsersResponse
 | 
			
		||||
	(*timestamppb.Timestamp)(nil), // 11: google.protobuf.Timestamp
 | 
			
		||||
	(*CreateUserRequest)(nil),     // 1: headscale.v1.CreateUserRequest
 | 
			
		||||
	(*CreateUserResponse)(nil),    // 2: headscale.v1.CreateUserResponse
 | 
			
		||||
	(*RenameUserRequest)(nil),     // 3: headscale.v1.RenameUserRequest
 | 
			
		||||
	(*RenameUserResponse)(nil),    // 4: headscale.v1.RenameUserResponse
 | 
			
		||||
	(*DeleteUserRequest)(nil),     // 5: headscale.v1.DeleteUserRequest
 | 
			
		||||
	(*DeleteUserResponse)(nil),    // 6: headscale.v1.DeleteUserResponse
 | 
			
		||||
	(*ListUsersRequest)(nil),      // 7: headscale.v1.ListUsersRequest
 | 
			
		||||
	(*ListUsersResponse)(nil),     // 8: headscale.v1.ListUsersResponse
 | 
			
		||||
	(*timestamppb.Timestamp)(nil), // 9: google.protobuf.Timestamp
 | 
			
		||||
}
 | 
			
		||||
var file_headscale_v1_user_proto_depIdxs = []int32{
 | 
			
		||||
	11, // 0: headscale.v1.User.created_at:type_name -> google.protobuf.Timestamp
 | 
			
		||||
	0,  // 1: headscale.v1.GetUserResponse.user:type_name -> headscale.v1.User
 | 
			
		||||
	0,  // 2: headscale.v1.CreateUserResponse.user:type_name -> headscale.v1.User
 | 
			
		||||
	0,  // 3: headscale.v1.RenameUserResponse.user:type_name -> headscale.v1.User
 | 
			
		||||
	0,  // 4: headscale.v1.ListUsersResponse.users:type_name -> headscale.v1.User
 | 
			
		||||
	5,  // [5:5] is the sub-list for method output_type
 | 
			
		||||
	5,  // [5:5] is the sub-list for method input_type
 | 
			
		||||
	5,  // [5:5] is the sub-list for extension type_name
 | 
			
		||||
	5,  // [5:5] is the sub-list for extension extendee
 | 
			
		||||
	0,  // [0:5] is the sub-list for field type_name
 | 
			
		||||
	9, // 0: headscale.v1.User.created_at:type_name -> google.protobuf.Timestamp
 | 
			
		||||
	0, // 1: headscale.v1.CreateUserResponse.user:type_name -> headscale.v1.User
 | 
			
		||||
	0, // 2: headscale.v1.RenameUserResponse.user:type_name -> headscale.v1.User
 | 
			
		||||
	0, // 3: headscale.v1.ListUsersResponse.users:type_name -> headscale.v1.User
 | 
			
		||||
	4, // [4:4] is the sub-list for method output_type
 | 
			
		||||
	4, // [4:4] is the sub-list for method input_type
 | 
			
		||||
	4, // [4:4] is the sub-list for extension type_name
 | 
			
		||||
	4, // [4:4] is the sub-list for extension extendee
 | 
			
		||||
	0, // [0:4] is the sub-list for field type_name
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() { file_headscale_v1_user_proto_init() }
 | 
			
		||||
@ -689,147 +596,13 @@ func file_headscale_v1_user_proto_init() {
 | 
			
		||||
	if File_headscale_v1_user_proto != nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	if !protoimpl.UnsafeEnabled {
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[0].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*User); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[1].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetUserRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[2].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*GetUserResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[3].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*CreateUserRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[4].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*CreateUserResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[5].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*RenameUserRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[6].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*RenameUserResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[7].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteUserRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[8].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*DeleteUserResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[9].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ListUsersRequest); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		file_headscale_v1_user_proto_msgTypes[10].Exporter = func(v any, i int) any {
 | 
			
		||||
			switch v := v.(*ListUsersResponse); i {
 | 
			
		||||
			case 0:
 | 
			
		||||
				return &v.state
 | 
			
		||||
			case 1:
 | 
			
		||||
				return &v.sizeCache
 | 
			
		||||
			case 2:
 | 
			
		||||
				return &v.unknownFields
 | 
			
		||||
			default:
 | 
			
		||||
				return nil
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	type x struct{}
 | 
			
		||||
	out := protoimpl.TypeBuilder{
 | 
			
		||||
		File: protoimpl.DescBuilder{
 | 
			
		||||
			GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
 | 
			
		||||
			RawDescriptor: file_headscale_v1_user_proto_rawDesc,
 | 
			
		||||
			NumEnums:      0,
 | 
			
		||||
			NumMessages:   11,
 | 
			
		||||
			NumMessages:   9,
 | 
			
		||||
			NumExtensions: 0,
 | 
			
		||||
			NumServices:   0,
 | 
			
		||||
		},
 | 
			
		||||
 | 
			
		||||
@ -776,11 +776,33 @@
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "parameters": [
 | 
			
		||||
          {
 | 
			
		||||
            "name": "id",
 | 
			
		||||
            "in": "query",
 | 
			
		||||
            "required": false,
 | 
			
		||||
            "type": "string",
 | 
			
		||||
            "format": "uint64"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "name": "name",
 | 
			
		||||
            "in": "query",
 | 
			
		||||
            "required": false,
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "name": "email",
 | 
			
		||||
            "in": "query",
 | 
			
		||||
            "required": false,
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "tags": [
 | 
			
		||||
          "HeadscaleService"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
      "post": {
 | 
			
		||||
        "summary": "--- User start ---",
 | 
			
		||||
        "operationId": "HeadscaleService_CreateUser",
 | 
			
		||||
        "responses": {
 | 
			
		||||
          "200": {
 | 
			
		||||
@ -811,36 +833,7 @@
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "/api/v1/user/{name}": {
 | 
			
		||||
      "get": {
 | 
			
		||||
        "summary": "--- User start ---",
 | 
			
		||||
        "operationId": "HeadscaleService_GetUser",
 | 
			
		||||
        "responses": {
 | 
			
		||||
          "200": {
 | 
			
		||||
            "description": "A successful response.",
 | 
			
		||||
            "schema": {
 | 
			
		||||
              "$ref": "#/definitions/v1GetUserResponse"
 | 
			
		||||
            }
 | 
			
		||||
          },
 | 
			
		||||
          "default": {
 | 
			
		||||
            "description": "An unexpected error response.",
 | 
			
		||||
            "schema": {
 | 
			
		||||
              "$ref": "#/definitions/rpcStatus"
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "parameters": [
 | 
			
		||||
          {
 | 
			
		||||
            "name": "name",
 | 
			
		||||
            "in": "path",
 | 
			
		||||
            "required": true,
 | 
			
		||||
            "type": "string"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "tags": [
 | 
			
		||||
          "HeadscaleService"
 | 
			
		||||
        ]
 | 
			
		||||
      },
 | 
			
		||||
    "/api/v1/user/{id}": {
 | 
			
		||||
      "delete": {
 | 
			
		||||
        "operationId": "HeadscaleService_DeleteUser",
 | 
			
		||||
        "responses": {
 | 
			
		||||
@ -859,10 +852,11 @@
 | 
			
		||||
        },
 | 
			
		||||
        "parameters": [
 | 
			
		||||
          {
 | 
			
		||||
            "name": "name",
 | 
			
		||||
            "name": "id",
 | 
			
		||||
            "in": "path",
 | 
			
		||||
            "required": true,
 | 
			
		||||
            "type": "string"
 | 
			
		||||
            "type": "string",
 | 
			
		||||
            "format": "uint64"
 | 
			
		||||
          }
 | 
			
		||||
        ],
 | 
			
		||||
        "tags": [
 | 
			
		||||
@ -870,7 +864,7 @@
 | 
			
		||||
        ]
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "/api/v1/user/{oldName}/rename/{newName}": {
 | 
			
		||||
    "/api/v1/user/{oldId}/rename/{newName}": {
 | 
			
		||||
      "post": {
 | 
			
		||||
        "operationId": "HeadscaleService_RenameUser",
 | 
			
		||||
        "responses": {
 | 
			
		||||
@ -889,10 +883,11 @@
 | 
			
		||||
        },
 | 
			
		||||
        "parameters": [
 | 
			
		||||
          {
 | 
			
		||||
            "name": "oldName",
 | 
			
		||||
            "name": "oldId",
 | 
			
		||||
            "in": "path",
 | 
			
		||||
            "required": true,
 | 
			
		||||
            "type": "string"
 | 
			
		||||
            "type": "string",
 | 
			
		||||
            "format": "uint64"
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            "name": "newName",
 | 
			
		||||
@ -1178,14 +1173,6 @@
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "v1GetUserResponse": {
 | 
			
		||||
      "type": "object",
 | 
			
		||||
      "properties": {
 | 
			
		||||
        "user": {
 | 
			
		||||
          "$ref": "#/definitions/v1User"
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "v1ListApiKeysResponse": {
 | 
			
		||||
      "type": "object",
 | 
			
		||||
      "properties": {
 | 
			
		||||
@ -1453,7 +1440,8 @@
 | 
			
		||||
      "type": "object",
 | 
			
		||||
      "properties": {
 | 
			
		||||
        "id": {
 | 
			
		||||
          "type": "string"
 | 
			
		||||
          "type": "string",
 | 
			
		||||
          "format": "uint64"
 | 
			
		||||
        },
 | 
			
		||||
        "name": {
 | 
			
		||||
          "type": "string"
 | 
			
		||||
 | 
			
		||||
@ -36,18 +36,6 @@ func newHeadscaleV1APIServer(h *Headscale) v1.HeadscaleServiceServer {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (api headscaleV1APIServer) GetUser(
 | 
			
		||||
	ctx context.Context,
 | 
			
		||||
	request *v1.GetUserRequest,
 | 
			
		||||
) (*v1.GetUserResponse, error) {
 | 
			
		||||
	user, err := api.h.db.GetUserByName(request.GetName())
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return &v1.GetUserResponse{User: user.Proto()}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (api headscaleV1APIServer) CreateUser(
 | 
			
		||||
	ctx context.Context,
 | 
			
		||||
	request *v1.CreateUserRequest,
 | 
			
		||||
@ -69,7 +57,7 @@ func (api headscaleV1APIServer) RenameUser(
 | 
			
		||||
	ctx context.Context,
 | 
			
		||||
	request *v1.RenameUserRequest,
 | 
			
		||||
) (*v1.RenameUserResponse, error) {
 | 
			
		||||
	oldUser, err := api.h.db.GetUserByName(request.GetOldName())
 | 
			
		||||
	oldUser, err := api.h.db.GetUserByID(types.UserID(request.GetOldId()))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@ -91,7 +79,7 @@ func (api headscaleV1APIServer) DeleteUser(
 | 
			
		||||
	ctx context.Context,
 | 
			
		||||
	request *v1.DeleteUserRequest,
 | 
			
		||||
) (*v1.DeleteUserResponse, error) {
 | 
			
		||||
	user, err := api.h.db.GetUserByName(request.GetName())
 | 
			
		||||
	user, err := api.h.db.GetUserByID(types.UserID(request.GetId()))
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@ -113,7 +101,19 @@ func (api headscaleV1APIServer) ListUsers(
 | 
			
		||||
	ctx context.Context,
 | 
			
		||||
	request *v1.ListUsersRequest,
 | 
			
		||||
) (*v1.ListUsersResponse, error) {
 | 
			
		||||
	users, err := api.h.db.ListUsers()
 | 
			
		||||
	var err error
 | 
			
		||||
	var users []types.User
 | 
			
		||||
 | 
			
		||||
	switch {
 | 
			
		||||
	case request.GetName() != "":
 | 
			
		||||
		users, err = api.h.db.ListUsers(&types.User{Name: request.GetName()})
 | 
			
		||||
	case request.GetEmail() != "":
 | 
			
		||||
		users, err = api.h.db.ListUsers(&types.User{Email: request.GetEmail()})
 | 
			
		||||
	case request.GetId() != 0:
 | 
			
		||||
		users, err = api.h.db.ListUsers(&types.User{Model: gorm.Model{ID: uint(request.GetId())}})
 | 
			
		||||
	default:
 | 
			
		||||
		users, err = api.h.db.ListUsers()
 | 
			
		||||
	}
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
@ -127,8 +127,6 @@ func (api headscaleV1APIServer) ListUsers(
 | 
			
		||||
		return response[i].Id < response[j].Id
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	log.Trace().Caller().Interface("users", response).Msg("")
 | 
			
		||||
 | 
			
		||||
	return &v1.ListUsersResponse{Users: response}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -108,7 +108,7 @@ func (u *User) TailscaleUserProfile() tailcfg.UserProfile {
 | 
			
		||||
 | 
			
		||||
func (u *User) Proto() *v1.User {
 | 
			
		||||
	return &v1.User{
 | 
			
		||||
		Id:            strconv.FormatUint(uint64(u.ID), util.Base10),
 | 
			
		||||
		Id:            uint64(u.ID),
 | 
			
		||||
		Name:          u.Name,
 | 
			
		||||
		CreatedAt:     timestamppb.New(u.CreatedAt),
 | 
			
		||||
		DisplayName:   u.DisplayName,
 | 
			
		||||
 | 
			
		||||
@ -130,22 +130,22 @@ func TestOIDCAuthenticationPingAll(t *testing.T) {
 | 
			
		||||
 | 
			
		||||
	want := []v1.User{
 | 
			
		||||
		{
 | 
			
		||||
			Id:   "1",
 | 
			
		||||
			Id:   1,
 | 
			
		||||
			Name: "user1",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			Id:         "2",
 | 
			
		||||
			Id:         2,
 | 
			
		||||
			Name:       "user1",
 | 
			
		||||
			Email:      "user1@headscale.net",
 | 
			
		||||
			Provider:   "oidc",
 | 
			
		||||
			ProviderId: oidcConfig.Issuer + "/user1",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			Id:   "3",
 | 
			
		||||
			Id:   3,
 | 
			
		||||
			Name: "user2",
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			Id:         "4",
 | 
			
		||||
			Id:         4,
 | 
			
		||||
			Name:       "user2",
 | 
			
		||||
			Email:      "", // Unverified
 | 
			
		||||
			Provider:   "oidc",
 | 
			
		||||
@ -260,22 +260,22 @@ func TestOIDC024UserCreation(t *testing.T) {
 | 
			
		||||
			want: func(iss string) []v1.User {
 | 
			
		||||
				return []v1.User{
 | 
			
		||||
					{
 | 
			
		||||
						Id:   "1",
 | 
			
		||||
						Id:   1,
 | 
			
		||||
						Name: "user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "2",
 | 
			
		||||
						Id:         2,
 | 
			
		||||
						Name:       "user1",
 | 
			
		||||
						Email:      "user1@headscale.net",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:   "3",
 | 
			
		||||
						Id:   3,
 | 
			
		||||
						Name: "user2",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "4",
 | 
			
		||||
						Id:         4,
 | 
			
		||||
						Name:       "user2",
 | 
			
		||||
						Email:      "user2@headscale.net",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
@ -295,21 +295,21 @@ func TestOIDC024UserCreation(t *testing.T) {
 | 
			
		||||
			want: func(iss string) []v1.User {
 | 
			
		||||
				return []v1.User{
 | 
			
		||||
					{
 | 
			
		||||
						Id:   "1",
 | 
			
		||||
						Id:   1,
 | 
			
		||||
						Name: "user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "2",
 | 
			
		||||
						Id:         2,
 | 
			
		||||
						Name:       "user1",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:   "3",
 | 
			
		||||
						Id:   3,
 | 
			
		||||
						Name: "user2",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "4",
 | 
			
		||||
						Id:         4,
 | 
			
		||||
						Name:       "user2",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user2",
 | 
			
		||||
@ -329,14 +329,14 @@ func TestOIDC024UserCreation(t *testing.T) {
 | 
			
		||||
			want: func(iss string) []v1.User {
 | 
			
		||||
				return []v1.User{
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "1",
 | 
			
		||||
						Id:         1,
 | 
			
		||||
						Name:       "user1",
 | 
			
		||||
						Email:      "user1@headscale.net",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "2",
 | 
			
		||||
						Id:         2,
 | 
			
		||||
						Name:       "user2",
 | 
			
		||||
						Email:      "user2@headscale.net",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
@ -357,21 +357,21 @@ func TestOIDC024UserCreation(t *testing.T) {
 | 
			
		||||
			want: func(iss string) []v1.User {
 | 
			
		||||
				return []v1.User{
 | 
			
		||||
					{
 | 
			
		||||
						Id:   "1",
 | 
			
		||||
						Id:   1,
 | 
			
		||||
						Name: "user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "2",
 | 
			
		||||
						Id:         2,
 | 
			
		||||
						Name:       "user1",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:   "3",
 | 
			
		||||
						Id:   3,
 | 
			
		||||
						Name: "user2",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "4",
 | 
			
		||||
						Id:         4,
 | 
			
		||||
						Name:       "user2",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user2",
 | 
			
		||||
@ -393,14 +393,14 @@ func TestOIDC024UserCreation(t *testing.T) {
 | 
			
		||||
					// Hmm I think we will have to overwrite the initial name here
 | 
			
		||||
					// createuser with "user1.headscale.net", but oidc with "user1"
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "1",
 | 
			
		||||
						Id:         1,
 | 
			
		||||
						Name:       "user1",
 | 
			
		||||
						Email:      "user1@headscale.net",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "2",
 | 
			
		||||
						Id:         2,
 | 
			
		||||
						Name:       "user2",
 | 
			
		||||
						Email:      "user2@headscale.net",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
@ -421,21 +421,21 @@ func TestOIDC024UserCreation(t *testing.T) {
 | 
			
		||||
			want: func(iss string) []v1.User {
 | 
			
		||||
				return []v1.User{
 | 
			
		||||
					{
 | 
			
		||||
						Id:   "1",
 | 
			
		||||
						Id:   1,
 | 
			
		||||
						Name: "user1.headscale.net",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "2",
 | 
			
		||||
						Id:         2,
 | 
			
		||||
						Name:       "user1",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user1",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:   "3",
 | 
			
		||||
						Id:   3,
 | 
			
		||||
						Name: "user2.headscale.net",
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Id:         "4",
 | 
			
		||||
						Id:         4,
 | 
			
		||||
						Name:       "user2",
 | 
			
		||||
						Provider:   "oidc",
 | 
			
		||||
						ProviderId: iss + "/user2",
 | 
			
		||||
 | 
			
		||||
@ -1,18 +1,21 @@
 | 
			
		||||
package integration
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"cmp"
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"sort"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	tcmp "github.com/google/go-cmp/cmp"
 | 
			
		||||
	"github.com/google/go-cmp/cmp/cmpopts"
 | 
			
		||||
	v1 "github.com/juanfont/headscale/gen/go/headscale/v1"
 | 
			
		||||
	"github.com/juanfont/headscale/hscontrol/policy"
 | 
			
		||||
	"github.com/juanfont/headscale/integration/hsic"
 | 
			
		||||
	"github.com/juanfont/headscale/integration/tsic"
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"github.com/stretchr/testify/require"
 | 
			
		||||
	"golang.org/x/exp/slices"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -30,6 +33,16 @@ func executeAndUnmarshal[T any](headscale ControlServer, command []string, resul
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Interface ensuring that we can sort structs from gRPC that
 | 
			
		||||
// have an ID field.
 | 
			
		||||
type GRPCSortable interface {
 | 
			
		||||
	GetId() uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func sortWithID[T GRPCSortable](a, b T) int {
 | 
			
		||||
	return cmp.Compare(a.GetId(), b.GetId())
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestUserCommand(t *testing.T) {
 | 
			
		||||
	IntegrationSkip(t)
 | 
			
		||||
	t.Parallel()
 | 
			
		||||
@ -49,7 +62,7 @@ func TestUserCommand(t *testing.T) {
 | 
			
		||||
	headscale, err := scenario.Headscale()
 | 
			
		||||
	assertNoErr(t, err)
 | 
			
		||||
 | 
			
		||||
	var listUsers []v1.User
 | 
			
		||||
	var listUsers []*v1.User
 | 
			
		||||
	err = executeAndUnmarshal(headscale,
 | 
			
		||||
		[]string{
 | 
			
		||||
			"headscale",
 | 
			
		||||
@ -62,8 +75,8 @@ func TestUserCommand(t *testing.T) {
 | 
			
		||||
	)
 | 
			
		||||
	assertNoErr(t, err)
 | 
			
		||||
 | 
			
		||||
	slices.SortFunc(listUsers, sortWithID)
 | 
			
		||||
	result := []string{listUsers[0].GetName(), listUsers[1].GetName()}
 | 
			
		||||
	sort.Strings(result)
 | 
			
		||||
 | 
			
		||||
	assert.Equal(
 | 
			
		||||
		t,
 | 
			
		||||
@ -76,15 +89,14 @@ func TestUserCommand(t *testing.T) {
 | 
			
		||||
			"headscale",
 | 
			
		||||
			"users",
 | 
			
		||||
			"rename",
 | 
			
		||||
			"--output",
 | 
			
		||||
			"json",
 | 
			
		||||
			"user2",
 | 
			
		||||
			"newname",
 | 
			
		||||
			"--output=json",
 | 
			
		||||
			fmt.Sprintf("--identifier=%d", listUsers[1].GetId()),
 | 
			
		||||
			"--new-name=newname",
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	assertNoErr(t, err)
 | 
			
		||||
 | 
			
		||||
	var listAfterRenameUsers []v1.User
 | 
			
		||||
	var listAfterRenameUsers []*v1.User
 | 
			
		||||
	err = executeAndUnmarshal(headscale,
 | 
			
		||||
		[]string{
 | 
			
		||||
			"headscale",
 | 
			
		||||
@ -97,14 +109,131 @@ func TestUserCommand(t *testing.T) {
 | 
			
		||||
	)
 | 
			
		||||
	assertNoErr(t, err)
 | 
			
		||||
 | 
			
		||||
	slices.SortFunc(listUsers, sortWithID)
 | 
			
		||||
	result = []string{listAfterRenameUsers[0].GetName(), listAfterRenameUsers[1].GetName()}
 | 
			
		||||
	sort.Strings(result)
 | 
			
		||||
 | 
			
		||||
	assert.Equal(
 | 
			
		||||
		t,
 | 
			
		||||
		[]string{"newname", "user1"},
 | 
			
		||||
		[]string{"user1", "newname"},
 | 
			
		||||
		result,
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	var listByUsername []*v1.User
 | 
			
		||||
	err = executeAndUnmarshal(headscale,
 | 
			
		||||
		[]string{
 | 
			
		||||
			"headscale",
 | 
			
		||||
			"users",
 | 
			
		||||
			"list",
 | 
			
		||||
			"--output",
 | 
			
		||||
			"json",
 | 
			
		||||
			"--name=user1",
 | 
			
		||||
		},
 | 
			
		||||
		&listByUsername,
 | 
			
		||||
	)
 | 
			
		||||
	assertNoErr(t, err)
 | 
			
		||||
 | 
			
		||||
	slices.SortFunc(listByUsername, sortWithID)
 | 
			
		||||
	want := []*v1.User{
 | 
			
		||||
		{
 | 
			
		||||
			Id:   1,
 | 
			
		||||
			Name: "user1",
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if diff := tcmp.Diff(want, listByUsername, cmpopts.IgnoreUnexported(v1.User{}), cmpopts.IgnoreFields(v1.User{}, "CreatedAt")); diff != "" {
 | 
			
		||||
		t.Errorf("unexpected users (-want +got):\n%s", diff)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var listByID []*v1.User
 | 
			
		||||
	err = executeAndUnmarshal(headscale,
 | 
			
		||||
		[]string{
 | 
			
		||||
			"headscale",
 | 
			
		||||
			"users",
 | 
			
		||||
			"list",
 | 
			
		||||
			"--output",
 | 
			
		||||
			"json",
 | 
			
		||||
			"--identifier=1",
 | 
			
		||||
		},
 | 
			
		||||
		&listByID,
 | 
			
		||||
	)
 | 
			
		||||
	assertNoErr(t, err)
 | 
			
		||||
 | 
			
		||||
	slices.SortFunc(listByID, sortWithID)
 | 
			
		||||
	want = []*v1.User{
 | 
			
		||||
		{
 | 
			
		||||
			Id:   1,
 | 
			
		||||
			Name: "user1",
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if diff := tcmp.Diff(want, listByID, cmpopts.IgnoreUnexported(v1.User{}), cmpopts.IgnoreFields(v1.User{}, "CreatedAt")); diff != "" {
 | 
			
		||||
		t.Errorf("unexpected users (-want +got):\n%s", diff)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	deleteResult, err := headscale.Execute(
 | 
			
		||||
		[]string{
 | 
			
		||||
			"headscale",
 | 
			
		||||
			"users",
 | 
			
		||||
			"destroy",
 | 
			
		||||
			"--force",
 | 
			
		||||
			// Delete "user1"
 | 
			
		||||
			"--identifier=1",
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
	assert.Contains(t, deleteResult, "User destroyed")
 | 
			
		||||
 | 
			
		||||
	var listAfterIDDelete []*v1.User
 | 
			
		||||
	err = executeAndUnmarshal(headscale,
 | 
			
		||||
		[]string{
 | 
			
		||||
			"headscale",
 | 
			
		||||
			"users",
 | 
			
		||||
			"list",
 | 
			
		||||
			"--output",
 | 
			
		||||
			"json",
 | 
			
		||||
		},
 | 
			
		||||
		&listAfterIDDelete,
 | 
			
		||||
	)
 | 
			
		||||
	assertNoErr(t, err)
 | 
			
		||||
 | 
			
		||||
	slices.SortFunc(listAfterIDDelete, sortWithID)
 | 
			
		||||
	want = []*v1.User{
 | 
			
		||||
		{
 | 
			
		||||
			Id:   2,
 | 
			
		||||
			Name: "newname",
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if diff := tcmp.Diff(want, listAfterIDDelete, cmpopts.IgnoreUnexported(v1.User{}), cmpopts.IgnoreFields(v1.User{}, "CreatedAt")); diff != "" {
 | 
			
		||||
		t.Errorf("unexpected users (-want +got):\n%s", diff)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	deleteResult, err = headscale.Execute(
 | 
			
		||||
		[]string{
 | 
			
		||||
			"headscale",
 | 
			
		||||
			"users",
 | 
			
		||||
			"destroy",
 | 
			
		||||
			"--force",
 | 
			
		||||
			"--name=newname",
 | 
			
		||||
		},
 | 
			
		||||
	)
 | 
			
		||||
	assert.Nil(t, err)
 | 
			
		||||
	assert.Contains(t, deleteResult, "User destroyed")
 | 
			
		||||
 | 
			
		||||
	var listAfterNameDelete []v1.User
 | 
			
		||||
	err = executeAndUnmarshal(headscale,
 | 
			
		||||
		[]string{
 | 
			
		||||
			"headscale",
 | 
			
		||||
			"users",
 | 
			
		||||
			"list",
 | 
			
		||||
			"--output",
 | 
			
		||||
			"json",
 | 
			
		||||
		},
 | 
			
		||||
		&listAfterNameDelete,
 | 
			
		||||
	)
 | 
			
		||||
	assertNoErr(t, err)
 | 
			
		||||
 | 
			
		||||
	require.Len(t, listAfterNameDelete, 0)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestPreAuthKeyCommand(t *testing.T) {
 | 
			
		||||
@ -1716,4 +1845,3 @@ func TestPolicyBrokenConfigCommand(t *testing.T) {
 | 
			
		||||
	)
 | 
			
		||||
	assert.ErrorContains(t, err, "acl policy not found")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -617,6 +617,7 @@ func (t *HeadscaleInContainer) Execute(
 | 
			
		||||
		[]string{},
 | 
			
		||||
	)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.Printf("command: %v", command)
 | 
			
		||||
		log.Printf("command stderr: %s\n", stderr)
 | 
			
		||||
 | 
			
		||||
		if stdout != "" {
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,7 @@ import (
 | 
			
		||||
	"github.com/samber/lo"
 | 
			
		||||
	"github.com/stretchr/testify/assert"
 | 
			
		||||
	"github.com/stretchr/testify/require"
 | 
			
		||||
	xmaps "golang.org/x/exp/maps"
 | 
			
		||||
	"golang.org/x/sync/errgroup"
 | 
			
		||||
	"tailscale.com/envknob"
 | 
			
		||||
)
 | 
			
		||||
@ -512,23 +513,26 @@ func (s *Scenario) CreateHeadscaleEnv(
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for userName, clientCount := range users {
 | 
			
		||||
		err = s.CreateUser(userName)
 | 
			
		||||
	usernames := xmaps.Keys(users)
 | 
			
		||||
	sort.Strings(usernames)
 | 
			
		||||
	for _, username := range usernames {
 | 
			
		||||
		clientCount := users[username]
 | 
			
		||||
		err = s.CreateUser(username)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = s.CreateTailscaleNodesInUser(userName, "all", clientCount, tsOpts...)
 | 
			
		||||
		err = s.CreateTailscaleNodesInUser(username, "all", clientCount, tsOpts...)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		key, err := s.CreatePreAuthKey(userName, true, false)
 | 
			
		||||
		key, err := s.CreatePreAuthKey(username, true, false)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		err = s.RunTailscaleUp(userName, headscale.GetEndpoint(), key.GetKey())
 | 
			
		||||
		err = s.RunTailscaleUp(username, headscale.GetEndpoint(), key.GetKey())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@ -12,31 +12,18 @@ message ApiKey {
 | 
			
		||||
  google.protobuf.Timestamp last_seen = 5;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message CreateApiKeyRequest {
 | 
			
		||||
    google.protobuf.Timestamp expiration = 1;
 | 
			
		||||
}
 | 
			
		||||
message CreateApiKeyRequest { google.protobuf.Timestamp expiration = 1; }
 | 
			
		||||
 | 
			
		||||
message CreateApiKeyResponse {
 | 
			
		||||
    string api_key = 1;
 | 
			
		||||
}
 | 
			
		||||
message CreateApiKeyResponse { string api_key = 1; }
 | 
			
		||||
 | 
			
		||||
message ExpireApiKeyRequest {
 | 
			
		||||
    string prefix = 1;
 | 
			
		||||
}
 | 
			
		||||
message ExpireApiKeyRequest { string prefix = 1; }
 | 
			
		||||
 | 
			
		||||
message ExpireApiKeyResponse {
 | 
			
		||||
}
 | 
			
		||||
message ExpireApiKeyResponse {}
 | 
			
		||||
 | 
			
		||||
message ListApiKeysRequest {
 | 
			
		||||
}
 | 
			
		||||
message ListApiKeysRequest {}
 | 
			
		||||
 | 
			
		||||
message ListApiKeysResponse {
 | 
			
		||||
    repeated ApiKey api_keys = 1;
 | 
			
		||||
}
 | 
			
		||||
message ListApiKeysResponse { repeated ApiKey api_keys = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteApiKeyRequest {
 | 
			
		||||
    string prefix = 1;
 | 
			
		||||
}
 | 
			
		||||
message DeleteApiKeyRequest { string prefix = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteApiKeyResponse {
 | 
			
		||||
}
 | 
			
		||||
message DeleteApiKeyResponse {}
 | 
			
		||||
 | 
			
		||||
@ -29,9 +29,7 @@ message ClientConnectivity {
 | 
			
		||||
  ClientSupports client_supports = 5;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message GetDeviceRequest {
 | 
			
		||||
    string id = 1;
 | 
			
		||||
}
 | 
			
		||||
message GetDeviceRequest { string id = 1; }
 | 
			
		||||
 | 
			
		||||
message GetDeviceResponse {
 | 
			
		||||
  repeated string addresses = 1;
 | 
			
		||||
@ -56,16 +54,11 @@ message GetDeviceResponse {
 | 
			
		||||
  ClientConnectivity client_connectivity = 20;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message DeleteDeviceRequest {
 | 
			
		||||
    string id = 1;
 | 
			
		||||
}
 | 
			
		||||
message DeleteDeviceRequest { string id = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteDeviceResponse {
 | 
			
		||||
}
 | 
			
		||||
message DeleteDeviceResponse {}
 | 
			
		||||
 | 
			
		||||
message GetDeviceRoutesRequest {
 | 
			
		||||
    string id = 1;
 | 
			
		||||
}
 | 
			
		||||
message GetDeviceRoutesRequest { string id = 1; }
 | 
			
		||||
 | 
			
		||||
message GetDeviceRoutesResponse {
 | 
			
		||||
  repeated string enabled_routes = 1;
 | 
			
		||||
 | 
			
		||||
@ -14,12 +14,6 @@ import "headscale/v1/policy.proto";
 | 
			
		||||
 | 
			
		||||
service HeadscaleService {
 | 
			
		||||
  // --- User start ---
 | 
			
		||||
    rpc GetUser(GetUserRequest) returns (GetUserResponse) {
 | 
			
		||||
        option (google.api.http) = {
 | 
			
		||||
            get: "/api/v1/user/{name}"
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  rpc CreateUser(CreateUserRequest) returns (CreateUserResponse) {
 | 
			
		||||
    option (google.api.http) = {
 | 
			
		||||
      post : "/api/v1/user"
 | 
			
		||||
@ -29,13 +23,13 @@ service HeadscaleService {
 | 
			
		||||
 | 
			
		||||
  rpc RenameUser(RenameUserRequest) returns (RenameUserResponse) {
 | 
			
		||||
    option (google.api.http) = {
 | 
			
		||||
            post: "/api/v1/user/{old_name}/rename/{new_name}"
 | 
			
		||||
      post : "/api/v1/user/{old_id}/rename/{new_name}"
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  rpc DeleteUser(DeleteUserRequest) returns (DeleteUserResponse) {
 | 
			
		||||
    option (google.api.http) = {
 | 
			
		||||
            delete: "/api/v1/user/{name}"
 | 
			
		||||
      delete : "/api/v1/user/{id}"
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@ -47,21 +41,24 @@ service HeadscaleService {
 | 
			
		||||
  // --- User end ---
 | 
			
		||||
 | 
			
		||||
  // --- PreAuthKeys start ---
 | 
			
		||||
    rpc CreatePreAuthKey(CreatePreAuthKeyRequest) returns (CreatePreAuthKeyResponse) {
 | 
			
		||||
  rpc CreatePreAuthKey(CreatePreAuthKeyRequest)
 | 
			
		||||
      returns (CreatePreAuthKeyResponse) {
 | 
			
		||||
    option (google.api.http) = {
 | 
			
		||||
      post : "/api/v1/preauthkey"
 | 
			
		||||
      body : "*"
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    rpc ExpirePreAuthKey(ExpirePreAuthKeyRequest) returns (ExpirePreAuthKeyResponse) {
 | 
			
		||||
  rpc ExpirePreAuthKey(ExpirePreAuthKeyRequest)
 | 
			
		||||
      returns (ExpirePreAuthKeyResponse) {
 | 
			
		||||
    option (google.api.http) = {
 | 
			
		||||
      post : "/api/v1/preauthkey/expire"
 | 
			
		||||
      body : "*"
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    rpc ListPreAuthKeys(ListPreAuthKeysRequest) returns (ListPreAuthKeysResponse) {
 | 
			
		||||
  rpc ListPreAuthKeys(ListPreAuthKeysRequest)
 | 
			
		||||
      returns (ListPreAuthKeysResponse) {
 | 
			
		||||
    option (google.api.http) = {
 | 
			
		||||
      get : "/api/v1/preauthkey"
 | 
			
		||||
    };
 | 
			
		||||
@ -69,7 +66,8 @@ service HeadscaleService {
 | 
			
		||||
  // --- PreAuthKeys end ---
 | 
			
		||||
 | 
			
		||||
  // --- Node start ---
 | 
			
		||||
    rpc DebugCreateNode(DebugCreateNodeRequest) returns (DebugCreateNodeResponse) {
 | 
			
		||||
  rpc DebugCreateNode(DebugCreateNodeRequest)
 | 
			
		||||
      returns (DebugCreateNodeResponse) {
 | 
			
		||||
    option (google.api.http) = {
 | 
			
		||||
      post : "/api/v1/debug/node"
 | 
			
		||||
      body : "*"
 | 
			
		||||
@ -126,7 +124,8 @@ service HeadscaleService {
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
    rpc BackfillNodeIPs(BackfillNodeIPsRequest) returns (BackfillNodeIPsResponse) {
 | 
			
		||||
  rpc BackfillNodeIPs(BackfillNodeIPsRequest)
 | 
			
		||||
      returns (BackfillNodeIPsResponse) {
 | 
			
		||||
    option (google.api.http) = {
 | 
			
		||||
      post : "/api/v1/node/backfillips"
 | 
			
		||||
    };
 | 
			
		||||
@ -223,13 +222,15 @@ service HeadscaleService {
 | 
			
		||||
  //     };
 | 
			
		||||
  // }
 | 
			
		||||
 | 
			
		||||
    // rpc GetDeviceRoutes(GetDeviceRoutesRequest) returns(GetDeviceRoutesResponse) {
 | 
			
		||||
  // rpc GetDeviceRoutes(GetDeviceRoutesRequest)
 | 
			
		||||
  // returns(GetDeviceRoutesResponse) {
 | 
			
		||||
  //     option(google.api.http) = {
 | 
			
		||||
  //         get : "/api/v1/device/{id}/routes"
 | 
			
		||||
  //     };
 | 
			
		||||
  // }
 | 
			
		||||
 | 
			
		||||
    // rpc EnableDeviceRoutes(EnableDeviceRoutesRequest) returns(EnableDeviceRoutesResponse) {
 | 
			
		||||
  // rpc EnableDeviceRoutes(EnableDeviceRoutesRequest)
 | 
			
		||||
  // returns(EnableDeviceRoutesResponse) {
 | 
			
		||||
  //     option(google.api.http) = {
 | 
			
		||||
  //         post : "/api/v1/device/{id}/routes"
 | 
			
		||||
  //     };
 | 
			
		||||
 | 
			
		||||
@ -55,66 +55,44 @@ message RegisterNodeRequest {
 | 
			
		||||
  string key = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message RegisterNodeResponse {
 | 
			
		||||
    Node node = 1;
 | 
			
		||||
}
 | 
			
		||||
message RegisterNodeResponse { Node node = 1; }
 | 
			
		||||
 | 
			
		||||
message GetNodeRequest {
 | 
			
		||||
    uint64 node_id = 1;
 | 
			
		||||
}
 | 
			
		||||
message GetNodeRequest { uint64 node_id = 1; }
 | 
			
		||||
 | 
			
		||||
message GetNodeResponse {
 | 
			
		||||
    Node node = 1;
 | 
			
		||||
}
 | 
			
		||||
message GetNodeResponse { Node node = 1; }
 | 
			
		||||
 | 
			
		||||
message SetTagsRequest {
 | 
			
		||||
  uint64 node_id = 1;
 | 
			
		||||
  repeated string tags = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message SetTagsResponse {
 | 
			
		||||
    Node node = 1;
 | 
			
		||||
}
 | 
			
		||||
message SetTagsResponse { Node node = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteNodeRequest {
 | 
			
		||||
    uint64 node_id = 1;
 | 
			
		||||
}
 | 
			
		||||
message DeleteNodeRequest { uint64 node_id = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteNodeResponse {}
 | 
			
		||||
 | 
			
		||||
message ExpireNodeRequest {
 | 
			
		||||
    uint64 node_id = 1;
 | 
			
		||||
}
 | 
			
		||||
message ExpireNodeRequest { uint64 node_id = 1; }
 | 
			
		||||
 | 
			
		||||
message ExpireNodeResponse {
 | 
			
		||||
    Node node = 1;
 | 
			
		||||
}
 | 
			
		||||
message ExpireNodeResponse { Node node = 1; }
 | 
			
		||||
 | 
			
		||||
message RenameNodeRequest {
 | 
			
		||||
  uint64 node_id = 1;
 | 
			
		||||
  string new_name = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message RenameNodeResponse {
 | 
			
		||||
    Node node = 1;
 | 
			
		||||
}
 | 
			
		||||
message RenameNodeResponse { Node node = 1; }
 | 
			
		||||
 | 
			
		||||
message ListNodesRequest {
 | 
			
		||||
    string user = 1;
 | 
			
		||||
}
 | 
			
		||||
message ListNodesRequest { string user = 1; }
 | 
			
		||||
 | 
			
		||||
message ListNodesResponse {
 | 
			
		||||
    repeated Node nodes = 1;
 | 
			
		||||
}
 | 
			
		||||
message ListNodesResponse { repeated Node nodes = 1; }
 | 
			
		||||
 | 
			
		||||
message MoveNodeRequest {
 | 
			
		||||
  uint64 node_id = 1;
 | 
			
		||||
  string user = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message MoveNodeResponse {
 | 
			
		||||
    Node node = 1;
 | 
			
		||||
}
 | 
			
		||||
message MoveNodeResponse { Node node = 1; }
 | 
			
		||||
 | 
			
		||||
message DebugCreateNodeRequest {
 | 
			
		||||
  string user = 1;
 | 
			
		||||
@ -123,14 +101,8 @@ message DebugCreateNodeRequest {
 | 
			
		||||
  repeated string routes = 4;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message DebugCreateNodeResponse {
 | 
			
		||||
    Node node = 1;
 | 
			
		||||
}
 | 
			
		||||
message DebugCreateNodeResponse { Node node = 1; }
 | 
			
		||||
 | 
			
		||||
message BackfillNodeIPsRequest {
 | 
			
		||||
    bool confirmed = 1;
 | 
			
		||||
}
 | 
			
		||||
message BackfillNodeIPsRequest { bool confirmed = 1; }
 | 
			
		||||
 | 
			
		||||
message BackfillNodeIPsResponse {
 | 
			
		||||
    repeated string changes = 1;
 | 
			
		||||
}
 | 
			
		||||
message BackfillNodeIPsResponse { repeated string changes = 1; }
 | 
			
		||||
 | 
			
		||||
@ -4,9 +4,7 @@ option  go_package = "github.com/juanfont/headscale/gen/go/v1";
 | 
			
		||||
 | 
			
		||||
import "google/protobuf/timestamp.proto";
 | 
			
		||||
 | 
			
		||||
message SetPolicyRequest {
 | 
			
		||||
    string policy = 1;
 | 
			
		||||
}
 | 
			
		||||
message SetPolicyRequest { string policy = 1; }
 | 
			
		||||
 | 
			
		||||
message SetPolicyResponse {
 | 
			
		||||
  string policy = 1;
 | 
			
		||||
 | 
			
		||||
@ -24,22 +24,15 @@ message CreatePreAuthKeyRequest {
 | 
			
		||||
  repeated string acl_tags = 5;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message CreatePreAuthKeyResponse {
 | 
			
		||||
    PreAuthKey pre_auth_key = 1;
 | 
			
		||||
}
 | 
			
		||||
message CreatePreAuthKeyResponse { PreAuthKey pre_auth_key = 1; }
 | 
			
		||||
 | 
			
		||||
message ExpirePreAuthKeyRequest {
 | 
			
		||||
  string user = 1;
 | 
			
		||||
  string key = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ExpirePreAuthKeyResponse {
 | 
			
		||||
}
 | 
			
		||||
message ExpirePreAuthKeyResponse {}
 | 
			
		||||
 | 
			
		||||
message ListPreAuthKeysRequest {
 | 
			
		||||
    string user = 1;
 | 
			
		||||
}
 | 
			
		||||
message ListPreAuthKeysRequest { string user = 1; }
 | 
			
		||||
 | 
			
		||||
message ListPreAuthKeysResponse {
 | 
			
		||||
    repeated PreAuthKey pre_auth_keys = 1;
 | 
			
		||||
}
 | 
			
		||||
message ListPreAuthKeysResponse { repeated PreAuthKey pre_auth_keys = 1; }
 | 
			
		||||
 | 
			
		||||
@ -18,38 +18,22 @@ message Route {
 | 
			
		||||
  google.protobuf.Timestamp deleted_at = 9;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message GetRoutesRequest {
 | 
			
		||||
}
 | 
			
		||||
message GetRoutesRequest {}
 | 
			
		||||
 | 
			
		||||
message GetRoutesResponse {
 | 
			
		||||
    repeated Route routes = 1;
 | 
			
		||||
}
 | 
			
		||||
message GetRoutesResponse { repeated Route routes = 1; }
 | 
			
		||||
 | 
			
		||||
message EnableRouteRequest {
 | 
			
		||||
    uint64 route_id = 1;
 | 
			
		||||
}
 | 
			
		||||
message EnableRouteRequest { uint64 route_id = 1; }
 | 
			
		||||
 | 
			
		||||
message EnableRouteResponse {
 | 
			
		||||
}
 | 
			
		||||
message EnableRouteResponse {}
 | 
			
		||||
 | 
			
		||||
message DisableRouteRequest {
 | 
			
		||||
    uint64 route_id = 1;
 | 
			
		||||
}
 | 
			
		||||
message DisableRouteRequest { uint64 route_id = 1; }
 | 
			
		||||
 | 
			
		||||
message DisableRouteResponse {
 | 
			
		||||
}
 | 
			
		||||
message DisableRouteResponse {}
 | 
			
		||||
 | 
			
		||||
message GetNodeRoutesRequest {
 | 
			
		||||
    uint64 node_id = 1;
 | 
			
		||||
}
 | 
			
		||||
message GetNodeRoutesRequest { uint64 node_id = 1; }
 | 
			
		||||
 | 
			
		||||
message GetNodeRoutesResponse {
 | 
			
		||||
    repeated Route routes = 1;
 | 
			
		||||
}
 | 
			
		||||
message GetNodeRoutesResponse { repeated Route routes = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteRouteRequest {
 | 
			
		||||
    uint64 route_id = 1;
 | 
			
		||||
}
 | 
			
		||||
message DeleteRouteRequest { uint64 route_id = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteRouteResponse {
 | 
			
		||||
}
 | 
			
		||||
message DeleteRouteResponse {}
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ option  go_package = "github.com/juanfont/headscale/gen/go/v1";
 | 
			
		||||
import "google/protobuf/timestamp.proto";
 | 
			
		||||
 | 
			
		||||
message User {
 | 
			
		||||
    string                    id              = 1;
 | 
			
		||||
  uint64 id = 1;
 | 
			
		||||
  string name = 2;
 | 
			
		||||
  google.protobuf.Timestamp created_at = 3;
 | 
			
		||||
  string display_name = 4;
 | 
			
		||||
@ -15,41 +15,25 @@ message User {
 | 
			
		||||
  string profile_pic_url = 8;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message GetUserRequest {
 | 
			
		||||
    string name = 1;
 | 
			
		||||
}
 | 
			
		||||
message CreateUserRequest { string name = 1; }
 | 
			
		||||
 | 
			
		||||
message GetUserResponse {
 | 
			
		||||
    User user = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message CreateUserRequest {
 | 
			
		||||
    string name = 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message CreateUserResponse {
 | 
			
		||||
    User user = 1;
 | 
			
		||||
}
 | 
			
		||||
message CreateUserResponse { User user = 1; }
 | 
			
		||||
 | 
			
		||||
message RenameUserRequest {
 | 
			
		||||
    string old_name = 1;
 | 
			
		||||
  uint64 old_id = 1;
 | 
			
		||||
  string new_name = 2;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message RenameUserResponse {
 | 
			
		||||
    User user = 1;
 | 
			
		||||
}
 | 
			
		||||
message RenameUserResponse { User user = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteUserRequest {
 | 
			
		||||
    string name = 1;
 | 
			
		||||
}
 | 
			
		||||
message DeleteUserRequest { uint64 id = 1; }
 | 
			
		||||
 | 
			
		||||
message DeleteUserResponse {
 | 
			
		||||
}
 | 
			
		||||
message DeleteUserResponse {}
 | 
			
		||||
 | 
			
		||||
message ListUsersRequest {
 | 
			
		||||
  uint64 id = 1;
 | 
			
		||||
  string name = 2;
 | 
			
		||||
  string email = 3;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
message ListUsersResponse {
 | 
			
		||||
    repeated User users = 1;
 | 
			
		||||
}
 | 
			
		||||
message ListUsersResponse { repeated User users = 1; }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user