From 2a15bd17b0f4315585c976330a29b009c753e9f4 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Thu, 16 Apr 2026 17:49:07 -0400 Subject: [PATCH 01/27] add app and both option to module generate form --- cli/app.go | 5 +++++ cli/module_generate.go | 43 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/cli/app.go b/cli/app.go index a5533a84869..bc588910331 100644 --- a/cli/app.go +++ b/cli/app.go @@ -97,6 +97,7 @@ const ( moduleFlagVisibility = "visibility" moduleFlagResourceType = "resource-type" moduleFlagRegister = "register" + moduleFlagGenerateType = "generate-type" moduleFlagUpload = "upload" moduleBuildFlagRef = "ref" @@ -3437,6 +3438,10 @@ After creation, use 'viam module update' to push your new module to app.viam.com Usage: "generate a new modular resource via prompts", UsageText: createUsageText("module generate", nil, true, false), Flags: []cli.Flag{ + &cli.StringFlag{ + Name: moduleFlagGenerateType, + Usage: formatAcceptedValues("type of project to generate", "module", "app", "both"), + }, &cli.StringFlag{ Name: generalFlagName, Usage: "name to use for module. for example, a module that contains sensor implementations might be named 'sensors'", diff --git a/cli/module_generate.go b/cli/module_generate.go index 52c5ac90b89..4d930a88cc8 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -65,6 +65,7 @@ var ( var unauthenticatedMode = false type generateModuleArgs struct { + GenerateType string Name string Language string Visibility string @@ -114,7 +115,49 @@ func promptUnauthenticated() bool { return true } +func promptGenerateType() (string, error) { + var generateType string + form := huh.NewForm( + huh.NewGroup( + huh.NewSelect[string](). + Title("What would you like to generate?"). + Options( + huh.NewOption("Module", "module"), + huh.NewOption("App", "app"), + huh.NewOption("Module and App", "both"), + ). + Value(&generateType), + ), + ).WithWidth(77) + if err := form.Run(); err != nil { + return "", err + } + return generateType, nil +} + func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, args generateModuleArgs) error { + generateType := args.GenerateType + if generateType == "" { + var err error + generateType, err = promptGenerateType() + if err != nil { + return err + } + } + + switch generateType { + case "module", "": + return c.generateModule(ctx, cmd, args) + case "app": + return errors.New("app generation is not yet implemented") + case "both": + return errors.New("app generation is not yet implemented") + default: + return fmt.Errorf("invalid generate type %q: must be module, app, or both", generateType) + } +} + +func (c *viamClient) generateModule(ctx context.Context, cmd *cli.Command, args generateModuleArgs) error { var newModule *modulegen.ModuleInputs var err error From 51dfc0070db16ca9bca6a29b83ca467d7d5799d6 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Thu, 16 Apr 2026 18:05:26 -0400 Subject: [PATCH 02/27] add all app options --- cli/module_generate.go | 99 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index 4d930a88cc8..be6e92dba4c 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -149,7 +149,7 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, case "module", "": return c.generateModule(ctx, cmd, args) case "app": - return errors.New("app generation is not yet implemented") + return c.generateApp(ctx, cmd, args) case "both": return errors.New("app generation is not yet implemented") default: @@ -157,6 +157,103 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, } } +type appInputs struct { + AppName string + AppType string + LocalServer bool + PackageManager string + Visibility string + Namespace string +} + +func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs) error { + app := &appInputs{} + + if err := promptAppUser(app); err != nil { + return err + } + + printf(cmd.Root().Writer, "App form completed: %+v", app) + return errors.New("app template generation is not yet implemented") +} + +func promptAppUser(app *appInputs) error { + form := huh.NewForm( + huh.NewGroup( + huh.NewNote(). + Title("Generate a new Viam app"). + Description("This will generate a web app module that connects to your machine via the Viam SDK.\n"+ + "For more details, view the documentation at \nhttps://docs.viam.com/registry/"), + huh.NewInput(). + Title("Set an app name:"). + Description("The app name can contain only alphanumeric characters, dashes, and underscores."). + Value(&app.AppName). + Placeholder("my-app"). + Suggestions([]string{"my-app"}). + Validate(func(s string) error { + if s == "" { + return errors.New("app name must not be empty") + } + match, err := regexp.MatchString("^[a-zA-Z]+(?:[_\\-a-zA-Z0-9]+)*$", s) + if !match || err != nil { + return errors.New("app names can only contain alphanumeric characters, dashes, and underscores,\nand must start with a letter") + } + if _, err := os.Stat(s); err == nil { + return errors.New("this app directory already exists") + } + return nil + }), + huh.NewSelect[string](). + Title("App type:"). + Description("Single machine apps connect to one machine.\n"+ + "Multi machine apps can connect to multiple machines in your fleet."). + Options( + huh.NewOption("Single Machine", "single_machine"), + huh.NewOption("Multi Machine", "multi_machine"), + ). + Value(&app.AppType), + huh.NewConfirm(). + Title("Enable local server?"). + Description("A local server allows the app to be served directly from the machine\n"+ + "on your local network, without requiring internet access."). + Value(&app.LocalServer), + huh.NewSelect[string](). + Title("Package manager:"). + Description("Select the package manager for your web app's frontend dependencies."). + Options( + huh.NewOption("npm", "npm"), + huh.NewOption("pnpm", "pnpm"), + huh.NewOption("yarn", "yarn"), + huh.NewOption("bun", "bun"), + ). + Value(&app.PackageManager), + huh.NewSelect[string](). + Title("Visibility:"). + Options( + huh.NewOption("Public", moduleVisibilityPublic), + huh.NewOption("Private", moduleVisibilityPrivate), + huh.NewOption("Public Unlisted", moduleVisibilityPublicUnlisted), + ). + Value(&app.Visibility), + huh.NewInput(). + Title("Namespace/Organization ID"). + Value(&app.Namespace). + Placeholder("my-namespace"). + Validate(func(s string) error { + if s == "" { + return errors.New("namespace or org ID must not be empty") + } + return nil + }), + ), + ).WithHeight(25).WithWidth(88) + if err := form.Run(); err != nil { + return errors.Wrap(err, "encountered an error generating app") + } + + return nil +} + func (c *viamClient) generateModule(ctx context.Context, cmd *cli.Command, args generateModuleArgs) error { var newModule *modulegen.ModuleInputs var err error From 942368639aad6fc728f2375c2d5762b8b06892e9 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Thu, 16 Apr 2026 18:23:16 -0400 Subject: [PATCH 03/27] split form into shared and app and module --- cli/module_generate.go | 143 +++++++++++++++++++++-------------------- 1 file changed, 73 insertions(+), 70 deletions(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index be6e92dba4c..505fd87714a 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -145,11 +145,16 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, } } + shared := &sharedInputs{} + if err := promptSharedInputs(shared); err != nil { + return err + } + switch generateType { case "module", "": - return c.generateModule(ctx, cmd, args) + return c.generateModule(ctx, cmd, args, shared) case "app": - return c.generateApp(ctx, cmd, args) + return c.generateApp(ctx, cmd, args, shared) case "both": return errors.New("app generation is not yet implemented") default: @@ -162,11 +167,9 @@ type appInputs struct { AppType string LocalServer bool PackageManager string - Visibility string - Namespace string } -func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs) error { +func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { app := &appInputs{} if err := promptAppUser(app); err != nil { @@ -227,24 +230,6 @@ func promptAppUser(app *appInputs) error { huh.NewOption("bun", "bun"), ). Value(&app.PackageManager), - huh.NewSelect[string](). - Title("Visibility:"). - Options( - huh.NewOption("Public", moduleVisibilityPublic), - huh.NewOption("Private", moduleVisibilityPrivate), - huh.NewOption("Public Unlisted", moduleVisibilityPublicUnlisted), - ). - Value(&app.Visibility), - huh.NewInput(). - Title("Namespace/Organization ID"). - Value(&app.Namespace). - Placeholder("my-namespace"). - Validate(func(s string) error { - if s == "" { - return errors.New("namespace or org ID must not be empty") - } - return nil - }), ), ).WithHeight(25).WithWidth(88) if err := form.Run(); err != nil { @@ -254,7 +239,7 @@ func promptAppUser(app *appInputs) error { return nil } -func (c *viamClient) generateModule(ctx context.Context, cmd *cli.Command, args generateModuleArgs) error { +func (c *viamClient) generateModule(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { var newModule *modulegen.ModuleInputs var err error @@ -273,10 +258,12 @@ func (c *viamClient) generateModule(ctx context.Context, cmd *cli.Command, args } if newModule.HasEmptyInput() { - err = promptUser(newModule) - if err != nil { + if err := promptModuleInputs(newModule); err != nil { return err } + newModule.Visibility = shared.Visibility + newModule.Namespace = shared.Namespace + newModule.RegisterOnApp = shared.RegisterOnApp } if err := checkLanguageVersion(newModule.Language); err != nil { return err @@ -397,9 +384,65 @@ func modelName(module *modulegen.ModuleInputs) string { return resourceName } -// Prompt the user for information regarding the module they want to create -// returns the modulegen.ModuleInputs struct that contains the information the user entered. -func promptUser(module *modulegen.ModuleInputs) error { +// sharedInputs holds fields common to both module and app generation. +type sharedInputs struct { + Visibility string + Namespace string + RegisterOnApp bool +} + +// promptSharedInputs prompts for visibility, namespace, and registration — shared across module and app flows. +func promptSharedInputs(shared *sharedInputs) error { + var registerWidget huh.Field + if unauthenticatedMode { + registerWidget = huh.NewSelect[bool](). + Title("Register with Viam"). + Description("You are unauthenticated and cannot register with Viam.\n\nThis will be local-only."). + Options( + huh.NewOption("Continue", false), + ). + Value(&shared.RegisterOnApp) + } else { + registerWidget = huh.NewConfirm(). + Title("Register with Viam"). + Description("Register with Viam.\nIf selected, "+ + "this will associate with your organization.\n"+ + "Otherwise, this will be local-only.", + ). + Value(&shared.RegisterOnApp) + } + + form := huh.NewForm( + huh.NewGroup( + huh.NewSelect[string](). + Title("Visibility:"). + Options( + huh.NewOption("Public", moduleVisibilityPublic), + huh.NewOption("Private", moduleVisibilityPrivate), + huh.NewOption("Public Unlisted", moduleVisibilityPublicUnlisted), + ). + Value(&shared.Visibility), + huh.NewInput(). + Title("Namespace/Organization ID"). + Value(&shared.Namespace). + Placeholder("my-namespace"). + Validate(func(s string) error { + if s == "" { + return errors.New("namespace or org ID must not be empty") + } + return nil + }), + registerWidget, + ), + ).WithHeight(25).WithWidth(88) + if err := form.Run(); err != nil { + return errors.Wrap(err, "encountered an error in shared prompts") + } + return nil +} + +// promptModuleInputs prompts for module-specific fields: name, language, resource subtype, model name. +func promptModuleInputs(module *modulegen.ModuleInputs) error { titleCaser := cases.Title(language.Und) resourceOptions := []huh.Option[string]{} for _, resource := range modulegen.Resources { @@ -430,25 +473,6 @@ func promptUser(module *modulegen.ModuleInputs) error { resourceOptions = append(resourceOptions, huh.NewOption(resType, resource)) } - var registerWidget huh.Field - if unauthenticatedMode { - registerWidget = huh.NewSelect[bool](). - Title("Register module"). - Description("You are unauthenticated and cannot register this module with Viam.\n\nThis module will be a local-only module."). - Options( - huh.NewOption("Continue", false), - ). - Value(&module.RegisterOnApp) - } else { - registerWidget = huh.NewConfirm(). - Title("Register module"). - Description("Register this module with Viam.\nIf selected, " + - "this will associate the module with your organization.\n" + - "Otherwise, this will be a local-only module.", - ). - Value(&module.RegisterOnApp) - } - form := huh.NewForm( huh.NewGroup( huh.NewNote(). @@ -483,24 +507,6 @@ func promptUser(module *modulegen.ModuleInputs) error { huh.NewOption("C++", cpp), ). Value(&module.Language), - huh.NewSelect[string](). - Title("Visibility:"). - Options( - huh.NewOption("Public", moduleVisibilityPublic), - huh.NewOption("Private", moduleVisibilityPrivate), - huh.NewOption("Public Unlisted", moduleVisibilityPublicUnlisted), - ). - Value(&module.Visibility), - huh.NewInput(). - Title("Namespace/Organization ID"). - Value(&module.Namespace). - Placeholder("my-namespace"). - Validate(func(s string) error { - if s == "" { - return errors.New("namespace or org ID must not be empty") - } - return nil - }), huh.NewSelect[string](). Title("Select a resource to be added to the module:"). Description("A resource is a component or service that provides functionality to your machine.\n"+ @@ -530,14 +536,11 @@ func promptUser(module *modulegen.ModuleInputs) error { } return nil }), - registerWidget, ), ).WithHeight(25).WithWidth(88) - err := form.Run() - if err != nil { + if err := form.Run(); err != nil { return errors.Wrap(err, "encountered an error generating module") } - return nil } From c2f4a15e053dce924f3dbf35c08be39da80de64d Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Thu, 16 Apr 2026 18:30:39 -0400 Subject: [PATCH 04/27] add shared app and module path --- cli/module_generate.go | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index 505fd87714a..9dd48cd7d2f 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -156,7 +156,7 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, case "app": return c.generateApp(ctx, cmd, args, shared) case "both": - return errors.New("app generation is not yet implemented") + return c.generateBoth(ctx, cmd, args, shared) default: return fmt.Errorf("invalid generate type %q: must be module, app, or both", generateType) } @@ -169,6 +169,25 @@ type appInputs struct { PackageManager string } +func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { + // Module-specific prompts + newModule := &modulegen.ModuleInputs{} + if err := promptModuleInputs(newModule); err != nil { + return err + } + newModule.Visibility = shared.Visibility + newModule.Namespace = shared.Namespace + newModule.RegisterOnApp = shared.RegisterOnApp + + // App-specific prompts + app := &appInputs{} + if err := promptAppUser(app); err != nil { + return err + } + + return errors.New("combined module + app generation is not yet implemented") +} + func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { app := &appInputs{} @@ -176,7 +195,6 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen return err } - printf(cmd.Root().Writer, "App form completed: %+v", app) return errors.New("app template generation is not yet implemented") } From 07cdfe6d0828050b080bbae5393921fdf4b0677a Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Thu, 16 Apr 2026 18:54:53 -0400 Subject: [PATCH 05/27] local server only shows on go --- cli/module_generate.go | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index 9dd48cd7d2f..2570f067822 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -179,9 +179,9 @@ func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args ge newModule.Namespace = shared.Namespace newModule.RegisterOnApp = shared.RegisterOnApp - // App-specific prompts + // App-specific prompts — local server availability depends on module language app := &appInputs{} - if err := promptAppUser(app); err != nil { + if err := promptAppUser(app, newModule.Language); err != nil { return err } @@ -191,14 +191,31 @@ func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args ge func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { app := &appInputs{} - if err := promptAppUser(app); err != nil { + if err := promptAppUser(app, ""); err != nil { return err } return errors.New("app template generation is not yet implemented") } -func promptAppUser(app *appInputs) error { +func promptAppUser(app *appInputs, moduleLanguage string) error { + var localServerWidget huh.Field + if moduleLanguage == "" || moduleLanguage == golang { + localServerWidget = huh.NewConfirm(). + Title("Enable local server?"). + Description("A local server allows the app to be served directly from the machine\n"+ + "on your local network, without requiring internet access."). + Value(&app.LocalServer) + } else { + localServerWidget = huh.NewSelect[bool](). + Title("Enable local server?"). + Description("Local server is only available for Go modules. Coming soon for other languages."). + Options( + huh.NewOption("Not available", false), + ). + Value(&app.LocalServer) + } + form := huh.NewForm( huh.NewGroup( huh.NewNote(). @@ -233,11 +250,7 @@ func promptAppUser(app *appInputs) error { huh.NewOption("Multi Machine", "multi_machine"), ). Value(&app.AppType), - huh.NewConfirm(). - Title("Enable local server?"). - Description("A local server allows the app to be served directly from the machine\n"+ - "on your local network, without requiring internet access."). - Value(&app.LocalServer), + localServerWidget, huh.NewSelect[string](). Title("Package manager:"). Description("Select the package manager for your web app's frontend dependencies."). From 3bf2f98d01e10e6512ac3bb2a6284069b55d4e11 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Mon, 20 Apr 2026 10:24:42 -0400 Subject: [PATCH 06/27] AI templates --- cli/module_generate.go | 146 +++++++++++++++++- .../_templates/app/cmd/module/tmpl-main.go | 12 ++ .../_templates/app/dist/index.html | 1 + cli/module_generate/_templates/app/index.html | 15 ++ .../_templates/app/src/lib/auth.ts | 77 +++++++++ .../_templates/app/src/main.ts | 29 ++++ .../_templates/app/tmpl-Makefile | 63 ++++++++ .../_templates/app/tmpl-go.mod | 8 + .../_templates/app/tmpl-meta.json | 25 +++ .../_templates/app/tmpl-module.go | 93 +++++++++++ .../_templates/app/tmpl-package.json | 18 +++ .../_templates/app/tsconfig.json | 11 ++ .../_templates/app/vite.config.ts | 7 + 13 files changed, 504 insertions(+), 1 deletion(-) create mode 100644 cli/module_generate/_templates/app/cmd/module/tmpl-main.go create mode 100644 cli/module_generate/_templates/app/dist/index.html create mode 100644 cli/module_generate/_templates/app/index.html create mode 100644 cli/module_generate/_templates/app/src/lib/auth.ts create mode 100644 cli/module_generate/_templates/app/src/main.ts create mode 100644 cli/module_generate/_templates/app/tmpl-Makefile create mode 100644 cli/module_generate/_templates/app/tmpl-go.mod create mode 100644 cli/module_generate/_templates/app/tmpl-meta.json create mode 100644 cli/module_generate/_templates/app/tmpl-module.go create mode 100644 cli/module_generate/_templates/app/tmpl-package.json create mode 100644 cli/module_generate/_templates/app/tsconfig.json create mode 100644 cli/module_generate/_templates/app/vite.config.ts diff --git a/cli/module_generate.go b/cli/module_generate.go index 2570f067822..094b74c692a 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -188,6 +188,18 @@ func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args ge return errors.New("combined module + app generation is not yet implemented") } +// appTemplateData is the struct passed to app template rendering. +type appTemplateData struct { + ModuleName string + ModuleLowercase string + AppName string + AppType string + Namespace string + Visibility string + PackageManager string + SDKVersion string +} + func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { app := &appInputs{} @@ -195,7 +207,139 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen return err } - return errors.New("app template generation is not yet implemented") + gArgs, err := getGlobalArgs(cmd) + if err != nil { + return err + } + globalArgs := *gArgs + + // Use app name as the module name (the app module wraps the webapp) + moduleName := app.AppName + data := appTemplateData{ + ModuleName: moduleName, + ModuleLowercase: strings.ReplaceAll(strings.ToLower(moduleName), "-", ""), + AppName: app.AppName, + AppType: app.AppType, + Namespace: shared.Namespace, + Visibility: shared.Visibility, + PackageManager: app.PackageManager, + } + + // Get latest SDK version + version, err := getLatestSDKTag(ctx, cmd, golang, globalArgs) + if err != nil { + return err + } + data.SDKVersion = version[1:] + + // Create root directory + if err := setupDirectories(cmd, moduleName, globalArgs); err != nil { + return err + } + + // Copy non-template files and render template files + if err := copyAppTemplate(cmd, moduleName, globalArgs); err != nil { + return err + } + if err := renderAppTemplate(cmd, moduleName, data, globalArgs); err != nil { + return err + } + + cwd, err := os.Getwd() + if err != nil { + cwd = "." + } + printf(cmd.Root().Writer, "App module successfully generated at %s%s%s", cwd, string(os.PathSeparator), moduleName) + return nil +} + +// copyAppTemplate copies non-template files from _templates/app/ into the output directory. +func copyAppTemplate(cmd *cli.Command, moduleName string, globalArgs globalArgs) error { + debugf(cmd.Root().Writer, globalArgs.Debug, "Copying app template files") + appPath := path.Join(templatesPath, "app") + tempDir, err := fs.Sub(templates, appPath) + if err != nil { + return err + } + return fs.WalkDir(tempDir, ".", func(filePath string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if d.IsDir() { + if filePath != "." { + debugf(cmd.Root().Writer, globalArgs.Debug, "\tCreating directory %s", filePath) + if err := os.MkdirAll(filepath.Join(moduleName, filePath), 0o750); err != nil { + return err + } + } + } else if !strings.HasPrefix(d.Name(), templatePrefix) { + debugf(cmd.Root().Writer, globalArgs.Debug, "\tCopying file %s", filePath) + srcFile, err := templates.Open(path.Join(appPath, filePath)) + if err != nil { + return errors.Wrapf(err, "error opening file %s", filePath) + } + defer utils.UncheckedErrorFunc(srcFile.Close) + + destPath := filepath.Join(moduleName, filePath) + //nolint:gosec + destFile, err := os.Create(destPath) + if err != nil { + return errors.Wrapf(err, "failed to create file %s", destPath) + } + defer utils.UncheckedErrorFunc(destFile.Close) + + if _, err := io.Copy(destFile, srcFile); err != nil { + return errors.Wrapf(err, "error copying file %s", destPath) + } + } + return nil + }) +} + +// renderAppTemplate renders tmpl- prefixed files from _templates/app/ with app-specific data. +func renderAppTemplate(cmd *cli.Command, moduleName string, data appTemplateData, globalArgs globalArgs) error { + debugf(cmd.Root().Writer, globalArgs.Debug, "Rendering app template files") + appPath := path.Join(templatesPath, "app") + tempDir, err := fs.Sub(templates, appPath) + if err != nil { + return err + } + return fs.WalkDir(tempDir, ".", func(filePath string, d fs.DirEntry, err error) error { + if err != nil { + return err + } + if !d.IsDir() && strings.HasPrefix(d.Name(), templatePrefix) { + destPath := filepath.Join(moduleName, strings.ReplaceAll(filePath, templatePrefix, "")) + debugf(cmd.Root().Writer, globalArgs.Debug, "\tRendering file %s", destPath) + + tFile, err := templates.Open(path.Join(appPath, filePath)) + if err != nil { + return err + } + defer utils.UncheckedErrorFunc(tFile.Close) + tBytes, err := io.ReadAll(tFile) + if err != nil { + return err + } + + tmpl, err := template.New(filePath).Parse(string(tBytes)) + if err != nil { + return err + } + + //nolint:gosec + destFile, err := os.Create(destPath) + if err != nil { + return err + } + defer utils.UncheckedErrorFunc(destFile.Close) + + if err := tmpl.Execute(destFile, data); err != nil { + return errors.Wrapf(err, "error rendering template %s", destPath) + } + } + return nil + }) } func promptAppUser(app *appInputs, moduleLanguage string) error { diff --git a/cli/module_generate/_templates/app/cmd/module/tmpl-main.go b/cli/module_generate/_templates/app/cmd/module/tmpl-main.go new file mode 100644 index 00000000000..cb1feb158b6 --- /dev/null +++ b/cli/module_generate/_templates/app/cmd/module/tmpl-main.go @@ -0,0 +1,12 @@ +package main + +import ( + "{{ .ModuleLowercase }}" + "go.viam.com/rdk/components/generic" + "go.viam.com/rdk/module" + "go.viam.com/rdk/resource" +) + +func main() { + module.ModularMain(resource.APIModel{API: generic.API, Model: {{ .ModuleLowercase }}.Model}) +} diff --git a/cli/module_generate/_templates/app/dist/index.html b/cli/module_generate/_templates/app/dist/index.html new file mode 100644 index 00000000000..e9b3fb29ca9 --- /dev/null +++ b/cli/module_generate/_templates/app/dist/index.html @@ -0,0 +1 @@ + diff --git a/cli/module_generate/_templates/app/index.html b/cli/module_generate/_templates/app/index.html new file mode 100644 index 00000000000..4b349d9afe2 --- /dev/null +++ b/cli/module_generate/_templates/app/index.html @@ -0,0 +1,15 @@ + + + + + + Viam App + + +

Your Viam app is running

+

This is a placeholder. Replace this with your own frontend.

+

Connecting...

+
    + + + diff --git a/cli/module_generate/_templates/app/src/lib/auth.ts b/cli/module_generate/_templates/app/src/lib/auth.ts new file mode 100644 index 00000000000..f278a6165d3 --- /dev/null +++ b/cli/module_generate/_templates/app/src/lib/auth.ts @@ -0,0 +1,77 @@ +import type { Credential } from '@viamrobotics/sdk'; +import { getCookie, setCookie } from 'typescript-cookie'; + +const DEFAULT_HOST = 'default-host'; + +export interface HostAndCredentials { + host: string; + credentials: Credential; + machineId: string | null; +} + +export function getHostAndCredentials(): HostAndCredentials { + const host = getCookie('host'); + const apiKeyId = getCookie('api-key-id'); + const apiKeySecret = getCookie('api-key'); + if (host && apiKeyId && apiKeySecret) { + return { + host, + credentials: { + type: 'api-key', + payload: apiKeySecret, + authEntity: apiKeyId + }, + machineId: null + }; + } + + const parts = window.location.pathname.split('/'); + if (parts && parts.length >= 3 && parts[1] == 'machine') { + const machineCookieKey = parts[2]; + const cookieData = getCookie(machineCookieKey); + if (cookieData) { + try { + const parsed = JSON.parse(cookieData); + const id = parsed?.apiKey?.id; + const key = parsed?.apiKey?.key; + const h = parsed?.hostname; + const machineId = parsed?.machineId || null; + if (h && id && key) { + return { + host: h, + credentials: { type: 'api-key', payload: key, authEntity: id }, + machineId + }; + } + } catch { + // Invalid cookie data + } + } + } + + const savedInputCookie = getCookie(DEFAULT_HOST); + if (savedInputCookie) { + try { + const { host, id: apiKeyId, key: apiKeySecret } = JSON.parse(savedInputCookie); + if (host && apiKeyId && apiKeySecret) { + return { + host, + credentials: { type: 'api-key', payload: apiKeySecret, authEntity: apiKeyId }, + machineId: null + }; + } + } catch { + // Invalid cookie data + } + } + + return { + host: '', + credentials: { type: 'api-key', payload: '', authEntity: '' }, + machineId: null + }; +} + +export function saveHostInfo(host: string, id: string, key: string) { + setCookie(DEFAULT_HOST, JSON.stringify({ host, key, id })); +} diff --git a/cli/module_generate/_templates/app/src/main.ts b/cli/module_generate/_templates/app/src/main.ts new file mode 100644 index 00000000000..ffd017f61e6 --- /dev/null +++ b/cli/module_generate/_templates/app/src/main.ts @@ -0,0 +1,29 @@ +import { RobotClient } from '@viamrobotics/sdk'; +import { getHostAndCredentials } from './lib/auth'; + +const statusEl = document.getElementById('status')!; +const resourcesEl = document.getElementById('resources')!; + +async function main() { + const { host, credentials } = getHostAndCredentials(); + if (!host) { + statusEl.textContent = 'No credentials found. Are you running via the local server or app.viam.com?'; + return; + } + + try { + const machine = await RobotClient.atAddress(host, { credentials }); + statusEl.textContent = 'Connected to ' + host; + + const names = machine.resourceNames(); + for (const name of names) { + const li = document.createElement('li'); + li.textContent = `${name.namespace}:${name.type}:${name.subtype}/${name.name}`; + resourcesEl.appendChild(li); + } + } catch (err) { + statusEl.textContent = 'Connection failed: ' + (err as Error).message; + } +} + +main(); diff --git a/cli/module_generate/_templates/app/tmpl-Makefile b/cli/module_generate/_templates/app/tmpl-Makefile new file mode 100644 index 00000000000..ddbd72aeb46 --- /dev/null +++ b/cli/module_generate/_templates/app/tmpl-Makefile @@ -0,0 +1,63 @@ + +GO_BUILD_ENV := +GO_BUILD_FLAGS := +MODULE_BINARY := bin/{{ .ModuleName }} + +ifeq ($(VIAM_TARGET_OS), windows) + GO_BUILD_ENV += GOOS=windows GOARCH=amd64 + GO_BUILD_FLAGS := -tags no_cgo + MODULE_BINARY = bin/{{ .ModuleName }}.exe +endif + +UNAME_S := $(shell uname -s) +ifeq ($(UNAME_S),Darwin) + INSTALL_NODE := which npm > /dev/null 2>&1 || brew install node + INSTALL_PKG_MGR := which {{ .PackageManager }} > /dev/null 2>&1 || npm install -g {{ .PackageManager }} +else + INSTALL_NODE := which npm > /dev/null 2>&1 || curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && apt-get -y install nodejs + INSTALL_PKG_MGR := which {{ .PackageManager }} > /dev/null 2>&1 || npm install -g {{ .PackageManager }} +endif + +.DEFAULT_GOAL := all + +$(MODULE_BINARY): Makefile go.mod *.go cmd/module/*.go dist/index.html + $(GO_BUILD_ENV) go build $(GO_BUILD_FLAGS) -o $(MODULE_BINARY) cmd/module/main.go + +lint: + gofmt -s -w . + +update: + go get go.viam.com/rdk@latest + go mod tidy + +test: + go test ./... + +module.tar.gz: meta.json $(MODULE_BINARY) dist/index.html +ifeq ($(VIAM_TARGET_OS), windows) + jq '.entrypoint = "./bin/{{ .ModuleName }}.exe"' meta.json > temp.json && mv temp.json meta.json +else + strip $(MODULE_BINARY) +endif + tar czf $@ meta.json $(MODULE_BINARY) dist +ifeq ($(VIAM_TARGET_OS), windows) + git checkout meta.json +endif + +module: test module.tar.gz + +all: test module.tar.gz + +node_modules: package.json + {{ .PackageManager }} install + +dist/index.html: node_modules src/* + {{ .PackageManager }} run build + +setup: + go mod tidy + $(INSTALL_NODE) + $(INSTALL_PKG_MGR) + +clean: + rm -rf bin dist module.tar.gz diff --git a/cli/module_generate/_templates/app/tmpl-go.mod b/cli/module_generate/_templates/app/tmpl-go.mod new file mode 100644 index 00000000000..354cc3eb3aa --- /dev/null +++ b/cli/module_generate/_templates/app/tmpl-go.mod @@ -0,0 +1,8 @@ +module {{ .ModuleLowercase }} + +go 1.22 + +require ( + github.com/erh/vmodutils v0.3.11-rc1 + go.viam.com/rdk v{{ .SDKVersion }} +) diff --git a/cli/module_generate/_templates/app/tmpl-meta.json b/cli/module_generate/_templates/app/tmpl-meta.json new file mode 100644 index 00000000000..9fdad3d7e07 --- /dev/null +++ b/cli/module_generate/_templates/app/tmpl-meta.json @@ -0,0 +1,25 @@ +{ + "module_id": "{{ .Namespace }}:{{ .ModuleName }}", + "visibility": "{{ .Visibility }}", + "description": "{{ .AppName }} app", + "models": [ + { + "api": "rdk:component:generic", + "model": "{{ .Namespace }}:{{ .ModuleName }}:webapp" + } + ], + "applications": [ + { + "name": "{{ .AppName }}", + "type": "{{ .AppType }}", + "entrypoint": "dist/index.html" + } + ], + "entrypoint": "bin/{{ .ModuleName }}", + "build": { + "build": "make module.tar.gz", + "setup": "make setup", + "path": "module.tar.gz", + "arch": ["linux/amd64", "linux/arm64", "darwin/arm64"] + } +} diff --git a/cli/module_generate/_templates/app/tmpl-module.go b/cli/module_generate/_templates/app/tmpl-module.go new file mode 100644 index 00000000000..f97012a6748 --- /dev/null +++ b/cli/module_generate/_templates/app/tmpl-module.go @@ -0,0 +1,93 @@ +package {{ .ModuleLowercase }} + +import ( + "context" + "embed" + "fmt" + "io/fs" + "net/http" + + "github.com/erh/vmodutils" + "go.viam.com/rdk/components/generic" + "go.viam.com/rdk/logging" + "go.viam.com/rdk/resource" +) + +//go:embed dist/** +var staticFS embed.FS + +func distFS() (fs.FS, error) { + return fs.Sub(staticFS, "dist") +} + +var Model = resource.NewModel("{{ .Namespace }}", "{{ .ModuleName }}", "webapp") + +type Config struct { + resource.TriviallyValidateConfig + + Port *int `json:"port,omitempty"` +} + +type webApp struct { + resource.AlwaysRebuild + + name resource.Name + srv resource.Resource + logger logging.Logger + cfg *Config +} + +func init() { + resource.RegisterComponent(generic.API, Model, + resource.Registration[resource.Resource, *Config]{ + Constructor: NewServer, + }, + ) +} + +func NewServer(ctx context.Context, deps resource.Dependencies, rawConf resource.Config, logger logging.Logger) (resource.Resource, error) { + conf, err := resource.NativeConfig[*Config](rawConf) + if err != nil { + return nil, err + } + return newWebApp(ctx, deps, rawConf.ResourceName(), conf, logger) +} + +func newWebApp(ctx context.Context, deps resource.Dependencies, name resource.Name, conf *Config, logger logging.Logger) (resource.Resource, error) { + fs, err := distFS() + if err != nil { + return nil, err + } + + server, err := vmodutils.NewWebModuleWithCookies(name, fs, logger, nil) + if err != nil { + return nil, err + } + + port := 8888 + if conf.Port != nil { + port = *conf.Port + } + if err := server.Start(port); err != nil { + return nil, err + } + + return &webApp{ + name: name, + srv: server, + logger: logger, + cfg: conf, + }, nil +} + +func (w *webApp) Name() resource.Name { + return w.name +} + +func (w *webApp) DoCommand(ctx context.Context, cmd map[string]interface{}) (map[string]interface{}, error) { + return nil, nil +} + +func (w *webApp) Close(ctx context.Context) error { + return w.srv.Close(ctx) +} diff --git a/cli/module_generate/_templates/app/tmpl-package.json b/cli/module_generate/_templates/app/tmpl-package.json new file mode 100644 index 00000000000..0b88cdc0c91 --- /dev/null +++ b/cli/module_generate/_templates/app/tmpl-package.json @@ -0,0 +1,18 @@ +{ + "name": "{{ .AppName }}", + "private": true, + "version": "0.1.0", + "scripts": { + "dev": "vite dev", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@viamrobotics/sdk": "^0.66.0", + "typescript-cookie": "^1.0.6" + }, + "devDependencies": { + "vite": "^7.1.7", + "typescript": "~5.9.2" + } +} diff --git a/cli/module_generate/_templates/app/tsconfig.json b/cli/module_generate/_templates/app/tsconfig.json new file mode 100644 index 00000000000..f3430ebbfd9 --- /dev/null +++ b/cli/module_generate/_templates/app/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "ES2020", + "module": "ESNext", + "moduleResolution": "bundler", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + }, + "include": ["src"] +} diff --git a/cli/module_generate/_templates/app/vite.config.ts b/cli/module_generate/_templates/app/vite.config.ts new file mode 100644 index 00000000000..4ce6b8c9881 --- /dev/null +++ b/cli/module_generate/_templates/app/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite'; + +export default defineConfig({ + build: { + outDir: 'dist', + }, +}); From 0324a0094924793e84d37444df14d84c044969cd Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Mon, 20 Apr 2026 17:43:45 -0400 Subject: [PATCH 07/27] add flag inputs options if want to skip interactive --- cli/app.go | 24 ++++++++++++++++++++++++ cli/module_generate.go | 29 +++++++++++++++++++++++------ 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/cli/app.go b/cli/app.go index bc588910331..c09b4aa9a4a 100644 --- a/cli/app.go +++ b/cli/app.go @@ -98,6 +98,10 @@ const ( moduleFlagResourceType = "resource-type" moduleFlagRegister = "register" moduleFlagGenerateType = "generate-type" + moduleFlagAppName = "app-name" + moduleFlagAppType = "app-type" + moduleFlagLocalServer = "local-server" + moduleFlagPackageManager = "package-manager" moduleFlagUpload = "upload" moduleBuildFlagRef = "ref" @@ -3485,6 +3489,26 @@ After creation, use 'viam module update' to push your new module to app.viam.com Usage: "indicate a dry test run, so skip regular checks", Hidden: true, }, + &cli.StringFlag{ + Name: moduleFlagAppName, + Usage: "name for the app", + Hidden: true, + }, + &cli.StringFlag{ + Name: moduleFlagAppType, + Usage: formatAcceptedValues("app type", "single_machine", "multi_machine"), + Hidden: true, + }, + &cli.BoolFlag{ + Name: moduleFlagLocalServer, + Usage: "enable local server for serving the app on the local network", + Hidden: true, + }, + &cli.StringFlag{ + Name: moduleFlagPackageManager, + Usage: formatAcceptedValues("package manager for frontend", "npm", "pnpm", "yarn", "bun"), + Hidden: true, + }, }, Action: createActionCommandWithT[generateModuleArgs](GenerateModuleAction), }, diff --git a/cli/module_generate.go b/cli/module_generate.go index 094b74c692a..425007b03d6 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -74,6 +74,10 @@ type generateModuleArgs struct { ModelName string Register bool DryRun bool + AppName string + AppType string + LocalServer bool + PackageManager string } // GenerateModuleAction runs the module generate cli and generates necessary module templates based on user input. @@ -145,9 +149,15 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, } } - shared := &sharedInputs{} - if err := promptSharedInputs(shared); err != nil { - return err + shared := &sharedInputs{ + Visibility: args.Visibility, + Namespace: args.PublicNamespace, + RegisterOnApp: args.Register, + } + if shared.Visibility == "" || shared.Namespace == "" { + if err := promptSharedInputs(shared); err != nil { + return err + } } switch generateType { @@ -201,10 +211,17 @@ type appTemplateData struct { } func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { - app := &appInputs{} + app := &appInputs{ + AppName: args.AppName, + AppType: args.AppType, + LocalServer: args.LocalServer, + PackageManager: args.PackageManager, + } - if err := promptAppUser(app, ""); err != nil { - return err + if app.AppName == "" || app.AppType == "" || app.PackageManager == "" { + if err := promptAppUser(app, ""); err != nil { + return err + } } gArgs, err := getGlobalArgs(cmd) From 8c58f4a6f4b34c6e57a2872165f261e6352d9eb5 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Mon, 20 Apr 2026 17:44:34 -0400 Subject: [PATCH 08/27] create own local server code instead of using erhutils --- .../_templates/app/tmpl-go.mod | 3 +- .../_templates/app/tmpl-module.go | 73 ++++++++++++++----- cli/module_generate_app_test.go | 71 ++++++++++++++++++ 3 files changed, 128 insertions(+), 19 deletions(-) create mode 100644 cli/module_generate_app_test.go diff --git a/cli/module_generate/_templates/app/tmpl-go.mod b/cli/module_generate/_templates/app/tmpl-go.mod index 354cc3eb3aa..0dee12c4264 100644 --- a/cli/module_generate/_templates/app/tmpl-go.mod +++ b/cli/module_generate/_templates/app/tmpl-go.mod @@ -1,8 +1,7 @@ module {{ .ModuleLowercase }} -go 1.22 +go 1.23 require ( - github.com/erh/vmodutils v0.3.11-rc1 go.viam.com/rdk v{{ .SDKVersion }} ) diff --git a/cli/module_generate/_templates/app/tmpl-module.go b/cli/module_generate/_templates/app/tmpl-module.go index f97012a6748..44441f340af 100644 --- a/cli/module_generate/_templates/app/tmpl-module.go +++ b/cli/module_generate/_templates/app/tmpl-module.go @@ -6,8 +6,8 @@ import ( "fmt" "io/fs" "net/http" + "os" - "github.com/erh/vmodutils" "go.viam.com/rdk/components/generic" "go.viam.com/rdk/logging" "go.viam.com/rdk/resource" @@ -32,9 +32,8 @@ type webApp struct { resource.AlwaysRebuild name resource.Name - srv resource.Resource + server *http.Server logger logging.Logger - cfg *Config } func init() { @@ -45,38 +44,52 @@ func init() { ) } -func NewServer(ctx context.Context, deps resource.Dependencies, rawConf resource.Config, logger logging.Logger) (resource.Resource, error) { +func NewServer(_ context.Context, _ resource.Dependencies, rawConf resource.Config, logger logging.Logger) (resource.Resource, error) { conf, err := resource.NativeConfig[*Config](rawConf) if err != nil { return nil, err } - return newWebApp(ctx, deps, rawConf.ResourceName(), conf, logger) + return newWebApp(rawConf.ResourceName(), conf, logger) } -func newWebApp(ctx context.Context, deps resource.Dependencies, name resource.Name, conf *Config, logger logging.Logger) (resource.Resource, error) { - fs, err := distFS() +func newWebApp(name resource.Name, conf *Config, logger logging.Logger) (resource.Resource, error) { + distFiles, err := distFS() if err != nil { return nil, err } - server, err := vmodutils.NewWebModuleWithCookies(name, fs, logger, nil) - if err != nil { - return nil, err + mux := http.NewServeMux() + mux.Handle("/", http.FileServerFS(distFiles)) + + handler := &cookieSetter{ + handler: mux, + logger: logger, } + handler.addEnvCookie("MACHINE_FQDN", "host") + handler.addEnvCookie("API_KEY_ID", "api-key-id") + handler.addEnvCookie("API_KEY", "api-key") port := 8888 if conf.Port != nil { port = *conf.Port } - if err := server.Start(port); err != nil { - return nil, err + + server := &http.Server{ + Addr: fmt.Sprintf(":%d", port), + Handler: handler, } + logger.Infof("starting web app server on port %d", port) + go func() { + if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { + logger.Errorf("web app server error: %v", err) + } + }() + return &webApp{ name: name, - srv: server, + server: server, logger: logger, - cfg: conf, }, nil } @@ -84,10 +97,36 @@ func (w *webApp) Name() resource.Name { return w.name } -func (w *webApp) DoCommand(ctx context.Context, cmd map[string]interface{}) (map[string]interface{}, error) { +func (w *webApp) DoCommand(_ context.Context, _ map[string]interface{}) (map[string]interface{}, error) { return nil, nil } -func (w *webApp) Close(ctx context.Context) error { - return w.srv.Close(ctx) +func (w *webApp) Status(_ context.Context) (map[string]interface{}, error) { + return map[string]interface{}{"status": "running"}, nil +} + +func (w *webApp) Close(_ context.Context) error { + return w.server.Close() +} + +// cookieSetter is an http.Handler that injects credential cookies into every response. +type cookieSetter struct { + handler http.Handler + cookies []*http.Cookie + logger logging.Logger +} + +func (cs *cookieSetter) addEnvCookie(envVar, cookieName string) { + v := os.Getenv(envVar) + if v == "" { + cs.logger.Warnf("no value for env var %s (cookie %s)", envVar, cookieName) + } + cs.cookies = append(cs.cookies, &http.Cookie{Name: cookieName, Value: v}) +} + +func (cs *cookieSetter) ServeHTTP(w http.ResponseWriter, r *http.Request) { + for _, c := range cs.cookies { + http.SetCookie(w, c) + } + cs.handler.ServeHTTP(w, r) } diff --git a/cli/module_generate_app_test.go b/cli/module_generate_app_test.go new file mode 100644 index 00000000000..83cbe692f52 --- /dev/null +++ b/cli/module_generate_app_test.go @@ -0,0 +1,71 @@ +package cli + +import ( + "fmt" + "os" + "os/exec" + "path/filepath" + "runtime" + "testing" + + "go.viam.com/test" +) + +func TestAppTemplateCompiles(t *testing.T) { + t.Parallel() + + testData := appTemplateData{ + ModuleName: "testapp", + ModuleLowercase: "testapp", + AppName: "testapp", + AppType: "single_machine", + Namespace: "testorg", + Visibility: "private", + PackageManager: "npm", + SDKVersion: "0.94.0", + } + + cCtx := newTestContext(t, map[string]any{"local": true}) + gArgs, _ := getGlobalArgs(cCtx) + globalArgs := *gArgs + + testDir := t.TempDir() + testChdir(t, testDir) + appPath := filepath.Join(testDir, testData.ModuleName) + + // Generate the app + err := setupDirectories(cCtx, testData.ModuleName, globalArgs) + test.That(t, err, test.ShouldBeNil) + + err = copyAppTemplate(cCtx, testData.ModuleName, globalArgs) + test.That(t, err, test.ShouldBeNil) + + err = renderAppTemplate(cCtx, testData.ModuleName, testData, globalArgs) + test.That(t, err, test.ShouldBeNil) + + // Add a replace directive to use the local rdk so we test against the current interface + _, thisFile, _, _ := runtime.Caller(0) + rdkRoot := filepath.Dir(filepath.Dir(thisFile)) + goModPath := filepath.Join(appPath, "go.mod") + goMod, err := os.ReadFile(goModPath) + test.That(t, err, test.ShouldBeNil) + goMod = append(goMod, []byte(fmt.Sprintf("\nreplace go.viam.com/rdk => %s\n", rdkRoot))...) + err = os.WriteFile(goModPath, goMod, 0o644) + test.That(t, err, test.ShouldBeNil) + + // Run go mod tidy to resolve dependencies + tidy := exec.Command("go", "mod", "tidy") + tidy.Dir = appPath + tidyOut, err := tidy.CombinedOutput() + if err != nil { + t.Fatalf("go mod tidy failed: %v\n%s", err, tidyOut) + } + + // Verify the generated module.go compiles against current rdk + build := exec.Command("go", "build", "./...") + build.Dir = appPath + buildOut, err := build.CombinedOutput() + if err != nil { + t.Fatalf("generated app module does not compile: %v\n%s", err, buildOut) + } +} From 750e304cf2976a2e26cd4a520e1980e7d60e0fa9 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Mon, 20 Apr 2026 19:14:59 -0400 Subject: [PATCH 09/27] verify front end builds --- cli/module_generate_app_test.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/cli/module_generate_app_test.go b/cli/module_generate_app_test.go index 83cbe692f52..96c1e4cfbd3 100644 --- a/cli/module_generate_app_test.go +++ b/cli/module_generate_app_test.go @@ -68,4 +68,27 @@ func TestAppTemplateCompiles(t *testing.T) { if err != nil { t.Fatalf("generated app module does not compile: %v\n%s", err, buildOut) } + + // Verify frontend builds (catches SDK API mismatches like atAddress vs createRobotClient) + npmInstall := exec.Command("npm", "install") + npmInstall.Dir = appPath + npmInstallOut, err := npmInstall.CombinedOutput() + if err != nil { + t.Fatalf("npm install failed: %v\n%s", err, npmInstallOut) + } + + // Type-check TypeScript (catches missing await, wrong method names, type mismatches) + tsc := exec.Command("npx", "tsc", "--noEmit") + tsc.Dir = appPath + tscOut, err := tsc.CombinedOutput() + if err != nil { + t.Fatalf("TypeScript type check failed: %v\n%s", err, tscOut) + } + + npmBuild := exec.Command("npm", "run", "build") + npmBuild.Dir = appPath + npmBuildOut, err := npmBuild.CombinedOutput() + if err != nil { + t.Fatalf("frontend build failed: %v\n%s", err, npmBuildOut) + } } From a99ed7233be7d27ad66824f241181c781c4c13d3 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Tue, 21 Apr 2026 01:52:53 -0400 Subject: [PATCH 10/27] readme + bugs --- .../_templates/app/src/main.ts | 10 ++- .../_templates/app/tmpl-README.md | 77 +++++++++++++++++++ .../_templates/app/tmpl-module.go | 6 +- 3 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 cli/module_generate/_templates/app/tmpl-README.md diff --git a/cli/module_generate/_templates/app/src/main.ts b/cli/module_generate/_templates/app/src/main.ts index ffd017f61e6..212705a9c3f 100644 --- a/cli/module_generate/_templates/app/src/main.ts +++ b/cli/module_generate/_templates/app/src/main.ts @@ -1,4 +1,4 @@ -import { RobotClient } from '@viamrobotics/sdk'; +import { createRobotClient } from '@viamrobotics/sdk'; import { getHostAndCredentials } from './lib/auth'; const statusEl = document.getElementById('status')!; @@ -12,10 +12,14 @@ async function main() { } try { - const machine = await RobotClient.atAddress(host, { credentials }); + const machine = await createRobotClient({ + host, + credentials, + signalingAddress: 'https://app.viam.com:443', + }); statusEl.textContent = 'Connected to ' + host; - const names = machine.resourceNames(); + const names = await machine.resourceNames(); for (const name of names) { const li = document.createElement('li'); li.textContent = `${name.namespace}:${name.type}:${name.subtype}/${name.name}`; diff --git a/cli/module_generate/_templates/app/tmpl-README.md b/cli/module_generate/_templates/app/tmpl-README.md new file mode 100644 index 00000000000..617b70567da --- /dev/null +++ b/cli/module_generate/_templates/app/tmpl-README.md @@ -0,0 +1,77 @@ +# {{ .AppName }} + +A Viam app module that serves a web app connected to your machine via the Viam SDK. + +## Setup + +``` +make setup +``` + +This installs Go dependencies, Node.js (if needed), and {{ .PackageManager }}. + +## Build + +``` +make +``` + +This builds the frontend (`dist/`) and the Go module binary (`bin/{{ .ModuleName }}`). + +## Development + +For frontend development with hot reload (no rebuild needed between edits): + +1. Start the vite dev server: + ``` + {{ .PackageManager }} run dev + ``` + +2. In another terminal, start the local app testing proxy (injects real machine credentials): + ``` + viam module local-app-testing --app-url=http://localhost:5173 --machine-id= + ``` + +3. Open http://localhost:8012/start in your browser + +Edit `src/main.ts` or `index.html`, save, and changes appear instantly. No `make` needed during development. + +## Deploy + +Upload to the Viam registry: + +``` +viam module upload --platform=linux/amd64 module.tar.gz +``` + +Then add the module to your machine on app.viam.com: + +1. Go to app.viam.com → your machine → Config +2. Add the module by name (`{{ .Namespace }}:{{ .ModuleName }}`) +3. Add a component: type `generic`, model `{{ .Namespace }}:{{ .ModuleName }}:webapp` +4. Save config + +## Access your app + +**Via app.viam.com:** Navigate to your machine on app.viam.com — your app will appear automatically. + +**Via local network:** If local server is enabled, open `http://:8888` from any device on the same network. + +## Project structure + +``` +src/ + lib/auth.ts - Reads machine credentials from cookies (do not modify) + main.ts - Your app entry point (replace with your own code) +index.html - HTML entry point loaded by vite +dist/ - Build output (generated by make, do not edit) +module.go - Go module that serves dist/ via local HTTP server +meta.json - Viam module manifest with applications[] entry +``` + +## Next steps + +1. Replace `src/main.ts` and `index.html` with your own frontend +2. Install additional dependencies: `{{ .PackageManager }} install ` +3. The `entrypoint` field in `meta.json` applications section points to `dist/index.html` — update if your build outputs elsewhere +4. Run `make` to rebuild after changes diff --git a/cli/module_generate/_templates/app/tmpl-module.go b/cli/module_generate/_templates/app/tmpl-module.go index 44441f340af..6274fdc7a2f 100644 --- a/cli/module_generate/_templates/app/tmpl-module.go +++ b/cli/module_generate/_templates/app/tmpl-module.go @@ -65,9 +65,9 @@ func newWebApp(name resource.Name, conf *Config, logger logging.Logger) (resourc handler: mux, logger: logger, } - handler.addEnvCookie("MACHINE_FQDN", "host") - handler.addEnvCookie("API_KEY_ID", "api-key-id") - handler.addEnvCookie("API_KEY", "api-key") + handler.addEnvCookie("VIAM_MACHINE_FQDN", "host") + handler.addEnvCookie("VIAM_API_KEY_ID", "api-key-id") + handler.addEnvCookie("VIAM_API_KEY", "api-key") port := 8888 if conf.Port != nil { From 218186571a4e2022c34de5e0232c755505320463 Mon Sep 17 00:00:00 2001 From: Ethan Rodkin Date: Tue, 21 Apr 2026 12:02:47 -0400 Subject: [PATCH 11/27] fix registration and reload support --- cli/module_build.go | 7 +++++ cli/module_generate.go | 28 ++++++++++++++++++- cli/module_generate/_templates/app/.gitignore | 26 +++++++++++++++++ .../_templates/app/tmpl-package.json | 2 +- 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 cli/module_generate/_templates/app/.gitignore diff --git a/cli/module_build.go b/cli/module_build.go index 3b24cd9acb6..0806de460a3 100644 --- a/cli/module_build.go +++ b/cli/module_build.go @@ -667,6 +667,13 @@ func (c *viamClient) createGitArchive(repoPath string) (string, error) { return nil } + // Skip symlinks — filepath.Walk doesn't follow them, so they appear as + // non-directory entries, but os.ReadFile would follow the link and fail + // if the target is a directory (common in pnpm node_modules). + if info.Mode()&os.ModeSymlink != 0 { + return nil + } + if c.shouldIgnore(relPath, matcher, false) { return nil } diff --git a/cli/module_generate.go b/cli/module_generate.go index 425007b03d6..9325d6daceb 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -232,12 +232,35 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen // Use app name as the module name (the app module wraps the webapp) moduleName := app.AppName + + // Resolve org and optionally register with Viam + moduleInputs := &modulegen.ModuleInputs{ + ModuleName: moduleName, + Namespace: shared.Namespace, + RegisterOnApp: shared.RegisterOnApp, + } + if !args.DryRun { + if err := wrapResolveOrg(ctx, cmd, c, moduleInputs); err != nil { + return err + } + } + + var registryURL string + if shared.RegisterOnApp { + debugf(cmd.Root().Writer, globalArgs.Debug, "Registering app with Viam") + moduleResponse, err := c.createModule(ctx, moduleName, moduleInputs.OrgID) + if err != nil { + return errors.Wrap(err, "failed to register app") + } + registryURL = moduleResponse.GetUrl() + } + data := appTemplateData{ ModuleName: moduleName, ModuleLowercase: strings.ReplaceAll(strings.ToLower(moduleName), "-", ""), AppName: app.AppName, AppType: app.AppType, - Namespace: shared.Namespace, + Namespace: moduleInputs.Namespace, Visibility: shared.Visibility, PackageManager: app.PackageManager, } @@ -267,6 +290,9 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen cwd = "." } printf(cmd.Root().Writer, "App module successfully generated at %s%s%s", cwd, string(os.PathSeparator), moduleName) + if registryURL != "" { + printf(cmd.Root().Writer, "You can view it here: %s", registryURL) + } return nil } diff --git a/cli/module_generate/_templates/app/.gitignore b/cli/module_generate/_templates/app/.gitignore new file mode 100644 index 00000000000..b4c95ec7dd7 --- /dev/null +++ b/cli/module_generate/_templates/app/.gitignore @@ -0,0 +1,26 @@ +# Node.js dependencies +node_modules/ + +# Build outputs +dist/ +bin/ + +# Archive files +*.tar.gz +.VIAM_RELOAD_ARCHIVE.tar.gz +reload-*/ + +# OS files +.DS_Store +Thumbs.db + +# Go +*.exe +*.exe~ +*.dll +*.so +*.dylib +*.test +*.out +go.work +go.work.sum diff --git a/cli/module_generate/_templates/app/tmpl-package.json b/cli/module_generate/_templates/app/tmpl-package.json index 0b88cdc0c91..d6e32d67569 100644 --- a/cli/module_generate/_templates/app/tmpl-package.json +++ b/cli/module_generate/_templates/app/tmpl-package.json @@ -12,7 +12,7 @@ "typescript-cookie": "^1.0.6" }, "devDependencies": { - "vite": "^7.1.7", + "vite": "^5.4.0", "typescript": "~5.9.2" } } From 543fe26f5cef1911e530d1a0f8d6d0388080b7da Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Tue, 21 Apr 2026 12:44:42 -0400 Subject: [PATCH 12/27] make viamapplication usage easier with tar.gz compilation --- .../_templates/app/tmpl-Makefile | 5 +++- .../_templates/app/tmpl-README.md | 26 ++++++++++++------- .../_templates/app/vite.config.ts | 1 + testapp/dist/assets/index-EkW2iQQd.js | 10 +++++++ 4 files changed, 31 insertions(+), 11 deletions(-) create mode 100644 testapp/dist/assets/index-EkW2iQQd.js diff --git a/cli/module_generate/_templates/app/tmpl-Makefile b/cli/module_generate/_templates/app/tmpl-Makefile index ddbd72aeb46..08935cce2fc 100644 --- a/cli/module_generate/_templates/app/tmpl-Makefile +++ b/cli/module_generate/_templates/app/tmpl-Makefile @@ -51,9 +51,12 @@ all: test module.tar.gz node_modules: package.json {{ .PackageManager }} install -dist/index.html: node_modules src/* +.PHONY: frontend +frontend: node_modules {{ .PackageManager }} run build +dist/index.html: frontend + setup: go mod tidy $(INSTALL_NODE) diff --git a/cli/module_generate/_templates/app/tmpl-README.md b/cli/module_generate/_templates/app/tmpl-README.md index 617b70567da..ac2573ef8f2 100644 --- a/cli/module_generate/_templates/app/tmpl-README.md +++ b/cli/module_generate/_templates/app/tmpl-README.md @@ -38,22 +38,28 @@ Edit `src/main.ts` or `index.html`, save, and changes appear instantly. No `make ## Deploy -Upload to the Viam registry: +1. Build the module: + ``` + make + ``` -``` -viam module upload --platform=linux/amd64 module.tar.gz -``` +2. Upload `module.tar.gz` (not the binary) to the Viam registry: + ``` + viam module upload --upload=./module.tar.gz --platform=linux/amd64 + ``` + Important: upload the tar.gz, not `bin/{{ .ModuleName }}`. The tar contains both the binary and the frontend files (`dist/`). -Then add the module to your machine on app.viam.com: + Note: after re-uploading a new version, use an incognito window or hard-refresh (Cmd+Shift+R) to avoid seeing a cached version of the old page. -1. Go to app.viam.com → your machine → Config -2. Add the module by name (`{{ .Namespace }}:{{ .ModuleName }}`) -3. Add a component: type `generic`, model `{{ .Namespace }}:{{ .ModuleName }}:webapp` -4. Save config +3. Add the module to your machine on app.viam.com: + - Go to app.viam.com → your machine → Config + - Add the module by name (`{{ .Namespace }}:{{ .ModuleName }}`) + - Add a component: type `generic`, model `{{ .Namespace }}:{{ .ModuleName }}:webapp` + - Save config ## Access your app -**Via app.viam.com:** Navigate to your machine on app.viam.com — your app will appear automatically. +**Viam-hosted:** Go to `https://{{ .AppName }}_{{ .Namespace }}.viamapplications.com` **Via local network:** If local server is enabled, open `http://:8888` from any device on the same network. diff --git a/cli/module_generate/_templates/app/vite.config.ts b/cli/module_generate/_templates/app/vite.config.ts index 4ce6b8c9881..77d22070004 100644 --- a/cli/module_generate/_templates/app/vite.config.ts +++ b/cli/module_generate/_templates/app/vite.config.ts @@ -1,6 +1,7 @@ import { defineConfig } from 'vite'; export default defineConfig({ + base: './', build: { outDir: 'dist', }, diff --git a/testapp/dist/assets/index-EkW2iQQd.js b/testapp/dist/assets/index-EkW2iQQd.js new file mode 100644 index 00000000000..b72b8141583 --- /dev/null +++ b/testapp/dist/assets/index-EkW2iQQd.js @@ -0,0 +1,10 @@ +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const m of r.addedNodes)m.tagName==="LINK"&&m.rel==="modulepreload"&&a(m)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function a(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();var Ht={};function U(t,e){if(!t)throw new Error(e)}const Bi=34028234663852886e22,Ji=-34028234663852886e22,ji=4294967295,Vi=2147483647,Wi=-2147483648;function bn(t){if(typeof t!="number")throw new Error("invalid int 32: "+typeof t);if(!Number.isInteger(t)||t>Vi||tji||t<0)throw new Error("invalid uint 32: "+t)}function _a(t){if(typeof t!="number")throw new Error("invalid float 32: "+typeof t);if(Number.isFinite(t)&&(t>Bi||t({no:s.no,name:s.name,localName:t[s.no]})))}function Ca(t,e,n){const a=Object.create(null),s=Object.create(null),r=[];for(const m of e){const c=Ua(m);r.push(c),a[m.name]=c,s[m.no]=c}return{typeName:t,values:r,findName(m){return a[m]},findNumber(m){return s[m]}}}function Yi(t,e,n){const a={};for(const s of e){const r=Ua(s);a[r.localName]=r.no,a[r.no]=r.localName}return Na(a,t,e),a}function Ua(t){return"localName"in t?t:Object.assign(Object.assign({},t),{localName:t.name})}class I{equals(e){return this.getType().runtime.util.equals(this.getType(),this,e)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(e,n){const a=this.getType(),s=a.runtime.bin,r=s.makeReadOptions(n);return s.readMessage(this,r.readerFactory(e),e.byteLength,r),this}fromJson(e,n){const a=this.getType(),s=a.runtime.json,r=s.makeReadOptions(n);return s.readMessage(a,e,r,this),this}fromJsonString(e,n){let a;try{a=JSON.parse(e)}catch(s){throw new Error(`cannot decode ${this.getType().typeName} from JSON: ${s instanceof Error?s.message:String(s)}`)}return this.fromJson(a,n)}toBinary(e){const n=this.getType(),a=n.runtime.bin,s=a.makeWriteOptions(e),r=s.writerFactory();return a.writeMessage(this,r,s),r.finish()}toJson(e){const n=this.getType(),a=n.runtime.json,s=a.makeWriteOptions(e);return a.writeMessage(this,s)}toJsonString(e){var n;const a=this.toJson(e);return JSON.stringify(a,null,(n=e?.prettySpaces)!==null&&n!==void 0?n:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function Hi(t,e,n,a){var s;const r=(s=a?.localName)!==null&&s!==void 0?s:e.substring(e.lastIndexOf(".")+1),m={[r]:function(c){t.util.initFields(this),t.util.initPartial(c,this)}}[r];return Object.setPrototypeOf(m.prototype,new I),Object.assign(m,{runtime:t,typeName:e,fields:t.util.newFieldList(n),fromBinary(c,l){return new m().fromBinary(c,l)},fromJson(c,l){return new m().fromJson(c,l)},fromJsonString(c,l){return new m().fromJsonString(c,l)},equals(c,l){return t.util.equals(m,c,l)}}),m}function zi(){let t=0,e=0;for(let a=0;a<28;a+=7){let s=this.buf[this.pos++];if(t|=(s&127)<>4,!(n&128))return this.assertBounds(),[t,e];for(let a=3;a<=31;a+=7){let s=this.buf[this.pos++];if(e|=(s&127)<>>r,c=!(!(m>>>7)&&e==0),l=(c?m|128:m)&255;if(n.push(l),!c)return}const a=t>>>28&15|(e&7)<<4,s=!!(e>>3);if(n.push((s?a|128:a)&255),!!s){for(let r=3;r<31;r=r+7){const m=e>>>r,c=!!(m>>>7),l=(c?m|128:m)&255;if(n.push(l),!c)return}n.push(e>>>31&1)}}const Sn=4294967296;function zt(t){const e=t[0]==="-";e&&(t=t.slice(1));const n=1e6;let a=0,s=0;function r(m,c){const l=Number(t.slice(m,c));s*=n,a=a*n+l,a>=Sn&&(s=s+(a/Sn|0),a=a%Sn)}return r(-24,-18),r(-18,-12),r(-12,-6),r(-6),e?Da(a,s):It(a,s)}function Ki(t,e){let n=It(t,e);const a=n.hi&2147483648;a&&(n=Da(n.lo,n.hi));const s=Pa(n.lo,n.hi);return a?"-"+s:s}function Pa(t,e){if({lo:t,hi:e}=Xi(t,e),e<=2097151)return String(Sn*e+t);const n=t&16777215,a=(t>>>24|e<<8)&16777215,s=e>>16&65535;let r=n+a*6777216+s*6710656,m=a+s*8147497,c=s*2;const l=1e7;return r>=l&&(m+=Math.floor(r/l),r%=l),m>=l&&(c+=Math.floor(m/l),m%=l),c.toString()+Kt(m)+Kt(r)}function Xi(t,e){return{lo:t>>>0,hi:e>>>0}}function It(t,e){return{lo:t|0,hi:e|0}}function Da(t,e){return e=~e,t?t=~t+1:e+=1,It(t,e)}const Kt=t=>{const e=String(t);return"0000000".slice(e.length)+e};function Xt(t,e){if(t>=0){for(;t>127;)e.push(t&127|128),t=t>>>7;e.push(t)}else{for(let n=0;n<9;n++)e.push(t&127|128),t=t>>7;e.push(1)}}function Zi(){let t=this.buf[this.pos++],e=t&127;if(!(t&128))return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<7,!(t&128))return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<14,!(t&128))return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<21,!(t&128))return this.assertBounds(),e;t=this.buf[this.pos++],e|=(t&15)<<28;for(let n=5;t&128&&n<10;n++)t=this.buf[this.pos++];if(t&128)throw new Error("invalid varint");return this.assertBounds(),e>>>0}function Qi(){const t=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof t.getBigInt64=="function"&&typeof t.getBigUint64=="function"&&typeof t.setBigInt64=="function"&&typeof t.setBigUint64=="function"&&(typeof process!="object"||typeof Ht!="object"||Ht.BUF_BIGINT_DISABLE!=="1")){const a=BigInt("-9223372036854775808"),s=BigInt("9223372036854775807"),r=BigInt("0"),m=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(c){const l=typeof c=="bigint"?c:BigInt(c);if(l>s||lm||lU(/^-?[0-9]+$/.test(a),`int64 invalid: ${a}`),n=a=>U(/^[0-9]+$/.test(a),`uint64 invalid: ${a}`);return{zero:"0",supported:!1,parse(a){return typeof a!="string"&&(a=a.toString()),e(a),a},uParse(a){return typeof a!="string"&&(a=a.toString()),n(a),a},enc(a){return typeof a!="string"&&(a=a.toString()),e(a),zt(a)},uEnc(a){return typeof a!="string"&&(a=a.toString()),n(a),zt(a)},dec(a,s){return Ki(a,s)},uDec(a,s){return Pa(a,s)}}}const B=Qi();var y;(function(t){t[t.DOUBLE=1]="DOUBLE",t[t.FLOAT=2]="FLOAT",t[t.INT64=3]="INT64",t[t.UINT64=4]="UINT64",t[t.INT32=5]="INT32",t[t.FIXED64=6]="FIXED64",t[t.FIXED32=7]="FIXED32",t[t.BOOL=8]="BOOL",t[t.STRING=9]="STRING",t[t.BYTES=12]="BYTES",t[t.UINT32=13]="UINT32",t[t.SFIXED32=15]="SFIXED32",t[t.SFIXED64=16]="SFIXED64",t[t.SINT32=17]="SINT32",t[t.SINT64=18]="SINT64"})(y||(y={}));var Le;(function(t){t[t.BIGINT=0]="BIGINT",t[t.STRING=1]="STRING"})(Le||(Le={}));function Ae(t,e,n){if(e===n)return!0;if(t==y.BYTES){if(!(e instanceof Uint8Array)||!(n instanceof Uint8Array)||e.length!==n.length)return!1;for(let a=0;a>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(pt(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return bn(e),Xt(e,this.buf),this}bool(e){return this.buf.push(e?1:0),this}bytes(e){return this.uint32(e.byteLength),this.raw(e)}string(e){let n=this.textEncoder.encode(e);return this.uint32(n.byteLength),this.raw(n)}float(e){_a(e);let n=new Uint8Array(4);return new DataView(n.buffer).setFloat32(0,e,!0),this.raw(n)}double(e){let n=new Uint8Array(8);return new DataView(n.buffer).setFloat64(0,e,!0),this.raw(n)}fixed32(e){pt(e);let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,e,!0),this.raw(n)}sfixed32(e){bn(e);let n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,e,!0),this.raw(n)}sint32(e){return bn(e),e=(e<<1^e>>31)>>>0,Xt(e,this.buf),this}sfixed64(e){let n=new Uint8Array(8),a=new DataView(n.buffer),s=B.enc(e);return a.setInt32(0,s.lo,!0),a.setInt32(4,s.hi,!0),this.raw(n)}fixed64(e){let n=new Uint8Array(8),a=new DataView(n.buffer),s=B.uEnc(e);return a.setInt32(0,s.lo,!0),a.setInt32(4,s.hi,!0),this.raw(n)}int64(e){let n=B.enc(e);return ot(n.lo,n.hi,this.buf),this}sint64(e){let n=B.enc(e),a=n.hi>>31,s=n.lo<<1^a,r=(n.hi<<1|n.lo>>>31)^a;return ot(s,r,this.buf),this}uint64(e){let n=B.uEnc(e);return ot(n.lo,n.hi,this.buf),this}}class Ga{constructor(e,n){this.varint64=zi,this.uint32=Zi,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.textDecoder=n??new TextDecoder}tag(){let e=this.uint32(),n=e>>>3,a=e&7;if(n<=0||a<0||a>5)throw new Error("illegal tag: field no "+n+" wire type "+a);return[n,a]}skip(e,n){let a=this.pos;switch(e){case D.Varint:for(;this.buf[this.pos++]&128;);break;case D.Bit64:this.pos+=4;case D.Bit32:this.pos+=4;break;case D.LengthDelimited:let s=this.uint32();this.pos+=s;break;case D.StartGroup:for(;;){const[r,m]=this.tag();if(m===D.EndGroup){if(n!==void 0&&r!==n)throw new Error("invalid end group tag");break}this.skip(m,r)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(a,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)}int64(){return B.dec(...this.varint64())}uint64(){return B.uDec(...this.varint64())}sint64(){let[e,n]=this.varint64(),a=-(e&1);return e=(e>>>1|(n&1)<<31)^a,n=n>>>1^a,B.dec(e,n)}bool(){let[e,n]=this.varint64();return e!==0||n!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return B.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return B.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let e=this.uint32(),n=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(n,n+e)}string(){return this.textDecoder.decode(this.bytes())}}function nm(t,e,n,a){let s;return{typeName:e,extendee:n,get field(){if(!s){const r=typeof a=="function"?a():a;r.name=e.split(".").pop(),r.jsonName=`[${e}]`,s=t.util.newFieldList([r]).list()[0]}return s},runtime:t}}function xa(t){const e=t.field.localName,n=Object.create(null);return n[e]=tm(t),[n,()=>n[e]]}function tm(t){const e=t.field;if(e.repeated)return[];if(e.default!==void 0)return e.default;switch(e.kind){case"enum":return e.T.values[0].no;case"scalar":return Xe(e.T,e.L);case"message":const n=e.T,a=new n;return n.fieldWrapper?n.fieldWrapper.unwrapField(a):a;case"map":throw"map fields are not allowed to be extensions"}}function am(t,e){if(!e.repeated&&(e.kind=="enum"||e.kind=="scalar")){for(let n=t.length-1;n>=0;--n)if(t[n].no==e.no)return[t[n]];return[]}return t.filter(n=>n.no===e.no)}let ie="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),zn=[];for(let t=0;t>4,m=r,s=2;break;case 2:n[a++]=(m&15)<<4|(r&60)>>2,m=r,s=3;break;case 3:n[a++]=(m&3)<<6|r,s=0;break}}if(s==1)throw Error("invalid base64 string.");return n.subarray(0,a)},enc(t){let e="",n=0,a,s=0;for(let r=0;r>2],s=(a&3)<<4,n=1;break;case 1:e+=ie[s|a>>4],s=(a&15)<<2,n=2;break;case 2:e+=ie[s|a>>6],e+=ie[a&63],n=0;break}return n&&(e+=ie[s],e+="=",n==1&&(e+="=")),e}};function sm(t,e,n){La(e,t);const a=e.runtime.bin.makeReadOptions(n),s=am(t.getType().runtime.bin.listUnknownFields(t),e.field),[r,m]=xa(e);for(const c of s)e.runtime.bin.readField(r,a.readerFactory(c.data),e.field,c.wireType,a);return m()}function rm(t,e,n,a){La(e,t);const s=e.runtime.bin.makeReadOptions(a),r=e.runtime.bin.makeWriteOptions(a);if(Fa(t,e)){const d=t.getType().runtime.bin.listUnknownFields(t).filter(p=>p.no!=e.field.no);t.getType().runtime.bin.discardUnknownFields(t);for(const p of d)t.getType().runtime.bin.onUnknownField(t,p.no,p.wireType,p.data)}const m=r.writerFactory();let c=e.field;!c.opt&&!c.repeated&&(c.kind=="enum"||c.kind=="scalar")&&(c=Object.assign(Object.assign({},e.field),{opt:!0})),e.runtime.bin.writeField(c,n,m,r);const l=s.readerFactory(m.finish());for(;l.posa.no==e.field.no)}function La(t,e){U(t.extendee.typeName==e.getType().typeName,`extension ${t.typeName} can only be applied to message ${t.extendee.typeName}`)}function qa(t,e){const n=t.localName;if(t.repeated)return e[n].length>0;if(t.oneof)return e[t.oneof.localName].case===n;switch(t.kind){case"enum":case"scalar":return t.opt||t.req?e[n]!==void 0:t.kind=="enum"?e[n]!==t.T.values[0].no:!Aa(t.T,e[n]);case"message":return e[n]!==void 0;case"map":return Object.keys(e[n]).length>0}}function Zt(t,e){const n=t.localName,a=!t.opt&&!t.req;if(t.repeated)e[n]=[];else if(t.oneof)e[t.oneof.localName]={case:void 0};else switch(t.kind){case"map":e[n]={};break;case"enum":e[n]=a?t.T.values[0].no:void 0;break;case"scalar":e[n]=a?Xe(t.T,t.L):void 0;break;case"message":e[n]=void 0;break}}function je(t,e){if(t===null||typeof t!="object"||!Object.getOwnPropertyNames(I.prototype).every(a=>a in t&&typeof t[a]=="function"))return!1;const n=t.getType();return n===null||typeof n!="function"||!("typeName"in n)||typeof n.typeName!="string"?!1:e===void 0?!0:n.typeName==e.typeName}function Ba(t,e){return je(e)||!t.fieldWrapper?e:t.fieldWrapper.wrapField(e)}y.DOUBLE,y.FLOAT,y.INT64,y.UINT64,y.INT32,y.UINT32,y.BOOL,y.STRING,y.BYTES;const Qt={ignoreUnknownFields:!1},ea={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function om(t){return t?Object.assign(Object.assign({},Qt),t):Qt}function im(t){return t?Object.assign(Object.assign({},ea),t):ea}const _n=Symbol(),wn=Symbol();function mm(){return{makeReadOptions:om,makeWriteOptions:im,readMessage(t,e,n,a){if(e==null||Array.isArray(e)||typeof e!="object")throw new Error(`cannot decode message ${t.typeName} from JSON: ${ee(e)}`);a=a??new t;const s=new Map,r=n.typeRegistry;for(const[m,c]of Object.entries(e)){const l=t.fields.findJsonName(m);if(l){if(l.oneof){if(c===null&&l.kind=="scalar")continue;const d=s.get(l.oneof);if(d!==void 0)throw new Error(`cannot decode message ${t.typeName} from JSON: multiple keys for oneof "${l.oneof.name}" present: "${d}", "${m}"`);s.set(l.oneof,m)}na(a,c,l,n,t)}else{let d=!1;if(r?.findExtension&&m.startsWith("[")&&m.endsWith("]")){const p=r.findExtension(m.substring(1,m.length-1));if(p&&p.extendee.typeName==t.typeName){d=!0;const[v,S]=xa(p);na(v,c,p.field,n,p),rm(a,p,S(),n)}}if(!d&&!n.ignoreUnknownFields)throw new Error(`cannot decode message ${t.typeName} from JSON: key "${m}" is unknown`)}}return a},writeMessage(t,e){const n=t.getType(),a={};let s;try{for(s of n.fields.byNumber()){if(!qa(s,t)){if(s.req)throw"required field not set";if(!e.emitDefaultValues||!dm(s))continue}const m=s.oneof?t[s.oneof.localName].value:t[s.localName],c=ta(s,m,e);c!==void 0&&(a[e.useProtoFieldName?s.name:s.jsonName]=c)}const r=e.typeRegistry;if(r?.findExtensionFor)for(const m of n.runtime.bin.listUnknownFields(t)){const c=r.findExtensionFor(n.typeName,m.no);if(c&&Fa(t,c)){const l=sm(t,c,e),d=ta(c.field,l,e);d!==void 0&&(a[c.field.jsonName]=d)}}}catch(r){const m=s?`cannot encode field ${n.typeName}.${s.name} to JSON`:`cannot encode message ${n.typeName} to JSON`,c=r instanceof Error?r.message:String(r);throw new Error(m+(c.length>0?`: ${c}`:""))}return a},readScalar(t,e,n){return an(t,e,n??Le.BIGINT,!0)},writeScalar(t,e,n){if(e!==void 0&&(n||Aa(t,e)))return En(t,e)},debug:ee}}function ee(t){if(t===null)return"null";switch(typeof t){case"object":return Array.isArray(t)?"array":"object";case"string":return t.length>100?"string":`"${t.split('"').join('\\"')}"`;default:return String(t)}}function na(t,e,n,a,s){let r=n.localName;if(n.repeated){if(U(n.kind!="map"),e===null)return;if(!Array.isArray(e))throw new Error(`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(e)}`);const m=t[r];for(const c of e){if(c===null)throw new Error(`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(c)}`);switch(n.kind){case"message":m.push(n.T.fromJson(c,a));break;case"enum":const l=it(n.T,c,a.ignoreUnknownFields,!0);l!==wn&&m.push(l);break;case"scalar":try{m.push(an(n.T,c,n.L,!0))}catch(d){let p=`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(c)}`;throw d instanceof Error&&d.message.length>0&&(p+=`: ${d.message}`),new Error(p)}break}}}else if(n.kind=="map"){if(e===null)return;if(typeof e!="object"||Array.isArray(e))throw new Error(`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(e)}`);const m=t[r];for(const[c,l]of Object.entries(e)){if(l===null)throw new Error(`cannot decode field ${s.typeName}.${n.name} from JSON: map value null`);let d;try{d=cm(n.K,c)}catch(p){let v=`cannot decode map key for field ${s.typeName}.${n.name} from JSON: ${ee(e)}`;throw p instanceof Error&&p.message.length>0&&(v+=`: ${p.message}`),new Error(v)}switch(n.V.kind){case"message":m[d]=n.V.T.fromJson(l,a);break;case"enum":const p=it(n.V.T,l,a.ignoreUnknownFields,!0);p!==wn&&(m[d]=p);break;case"scalar":try{m[d]=an(n.V.T,l,Le.BIGINT,!0)}catch(v){let S=`cannot decode map value for field ${s.typeName}.${n.name} from JSON: ${ee(e)}`;throw v instanceof Error&&v.message.length>0&&(S+=`: ${v.message}`),new Error(S)}break}}}else switch(n.oneof&&(t=t[n.oneof.localName]={case:r},r="value"),n.kind){case"message":const m=n.T;if(e===null&&m.typeName!="google.protobuf.Value")return;let c=t[r];je(c)?c.fromJson(e,a):(t[r]=c=m.fromJson(e,a),m.fieldWrapper&&!n.oneof&&(t[r]=m.fieldWrapper.unwrapField(c)));break;case"enum":const l=it(n.T,e,a.ignoreUnknownFields,!1);switch(l){case _n:Zt(n,t);break;case wn:break;default:t[r]=l;break}break;case"scalar":try{const d=an(n.T,e,n.L,!1);d===_n?Zt(n,t):t[r]=d}catch(d){let p=`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(e)}`;throw d instanceof Error&&d.message.length>0&&(p+=`: ${d.message}`),new Error(p)}break}}function cm(t,e){if(t===y.BOOL)switch(e){case"true":e=!0;break;case"false":e=!1;break}return an(t,e,Le.BIGINT,!0).toString()}function an(t,e,n,a){if(e===null)return a?Xe(t,n):_n;switch(t){case y.DOUBLE:case y.FLOAT:if(e==="NaN")return Number.NaN;if(e==="Infinity")return Number.POSITIVE_INFINITY;if(e==="-Infinity")return Number.NEGATIVE_INFINITY;if(e===""||typeof e=="string"&&e.trim().length!==e.length||typeof e!="string"&&typeof e!="number")break;const s=Number(e);if(Number.isNaN(s)||!Number.isFinite(s))break;return t==y.FLOAT&&_a(s),s;case y.INT32:case y.FIXED32:case y.SFIXED32:case y.SINT32:case y.UINT32:let r;if(typeof e=="number"?r=e:typeof e=="string"&&e.length>0&&e.trim().length===e.length&&(r=Number(e)),r===void 0)break;return t==y.UINT32||t==y.FIXED32?pt(r):bn(r),r;case y.INT64:case y.SFIXED64:case y.SINT64:if(typeof e!="number"&&typeof e!="string")break;const m=B.parse(e);return n?m.toString():m;case y.FIXED64:case y.UINT64:if(typeof e!="number"&&typeof e!="string")break;const c=B.uParse(e);return n?c.toString():c;case y.BOOL:if(typeof e!="boolean")break;return e;case y.STRING:if(typeof e!="string")break;try{encodeURIComponent(e)}catch{throw new Error("invalid UTF8")}return e;case y.BYTES:if(e==="")return new Uint8Array(0);if(typeof e!="string")break;return _t.dec(e)}throw new Error}function it(t,e,n,a){if(e===null)return t.typeName=="google.protobuf.NullValue"?0:a?t.values[0].no:_n;switch(typeof e){case"number":if(Number.isInteger(e))return e;break;case"string":const s=t.findName(e);if(s!==void 0)return s.no;if(n)return wn;break}throw new Error(`cannot decode enum ${t.typeName} from JSON: ${ee(e)}`)}function dm(t){return t.repeated||t.kind=="map"?!0:!(t.oneof||t.kind=="message"||t.opt||t.req)}function ta(t,e,n){if(t.kind=="map"){U(typeof e=="object"&&e!=null);const a={},s=Object.entries(e);switch(t.V.kind){case"scalar":for(const[m,c]of s)a[m.toString()]=En(t.V.T,c);break;case"message":for(const[m,c]of s)a[m.toString()]=c.toJson(n);break;case"enum":const r=t.V.T;for(const[m,c]of s)a[m.toString()]=mt(r,c,n.enumAsInteger);break}return n.emitDefaultValues||s.length>0?a:void 0}if(t.repeated){U(Array.isArray(e));const a=[];switch(t.kind){case"scalar":for(let s=0;s0?a:void 0}switch(t.kind){case"scalar":return En(t.T,e);case"enum":return mt(t.T,e,n.enumAsInteger);case"message":return Ba(t.T,e).toJson(n)}}function mt(t,e,n){var a;return U(typeof e=="number"),t.typeName=="google.protobuf.NullValue"?null:n?e:(a=t.findNumber(e)?.name)!==null&&a!==void 0?a:e}function En(t,e){switch(t){case y.INT32:case y.SFIXED32:case y.SINT32:case y.FIXED32:case y.UINT32:return U(typeof e=="number"),e;case y.FLOAT:case y.DOUBLE:return U(typeof e=="number"),Number.isNaN(e)?"NaN":e===Number.POSITIVE_INFINITY?"Infinity":e===Number.NEGATIVE_INFINITY?"-Infinity":e;case y.STRING:return U(typeof e=="string"),e;case y.BOOL:return U(typeof e=="boolean"),e;case y.UINT64:case y.FIXED64:case y.INT64:case y.SFIXED64:case y.SINT64:return U(typeof e=="bigint"||typeof e=="string"||typeof e=="number"),e.toString();case y.BYTES:return U(e instanceof Uint8Array),_t.enc(e)}}const Ye=Symbol("@bufbuild/protobuf/unknown-fields"),aa={readUnknownFields:!0,readerFactory:t=>new Ga(t)},sa={writeUnknownFields:!0,writerFactory:()=>new em};function lm(t){return t?Object.assign(Object.assign({},aa),t):aa}function um(t){return t?Object.assign(Object.assign({},sa),t):sa}function pm(){return{makeReadOptions:lm,makeWriteOptions:um,listUnknownFields(t){var e;return(e=t[Ye])!==null&&e!==void 0?e:[]},discardUnknownFields(t){delete t[Ye]},writeUnknownFields(t,e){const n=t[Ye];if(n)for(const a of n)e.tag(a.no,a.wireType).raw(a.data)},onUnknownField(t,e,n,a){const s=t;Array.isArray(s[Ye])||(s[Ye]=[]),s[Ye].push({no:e,wireType:n,data:a})},readMessage(t,e,n,a,s){const r=t.getType(),m=s?e.len:e.pos+n;let c,l;for(;e.pos0&&(l=fm),r){let S=t[m];if(a==D.LengthDelimited&&c!=y.STRING&&c!=y.BYTES){let b=e.uint32()+e.pos;for(;e.posje(S,v)?S:new v(S));else{const S=m[s];v.fieldWrapper?v.typeName==="google.protobuf.BytesValue"?r[s]=nn(S):r[s]=S:r[s]=je(S,v)?S:new v(S)}break}}},equals(t,e,n){return e===n?!0:!e||!n?!1:t.fields.byMember().every(a=>{const s=e[a.localName],r=n[a.localName];if(a.repeated){if(s.length!==r.length)return!1;switch(a.kind){case"message":return s.every((m,c)=>a.T.equals(m,r[c]));case"scalar":return s.every((m,c)=>Ae(a.T,m,r[c]));case"enum":return s.every((m,c)=>Ae(y.INT32,m,r[c]))}throw new Error(`repeated cannot contain ${a.kind}`)}switch(a.kind){case"message":return a.T.equals(s,r);case"enum":return Ae(y.INT32,s,r);case"scalar":return Ae(a.T,s,r);case"oneof":if(s.case!==r.case)return!1;const m=a.findField(s.case);if(m===void 0)return!0;switch(m.kind){case"message":return m.T.equals(s.value,r.value);case"enum":return Ae(y.INT32,s.value,r.value);case"scalar":return Ae(m.T,s.value,r.value)}throw new Error(`oneof cannot contain ${m.kind}`);case"map":const c=Object.keys(s).concat(Object.keys(r));switch(a.V.kind){case"message":const l=a.V.T;return c.every(p=>l.equals(s[p],r[p]));case"enum":return c.every(p=>Ae(y.INT32,s[p],r[p]));case"scalar":const d=a.V.T;return c.every(p=>Ae(d,s[p],r[p]))}break}})},clone(t){const e=t.getType(),n=new e,a=n;for(const s of e.fields.byMember()){const r=t[s.localName];let m;if(s.repeated)m=r.map(kn);else if(s.kind=="map"){m=a[s.localName];for(const[c,l]of Object.entries(r))m[c]=kn(l)}else s.kind=="oneof"?m=s.findField(r.case)?{case:r.case,value:kn(r.value)}:{case:void 0}:m=kn(r);a[s.localName]=m}for(const s of e.runtime.bin.listUnknownFields(t))e.runtime.bin.onUnknownField(a,s.no,s.wireType,s.data);return n}}}function kn(t){if(t===void 0)return t;if(je(t))return t.clone();if(t instanceof Uint8Array){const e=new Uint8Array(t.byteLength);return e.set(t),e}return t}function nn(t){return t instanceof Uint8Array?t:new Uint8Array(t)}function ja(t,e,n){return{syntax:t,json:mm(),bin:pm(),util:Object.assign(Object.assign({},km()),{newFieldList:e,initFields:n}),makeMessageType(a,s,r){return Hi(this,a,s,r)},makeEnum:Yi,makeEnumType:Ca,getEnumType:$i,makeExtension(a,s,r){return nm(this,a,s,r)}}}class Va{constructor(e,n){this._fields=e,this._normalizer=n}findJsonName(e){if(!this.jsonNames){const n={};for(const a of this.list())n[a.jsonName]=n[a.name]=a;this.jsonNames=n}return this.jsonNames[e]}find(e){if(!this.numbers){const n={};for(const a of this.list())n[a.no]=a;this.numbers=n}return this.numbers[e]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((e,n)=>e.no-n.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];const e=this.members;let n;for(const a of this.list())a.oneof?a.oneof!==n&&(n=a.oneof,e.push(n)):e.push(a)}return this.members}}function Wa(t,e){const n=$a(t);return e?n:Em(wm(n))}function ym(t){return Wa(t,!1)}const vm=$a;function $a(t){let e=!1;const n=[];for(let a=0;a`${t}$`,wm=t=>Sm.has(t)?Ya(t):t,Em=t=>bm.has(t)?Ya(t):t;class Rm{constructor(e){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=e,this.localName=ym(e)}addField(e){U(e.oneof===this,`field ${e.name} not one of ${this.name}`),this.fields.push(e)}findField(e){if(!this._lookup){this._lookup=Object.create(null);for(let n=0;nnew Va(t,e=>Ha(e,!0)),t=>{for(const e of t.getType().fields.byMember()){if(e.opt)continue;const n=e.localName,a=t;if(e.repeated){a[n]=[];continue}switch(e.kind){case"oneof":a[n]={case:void 0};break;case"enum":a[n]=0;break;case"map":a[n]={};break;case"scalar":a[n]=Xe(e.T,e.L);break}}}),u=ja("proto2",t=>new Va(t,e=>Ha(e,!1)),t=>{for(const e of t.getType().fields.byMember()){const n=e.localName,a=t;if(e.repeated){a[n]=[];continue}switch(e.kind){case"oneof":a[n]={case:void 0};break;case"map":a[n]={};break}}});var i;(function(t){t[t.Unary=0]="Unary",t[t.ServerStreaming=1]="ServerStreaming",t[t.ClientStreaming=2]="ClientStreaming",t[t.BiDiStreaming=3]="BiDiStreaming"})(i||(i={}));var ma;(function(t){t[t.NoSideEffects=1]="NoSideEffects",t[t.Idempotent=2]="Idempotent"})(ma||(ma={}));var Q;(function(t){t[t.EDITION_UNKNOWN=0]="EDITION_UNKNOWN",t[t.EDITION_LEGACY=900]="EDITION_LEGACY",t[t.EDITION_PROTO2=998]="EDITION_PROTO2",t[t.EDITION_PROTO3=999]="EDITION_PROTO3",t[t.EDITION_2023=1e3]="EDITION_2023",t[t.EDITION_2024=1001]="EDITION_2024",t[t.EDITION_1_TEST_ONLY=1]="EDITION_1_TEST_ONLY",t[t.EDITION_2_TEST_ONLY=2]="EDITION_2_TEST_ONLY",t[t.EDITION_99997_TEST_ONLY=99997]="EDITION_99997_TEST_ONLY",t[t.EDITION_99998_TEST_ONLY=99998]="EDITION_99998_TEST_ONLY",t[t.EDITION_99999_TEST_ONLY=99999]="EDITION_99999_TEST_ONLY",t[t.EDITION_MAX=2147483647]="EDITION_MAX"})(Q||(Q={}));u.util.setEnumType(Q,"google.protobuf.Edition",[{no:0,name:"EDITION_UNKNOWN"},{no:900,name:"EDITION_LEGACY"},{no:998,name:"EDITION_PROTO2"},{no:999,name:"EDITION_PROTO3"},{no:1e3,name:"EDITION_2023"},{no:1001,name:"EDITION_2024"},{no:1,name:"EDITION_1_TEST_ONLY"},{no:2,name:"EDITION_2_TEST_ONLY"},{no:99997,name:"EDITION_99997_TEST_ONLY"},{no:99998,name:"EDITION_99998_TEST_ONLY"},{no:99999,name:"EDITION_99999_TEST_ONLY"},{no:2147483647,name:"EDITION_MAX"}]);class Ge extends I{constructor(e){super(),this.file=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Ge().fromBinary(e,n)}static fromJson(e,n){return new Ge().fromJson(e,n)}static fromJsonString(e,n){return new Ge().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Ge,e,n)}}Ge.runtime=u;Ge.typeName="google.protobuf.FileDescriptorSet";Ge.fields=u.util.newFieldList(()=>[{no:1,name:"file",kind:"message",T:ne,repeated:!0}]);class ne extends I{constructor(e){super(),this.dependency=[],this.publicDependency=[],this.weakDependency=[],this.messageType=[],this.enumType=[],this.service=[],this.extension=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new ne().fromBinary(e,n)}static fromJson(e,n){return new ne().fromJson(e,n)}static fromJsonString(e,n){return new ne().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ne,e,n)}}ne.runtime=u;ne.typeName="google.protobuf.FileDescriptorProto";ne.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"package",kind:"scalar",T:9,opt:!0},{no:3,name:"dependency",kind:"scalar",T:9,repeated:!0},{no:10,name:"public_dependency",kind:"scalar",T:5,repeated:!0},{no:11,name:"weak_dependency",kind:"scalar",T:5,repeated:!0},{no:4,name:"message_type",kind:"message",T:te,repeated:!0},{no:5,name:"enum_type",kind:"message",T:ae,repeated:!0},{no:6,name:"service",kind:"message",T:fe,repeated:!0},{no:7,name:"extension",kind:"message",T:Z,repeated:!0},{no:8,name:"options",kind:"message",T:he,opt:!0},{no:9,name:"source_code_info",kind:"message",T:Ie,opt:!0},{no:12,name:"syntax",kind:"scalar",T:9,opt:!0},{no:14,name:"edition",kind:"enum",T:u.getEnumType(Q),opt:!0}]);class te extends I{constructor(e){super(),this.field=[],this.extension=[],this.nestedType=[],this.enumType=[],this.extensionRange=[],this.oneofDecl=[],this.reservedRange=[],this.reservedName=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new te().fromBinary(e,n)}static fromJson(e,n){return new te().fromJson(e,n)}static fromJsonString(e,n){return new te().fromJsonString(e,n)}static equals(e,n){return u.util.equals(te,e,n)}}te.runtime=u;te.typeName="google.protobuf.DescriptorProto";te.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"field",kind:"message",T:Z,repeated:!0},{no:6,name:"extension",kind:"message",T:Z,repeated:!0},{no:3,name:"nested_type",kind:"message",T:te,repeated:!0},{no:4,name:"enum_type",kind:"message",T:ae,repeated:!0},{no:5,name:"extension_range",kind:"message",T:me,repeated:!0},{no:8,name:"oneof_decl",kind:"message",T:ue,repeated:!0},{no:7,name:"options",kind:"message",T:ke,opt:!0},{no:9,name:"reserved_range",kind:"message",T:ce,repeated:!0},{no:10,name:"reserved_name",kind:"scalar",T:9,repeated:!0}]);class me extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new me().fromBinary(e,n)}static fromJson(e,n){return new me().fromJson(e,n)}static fromJsonString(e,n){return new me().fromJsonString(e,n)}static equals(e,n){return u.util.equals(me,e,n)}}me.runtime=u;me.typeName="google.protobuf.DescriptorProto.ExtensionRange";me.fields=u.util.newFieldList(()=>[{no:1,name:"start",kind:"scalar",T:5,opt:!0},{no:2,name:"end",kind:"scalar",T:5,opt:!0},{no:3,name:"options",kind:"message",T:de,opt:!0}]);class ce extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new ce().fromBinary(e,n)}static fromJson(e,n){return new ce().fromJson(e,n)}static fromJsonString(e,n){return new ce().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ce,e,n)}}ce.runtime=u;ce.typeName="google.protobuf.DescriptorProto.ReservedRange";ce.fields=u.util.newFieldList(()=>[{no:1,name:"start",kind:"scalar",T:5,opt:!0},{no:2,name:"end",kind:"scalar",T:5,opt:!0}]);class de extends I{constructor(e){super(),this.uninterpretedOption=[],this.declaration=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new de().fromBinary(e,n)}static fromJson(e,n){return new de().fromJson(e,n)}static fromJsonString(e,n){return new de().fromJsonString(e,n)}static equals(e,n){return u.util.equals(de,e,n)}}de.runtime=u;de.typeName="google.protobuf.ExtensionRangeOptions";de.fields=u.util.newFieldList(()=>[{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0},{no:2,name:"declaration",kind:"message",T:le,repeated:!0},{no:50,name:"features",kind:"message",T:x,opt:!0},{no:3,name:"verification",kind:"enum",T:u.getEnumType(rn),opt:!0,default:rn.UNVERIFIED}]);var rn;(function(t){t[t.DECLARATION=0]="DECLARATION",t[t.UNVERIFIED=1]="UNVERIFIED"})(rn||(rn={}));u.util.setEnumType(rn,"google.protobuf.ExtensionRangeOptions.VerificationState",[{no:0,name:"DECLARATION"},{no:1,name:"UNVERIFIED"}]);class le extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new le().fromBinary(e,n)}static fromJson(e,n){return new le().fromJson(e,n)}static fromJsonString(e,n){return new le().fromJsonString(e,n)}static equals(e,n){return u.util.equals(le,e,n)}}le.runtime=u;le.typeName="google.protobuf.ExtensionRangeOptions.Declaration";le.fields=u.util.newFieldList(()=>[{no:1,name:"number",kind:"scalar",T:5,opt:!0},{no:2,name:"full_name",kind:"scalar",T:9,opt:!0},{no:3,name:"type",kind:"scalar",T:9,opt:!0},{no:5,name:"reserved",kind:"scalar",T:8,opt:!0},{no:6,name:"repeated",kind:"scalar",T:8,opt:!0}]);class Z extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new Z().fromBinary(e,n)}static fromJson(e,n){return new Z().fromJson(e,n)}static fromJsonString(e,n){return new Z().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Z,e,n)}}Z.runtime=u;Z.typeName="google.protobuf.FieldDescriptorProto";Z.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:3,name:"number",kind:"scalar",T:5,opt:!0},{no:4,name:"label",kind:"enum",T:u.getEnumType(Cn),opt:!0},{no:5,name:"type",kind:"enum",T:u.getEnumType(Nn),opt:!0},{no:6,name:"type_name",kind:"scalar",T:9,opt:!0},{no:2,name:"extendee",kind:"scalar",T:9,opt:!0},{no:7,name:"default_value",kind:"scalar",T:9,opt:!0},{no:9,name:"oneof_index",kind:"scalar",T:5,opt:!0},{no:10,name:"json_name",kind:"scalar",T:9,opt:!0},{no:8,name:"options",kind:"message",T:ye,opt:!0},{no:17,name:"proto3_optional",kind:"scalar",T:8,opt:!0}]);var Nn;(function(t){t[t.DOUBLE=1]="DOUBLE",t[t.FLOAT=2]="FLOAT",t[t.INT64=3]="INT64",t[t.UINT64=4]="UINT64",t[t.INT32=5]="INT32",t[t.FIXED64=6]="FIXED64",t[t.FIXED32=7]="FIXED32",t[t.BOOL=8]="BOOL",t[t.STRING=9]="STRING",t[t.GROUP=10]="GROUP",t[t.MESSAGE=11]="MESSAGE",t[t.BYTES=12]="BYTES",t[t.UINT32=13]="UINT32",t[t.ENUM=14]="ENUM",t[t.SFIXED32=15]="SFIXED32",t[t.SFIXED64=16]="SFIXED64",t[t.SINT32=17]="SINT32",t[t.SINT64=18]="SINT64"})(Nn||(Nn={}));u.util.setEnumType(Nn,"google.protobuf.FieldDescriptorProto.Type",[{no:1,name:"TYPE_DOUBLE"},{no:2,name:"TYPE_FLOAT"},{no:3,name:"TYPE_INT64"},{no:4,name:"TYPE_UINT64"},{no:5,name:"TYPE_INT32"},{no:6,name:"TYPE_FIXED64"},{no:7,name:"TYPE_FIXED32"},{no:8,name:"TYPE_BOOL"},{no:9,name:"TYPE_STRING"},{no:10,name:"TYPE_GROUP"},{no:11,name:"TYPE_MESSAGE"},{no:12,name:"TYPE_BYTES"},{no:13,name:"TYPE_UINT32"},{no:14,name:"TYPE_ENUM"},{no:15,name:"TYPE_SFIXED32"},{no:16,name:"TYPE_SFIXED64"},{no:17,name:"TYPE_SINT32"},{no:18,name:"TYPE_SINT64"}]);var Cn;(function(t){t[t.OPTIONAL=1]="OPTIONAL",t[t.REPEATED=3]="REPEATED",t[t.REQUIRED=2]="REQUIRED"})(Cn||(Cn={}));u.util.setEnumType(Cn,"google.protobuf.FieldDescriptorProto.Label",[{no:1,name:"LABEL_OPTIONAL"},{no:3,name:"LABEL_REPEATED"},{no:2,name:"LABEL_REQUIRED"}]);class ue extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new ue().fromBinary(e,n)}static fromJson(e,n){return new ue().fromJson(e,n)}static fromJsonString(e,n){return new ue().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ue,e,n)}}ue.runtime=u;ue.typeName="google.protobuf.OneofDescriptorProto";ue.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"options",kind:"message",T:be,opt:!0}]);class ae extends I{constructor(e){super(),this.value=[],this.reservedRange=[],this.reservedName=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new ae().fromBinary(e,n)}static fromJson(e,n){return new ae().fromJson(e,n)}static fromJsonString(e,n){return new ae().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ae,e,n)}}ae.runtime=u;ae.typeName="google.protobuf.EnumDescriptorProto";ae.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"value",kind:"message",T:ge,repeated:!0},{no:3,name:"options",kind:"message",T:Se,opt:!0},{no:4,name:"reserved_range",kind:"message",T:pe,repeated:!0},{no:5,name:"reserved_name",kind:"scalar",T:9,repeated:!0}]);class pe extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new pe().fromBinary(e,n)}static fromJson(e,n){return new pe().fromJson(e,n)}static fromJsonString(e,n){return new pe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(pe,e,n)}}pe.runtime=u;pe.typeName="google.protobuf.EnumDescriptorProto.EnumReservedRange";pe.fields=u.util.newFieldList(()=>[{no:1,name:"start",kind:"scalar",T:5,opt:!0},{no:2,name:"end",kind:"scalar",T:5,opt:!0}]);class ge extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new ge().fromBinary(e,n)}static fromJson(e,n){return new ge().fromJson(e,n)}static fromJsonString(e,n){return new ge().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ge,e,n)}}ge.runtime=u;ge.typeName="google.protobuf.EnumValueDescriptorProto";ge.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"number",kind:"scalar",T:5,opt:!0},{no:3,name:"options",kind:"message",T:we,opt:!0}]);class fe extends I{constructor(e){super(),this.method=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new fe().fromBinary(e,n)}static fromJson(e,n){return new fe().fromJson(e,n)}static fromJsonString(e,n){return new fe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(fe,e,n)}}fe.runtime=u;fe.typeName="google.protobuf.ServiceDescriptorProto";fe.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"method",kind:"message",T:Te,repeated:!0},{no:3,name:"options",kind:"message",T:Ee,opt:!0}]);class Te extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new Te().fromBinary(e,n)}static fromJson(e,n){return new Te().fromJson(e,n)}static fromJsonString(e,n){return new Te().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Te,e,n)}}Te.runtime=u;Te.typeName="google.protobuf.MethodDescriptorProto";Te.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"input_type",kind:"scalar",T:9,opt:!0},{no:3,name:"output_type",kind:"scalar",T:9,opt:!0},{no:4,name:"options",kind:"message",T:re,opt:!0},{no:5,name:"client_streaming",kind:"scalar",T:8,opt:!0,default:!1},{no:6,name:"server_streaming",kind:"scalar",T:8,opt:!0,default:!1}]);class he extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new he().fromBinary(e,n)}static fromJson(e,n){return new he().fromJson(e,n)}static fromJsonString(e,n){return new he().fromJsonString(e,n)}static equals(e,n){return u.util.equals(he,e,n)}}he.runtime=u;he.typeName="google.protobuf.FileOptions";he.fields=u.util.newFieldList(()=>[{no:1,name:"java_package",kind:"scalar",T:9,opt:!0},{no:8,name:"java_outer_classname",kind:"scalar",T:9,opt:!0},{no:10,name:"java_multiple_files",kind:"scalar",T:8,opt:!0,default:!1},{no:20,name:"java_generate_equals_and_hash",kind:"scalar",T:8,opt:!0},{no:27,name:"java_string_check_utf8",kind:"scalar",T:8,opt:!0,default:!1},{no:9,name:"optimize_for",kind:"enum",T:u.getEnumType(on),opt:!0,default:on.SPEED},{no:11,name:"go_package",kind:"scalar",T:9,opt:!0},{no:16,name:"cc_generic_services",kind:"scalar",T:8,opt:!0,default:!1},{no:17,name:"java_generic_services",kind:"scalar",T:8,opt:!0,default:!1},{no:18,name:"py_generic_services",kind:"scalar",T:8,opt:!0,default:!1},{no:23,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:31,name:"cc_enable_arenas",kind:"scalar",T:8,opt:!0,default:!0},{no:36,name:"objc_class_prefix",kind:"scalar",T:9,opt:!0},{no:37,name:"csharp_namespace",kind:"scalar",T:9,opt:!0},{no:39,name:"swift_prefix",kind:"scalar",T:9,opt:!0},{no:40,name:"php_class_prefix",kind:"scalar",T:9,opt:!0},{no:41,name:"php_namespace",kind:"scalar",T:9,opt:!0},{no:44,name:"php_metadata_namespace",kind:"scalar",T:9,opt:!0},{no:45,name:"ruby_package",kind:"scalar",T:9,opt:!0},{no:50,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);var on;(function(t){t[t.SPEED=1]="SPEED",t[t.CODE_SIZE=2]="CODE_SIZE",t[t.LITE_RUNTIME=3]="LITE_RUNTIME"})(on||(on={}));u.util.setEnumType(on,"google.protobuf.FileOptions.OptimizeMode",[{no:1,name:"SPEED"},{no:2,name:"CODE_SIZE"},{no:3,name:"LITE_RUNTIME"}]);class ke extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new ke().fromBinary(e,n)}static fromJson(e,n){return new ke().fromJson(e,n)}static fromJsonString(e,n){return new ke().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ke,e,n)}}ke.runtime=u;ke.typeName="google.protobuf.MessageOptions";ke.fields=u.util.newFieldList(()=>[{no:1,name:"message_set_wire_format",kind:"scalar",T:8,opt:!0,default:!1},{no:2,name:"no_standard_descriptor_accessor",kind:"scalar",T:8,opt:!0,default:!1},{no:3,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:7,name:"map_entry",kind:"scalar",T:8,opt:!0},{no:11,name:"deprecated_legacy_json_field_conflicts",kind:"scalar",T:8,opt:!0},{no:12,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class ye extends I{constructor(e){super(),this.targets=[],this.editionDefaults=[],this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new ye().fromBinary(e,n)}static fromJson(e,n){return new ye().fromJson(e,n)}static fromJsonString(e,n){return new ye().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ye,e,n)}}ye.runtime=u;ye.typeName="google.protobuf.FieldOptions";ye.fields=u.util.newFieldList(()=>[{no:1,name:"ctype",kind:"enum",T:u.getEnumType(mn),opt:!0,default:mn.STRING},{no:2,name:"packed",kind:"scalar",T:8,opt:!0},{no:6,name:"jstype",kind:"enum",T:u.getEnumType(cn),opt:!0,default:cn.JS_NORMAL},{no:5,name:"lazy",kind:"scalar",T:8,opt:!0,default:!1},{no:15,name:"unverified_lazy",kind:"scalar",T:8,opt:!0,default:!1},{no:3,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:10,name:"weak",kind:"scalar",T:8,opt:!0,default:!1},{no:16,name:"debug_redact",kind:"scalar",T:8,opt:!0,default:!1},{no:17,name:"retention",kind:"enum",T:u.getEnumType(Un),opt:!0},{no:19,name:"targets",kind:"enum",T:u.getEnumType(Pn),repeated:!0},{no:20,name:"edition_defaults",kind:"message",T:ve,repeated:!0},{no:21,name:"features",kind:"message",T:x,opt:!0},{no:22,name:"feature_support",kind:"message",T:se,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);var mn;(function(t){t[t.STRING=0]="STRING",t[t.CORD=1]="CORD",t[t.STRING_PIECE=2]="STRING_PIECE"})(mn||(mn={}));u.util.setEnumType(mn,"google.protobuf.FieldOptions.CType",[{no:0,name:"STRING"},{no:1,name:"CORD"},{no:2,name:"STRING_PIECE"}]);var cn;(function(t){t[t.JS_NORMAL=0]="JS_NORMAL",t[t.JS_STRING=1]="JS_STRING",t[t.JS_NUMBER=2]="JS_NUMBER"})(cn||(cn={}));u.util.setEnumType(cn,"google.protobuf.FieldOptions.JSType",[{no:0,name:"JS_NORMAL"},{no:1,name:"JS_STRING"},{no:2,name:"JS_NUMBER"}]);var Un;(function(t){t[t.RETENTION_UNKNOWN=0]="RETENTION_UNKNOWN",t[t.RETENTION_RUNTIME=1]="RETENTION_RUNTIME",t[t.RETENTION_SOURCE=2]="RETENTION_SOURCE"})(Un||(Un={}));u.util.setEnumType(Un,"google.protobuf.FieldOptions.OptionRetention",[{no:0,name:"RETENTION_UNKNOWN"},{no:1,name:"RETENTION_RUNTIME"},{no:2,name:"RETENTION_SOURCE"}]);var Pn;(function(t){t[t.TARGET_TYPE_UNKNOWN=0]="TARGET_TYPE_UNKNOWN",t[t.TARGET_TYPE_FILE=1]="TARGET_TYPE_FILE",t[t.TARGET_TYPE_EXTENSION_RANGE=2]="TARGET_TYPE_EXTENSION_RANGE",t[t.TARGET_TYPE_MESSAGE=3]="TARGET_TYPE_MESSAGE",t[t.TARGET_TYPE_FIELD=4]="TARGET_TYPE_FIELD",t[t.TARGET_TYPE_ONEOF=5]="TARGET_TYPE_ONEOF",t[t.TARGET_TYPE_ENUM=6]="TARGET_TYPE_ENUM",t[t.TARGET_TYPE_ENUM_ENTRY=7]="TARGET_TYPE_ENUM_ENTRY",t[t.TARGET_TYPE_SERVICE=8]="TARGET_TYPE_SERVICE",t[t.TARGET_TYPE_METHOD=9]="TARGET_TYPE_METHOD"})(Pn||(Pn={}));u.util.setEnumType(Pn,"google.protobuf.FieldOptions.OptionTargetType",[{no:0,name:"TARGET_TYPE_UNKNOWN"},{no:1,name:"TARGET_TYPE_FILE"},{no:2,name:"TARGET_TYPE_EXTENSION_RANGE"},{no:3,name:"TARGET_TYPE_MESSAGE"},{no:4,name:"TARGET_TYPE_FIELD"},{no:5,name:"TARGET_TYPE_ONEOF"},{no:6,name:"TARGET_TYPE_ENUM"},{no:7,name:"TARGET_TYPE_ENUM_ENTRY"},{no:8,name:"TARGET_TYPE_SERVICE"},{no:9,name:"TARGET_TYPE_METHOD"}]);class ve extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new ve().fromBinary(e,n)}static fromJson(e,n){return new ve().fromJson(e,n)}static fromJsonString(e,n){return new ve().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ve,e,n)}}ve.runtime=u;ve.typeName="google.protobuf.FieldOptions.EditionDefault";ve.fields=u.util.newFieldList(()=>[{no:3,name:"edition",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:2,name:"value",kind:"scalar",T:9,opt:!0}]);class se extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new se().fromBinary(e,n)}static fromJson(e,n){return new se().fromJson(e,n)}static fromJsonString(e,n){return new se().fromJsonString(e,n)}static equals(e,n){return u.util.equals(se,e,n)}}se.runtime=u;se.typeName="google.protobuf.FieldOptions.FeatureSupport";se.fields=u.util.newFieldList(()=>[{no:1,name:"edition_introduced",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:2,name:"edition_deprecated",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:3,name:"deprecation_warning",kind:"scalar",T:9,opt:!0},{no:4,name:"edition_removed",kind:"enum",T:u.getEnumType(Q),opt:!0}]);class be extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new be().fromBinary(e,n)}static fromJson(e,n){return new be().fromJson(e,n)}static fromJsonString(e,n){return new be().fromJsonString(e,n)}static equals(e,n){return u.util.equals(be,e,n)}}be.runtime=u;be.typeName="google.protobuf.OneofOptions";be.fields=u.util.newFieldList(()=>[{no:1,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class Se extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Se().fromBinary(e,n)}static fromJson(e,n){return new Se().fromJson(e,n)}static fromJsonString(e,n){return new Se().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Se,e,n)}}Se.runtime=u;Se.typeName="google.protobuf.EnumOptions";Se.fields=u.util.newFieldList(()=>[{no:2,name:"allow_alias",kind:"scalar",T:8,opt:!0},{no:3,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:6,name:"deprecated_legacy_json_field_conflicts",kind:"scalar",T:8,opt:!0},{no:7,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class we extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new we().fromBinary(e,n)}static fromJson(e,n){return new we().fromJson(e,n)}static fromJsonString(e,n){return new we().fromJsonString(e,n)}static equals(e,n){return u.util.equals(we,e,n)}}we.runtime=u;we.typeName="google.protobuf.EnumValueOptions";we.fields=u.util.newFieldList(()=>[{no:1,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:2,name:"features",kind:"message",T:x,opt:!0},{no:3,name:"debug_redact",kind:"scalar",T:8,opt:!0,default:!1},{no:4,name:"feature_support",kind:"message",T:se,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class Ee extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Ee().fromBinary(e,n)}static fromJson(e,n){return new Ee().fromJson(e,n)}static fromJsonString(e,n){return new Ee().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Ee,e,n)}}Ee.runtime=u;Ee.typeName="google.protobuf.ServiceOptions";Ee.fields=u.util.newFieldList(()=>[{no:34,name:"features",kind:"message",T:x,opt:!0},{no:33,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class re extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new re().fromBinary(e,n)}static fromJson(e,n){return new re().fromJson(e,n)}static fromJsonString(e,n){return new re().fromJsonString(e,n)}static equals(e,n){return u.util.equals(re,e,n)}}re.runtime=u;re.typeName="google.protobuf.MethodOptions";re.fields=u.util.newFieldList(()=>[{no:33,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:34,name:"idempotency_level",kind:"enum",T:u.getEnumType(dn),opt:!0,default:dn.IDEMPOTENCY_UNKNOWN},{no:35,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);var dn;(function(t){t[t.IDEMPOTENCY_UNKNOWN=0]="IDEMPOTENCY_UNKNOWN",t[t.NO_SIDE_EFFECTS=1]="NO_SIDE_EFFECTS",t[t.IDEMPOTENT=2]="IDEMPOTENT"})(dn||(dn={}));u.util.setEnumType(dn,"google.protobuf.MethodOptions.IdempotencyLevel",[{no:0,name:"IDEMPOTENCY_UNKNOWN"},{no:1,name:"NO_SIDE_EFFECTS"},{no:2,name:"IDEMPOTENT"}]);class J extends I{constructor(e){super(),this.name=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new J().fromBinary(e,n)}static fromJson(e,n){return new J().fromJson(e,n)}static fromJsonString(e,n){return new J().fromJsonString(e,n)}static equals(e,n){return u.util.equals(J,e,n)}}J.runtime=u;J.typeName="google.protobuf.UninterpretedOption";J.fields=u.util.newFieldList(()=>[{no:2,name:"name",kind:"message",T:Re,repeated:!0},{no:3,name:"identifier_value",kind:"scalar",T:9,opt:!0},{no:4,name:"positive_int_value",kind:"scalar",T:4,opt:!0},{no:5,name:"negative_int_value",kind:"scalar",T:3,opt:!0},{no:6,name:"double_value",kind:"scalar",T:1,opt:!0},{no:7,name:"string_value",kind:"scalar",T:12,opt:!0},{no:8,name:"aggregate_value",kind:"scalar",T:9,opt:!0}]);class Re extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new Re().fromBinary(e,n)}static fromJson(e,n){return new Re().fromJson(e,n)}static fromJsonString(e,n){return new Re().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Re,e,n)}}Re.runtime=u;Re.typeName="google.protobuf.UninterpretedOption.NamePart";Re.fields=u.util.newFieldList(()=>[{no:1,name:"name_part",kind:"scalar",T:9,req:!0},{no:2,name:"is_extension",kind:"scalar",T:8,req:!0}]);class x extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new x().fromBinary(e,n)}static fromJson(e,n){return new x().fromJson(e,n)}static fromJsonString(e,n){return new x().fromJsonString(e,n)}static equals(e,n){return u.util.equals(x,e,n)}}x.runtime=u;x.typeName="google.protobuf.FeatureSet";x.fields=u.util.newFieldList(()=>[{no:1,name:"field_presence",kind:"enum",T:u.getEnumType(Dn),opt:!0},{no:2,name:"enum_type",kind:"enum",T:u.getEnumType(An),opt:!0},{no:3,name:"repeated_field_encoding",kind:"enum",T:u.getEnumType(Gn),opt:!0},{no:4,name:"utf8_validation",kind:"enum",T:u.getEnumType(xn),opt:!0},{no:5,name:"message_encoding",kind:"enum",T:u.getEnumType(Fn),opt:!0},{no:6,name:"json_format",kind:"enum",T:u.getEnumType(Ln),opt:!0}]);var Dn;(function(t){t[t.FIELD_PRESENCE_UNKNOWN=0]="FIELD_PRESENCE_UNKNOWN",t[t.EXPLICIT=1]="EXPLICIT",t[t.IMPLICIT=2]="IMPLICIT",t[t.LEGACY_REQUIRED=3]="LEGACY_REQUIRED"})(Dn||(Dn={}));u.util.setEnumType(Dn,"google.protobuf.FeatureSet.FieldPresence",[{no:0,name:"FIELD_PRESENCE_UNKNOWN"},{no:1,name:"EXPLICIT"},{no:2,name:"IMPLICIT"},{no:3,name:"LEGACY_REQUIRED"}]);var An;(function(t){t[t.ENUM_TYPE_UNKNOWN=0]="ENUM_TYPE_UNKNOWN",t[t.OPEN=1]="OPEN",t[t.CLOSED=2]="CLOSED"})(An||(An={}));u.util.setEnumType(An,"google.protobuf.FeatureSet.EnumType",[{no:0,name:"ENUM_TYPE_UNKNOWN"},{no:1,name:"OPEN"},{no:2,name:"CLOSED"}]);var Gn;(function(t){t[t.REPEATED_FIELD_ENCODING_UNKNOWN=0]="REPEATED_FIELD_ENCODING_UNKNOWN",t[t.PACKED=1]="PACKED",t[t.EXPANDED=2]="EXPANDED"})(Gn||(Gn={}));u.util.setEnumType(Gn,"google.protobuf.FeatureSet.RepeatedFieldEncoding",[{no:0,name:"REPEATED_FIELD_ENCODING_UNKNOWN"},{no:1,name:"PACKED"},{no:2,name:"EXPANDED"}]);var xn;(function(t){t[t.UTF8_VALIDATION_UNKNOWN=0]="UTF8_VALIDATION_UNKNOWN",t[t.VERIFY=2]="VERIFY",t[t.NONE=3]="NONE"})(xn||(xn={}));u.util.setEnumType(xn,"google.protobuf.FeatureSet.Utf8Validation",[{no:0,name:"UTF8_VALIDATION_UNKNOWN"},{no:2,name:"VERIFY"},{no:3,name:"NONE"}]);var Fn;(function(t){t[t.MESSAGE_ENCODING_UNKNOWN=0]="MESSAGE_ENCODING_UNKNOWN",t[t.LENGTH_PREFIXED=1]="LENGTH_PREFIXED",t[t.DELIMITED=2]="DELIMITED"})(Fn||(Fn={}));u.util.setEnumType(Fn,"google.protobuf.FeatureSet.MessageEncoding",[{no:0,name:"MESSAGE_ENCODING_UNKNOWN"},{no:1,name:"LENGTH_PREFIXED"},{no:2,name:"DELIMITED"}]);var Ln;(function(t){t[t.JSON_FORMAT_UNKNOWN=0]="JSON_FORMAT_UNKNOWN",t[t.ALLOW=1]="ALLOW",t[t.LEGACY_BEST_EFFORT=2]="LEGACY_BEST_EFFORT"})(Ln||(Ln={}));u.util.setEnumType(Ln,"google.protobuf.FeatureSet.JsonFormat",[{no:0,name:"JSON_FORMAT_UNKNOWN"},{no:1,name:"ALLOW"},{no:2,name:"LEGACY_BEST_EFFORT"}]);class xe extends I{constructor(e){super(),this.defaults=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new xe().fromBinary(e,n)}static fromJson(e,n){return new xe().fromJson(e,n)}static fromJsonString(e,n){return new xe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(xe,e,n)}}xe.runtime=u;xe.typeName="google.protobuf.FeatureSetDefaults";xe.fields=u.util.newFieldList(()=>[{no:1,name:"defaults",kind:"message",T:Oe,repeated:!0},{no:4,name:"minimum_edition",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:5,name:"maximum_edition",kind:"enum",T:u.getEnumType(Q),opt:!0}]);class Oe extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new Oe().fromBinary(e,n)}static fromJson(e,n){return new Oe().fromJson(e,n)}static fromJsonString(e,n){return new Oe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Oe,e,n)}}Oe.runtime=u;Oe.typeName="google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault";Oe.fields=u.util.newFieldList(()=>[{no:3,name:"edition",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:4,name:"overridable_features",kind:"message",T:x,opt:!0},{no:5,name:"fixed_features",kind:"message",T:x,opt:!0}]);class Ie extends I{constructor(e){super(),this.location=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Ie().fromBinary(e,n)}static fromJson(e,n){return new Ie().fromJson(e,n)}static fromJsonString(e,n){return new Ie().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Ie,e,n)}}Ie.runtime=u;Ie.typeName="google.protobuf.SourceCodeInfo";Ie.fields=u.util.newFieldList(()=>[{no:1,name:"location",kind:"message",T:_e,repeated:!0}]);class _e extends I{constructor(e){super(),this.path=[],this.span=[],this.leadingDetachedComments=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new _e().fromBinary(e,n)}static fromJson(e,n){return new _e().fromJson(e,n)}static fromJsonString(e,n){return new _e().fromJsonString(e,n)}static equals(e,n){return u.util.equals(_e,e,n)}}_e.runtime=u;_e.typeName="google.protobuf.SourceCodeInfo.Location";_e.fields=u.util.newFieldList(()=>[{no:1,name:"path",kind:"scalar",T:5,repeated:!0,packed:!0},{no:2,name:"span",kind:"scalar",T:5,repeated:!0,packed:!0},{no:3,name:"leading_comments",kind:"scalar",T:9,opt:!0},{no:4,name:"trailing_comments",kind:"scalar",T:9,opt:!0},{no:6,name:"leading_detached_comments",kind:"scalar",T:9,repeated:!0}]);class Fe extends I{constructor(e){super(),this.annotation=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Fe().fromBinary(e,n)}static fromJson(e,n){return new Fe().fromJson(e,n)}static fromJsonString(e,n){return new Fe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Fe,e,n)}}Fe.runtime=u;Fe.typeName="google.protobuf.GeneratedCodeInfo";Fe.fields=u.util.newFieldList(()=>[{no:1,name:"annotation",kind:"message",T:Me,repeated:!0}]);class Me extends I{constructor(e){super(),this.path=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Me().fromBinary(e,n)}static fromJson(e,n){return new Me().fromJson(e,n)}static fromJsonString(e,n){return new Me().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Me,e,n)}}Me.runtime=u;Me.typeName="google.protobuf.GeneratedCodeInfo.Annotation";Me.fields=u.util.newFieldList(()=>[{no:1,name:"path",kind:"scalar",T:5,repeated:!0,packed:!0},{no:2,name:"source_file",kind:"scalar",T:9,opt:!0},{no:3,name:"begin",kind:"scalar",T:5,opt:!0},{no:4,name:"end",kind:"scalar",T:5,opt:!0},{no:5,name:"semantic",kind:"enum",T:u.getEnumType(qn),opt:!0}]);var qn;(function(t){t[t.NONE=0]="NONE",t[t.SET=1]="SET",t[t.ALIAS=2]="ALIAS"})(qn||(qn={}));u.util.setEnumType(qn,"google.protobuf.GeneratedCodeInfo.Annotation.Semantic",[{no:0,name:"NONE"},{no:1,name:"SET"},{no:2,name:"ALIAS"}]);class A extends I{constructor(e){super(),this.seconds=B.zero,this.nanos=0,o.util.initPartial(e,this)}fromJson(e,n){if(typeof e!="string")throw new Error(`cannot decode google.protobuf.Timestamp from JSON: ${o.json.debug(e)}`);const a=e.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!a)throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");const s=Date.parse(a[1]+"-"+a[2]+"-"+a[3]+"T"+a[4]+":"+a[5]+":"+a[6]+(a[8]?a[8]:"Z"));if(Number.isNaN(s))throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(sDate.parse("9999-12-31T23:59:59Z"))throw new Error("cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");return this.seconds=B.parse(s/1e3),this.nanos=0,a[7]&&(this.nanos=parseInt("1"+a[7]+"0".repeat(9-a[7].length))-1e9),this}toJson(e){const n=Number(this.seconds)*1e3;if(nDate.parse("9999-12-31T23:59:59Z"))throw new Error("cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");if(this.nanos<0)throw new Error("cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative");let a="Z";if(this.nanos>0){const s=(this.nanos+1e9).toString().substring(1);s.substring(3)==="000000"?a="."+s.substring(0,3)+"Z":s.substring(6)==="000"?a="."+s.substring(0,6)+"Z":a="."+s+"Z"}return new Date(n).toISOString().replace(".000Z",a)}toDate(){return new Date(Number(this.seconds)*1e3+Math.ceil(this.nanos/1e6))}static now(){return A.fromDate(new Date)}static fromDate(e){const n=e.getTime();return new A({seconds:B.parse(Math.floor(n/1e3)),nanos:n%1e3*1e6})}static fromBinary(e,n){return new A().fromBinary(e,n)}static fromJson(e,n){return new A().fromJson(e,n)}static fromJsonString(e,n){return new A().fromJsonString(e,n)}static equals(e,n){return o.util.equals(A,e,n)}}A.runtime=o;A.typeName="google.protobuf.Timestamp";A.fields=o.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);class $ extends I{constructor(e){super(),this.seconds=B.zero,this.nanos=0,o.util.initPartial(e,this)}fromJson(e,n){if(typeof e!="string")throw new Error(`cannot decode google.protobuf.Duration from JSON: ${o.json.debug(e)}`);const a=e.match(/^(-?[0-9]+)(?:\.([0-9]+))?s/);if(a===null)throw new Error(`cannot decode google.protobuf.Duration from JSON: ${o.json.debug(e)}`);const s=Number(a[1]);if(s>315576e6||s<-315576e6)throw new Error(`cannot decode google.protobuf.Duration from JSON: ${o.json.debug(e)}`);if(this.seconds=B.parse(s),typeof a[2]=="string"){const r=a[2]+"0".repeat(9-a[2].length);this.nanos=parseInt(r),(s<0||Object.is(s,-0))&&(this.nanos=-this.nanos)}return this}toJson(e){if(Number(this.seconds)>315576e6||Number(this.seconds)<-315576e6)throw new Error("cannot encode google.protobuf.Duration to JSON: value out of range");let n=this.seconds.toString();if(this.nanos!==0){let a=Math.abs(this.nanos).toString();a="0".repeat(9-a.length)+a,a.substring(3)==="000000"?a=a.substring(0,3):a.substring(6)==="000"&&(a=a.substring(0,6)),n+="."+a,this.nanos<0&&Number(this.seconds)==0&&(n="-"+n)}return n+"s"}static fromBinary(e,n){return new $().fromBinary(e,n)}static fromJson(e,n){return new $().fromJson(e,n)}static fromJsonString(e,n){return new $().fromJsonString(e,n)}static equals(e,n){return o.util.equals($,e,n)}}$.runtime=o;$.typeName="google.protobuf.Duration";$.fields=o.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);class X extends I{constructor(e){super(),this.typeUrl="",this.value=new Uint8Array(0),o.util.initPartial(e,this)}toJson(e){var n;if(this.typeUrl==="")return{};const a=this.typeUrlToName(this.typeUrl),s=(n=e?.typeRegistry)===null||n===void 0?void 0:n.findMessage(a);if(!s)throw new Error(`cannot encode message google.protobuf.Any to JSON: "${this.typeUrl}" is not in the type registry`);let r=s.fromBinary(this.value).toJson(e);return(a.startsWith("google.protobuf.")||r===null||Array.isArray(r)||typeof r!="object")&&(r={value:r}),r["@type"]=this.typeUrl,r}fromJson(e,n){var a;if(e===null||Array.isArray(e)||typeof e!="object")throw new Error(`cannot decode message google.protobuf.Any from JSON: expected object but got ${e===null?"null":Array.isArray(e)?"array":typeof e}`);if(Object.keys(e).length==0)return this;const s=e["@type"];if(typeof s!="string"||s=="")throw new Error('cannot decode message google.protobuf.Any from JSON: "@type" is empty');const r=this.typeUrlToName(s),m=(a=n?.typeRegistry)===null||a===void 0?void 0:a.findMessage(r);if(!m)throw new Error(`cannot decode message google.protobuf.Any from JSON: ${s} is not in the type registry`);let c;if(r.startsWith("google.protobuf.")&&Object.prototype.hasOwnProperty.call(e,"value"))c=m.fromJson(e.value,n);else{const l=Object.assign({},e);delete l["@type"],c=m.fromJson(l,n)}return this.packFrom(c),this}packFrom(e){this.value=e.toBinary(),this.typeUrl=this.typeNameToUrl(e.getType().typeName)}unpackTo(e){return this.is(e.getType())?(e.fromBinary(this.value),!0):!1}unpack(e){if(this.typeUrl==="")return;const n=e.findMessage(this.typeUrlToName(this.typeUrl));if(n)return n.fromBinary(this.value)}is(e){if(this.typeUrl==="")return!1;const n=this.typeUrlToName(this.typeUrl);let a="";return typeof e=="string"?a=e:a=e.typeName,n===a}typeNameToUrl(e){return`type.googleapis.com/${e}`}typeUrlToName(e){if(!e.length)throw new Error(`invalid type url: ${e}`);const n=e.lastIndexOf("/"),a=n>=0?e.substring(n+1):e;if(!a.length)throw new Error(`invalid type url: ${e}`);return a}static pack(e){const n=new X;return n.packFrom(e),n}static fromBinary(e,n){return new X().fromBinary(e,n)}static fromJson(e,n){return new X().fromJson(e,n)}static fromJsonString(e,n){return new X().fromJsonString(e,n)}static equals(e,n){return o.util.equals(X,e,n)}}X.runtime=o;X.typeName="google.protobuf.Any";X.fields=o.util.newFieldList(()=>[{no:1,name:"type_url",kind:"scalar",T:9},{no:2,name:"value",kind:"scalar",T:12}]);class Ne extends I{constructor(e){super(),this.paths=[],o.util.initPartial(e,this)}toJson(e){function n(a){let s=!1;const r=[];for(let m=0;m{if(a.match(/_[0-9]?_/g)||a.match(/[A-Z]/g))throw new Error('cannot encode google.protobuf.FieldMask to JSON: lowerCamelCase of path name "'+a+'" is irreversible');return n(a)}).join(",")}fromJson(e,n){if(typeof e!="string")throw new Error("cannot decode google.protobuf.FieldMask from JSON: "+o.json.debug(e));if(e==="")return this;function a(s){if(s.includes("_"))throw new Error("cannot decode google.protobuf.FieldMask from JSON: path names must be lowerCamelCase");const r=s.replace(/[A-Z]/g,m=>"_"+m.toLowerCase());return r[0]==="_"?r.substring(1):r}return this.paths=e.split(",").map(a),this}static fromBinary(e,n){return new Ne().fromBinary(e,n)}static fromJson(e,n){return new Ne().fromJson(e,n)}static fromJsonString(e,n){return new Ne().fromJsonString(e,n)}static equals(e,n){return o.util.equals(Ne,e,n)}}Ne.runtime=o;Ne.typeName="google.protobuf.FieldMask";Ne.fields=o.util.newFieldList(()=>[{no:1,name:"paths",kind:"scalar",T:9,repeated:!0}]);var ln;(function(t){t[t.NULL_VALUE=0]="NULL_VALUE"})(ln||(ln={}));o.util.setEnumType(ln,"google.protobuf.NullValue",[{no:0,name:"NULL_VALUE"}]);class h extends I{constructor(e){super(),this.fields={},o.util.initPartial(e,this)}toJson(e){const n={};for(const[a,s]of Object.entries(this.fields))n[a]=s.toJson(e);return n}fromJson(e,n){if(typeof e!="object"||e==null||Array.isArray(e))throw new Error("cannot decode google.protobuf.Struct from JSON "+o.json.debug(e));for(const[a,s]of Object.entries(e))this.fields[a]=Y.fromJson(s);return this}static fromBinary(e,n){return new h().fromBinary(e,n)}static fromJson(e,n){return new h().fromJson(e,n)}static fromJsonString(e,n){return new h().fromJsonString(e,n)}static equals(e,n){return o.util.equals(h,e,n)}}h.runtime=o;h.typeName="google.protobuf.Struct";h.fields=o.util.newFieldList(()=>[{no:1,name:"fields",kind:"map",K:9,V:{kind:"message",T:Y}}]);class Y extends I{constructor(e){super(),this.kind={case:void 0},o.util.initPartial(e,this)}toJson(e){switch(this.kind.case){case"nullValue":return null;case"numberValue":if(!Number.isFinite(this.kind.value))throw new Error("google.protobuf.Value cannot be NaN or Infinity");return this.kind.value;case"boolValue":return this.kind.value;case"stringValue":return this.kind.value;case"structValue":case"listValue":return this.kind.value.toJson(Object.assign(Object.assign({},e),{emitDefaultValues:!0}))}throw new Error("google.protobuf.Value must have a value")}fromJson(e,n){switch(typeof e){case"number":this.kind={case:"numberValue",value:e};break;case"string":this.kind={case:"stringValue",value:e};break;case"boolean":this.kind={case:"boolValue",value:e};break;case"object":e===null?this.kind={case:"nullValue",value:ln.NULL_VALUE}:Array.isArray(e)?this.kind={case:"listValue",value:oe.fromJson(e)}:this.kind={case:"structValue",value:h.fromJson(e)};break;default:throw new Error("cannot decode google.protobuf.Value from JSON "+o.json.debug(e))}return this}static fromBinary(e,n){return new Y().fromBinary(e,n)}static fromJson(e,n){return new Y().fromJson(e,n)}static fromJsonString(e,n){return new Y().fromJsonString(e,n)}static equals(e,n){return o.util.equals(Y,e,n)}}Y.runtime=o;Y.typeName="google.protobuf.Value";Y.fields=o.util.newFieldList(()=>[{no:1,name:"null_value",kind:"enum",T:o.getEnumType(ln),oneof:"kind"},{no:2,name:"number_value",kind:"scalar",T:1,oneof:"kind"},{no:3,name:"string_value",kind:"scalar",T:9,oneof:"kind"},{no:4,name:"bool_value",kind:"scalar",T:8,oneof:"kind"},{no:5,name:"struct_value",kind:"message",T:h,oneof:"kind"},{no:6,name:"list_value",kind:"message",T:oe,oneof:"kind"}]);class oe extends I{constructor(e){super(),this.values=[],o.util.initPartial(e,this)}toJson(e){return this.values.map(n=>n.toJson())}fromJson(e,n){if(!Array.isArray(e))throw new Error("cannot decode google.protobuf.ListValue from JSON "+o.json.debug(e));for(let a of e)this.values.push(Y.fromJson(a));return this}static fromBinary(e,n){return new oe().fromBinary(e,n)}static fromJson(e,n){return new oe().fromJson(e,n)}static fromJsonString(e,n){return new oe().fromJsonString(e,n)}static equals(e,n){return o.util.equals(oe,e,n)}}oe.runtime=o;oe.typeName="google.protobuf.ListValue";oe.fields=o.util.newFieldList(()=>[{no:1,name:"values",kind:"message",T:Y,repeated:!0}]);var E;(function(t){t[t.Canceled=1]="Canceled",t[t.Unknown=2]="Unknown",t[t.InvalidArgument=3]="InvalidArgument",t[t.DeadlineExceeded=4]="DeadlineExceeded",t[t.NotFound=5]="NotFound",t[t.AlreadyExists=6]="AlreadyExists",t[t.PermissionDenied=7]="PermissionDenied",t[t.ResourceExhausted=8]="ResourceExhausted",t[t.FailedPrecondition=9]="FailedPrecondition",t[t.Aborted=10]="Aborted",t[t.OutOfRange=11]="OutOfRange",t[t.Unimplemented=12]="Unimplemented",t[t.Internal=13]="Internal",t[t.Unavailable=14]="Unavailable",t[t.DataLoss=15]="DataLoss",t[t.Unauthenticated=16]="Unauthenticated"})(E||(E={}));function ca(t){const e=E[t];return typeof e!="string"?t.toString():e[0].toLowerCase()+e.substring(1).replace(/[A-Z]/g,n=>"_"+n.toLowerCase())}class M extends Error{constructor(e,n=E.Unknown,a,s,r){super(Om(e,n)),this.name="ConnectError",Object.setPrototypeOf(this,new.target.prototype),this.rawMessage=e,this.code=n,this.metadata=new Headers(a??{}),this.details=s??[],this.cause=r}static from(e,n=E.Unknown){return e instanceof M?e:e instanceof Error?e.name=="AbortError"?new M(e.message,E.Canceled):new M(e.message,n,void 0,void 0,e):new M(String(e),n,void 0,void 0,e)}static[Symbol.hasInstance](e){return e instanceof Error?Object.getPrototypeOf(e)===M.prototype?!0:e.name==="ConnectError"&&"code"in e&&typeof e.code=="number"&&"metadata"in e&&"details"in e&&Array.isArray(e.details)&&"rawMessage"in e&&typeof e.rawMessage=="string"&&"cause"in e:!1}findDetails(e){const n="typeName"in e?{findMessage:s=>s===e.typeName?e:void 0}:e,a=[];for(const s of this.details){if("getType"in s){n.findMessage(s.getType().typeName)&&a.push(s);continue}const r=n.findMessage(s.type);if(r)try{a.push(r.fromBinary(s.value))}catch{}}return a}}function Om(t,e){return t.length?`[${ca(e)}] ${t}`:`[${ca(e)}]`}function Im(t,e,n){try{const a=_t.dec(t);return e?e.fromBinary(a,n):a}catch(a){throw M.from(a,E.DataLoss)}}function _m(t,e){const n={};for(const[a,s]of Object.entries(t.methods)){const r=e(Object.assign(Object.assign({},s),{localName:a,service:t}));r!=null&&(n[a]=r)}return n}const da=1;function la(t){let e,n=new Uint8Array(0);function a(s){const r=new Uint8Array(n.length+s.length);r.set(n),r.set(s,n.length),n=r}return new ReadableStream({start(){e=t.getReader()},async pull(s){let r;for(;;){if(r===void 0&&n.byteLength>=5){let l=0;for(let d=1;d<5;d++)l=(l<<8)+n[d];r={flags:n[0],length:l}}if(r!==void 0&&n.byteLength>=r.length+5)break;const c=await e.read();if(c.done)break;a(c.value)}if(r===void 0){if(n.byteLength==0){s.close();return}s.error(new M("premature end of stream",E.DataLoss));return}const m=n.subarray(5,5+r.length);n=n.subarray(5+r.length),s.enqueue({flags:r.flags,data:m})}})}function ua(t,e){const n=new Uint8Array(e.length+5);n.set(e,5);const a=new DataView(n.buffer,n.byteOffset,n.byteLength);return a.setUint8(0,t),a.setUint32(1,e.length),n}var Mm=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],n;return e?e.call(t):(t=typeof __values=="function"?__values(t):t[Symbol.iterator](),n={},a("next"),a("throw"),a("return"),n[Symbol.asyncIterator]=function(){return this},n);function a(r){n[r]=t[r]&&function(m){return new Promise(function(c,l){m=t[r](m),s(c,l,m.done,m.value)})}}function s(r,m,c,l){Promise.resolve(l).then(function(d){r({value:d,done:c})},m)}},un=function(t){return this instanceof un?(this.v=t,this):new un(t)},Nm=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var a=n.apply(t,e||[]),s,r=[];return s={},c("next"),c("throw"),c("return",m),s[Symbol.asyncIterator]=function(){return this},s;function m(b){return function(w){return Promise.resolve(w).then(b,v)}}function c(b,w){a[b]&&(s[b]=function(_){return new Promise(function(N,P){r.push([b,_,N,P])>1||l(b,_)})},w&&(s[b]=w(s[b])))}function l(b,w){try{d(a[b](w))}catch(_){S(r[0][3],_)}}function d(b){b.value instanceof un?Promise.resolve(b.value.v).then(p,v):S(r[0][2],b)}function p(b){l("next",b)}function v(b){l("throw",b)}function S(b,w){b(w),r.shift(),r.length&&l(r[0][0],r[0][1])}},Cm=function(t){var e,n;return e={},a("next"),a("throw",function(s){throw s}),a("return"),e[Symbol.iterator]=function(){return this},e;function a(s,r){e[s]=t[s]?function(m){return(n=!n)?{value:un(t[s](m)),done:!1}:r?r(m):m}:r}};function Um(){const t=[],e=[];let n,a,s,r=new Promise((l,d)=>{a=l,s=d}),m=!1;function c(){for(const l of t.splice(0,t.length))l({done:!0,value:void 0})}return{close(){m=!0,c()},async write(l){if(m)throw n??new Error("cannot write, WritableIterable already closed");const d=t.shift();if(d===void 0)e.push(l);else if(d({done:!1,value:l}),t.length>0)return;const p=e.length+1;for(let v=0;v{a=v,s=S});const l=e.shift();if(l!==void 0)return Promise.resolve({done:!1,value:l});if(m)return Promise.resolve({done:!0,value:void 0});let d;const p=new Promise(v=>d=v);return t.push(d),p},throw(l){return n=l,m=!0,e.splice(0,e.length),r.catch(()=>{}),s(n),c(),Promise.resolve({done:!0,value:void 0})},return(){return m=!0,e.splice(0,e.length),a(),r=Promise.reject(new Error("cannot write, consumer called return")),r.catch(()=>{}),c(),Promise.resolve({done:!0,value:void 0})}}}}}function gt(t){return Nm(this,arguments,function*(){yield un(yield*Cm(Mm(t)))})}var za=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],n;return e?e.call(t):(t=typeof __values=="function"?__values(t):t[Symbol.iterator](),n={},a("next"),a("throw"),a("return"),n[Symbol.asyncIterator]=function(){return this},n);function a(r){n[r]=t[r]&&function(m){return new Promise(function(c,l){m=t[r](m),s(c,l,m.done,m.value)})}}function s(r,m,c,l){Promise.resolve(l).then(function(d){r({value:d,done:c})},m)}},Ze=function(t){return this instanceof Ze?(this.v=t,this):new Ze(t)},Pm=function(t){var e,n;return e={},a("next"),a("throw",function(s){throw s}),a("return"),e[Symbol.iterator]=function(){return this},e;function a(s,r){e[s]=t[s]?function(m){return(n=!n)?{value:Ze(t[s](m)),done:!1}:r?r(m):m}:r}},Dm=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var a=n.apply(t,e||[]),s,r=[];return s={},c("next"),c("throw"),c("return",m),s[Symbol.asyncIterator]=function(){return this},s;function m(b){return function(w){return Promise.resolve(w).then(b,v)}}function c(b,w){a[b]&&(s[b]=function(_){return new Promise(function(N,P){r.push([b,_,N,P])>1||l(b,_)})},w&&(s[b]=w(s[b])))}function l(b,w){try{d(a[b](w))}catch(_){S(r[0][3],_)}}function d(b){b.value instanceof Ze?Promise.resolve(b.value.v).then(p,v):S(r[0][2],b)}function p(b){l("next",b)}function v(b){l("throw",b)}function S(b,w){b(w),r.shift(),r.length&&l(r[0][0],r[0][1])}};function qe(t,e){return _m(t,n=>{switch(n.kind){case i.Unary:return Am(e,t,n);case i.ServerStreaming:return Gm(e,t,n);case i.ClientStreaming:return xm(e,t,n);case i.BiDiStreaming:return Fm(e,t,n);default:return null}})}function Am(t,e,n){return async function(a,s){var r,m;const c=await t.unary(e,n,s?.signal,s?.timeoutMs,s?.headers,a,s?.contextValues);return(r=s?.onHeader)===null||r===void 0||r.call(s,c.header),(m=s?.onTrailer)===null||m===void 0||m.call(s,c.trailer),c.message}}function Gm(t,e,n){return function(a,s){return Ka(t.stream(e,n,s?.signal,s?.timeoutMs,s?.headers,gt([a]),s?.contextValues),s)}}function xm(t,e,n){return async function(a,s){var r,m,c,l,d,p;const v=await t.stream(e,n,s?.signal,s?.timeoutMs,s?.headers,a,s?.contextValues);(d=s?.onHeader)===null||d===void 0||d.call(s,v.header);let S,b=0;try{for(var w=!0,_=za(v.message),N;N=await _.next(),r=N.done,!r;w=!0)l=N.value,w=!1,S=l,b++}catch(P){m={error:P}}finally{try{!w&&!r&&(c=_.return)&&await c.call(_)}finally{if(m)throw m.error}}if(!S)throw new M("protocol error: missing response message",E.Unimplemented);if(b>1)throw new M("protocol error: received extra messages for client streaming method",E.Unimplemented);return(p=s?.onTrailer)===null||p===void 0||p.call(s,v.trailer),S}}function Fm(t,e,n){return function(a,s){return Ka(t.stream(e,n,s?.signal,s?.timeoutMs,s?.headers,a,s?.contextValues),s)}}function Ka(t,e){const n=(function(){return Dm(this,arguments,function*(){var a,s;const r=yield Ze(t);(a=e?.onHeader)===null||a===void 0||a.call(e,r.header),yield Ze(yield*Pm(za(r.message))),(s=e?.onTrailer)===null||s===void 0||s.call(e,r.trailer)})})()[Symbol.asyncIterator]();return{[Symbol.asyncIterator]:()=>({next:()=>n.next()})}}function Lm(...t){const e=new AbortController,n=t.filter(s=>s!==void 0).concat(e.signal);for(const s of n){if(s.aborted){a.apply(s);break}s.addEventListener("abort",a)}function a(){e.signal.aborted||e.abort(Xa(this));for(const s of n)s.removeEventListener("abort",a)}return e}function qm(t){const e=new AbortController,n=()=>{e.abort(new M("the operation timed out",E.DeadlineExceeded))};let a;return t!==void 0&&(t<=0?n():a=setTimeout(n,t)),{signal:e.signal,cleanup:()=>clearTimeout(a)}}function Xa(t){if(!t.aborted)return;if(t.reason!==void 0)return t.reason;const e=new Error("This operation was aborted");return e.name="AbortError",e}function Bn(){return{get(t){return t.id in this?this[t.id]:t.defaultValue},set(t,e){return this[t.id]=e,this},delete(t){return delete this[t.id],this}}}const ct=128;function pa(t){const e=new Headers,n=new TextDecoder().decode(t).split(`\r +`);for(const a of n){if(a==="")continue;const s=a.indexOf(":");if(s>0){const r=a.substring(0,s).trim(),m=a.substring(s+1).trim();e.append(r,m)}}return e}const Bm="Content-Type",Jm="Grpc-Timeout",Qe="Grpc-Status",Za="Grpc-Message",jm="Grpc-Status-Details-Bin",Vm="X-User-Agent",Wm="X-Grpc-Web",$m="application/grpc-web+proto",Ym="application/grpc-web+json";let Kn=class tn extends I{constructor(e){super(),this.code=0,this.message="",this.details=[],o.util.initPartial(e,this)}static fromBinary(e,n){return new tn().fromBinary(e,n)}static fromJson(e,n){return new tn().fromJson(e,n)}static fromJsonString(e,n){return new tn().fromJsonString(e,n)}static equals(e,n){return o.util.equals(tn,e,n)}};Kn.runtime=o;Kn.typeName="google.rpc.Status";Kn.fields=o.util.newFieldList(()=>[{no:1,name:"code",kind:"scalar",T:5},{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"details",kind:"message",T:X,repeated:!0}]);const Hm="0";function Qa(t){var e;const n=t.get(jm);if(n!=null){const s=Im(n,Kn);if(s.code==0)return;const r=new M(s.message,s.code,t);return r.details=s.details.map(m=>({type:m.typeUrl.substring(m.typeUrl.lastIndexOf("/")+1),value:m.value})),r}const a=t.get(Qe);if(a!=null){if(a===Hm)return;const s=parseInt(a,10);return s in E?new M(decodeURIComponent((e=t.get(Za))!==null&&e!==void 0?e:""),s,t):new M(`invalid grpc-status: ${a}`,E.Internal,t)}}function ga(t,e,n){const a=typeof e=="string"?e:e.typeName,s=typeof n=="string"?n:n.name;return t.toString().replace(/\/?$/,`/${a}/${s}`)}function es(t,e){return e instanceof t?e:new t(e)}function zm(t,e){function n(a){return a.done===!0?a:{done:a.done,value:es(t,a.value)}}return{[Symbol.asyncIterator](){const a=e[Symbol.asyncIterator](),s={next:()=>a.next().then(n)};return a.throw!==void 0&&(s.throw=r=>a.throw(r).then(n)),a.return!==void 0&&(s.return=r=>a.return(r).then(n)),s}}}function ns(t,e){var n;return(n=e?.concat().reverse().reduce((a,s)=>s(a),t))!==null&&n!==void 0?n:t}function Km(t){var e;const n=Object.assign({},t);return(e=n.ignoreUnknownFields)!==null&&e!==void 0||(n.ignoreUnknownFields=!0),n}function ft(t,e,n,a){const s=e?fa(t.I,a):Ta(t.I,n);return{parse:(e?fa(t.O,a):Ta(t.O,n)).parse,serialize:s.serialize}}function fa(t,e){return{parse(n){try{return t.fromBinary(n,e)}catch(a){const s=a instanceof Error?a.message:String(a);throw new M(`parse binary: ${s}`,E.Internal)}},serialize(n){try{return n.toBinary(e)}catch(a){const s=a instanceof Error?a.message:String(a);throw new M(`serialize binary: ${s}`,E.Internal)}}}}function Ta(t,e){var n,a;const s=(n=e?.textEncoder)!==null&&n!==void 0?n:new TextEncoder,r=(a=e?.textDecoder)!==null&&a!==void 0?a:new TextDecoder,m=Km(e);return{parse(c){try{const l=r.decode(c);return t.fromJsonString(l,m)}catch(l){throw M.from(l,E.InvalidArgument)}},serialize(c){try{const l=c.toJsonString(m);return s.encode(l)}catch(l){throw M.from(l,E.Internal)}}}}function ts(t){const e=ns(t.next,t.interceptors),[n,a,s]=ss(t),r=Object.assign(Object.assign({},t.req),{message:es(t.req.method.I,t.req.message),signal:n});return e(r).then(m=>(s(),m),a)}function as(t){const e=ns(t.next,t.interceptors),[n,a,s]=ss(t),r=Object.assign(Object.assign({},t.req),{message:zm(t.req.method.I,t.req.message),signal:n});let m=!1;return n.addEventListener("abort",function(){var c,l;const d=t.req.message[Symbol.asyncIterator]();m||(c=d.throw)===null||c===void 0||c.call(d,this.reason).catch(()=>{}),(l=d.return)===null||l===void 0||l.call(d).catch(()=>{})}),e(r).then(c=>Object.assign(Object.assign({},c),{message:{[Symbol.asyncIterator](){const l=c.message[Symbol.asyncIterator]();return{next(){return l.next().then(d=>(d.done==!0&&(m=!0,s()),d),a)}}}}}),a)}function ss(t){const{signal:e,cleanup:n}=qm(t.timeoutMs),a=Lm(t.signal,e);return[a.signal,function(s){const r=M.from(e.aborted?Xa(e):s);return a.abort(r),n(),Promise.reject(r)},function(){n(),a.abort()}]}var j=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},rs={},Mt={},Jn=j&&j.__assign||function(){return Jn=Object.assign||function(t){for(var e,n=1,a=arguments.length;n0&&r[r.length-1])&&(d[0]===6||d[0]===2)){n=0;continue}if(d[0]===3&&(!r||d[1]>r[0]&&d[1]0&&r[r.length-1])&&(d[0]===6||d[0]===2)){n=0;continue}if(d[0]===3&&(!r||d[1]>r[0]&&d[1]=this.options.numOfAttempts},enumerable:!0,configurable:!0}),t.prototype.applyDelay=function(){return Tt(this,void 0,void 0,function(){var e;return ht(this,function(n){switch(n.label){case 0:return e=yc.DelayFactory(this.options,this.attemptNumber),[4,e.apply()];case 1:return n.sent(),[2]}})})},t})();const os=o.makeMessageType("proto.rpc.v1.Credentials",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"payload",kind:"scalar",T:9}]),kt=o.makeMessageType("proto.rpc.v1.AuthenticateRequest",()=>[{no:1,name:"entity",kind:"scalar",T:9},{no:2,name:"credentials",kind:"message",T:os}]),Sc=o.makeMessageType("proto.rpc.v1.AuthenticateResponse",()=>[{no:1,name:"access_token",kind:"scalar",T:9}]),wc=o.makeMessageType("proto.rpc.v1.AuthenticateToRequest",()=>[{no:1,name:"entity",kind:"scalar",T:9}]),Ec=o.makeMessageType("proto.rpc.v1.AuthenticateToResponse",()=>[{no:1,name:"access_token",kind:"scalar",T:9}]),Rc={typeName:"proto.rpc.v1.AuthService",methods:{authenticate:{name:"Authenticate",I:kt,O:Sc,kind:i.Unary}}},Oc={typeName:"proto.rpc.v1.ExternalAuthService",methods:{authenticateTo:{name:"AuthenticateTo",I:wc,O:Ec,kind:i.Unary}}},gn=o.makeMessageType("google.rpc.Status",()=>[{no:1,name:"code",kind:"scalar",T:5},{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"details",kind:"message",T:X,repeated:!0}]),fn=o.makeMessageType("proto.rpc.webrtc.v1.ICECandidate",()=>[{no:1,name:"candidate",kind:"scalar",T:9},{no:2,name:"sdp_mid",kind:"scalar",T:9,opt:!0},{no:3,name:"sdpm_line_index",kind:"scalar",T:13,opt:!0},{no:4,name:"username_fragment",kind:"scalar",T:9,opt:!0}]),is=o.makeMessageType("proto.rpc.webrtc.v1.CallRequest",()=>[{no:1,name:"sdp",kind:"scalar",T:9},{no:2,name:"disable_trickle",kind:"scalar",T:8}]),Ic=o.makeMessageType("proto.rpc.webrtc.v1.CallResponseInitStage",()=>[{no:1,name:"sdp",kind:"scalar",T:9}]),_c=o.makeMessageType("proto.rpc.webrtc.v1.CallResponseUpdateStage",()=>[{no:1,name:"candidate",kind:"message",T:fn}]),Mc=o.makeMessageType("proto.rpc.webrtc.v1.CallResponse",()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"init",kind:"message",T:Ic,oneof:"stage"},{no:3,name:"update",kind:"message",T:_c,oneof:"stage"}]),On=o.makeMessageType("proto.rpc.webrtc.v1.CallUpdateRequest",()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"candidate",kind:"message",T:fn,oneof:"update"},{no:3,name:"done",kind:"scalar",T:8,oneof:"update"},{no:4,name:"error",kind:"message",T:gn,oneof:"update"}]),Nc=o.makeMessageType("proto.rpc.webrtc.v1.CallUpdateResponse",[]),Cc=o.makeMessageType("proto.rpc.webrtc.v1.ICEServer",()=>[{no:1,name:"urls",kind:"scalar",T:9,repeated:!0},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"credential",kind:"scalar",T:9}]),jn=o.makeMessageType("proto.rpc.webrtc.v1.WebRTCConfig",()=>[{no:1,name:"additional_ice_servers",kind:"message",T:Cc,repeated:!0},{no:2,name:"disable_trickle",kind:"scalar",T:8}]),Uc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestInitStage",()=>[{no:1,name:"sdp",kind:"scalar",T:9},{no:2,name:"optional_config",kind:"message",T:jn},{no:3,name:"deadline",kind:"message",T:A,opt:!0}]),Pc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestUpdateStage",()=>[{no:1,name:"candidate",kind:"message",T:fn}]),Dc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestDoneStage",[]),Ac=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestErrorStage",()=>[{no:1,name:"status",kind:"message",T:gn}]),Gc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestHeartbeatStage",[]),xc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequest",()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"init",kind:"message",T:Uc,oneof:"stage"},{no:3,name:"update",kind:"message",T:Pc,oneof:"stage"},{no:4,name:"done",kind:"message",T:Dc,oneof:"stage"},{no:5,name:"error",kind:"message",T:Ac,oneof:"stage"},{no:6,name:"heartbeat",kind:"message",T:Gc,oneof:"stage"}]),Fc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponseInitStage",()=>[{no:1,name:"sdp",kind:"scalar",T:9}]),Lc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponseUpdateStage",()=>[{no:1,name:"candidate",kind:"message",T:fn}]),qc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponseDoneStage",[]),Bc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponseErrorStage",()=>[{no:1,name:"status",kind:"message",T:gn}]),Jc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponse",()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"init",kind:"message",T:Fc,oneof:"stage"},{no:3,name:"update",kind:"message",T:Lc,oneof:"stage"},{no:4,name:"done",kind:"message",T:qc,oneof:"stage"},{no:5,name:"error",kind:"message",T:Bc,oneof:"stage"}]),jc=o.makeMessageType("proto.rpc.webrtc.v1.OptionalWebRTCConfigRequest",[]),Vc=o.makeMessageType("proto.rpc.webrtc.v1.OptionalWebRTCConfigResponse",()=>[{no:1,name:"config",kind:"message",T:jn}]),Wc={typeName:"proto.rpc.webrtc.v1.SignalingService",methods:{call:{name:"Call",I:is,O:Mc,kind:i.ServerStreaming},callUpdate:{name:"CallUpdate",I:On,O:Nc,kind:i.Unary},answer:{name:"Answer",I:Jc,O:xc,kind:i.BiDiStreaming},optionalWebRTCConfig:{name:"OptionalWebRTCConfig",I:jc,O:Vc,kind:i.Unary}}},ms="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",yt=(t="")=>{const e=t;let n="";for(let a=0,s,r=0,m=ms;e.charAt(Math.trunc(r))||(m="=",r%1);n+=m.charAt(63&a>>8-r%1*8)){if(s=e.charCodeAt(r+=3/4),s>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");a=a<<8|s}return n},cs=(t="")=>{const e=t.replace(/=+$/,"");let n="";if(e.length%4===1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(let a=0,s=0,r,m=0;r=e.charAt(m++);~r&&(s=a%4?s*64+r:r,a++%4)?n+=String.fromCharCode(255&s>>(-2*a&6)):0)r=ms.indexOf(r);return n},vt=(t,e)=>{const n={sdp:t?.sdp,type:t?.type};if(e)for(const[a,s]of Object.entries(e))n.sdp=[n.sdp,`a=${a}:${s}\r +`].join("");return n},$c=async(t,e,n)=>{const a=e??{iceServers:[{urls:"stun:global.stun.twilio.com:3478"}]},s=new RTCPeerConnection(a);let r;const m=new Promise(v=>{r=v}),c=s.createDataChannel("data",{id:0,negotiated:!0,ordered:!0});c.binaryType="arraybuffer";const l=s.createDataChannel("negotiation",{id:1,negotiated:!0,ordered:!0});l.binaryType="arraybuffer";let d=!1;if(l.addEventListener("open",()=>{d=!0}),l.addEventListener("message",v=>{(async()=>{const S=new RTCSessionDescription(JSON.parse(cs(v.data)));if(await s.setRemoteDescription(S),S.type==="offer"){await s.setLocalDescription();const b=vt(s.localDescription,n);l.send(yt(JSON.stringify(b)))}})().catch(console.error)}),s.addEventListener("negotiationneeded",()=>{(async()=>{if(!d)return;await s.setLocalDescription();const v=vt(s.localDescription,n);l.send(yt(JSON.stringify(v)))})().catch(console.error)}),!t)return{pc:s,dc:c};const p=await s.createOffer({});return await s.setLocalDescription(p),s.addEventListener("icecandidate",v=>{v.candidate===null&&r({pc:s,dc:c})}),m};function Yc(){try{new Headers}catch{throw new Error("connect-web requires the fetch API. Are you running on an old version of Node.js? Node.js is not supported in Connect for Web - please stay tuned for Connect for Node.")}}function ha(t,e){const n=Qa(t);if(n)throw e.forEach((a,s)=>{n.metadata.append(s,a)}),n;if(!e.has(Qe)&&!t.has(Qe))throw new M("protocol error: missing status",E.Internal)}function ka(t,e,n,a){const s=new Headers(n??{});return s.set(Bm,t?$m:Ym),s.set(Wm,"1"),s.set(Vm,"connect-es/1.6.1"),e!==void 0&&s.set(Jm,`${e}m`),s}function Hc(t){switch(t){case 400:return E.Internal;case 401:return E.Unauthenticated;case 403:return E.PermissionDenied;case 404:return E.Unimplemented;case 429:return E.Unavailable;case 502:return E.Unavailable;case 503:return E.Unavailable;case 504:return E.Unavailable;default:return E.Unknown}}function ya(t,e){var n;if(t>=200&&t<300)return{foundStatus:e.has(Qe),headerError:Qa(e)};throw new M(decodeURIComponent((n=e.get(Za))!==null&&n!==void 0?n:`HTTP ${t}`),Hc(t),e)}var Je=function(t){return this instanceof Je?(this.v=t,this):new Je(t)},zc=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var a=n.apply(t,e||[]),s,r=[];return s={},c("next"),c("throw"),c("return",m),s[Symbol.asyncIterator]=function(){return this},s;function m(b){return function(w){return Promise.resolve(w).then(b,v)}}function c(b,w){a[b]&&(s[b]=function(_){return new Promise(function(N,P){r.push([b,_,N,P])>1||l(b,_)})},w&&(s[b]=w(s[b])))}function l(b,w){try{d(a[b](w))}catch(_){S(r[0][3],_)}}function d(b){b.value instanceof Je?Promise.resolve(b.value.v).then(p,v):S(r[0][2],b)}function p(b){l("next",b)}function v(b){l("throw",b)}function S(b,w){b(w),r.shift(),r.length&&l(r[0][0],r[0][1])}};function Kc(t){var e;Yc();const n=(e=t.useBinaryFormat)!==null&&e!==void 0?e:!0;return{async unary(a,s,r,m,c,l,d){var p;const{serialize:v,parse:S}=ft(s,n,t.jsonOptions,t.binaryOptions);return m=m===void 0?t.defaultTimeoutMs:m<=0?void 0:m,await ts({interceptors:t.interceptors,signal:r,timeoutMs:m,req:{stream:!1,service:a,method:s,url:ga(t.baseUrl,a,s),init:{method:"POST",credentials:(p=t.credentials)!==null&&p!==void 0?p:"same-origin",redirect:"error",mode:"cors"},header:ka(n,m,c),contextValues:d??Bn(),message:l},next:async b=>{var w;const _=await((w=t.fetch)!==null&&w!==void 0?w:globalThis.fetch)(b.url,Object.assign(Object.assign({},b.init),{headers:b.header,signal:b.signal,body:ua(0,v(b.message))})),{headerError:N}=ya(_.status,_.headers);if(!_.body)throw N!==void 0?N:"missing response body";const P=la(_.body).getReader();let f,k;for(;;){const g=await P.read();if(g.done)break;const{flags:T,data:R}=g.value;if((T&da)===da)throw new M("protocol error: received unsupported compressed output",E.Internal);if(T===ct){if(f!==void 0)throw"extra trailer";f=pa(R);continue}if(k!==void 0)throw new M("extra message",E.Unimplemented);k=S(R)}if(f===void 0)throw N!==void 0?N:new M("missing trailer",_.headers.has(Qe)?E.Unimplemented:E.Unknown);if(ha(f,_.headers),k===void 0)throw new M("missing message",f.has(Qe)?E.Unimplemented:E.Unknown);return{stream:!1,service:a,method:s,header:_.headers,message:k,trailer:f}}})},async stream(a,s,r,m,c,l,d){var p;const{serialize:v,parse:S}=ft(s,n,t.jsonOptions,t.binaryOptions);function b(_,N,P,f,k){return zc(this,arguments,function*(){const g=la(_).getReader();if(N){if(!(yield Je(g.read())).done)throw"extra data for trailers-only";return yield Je(void 0)}let T=!1;for(;;){const R=yield Je(g.read());if(R.done)break;const{flags:O,data:H}=R.value;if((O&ct)===ct){if(T)throw"extra trailer";T=!0;const C=pa(H);ha(C,f),C.forEach((q,rt)=>P.set(rt,q));continue}if(T)throw"extra message";yield yield Je(S(H))}if("throwIfAborted"in k&&k.throwIfAborted(),!T)throw"missing trailer"})}async function w(_){if(s.kind!=i.ServerStreaming)throw"The fetch API does not support streaming request bodies";const N=await _[Symbol.asyncIterator]().next();if(N.done==!0)throw"missing request message";return ua(0,v(N.value))}return m=m===void 0?t.defaultTimeoutMs:m<=0?void 0:m,as({interceptors:t.interceptors,signal:r,timeoutMs:m,req:{stream:!0,service:a,method:s,url:ga(t.baseUrl,a,s),init:{method:"POST",credentials:(p=t.credentials)!==null&&p!==void 0?p:"same-origin",redirect:"error",mode:"cors"},header:ka(n,m,c),contextValues:d??Bn(),message:l},next:async _=>{var N;const P=await((N=t.fetch)!==null&&N!==void 0?N:globalThis.fetch)(_.url,Object.assign(Object.assign({},_.init),{headers:_.header,signal:_.signal,body:await w(_.message)})),{foundStatus:f,headerError:k}=ya(P.status,P.headers);if(k!=null)throw k;if(!P.body)throw"missing response body";const g=new Headers;return Object.assign(Object.assign({},_),{header:P.headers,trailer:g,message:b(P.body,f,g,P.headers,_.signal)})}})}}}const Vn=o.makeMessageType("proto.rpc.webrtc.v1.PacketMessage",()=>[{no:1,name:"data",kind:"scalar",T:12},{no:2,name:"eom",kind:"scalar",T:8}]),Gt=o.makeMessageType("proto.rpc.webrtc.v1.Stream",()=>[{no:1,name:"id",kind:"scalar",T:4}]),lt=o.makeMessageType("proto.rpc.webrtc.v1.Request",()=>[{no:1,name:"stream",kind:"message",T:Gt},{no:2,name:"headers",kind:"message",T:ds,oneof:"type"},{no:3,name:"message",kind:"message",T:bt,oneof:"type"},{no:4,name:"rst_stream",kind:"scalar",T:8,oneof:"type"}]),ds=o.makeMessageType("proto.rpc.webrtc.v1.RequestHeaders",()=>[{no:1,name:"method",kind:"scalar",T:9},{no:2,name:"metadata",kind:"message",T:Zn},{no:3,name:"timeout",kind:"message",T:$}]),bt=o.makeMessageType("proto.rpc.webrtc.v1.RequestMessage",()=>[{no:1,name:"has_message",kind:"scalar",T:8},{no:2,name:"packet_message",kind:"message",T:Vn},{no:3,name:"eos",kind:"scalar",T:8}]),Xc=o.makeMessageType("proto.rpc.webrtc.v1.Response",()=>[{no:1,name:"stream",kind:"message",T:Gt},{no:2,name:"headers",kind:"message",T:Zc,oneof:"type"},{no:3,name:"message",kind:"message",T:Qc,oneof:"type"},{no:4,name:"trailers",kind:"message",T:ed,oneof:"type"}]),Zc=o.makeMessageType("proto.rpc.webrtc.v1.ResponseHeaders",()=>[{no:1,name:"metadata",kind:"message",T:Zn}]),Qc=o.makeMessageType("proto.rpc.webrtc.v1.ResponseMessage",()=>[{no:1,name:"packet_message",kind:"message",T:Vn}]),ed=o.makeMessageType("proto.rpc.webrtc.v1.ResponseTrailers",()=>[{no:1,name:"status",kind:"message",T:gn},{no:2,name:"metadata",kind:"message",T:Zn}]),ls=o.makeMessageType("proto.rpc.webrtc.v1.Strings",()=>[{no:1,name:"values",kind:"scalar",T:9,repeated:!0}]),Zn=o.makeMessageType("proto.rpc.webrtc.v1.Metadata",()=>[{no:1,name:"md",kind:"map",K:9,V:{kind:"message",T:ls}}]);class Ce extends Error{name="ConnectionClosedError";constructor(e){super(e),Object.setPrototypeOf(this,Ce.prototype)}static isError(e){return e instanceof Ce||e instanceof M&&e.rawMessage==="closed"?!0:typeof e=="string"?e==="Response closed without headers":e instanceof Error?e.message==="Response closed without headers":!1}}class nd{ready;peerConn;dataChannel;pResolve;pReject;closed=!1;closedReason;maxDataChannelSize=65535;constructor(e,n){this.peerConn=e,this.dataChannel=n,this.ready=new Promise((a,s)=>{this.pResolve=a,this.pReject=s}),n.addEventListener("open",()=>this.onChannelOpen()),n.addEventListener("close",()=>this.onChannelClose()),n.addEventListener("error",a=>{this.onChannelError(a)}),e.addEventListener("iceconnectionstatechange",()=>{const a=e.iceConnectionState;(a==="failed"||a==="disconnected"||a==="closed")&&this.pReject?.(new Error(`ICE connection failed with state: ${a}`))})}isClosed(){return this.closed}isClosedReason(){return this.closedReason}closeWithReason(e){this.closed||(this.closed=!0,this.closedReason=e,this.pReject?.(e),this.peerConn.close(),this.dataChannel.close())}onChannelOpen(){this.pResolve?.(void 0)}onChannelClose(){this.closeWithReason(new Ce("data channel closed"))}onChannelError(e){console.error("channel error",e),this.closeWithReason(new Error(JSON.stringify(e)))}write(e){this.dataChannel.send(e.toBinary())}}const va=33554432;class td{grpcStream;onDone;closed=!1;packetBuf=[];packetBufSize=0;constructor(e,n){this.grpcStream=e,this.onDone=n}closeWithRecvError(){this.closed||(this.closed=!0,this.onDone(this.grpcStream.id))}processPacketMessage(e){const{data:n}=e;if(n.length+this.packetBufSize>va){this.packetBuf.length=0,this.packetBufSize=0,console.error(`message size larger than max ${va}; discarding`);return}if(this.packetBuf.push(n),this.packetBufSize+=n.length,e.eom){const a=new Uint8Array(this.packetBufSize);let s=0;for(const r of this.packetBuf)a.set(r,s),s+=r.length;return this.packetBuf.length=0,this.packetBufSize=0,a}}}const ad=16373;class us extends td{channel;service;method;parseMessage;requestHeaders;headersReceived=!1;trailersReceived=!1;constructor(e,n,a,s,r,m){super(n,a),this.channel=e,this.service=s,this.method=r;const{parse:c}=ft(r,!0,void 0,void 0);this.parseMessage=c;const l=`/${s.typeName}/${r.name}`;this.requestHeaders=new ds({method:l});const d=sd(pn(m));d&&(this.requestHeaders.metadata=d)}startRequest(e){e&&e.addEventListener("abort",()=>{this.resetStream()});try{this.channel.writeHeaders(this.grpcStream,this.requestHeaders)}catch(n){console.error("error writing headers",n),this.closeWithRecvError()}}sendMessage(e){if(e){this.writeMessage(!1,e);return}this.writeMessage(!1,void 0)}resetStream(){if(!this.closed)try{this.channel.writeReset(this.grpcStream)}catch(e){console.error("error writing reset",e),this.closeWithRecvError()}}writeMessage(e,n){try{if(!n||n.length===0){const s=new Vn({eom:!0}),r=new bt({hasMessage:!!n,packetMessage:s,eos:e});this.channel.writeMessage(this.grpcStream,r);return}let a=n;for(;a.length>0;){const s=Math.min(a.length,ad),r=new Vn;r.data=a.slice(0,s),a=a.slice(s),a.length===0&&(r.eom=!0);const m=new bt({hasMessage:!!a,packetMessage:r,eos:e});this.channel.writeMessage(this.grpcStream,m)}}catch(a){console.error("error writing message",a),this.closeWithRecvError()}}onResponse(e){switch(e.type.case){case"headers":{if(this.headersReceived){console.error(`invariant: headers already received for ${this.grpcStream.id}`);return}if(this.trailersReceived){console.error(`invariant: headers received after trailers for ${this.grpcStream.id}`);return}this.processHeaders(e.type.value);break}case"message":{if(!this.headersReceived){console.error(`invariant: headers not yet received for ${this.grpcStream.id}`);return}if(this.trailersReceived){console.error(`invariant: headers received after trailers for ${this.grpcStream.id}`);return}this.processMessage(e.type.value);break}case"trailers":{this.processTrailers(e.type.value);break}default:{console.error("unknown response type",e.type.case);break}}}processHeaders(e){this.headersReceived=!0,this.onHeaders(e)}processMessage(e){if(!e.packetMessage)return;const n=super.processPacketMessage(e.packetMessage);n&&this.onMessage(n)}processTrailers(e){this.trailersReceived=!0;const{status:n}=e,a=n?n.code:0;if(this.onTrailers(e),a===0){this.closeWithRecvError();return}this.closeWithRecvError()}}const sd=t=>{if(!t)return;const e=new Zn({md:Object.fromEntries([...t.entries()].map(([n,a])=>[n,new ls({values:[a]})]))});return Object.keys(e.md).length>0?e:void 0},St=t=>{const e=Object.entries(t?.md??{}).flatMap(([n,{values:a}])=>a.map(s=>[n,s]));return new Headers(e)};class rd extends us{awaitingHeadersResult;gotHeaders=!1;respStream=Um();trailers=new Headers;respStreamQueue;async run(e,n,a,s){const r={req:{stream:!0,url:"",init:{},service:this.service,method:this.method,header:new Headers,contextValues:s??Bn(),message:a},next:async m=>{const c=await new Promise((l,d)=>{this.awaitingHeadersResult={success:l,failure:d},this.startRequest(e),this.sendMessages(m.message).catch(p=>{console.error("error sending streaming message",p),this.closeWithRecvError()})});return{...m,header:c,trailer:this.trailers,message:this.respStream}}};return e&&(r.signal=e),n!==void 0&&(r.timeoutMs=n),as(r)}async sendMessages(e){for await(const n of e)this.sendMessage(n.toBinary());this.writeMessage(!0,void 0)}onHeaders(e){this.gotHeaders=!0,this.awaitingHeadersResult?.success(St(e.metadata))}onTrailers(e){if(e.metadata?.md){for(const n in e.metadata.md)if(Object.hasOwn(e.metadata.md,n)){const a=e.metadata.md[n];for(const s of a?.values??[])this.trailers.append(n,s)}}if(this.respStream.close(),!e.status||e.status.code===0){if(this.gotHeaders)return;this.awaitingHeadersResult?.success(new Headers);return}this.gotHeaders||this.awaitingHeadersResult?.failure(e.status.message)}onMessage(e){const n=this.parseMessage(e);this.respStreamQueue=this.respStreamQueue?this.respStreamQueue.then(async()=>this.respStream.write(n)):this.respStream.write(n),this.respStreamQueue.catch(a=>{console.error(`error pushing received message into stream; failing: ${a}`),this.resetStream()})}}class od extends us{result;headers;message;async run(e,n,a,s){const r={req:{stream:!1,url:"",init:{},service:this.service,method:this.method,header:new Headers,contextValues:s??Bn(),message:a},next:async m=>new Promise((c,l)=>{this.result={success:c,failure:l},this.startRequest(),this.sendMessage(m.message.toBinary())})};return e&&(r.signal=e),n!==void 0&&(r.timeoutMs=n),ts(r)}onHeaders(e){if(this.headers!==void 0){this.result?.failure(new Error("invariant: received headers more than once"));return}this.headers=St(e.metadata)}onTrailers(e){const n=St(e.metadata);if(!e.status||e.status.code===0){if(!this.headers){this.result?.failure(new Error("invariant: received trailers for successful unary request without headers"));return}if(this.message===void 0){this.result?.failure(new Error("invariant: received trailers for successful unary request without message"));return}this.result?.success({stream:!1,header:this.headers,message:this.message,trailer:n,service:this.service,method:this.method});return}this.result?.failure(e.status.message)}onMessage(e){if(this.message!==void 0){this.result?.failure(new Error("invariant: received two response messages for unary request"));return}this.message=this.parseMessage(e)}}const id=256;class md extends nd{streamIDCounter=0;streams=new Map;constructor(e,n){super(e,n),n.addEventListener("message",a=>{this.onChannelMessage(a)}),e.addEventListener("iceconnectionstatechange",()=>{const a=e.iceConnectionState;(a==="failed"||a==="disconnected"||a==="closed")&&this.onConnectionTerminated()}),n.addEventListener("close",()=>this.onConnectionTerminated())}onConnectionTerminated(){this.closeWithReason(new Ce("data channel closed"));for(const e of this.streams.values())e.cs.closeWithRecvError()}onChannelMessage(e){const n=Xc.fromBinary(new Uint8Array(e.data)),{stream:a}=n;if(a===void 0){console.error("no stream id; discarding");return}const{id:s}=a,r=this.streams.get(s.toString());if(r===void 0){console.error("no stream for id; discarding","id",s);return}r.cs.onResponse(n)}nextStreamID(){const e=this.streamIDCounter;return this.streamIDCounter+=1,new Gt({id:BigInt(e)})}newStream(e,n,a,s,r){if(this.isClosed())throw new Ce("connection closed");let m=this.streams.get(n.id.toString());if(m!==void 0)throw new Error("invariant: stream should not exist yet");if(Object.keys(this.streams).length>id)throw new Error("stream limit hit");const c=new e(this,n,l=>this.removeStreamByID(l),a,s,r);return m={cs:c},this.streams.set(n.id.toString(),m),c}removeStreamByID(e){this.streams.delete(e.toString())}writeHeaders(e,n){this.write(new lt({stream:e,type:{case:"headers",value:n}}))}writeMessage(e,n){this.write(new lt({stream:e,type:{case:"message",value:n}}))}writeReset(e){this.write(new lt({stream:e,type:{case:"rstStream",value:!0}}))}async unary(e,n,a,s,r,m,c){return this.newStream(od,this.nextStreamID(),e,n,r).run(a,s,m,c)}async stream(e,n,a,s,r,m,c){return this.newStream(rd,this.nextStreamID(),e,n,r).run(a,s,m,c)}}const yn="invariant: call uuid unset";class cd{constructor(e,n,a,s,r){this.signalingClient=e,this.callOpts=n,this.pc=a,this.dc=s,this.dialOpts=r,this.clientChannel=new md(this.pc,this.dc)}clientChannel;callUuid;sentDoneOrErrorOnce=!1;exchangeDone=!1;iceComplete=!1;haveInitResponse=!1;awaitingRemoteDescription;remoteDescriptionSet;numCallUpdates=0;maxCallUpdateDuration=0;totalCallUpdateDuration=0;async doExchange(){await this.setup();const e=vt(this.pc.localDescription,this.dialOpts?.additionalSdpFields),n=yt(JSON.stringify(e)),a=new is({sdp:n});this.dialOpts&&this.dialOpts.disableTrickleICE&&(a.disableTrickle=this.dialOpts.disableTrickleICE),this.clientChannel.ready.then(async()=>{this.exchangeDone=!0,await this.sendDone()}).catch(console.error);const s=this.signalingClient.call(a,this.callOpts),r=this.processCallResponses(s);return await Promise.all([this.clientChannel.ready,r]),this.clientChannel}async setup(){if(this.remoteDescriptionSet=new Promise((e,n)=>{this.awaitingRemoteDescription={success:e,failure:n}}),!this.dialOpts?.disableTrickleICE){const e=await this.pc.createOffer({});this.pc.addEventListener("iceconnectionstatechange",()=>{if(this.pc.iceConnectionState!=="completed"||this.numCallUpdates===0)return;const n=this.totalCallUpdateDuration/this.numCallUpdates;console.groupCollapsed("Caller update statistics"),console.table({num_updates:this.numCallUpdates,average_duration:`${n}ms`,max_duration:`${this.maxCallUpdateDuration}ms`}),console.groupEnd()}),this.pc.addEventListener("icecandidate",n=>{this.onLocalICECandidate(n).catch(a=>{console.error(`error processing local ICE candidate ${a}`)})}),await this.pc.setLocalDescription(e)}}terminate(e){this.clientChannel.closeWithReason(e)}async processCallResponses(e){try{for await(const n of e)switch(n.stage.case){case"init":{if(!await this.handleInitResponse(n.uuid,n.stage.value))return;break}case"update":{if(!await this.handleUpdateResponse(n.uuid,n.stage.value))return;break}default:{await this.sendError("unknown CallResponse stage");return}}}catch(n){this.handleInitError(n)}}handleInitError(e){if(!(this.exchangeDone||this.pc.iceConnectionState==="connected")){if(e instanceof M&&e.code===E.Unimplemented){if(e.message==="Response closed without headers")throw new Ce("failed to dial");if(this.clientChannel.isClosed())throw new Ce("client channel is closed");console.error(e.message)}throw e}}async handleInitResponse(e,n){if(this.haveInitResponse)return await this.sendError("got init stage more than once"),!1;this.haveInitResponse=!0,this.callUuid=e;const a=new RTCSessionDescription(JSON.parse(cs(n.sdp)));return this.clientChannel.isClosed()?(await this.sendError("client channel is closed"),!1):(await this.pc.setRemoteDescription(a),this.awaitingRemoteDescription?.success(!0),this.dialOpts?.disableTrickleICE?(this.exchangeDone=!0,await this.sendDone(),!1):!0)}async handleUpdateResponse(e,n){if(!this.haveInitResponse)return await this.sendError("got update stage before init stage"),!1;if(e!==this.callUuid)return await this.sendError(`uuid mismatch; have=${e} want=${this.callUuid}`),!1;if(n.candidate===void 0)return await this.sendError("no candidate"),!1;const a=dd(n.candidate);a.candidate!==void 0&&console.debug(`received remote ICE ${a.candidate}`);try{await this.pc.addIceCandidate(a)}catch(s){throw console.log("error adding ice candidate",s),await this.sendError(JSON.stringify(s)),s}return!0}async onLocalICECandidate(e){if(await this.remoteDescriptionSet,this.exchangeDone||this.pc.iceConnectionState==="connected"){e.candidate!==null&&console.info("Dropping ICE candidate - exchange done or already connected",{exchangeDone:this.exchangeDone,iceConnectionState:this.pc.iceConnectionState,candidate:e.candidate.candidate});return}if(e.candidate===null){console.info("ICE gathering complete"),this.iceComplete=!0,await this.sendDone();return}if(this.callUuid===void 0||this.callUuid==="")throw console.error(yn),new Error(yn);e.candidate.candidate!==void 0&&console.info(`Gathered local ICE ${e.candidate.candidate}`);const n=ld(e.candidate),a=new On({uuid:this.callUuid,update:{case:"candidate",value:n}}),s=new Date;try{await this.signalingClient.callUpdate(a,this.callOpts),this.numCallUpdates+=1;const r=new Date().getTime()-s.getTime();r>this.maxCallUpdateDuration&&(this.maxCallUpdateDuration=r),this.totalCallUpdateDuration+=r}catch(r){if(this.exchangeDone||this.iceComplete||this.pc.iceConnectionState==="connected")return;console.error(r)}}async sendError(e){if(this.sentDoneOrErrorOnce)return;if(this.callUuid===void 0||this.callUuid==="")throw new Error(yn);this.sentDoneOrErrorOnce=!0;const n=new On({uuid:this.callUuid,update:{case:"error",value:new gn({code:E.Unknown,message:e})}});try{await this.signalingClient.callUpdate(n,this.callOpts)}catch(a){console.error("failed to send call update; continuing",a)}}async sendDone(){if(this.sentDoneOrErrorOnce)return;if(this.callUuid===void 0||this.callUuid==="")throw new Error(yn);this.sentDoneOrErrorOnce=!0;const e=new On({uuid:this.callUuid,update:{case:"done",value:!0}});try{await this.signalingClient.callUpdate(e,this.callOpts)}catch(n){console.error(n)}}}const dd=t=>{const e={candidate:t.candidate};return t.sdpMid!==void 0&&(e.sdpMid=t.sdpMid),t.sdpmLineIndex!==void 0&&(e.sdpMLineIndex=t.sdpmLineIndex),t.usernameFragment!==void 0&&(e.usernameFragment=t.usernameFragment),e},ld=t=>{const e=new fn;return t.candidate!==void 0&&(e.candidate=t.candidate),t.sdpMid!==void 0&&t.sdpMid!==null&&(e.sdpMid=t.sdpMid),t.sdpMLineIndex!==void 0&&t.sdpMLineIndex!==null&&(e.sdpmLineIndex=t.sdpMLineIndex),t.usernameFragment!==void 0&&t.usernameFragment!==null&&(e.usernameFragment=t.usernameFragment),e};var ps={exports:{}};(function(t,e){(function(n,a){t.exports=a()})(j,function(){return(function(n){var a={};function s(r){if(a[r])return a[r].exports;var m=a[r]={i:r,l:!1,exports:{}};return n[r].call(m.exports,m,m.exports,s),m.l=!0,m.exports}return s.m=n,s.c=a,s.d=function(r,m,c){s.o(r,m)||Object.defineProperty(r,m,{enumerable:!0,get:c})},s.r=function(r){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},s.t=function(r,m){if(1&m&&(r=s(r)),8&m||4&m&&typeof r=="object"&&r&&r.__esModule)return r;var c=Object.create(null);if(s.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:r}),2&m&&typeof r!="string")for(var l in r)s.d(c,l,(function(d){return r[d]}).bind(null,l));return c},s.n=function(r){var m=r&&r.__esModule?function(){return r.default}:function(){return r};return s.d(m,"a",m),m},s.o=function(r,m){return Object.prototype.hasOwnProperty.call(r,m)},s.p="",s(s.s=0)})([function(n,a,s){s.r(a),s.d(a,"UuidTool",function(){return c}),s.d(a,"Uuid",function(){return m});var r={uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i},m=(function(){function l(d){this.id="",typeof d=="string"?this.fromString(d):Array.isArray(d)?this.fromBytes(d):this.generate()}return l.fromJson=function(d){if(typeof d=="string"&&(d=JSON.parse(d)),!d||!d.id)throw new TypeError("The input cannot be converted to Uuid.");return new l(d.id)},l.prototype.generate=function(){var d=new Array(16).fill(0).map(function(){return 256*Math.random()&255});return d[6]=79&(64|d[6]),this.fromBytes(d),this},l.prototype.fromBytes=function(d){return this.id=d.map(function(p){return("00"+p.toString(16)).slice(-2)}).join("").replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/,"$1-$2-$3-$4-$5"),this.id=this.toString(),this},l.prototype.toBytes=function(){return(this.id.replace(/-/g,"").match(/.{2}/g)||[]).map(function(d){return parseInt(d,16)})},l.prototype.fromString=function(d){return this.id=d.trim(),this.id=this.toString(),this},l.prototype.toString=function(){switch(l.stringExportFormat){default:case"lowercase":return this.id.toLowerCase();case"uppercase":return this.id.toUpperCase()}},l.prototype.isValid=function(){return typeof this.id=="string"&&this.id.length===36&&r.uuid.test(this.id)},l.prototype.equals=function(d){return typeof d=="string"&&(d=new l(d)),this.toString()===d.toString()},l.stringExportFormat="lowercase",l})(),c=(function(){function l(){}return l.toBytes=function(d){return new m().fromString(d).toBytes()},l.toString=function(d){return new m().fromBytes(d).toString()},l.newUuid=function(){return new m().toString()},l.isUuid=function(d){return new m().fromString(d).isValid()},l.compare=function(d,p){return new m(d).equals(new m(p))},l})()}])})})(ps);var ba=ps.exports;const In=(t,e)=>globalThis.VIAM?.GRPC_TRACE_LOGGING===!0?{...t,unary:async(n,a,s,r,m,c,l)=>{const d=ba.UuidTool.newUuid();console.trace(`Unary request ${d} : ${e}/${n.typeName}.${a.name}`);const p=await t.unary(n,a,s,r,m,c,l);return console.debug(`Unary response received: ${d}`),p},stream:async(n,a,s,r,m,c,l)=>{const d=ba.UuidTool.newUuid();console.trace(`Stream request ${d} : ${e}/${n.typeName}.${a.name}`);const p=await t.stream(n,a,s,r,m,c,l);return console.debug(`Stream response received: ${d}`),p}}:t,gs=async(t,e,n=!1)=>{fs(e);const a=globalThis.VIAM?.GRPC_TRANSPORT_FACTORY??Kc,s={baseUrl:t,credentials:"same-origin"};if(e?.accessToken!==void 0&&e.accessToken!==""&&!(e.externalAuthAddress!==void 0&&e.externalAuthAddress!==""&&e.externalAuthToEntity!==void 0&&e.externalAuthToEntity!=="")){const m=new Headers(e.extraHeaders);m.set("authorization",`Bearer ${e.accessToken}`);const c=new Wn(s,a,m);return In(c,t)}if(e===void 0||e.credentials===void 0&&e.accessToken===void 0){n&&(s.credentials="include");const m=new Headers(e?.extraHeaders??{}),c=new Wn(s,a,m);return In(c,t)}const r=await ud(t,a,e,s);return In(r,t)},wt=/^.*:\/\//u,ud=async(t,e,n,a)=>{const s=new Headers(n.extraHeaders);let r;if(n.accessToken===void 0||n.accessToken===""){const m=new kt({entity:tt(n.credentials)&&n.credentials.authEntity?n.credentials.authEntity:t.replace(wt,"")});n.credentials&&(m.credentials=new os({type:n.credentials.type,payload:n.credentials.payload}));const c=n.externalAuthAddress??t,l=e({baseUrl:c});r=(await qe(Rc,l).authenticate(m)).accessToken}else r=n.accessToken;if(n.externalAuthAddress!==void 0&&n.externalAuthAddress!==""&&n.externalAuthToEntity!==void 0&&n.externalAuthToEntity!==""){const m=new Headers;m.set("authorization",`Bearer ${r}`),r="";const c=new kt({entity:n.externalAuthToEntity}),l=e({baseUrl:n.externalAuthAddress});r=(await qe(Oc,l).authenticateTo(c,{headers:m})).accessToken}return s.set("authorization",`Bearer ${r}`),new Wn(a,e,s)};class Wn{transport;extraHeaders;constructor(e,n,a){this.extraHeaders=a,this.transport=n(e)}unary=async(e,n,a,s,r,m,c)=>{const l=pn(r);for(const[d,p]of this.extraHeaders)l.set(d,p);return this.transport.unary(e,n,a,s,l,m,c)};stream=async(e,n,a,s,r,m,c)=>{const l=pn(r);for(const[d,p]of this.extraHeaders)l.set(d,p);return this.transport.stream(e,n,a,s,l,m,c)}}const pn=t=>{const e=new Headers;if(t!==void 0)if(Array.isArray(t))for(const[n,a]of t)e.append(n,a);else if("forEach"in t)typeof t.forEach=="function"&&t.forEach((n,a)=>{e.append(a,n)});else for(const[n,a]of Object.entries(t))e.append(n,a);return e},pd=async(t,e,n=!1)=>{const a=await gs(t,e,n);return qe(Wc,a)},gd=async(t,e)=>{try{return(await e.optionalWebRTCConfig({},t)).config??new jn}catch(n){if(n instanceof M&&n.code===E.Unimplemented)return new jn;throw n}},fd=async(t,e,n,a=!1)=>{const s=t.replace(/\/$/u,"");fs(n);const r={headers:{"rpc-host":e}},m=hd(s,n),c=await pd(s,m,a),l=await Td(c,r,n),{pc:d,dc:p}=await $c(l.disableTrickleICE,l.rtcConfig,l.additionalSdpFields);let v=!1;const S=new cd(c,r,d,p,l);let b;n?.dialTimeout!==void 0&&n.dialTimeout>0&&(b=setTimeout(()=>{v||S.terminate(new Error("timed out"))},n.dialTimeout));try{const w=await S.doExchange();n?.externalAuthAddress!==void 0&&n.externalAuthAddress!==""||n?.credentials?.type,v=!0;const _=new Headers(n?.extraHeaders??{}),N=new Wn({baseUrl:e},()=>w,_);return{transport:In(N,e),peerConnection:d,dataChannel:p}}catch(w){throw console.error("error dialing",w),w}finally{b!==void 0&&(clearTimeout(b),b=void 0),v||(d.close(),p.close())}},Td=async(t,e,n)=>{const a=await gd(e,t),s=a.additionalIceServers.map(c=>{const l=[];for(const d of c.urls)d.endsWith("udp")&&l.push(`${d.slice(0,-3)}tcp`),l.push(d);return{urls:l,credential:c.credential,username:c.username}}),r=n??{};let m;return r.webrtcOptions===void 0?m={disableTrickleICE:a.disableTrickle,rtcConfig:{iceServers:s}}:(m=JSON.parse(JSON.stringify(r.webrtcOptions)),m.rtcConfig===void 0?m.rtcConfig={iceServers:s}:m.rtcConfig.iceServers=[...m.rtcConfig.iceServers??[],...s]),m},hd=(t,e)=>{let n=e;return e&&(n={...e},e.accessToken===void 0&&(tt(n.credentials)&&!n.credentials.authEntity&&(n.credentials.authEntity=n.externalAuthAddress!==void 0&&n.externalAuthAddress!==""?n.externalAuthAddress.replace(wt,""):t.replace(wt,"")),n.credentials=e.webrtcOptions?.signalingCredentials,n.accessToken=e.webrtcOptions?.signalingAccessToken),n.externalAuthAddress=e.webrtcOptions?.signalingExternalAuthAddress,n.externalAuthToEntity=e.webrtcOptions?.signalingExternalAuthToEntity),n},fs=t=>{if(t){if(t.accessToken!==void 0&&t.accessToken.length>0){if(t.credentials)throw new Error("cannot set credentials with accessToken");if(t.webrtcOptions?.signalingAccessToken!==void 0)throw new Error("cannot set webrtcOptions.signalingAccessToken with accessToken");if(t.webrtcOptions?.signalingCredentials!==void 0)throw new Error("cannot set webrtcOptions.signalingCredentials with accessToken")}if(t.webrtcOptions?.signalingAccessToken!==void 0&&t.webrtcOptions.signalingAccessToken.length>0&&t.webrtcOptions.signalingCredentials!==void 0)throw new Error("cannot set webrtcOptions.signalingCredentials with webrtcOptions.signalingAccessToken")}},kd="v0.1.523",Ts=o.makeEnum("viam.common.v1.KinematicsFileFormat",[{no:0,name:"KINEMATICS_FILE_FORMAT_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"KINEMATICS_FILE_FORMAT_SVA",localName:"SVA"},{no:2,name:"KINEMATICS_FILE_FORMAT_URDF",localName:"URDF"}]),G=o.makeMessageType("viam.common.v1.ResourceName",()=>[{no:1,name:"namespace",kind:"scalar",T:9},{no:2,name:"type",kind:"scalar",T:9},{no:3,name:"subtype",kind:"scalar",T:9},{no:4,name:"name",kind:"scalar",T:9}]),Pe=o.makeMessageType("viam.common.v1.Pose",()=>[{no:1,name:"x",kind:"scalar",T:1},{no:2,name:"y",kind:"scalar",T:1},{no:3,name:"z",kind:"scalar",T:1},{no:4,name:"o_x",kind:"scalar",T:1},{no:5,name:"o_y",kind:"scalar",T:1},{no:6,name:"o_z",kind:"scalar",T:1},{no:7,name:"theta",kind:"scalar",T:1}]),hs=o.makeMessageType("viam.common.v1.Orientation",()=>[{no:1,name:"o_x",kind:"scalar",T:1},{no:2,name:"o_y",kind:"scalar",T:1},{no:3,name:"o_z",kind:"scalar",T:1},{no:4,name:"theta",kind:"scalar",T:1}]),We=o.makeMessageType("viam.common.v1.PoseInFrame",()=>[{no:1,name:"reference_frame",kind:"scalar",T:9},{no:2,name:"pose",kind:"message",T:Pe}]),Ue=o.makeMessageType("viam.common.v1.Vector3",()=>[{no:1,name:"x",kind:"scalar",T:1},{no:2,name:"y",kind:"scalar",T:1},{no:3,name:"z",kind:"scalar",T:1}]),ks=o.makeMessageType("viam.common.v1.Sphere",()=>[{no:1,name:"radius_mm",kind:"scalar",T:1}]),ys=o.makeMessageType("viam.common.v1.Capsule",()=>[{no:1,name:"radius_mm",kind:"scalar",T:1},{no:2,name:"length_mm",kind:"scalar",T:1}]),vs=o.makeMessageType("viam.common.v1.RectangularPrism",()=>[{no:1,name:"dims_mm",kind:"message",T:Ue}]),Qn=o.makeMessageType("viam.common.v1.Mesh",()=>[{no:1,name:"content_type",kind:"scalar",T:9},{no:2,name:"mesh",kind:"scalar",T:12}]),bs=o.makeMessageType("viam.common.v1.PointCloud",()=>[{no:1,name:"point_cloud",kind:"scalar",T:12}]),$e=o.makeMessageType("viam.common.v1.Geometry",()=>[{no:1,name:"center",kind:"message",T:Pe},{no:2,name:"sphere",kind:"message",T:ks,oneof:"geometry_type"},{no:3,name:"box",kind:"message",T:vs,oneof:"geometry_type"},{no:5,name:"capsule",kind:"message",T:ys,oneof:"geometry_type"},{no:6,name:"mesh",kind:"message",T:Qn,oneof:"geometry_type"},{no:7,name:"pointcloud",kind:"message",T:bs,oneof:"geometry_type"},{no:4,name:"label",kind:"scalar",T:9}]),xt=o.makeMessageType("viam.common.v1.GeometriesInFrame",()=>[{no:1,name:"reference_frame",kind:"scalar",T:9},{no:2,name:"geometries",kind:"message",T:$e,repeated:!0}]),Ft=o.makeMessageType("viam.common.v1.PointCloudObject",()=>[{no:1,name:"point_cloud",kind:"scalar",T:12},{no:2,name:"geometries",kind:"message",T:xt}]),Be=o.makeMessageType("viam.common.v1.GeoPoint",()=>[{no:1,name:"latitude",kind:"scalar",T:1},{no:2,name:"longitude",kind:"scalar",T:1}]),$n=o.makeMessageType("viam.common.v1.GeoGeometry",()=>[{no:1,name:"location",kind:"message",T:Be},{no:2,name:"geometries",kind:"message",T:$e,repeated:!0}]),De=o.makeMessageType("viam.common.v1.Transform",()=>[{no:1,name:"reference_frame",kind:"scalar",T:9},{no:2,name:"pose_in_observer_frame",kind:"message",T:We},{no:3,name:"physical_object",kind:"message",T:$e,opt:!0},{no:4,name:"uuid",kind:"scalar",T:12},{no:5,name:"metadata",kind:"message",T:h,opt:!0}]),Ss=o.makeMessageType("viam.common.v1.WorldState",()=>[{no:1,name:"obstacles",kind:"message",T:xt,repeated:!0},{no:3,name:"transforms",kind:"message",T:De,repeated:!0}]),yd=o.makeMessageType("viam.common.v1.ActuatorStatus",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),vd=o.makeMessageType("viam.common.v1.ResponseMetadata",()=>[{no:1,name:"captured_at",kind:"message",T:A,opt:!0}]),F=o.makeMessageType("viam.common.v1.DoCommandRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"command",kind:"message",T:h}]),L=o.makeMessageType("viam.common.v1.DoCommandResponse",()=>[{no:1,name:"result",kind:"message",T:h}]),et=o.makeMessageType("viam.common.v1.GetKinematicsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),nt=o.makeMessageType("viam.common.v1.GetKinematicsResponse",()=>[{no:1,name:"format",kind:"enum",T:o.getEnumType(Ts)},{no:2,name:"kinematics_data",kind:"scalar",T:12},{no:3,name:"meshes_by_urdf_filepath",kind:"map",K:9,V:{kind:"message",T:Qn}}]),z=o.makeMessageType("viam.common.v1.GetGeometriesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),K=o.makeMessageType("viam.common.v1.GetGeometriesResponse",()=>[{no:1,name:"geometries",kind:"message",T:$e,repeated:!0}]),ws=o.makeMessageType("viam.common.v1.Get3DModelsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Es=o.makeMessageType("viam.common.v1.Get3DModelsResponse",()=>[{no:1,name:"models",kind:"map",K:9,V:{kind:"message",T:Qn}}]),Lt=o.makeMessageType("viam.common.v1.GetReadingsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),qt=o.makeMessageType("viam.common.v1.GetReadingsResponse",()=>[{no:1,name:"readings",kind:"map",K:9,V:{kind:"message",T:Y}}]),Rs=o.makeMessageType("viam.common.v1.LogEntry",()=>[{no:1,name:"host",kind:"scalar",T:9},{no:2,name:"level",kind:"scalar",T:9},{no:3,name:"time",kind:"message",T:A},{no:4,name:"logger_name",kind:"scalar",T:9},{no:5,name:"message",kind:"scalar",T:9},{no:6,name:"caller",kind:"message",T:h},{no:7,name:"stack",kind:"scalar",T:9},{no:8,name:"fields",kind:"message",T:h,repeated:!0}]),bd=o.makeMessageType("viam.common.v1.AudioInfo",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"sample_rate_hz",kind:"scalar",T:5},{no:3,name:"num_channels",kind:"scalar",T:5}]),Sd=o.makeMessageType("viam.common.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),wd=o.makeMessageType("viam.common.v1.GetPropertiesResponse",()=>[{no:1,name:"supported_codecs",kind:"scalar",T:9,repeated:!0},{no:2,name:"sample_rate_hz",kind:"scalar",T:5},{no:3,name:"num_channels",kind:"scalar",T:5}]),Os=o.makeExtension("viam.common.v1.safety_heartbeat_monitored",re,{no:84260,kind:"scalar",T:8,opt:!0}),Is=Object.freeze(Object.defineProperty({__proto__:null,ActuatorStatus:yd,AudioInfo:bd,Capsule:ys,DoCommandRequest:F,DoCommandResponse:L,GeoGeometry:$n,GeoPoint:Be,GeometriesInFrame:xt,Geometry:$e,Get3DModelsRequest:ws,Get3DModelsResponse:Es,GetGeometriesRequest:z,GetGeometriesResponse:K,GetKinematicsRequest:et,GetKinematicsResponse:nt,GetPropertiesRequest:Sd,GetPropertiesResponse:wd,GetReadingsRequest:Lt,GetReadingsResponse:qt,KinematicsFileFormat:Ts,LogEntry:Rs,Mesh:Qn,Orientation:hs,PointCloud:bs,PointCloudObject:Ft,Pose:Pe,PoseInFrame:We,RectangularPrism:vs,ResourceName:G,ResponseMetadata:vd,Sphere:ks,Transform:De,Vector3:Ue,WorldState:Ss,safety_heartbeat_monitored:Os},Symbol.toStringTag,{value:"Module"})),Et=new Headers({viam_client:`typescript;v0.66.1;${kd}`}),tt=t=>t!==void 0&&"authEntity"in t,ut=1e4;var W=(t=>(t.CONNECTING="connecting",t.CONNECTED="connected",t.DISCONNECTING="disconnecting",t.DISCONNECTED="disconnected",t.DIALING="dialing",t))(W||{});class Ed{listeners={};on(e,n){const{listeners:a}=this;a[e]??=new Set,a[e]?.add(n)}once(e,n){const a=s=>{n(s),this.off(e,n)};this.on(e,a)}has(e,n){return this.listeners[e]?.has(n)}off(e,n){this.listeners[e]?.delete(n)}emit(e,n){for(const a of this.listeners[e]??[])a(n)}}const _s=o.makeMessageType("viam.component.arm.v1.GetEndPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ms=o.makeMessageType("viam.component.arm.v1.GetEndPositionResponse",()=>[{no:1,name:"pose",kind:"message",T:Pe}]),Tn=o.makeMessageType("viam.component.arm.v1.JointPositions",()=>[{no:1,name:"values",kind:"scalar",T:1,repeated:!0}]),Ns=o.makeMessageType("viam.component.arm.v1.GetJointPositionsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Cs=o.makeMessageType("viam.component.arm.v1.GetJointPositionsResponse",()=>[{no:1,name:"positions",kind:"message",T:Tn}]),Us=o.makeMessageType("viam.component.arm.v1.MoveToPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"to",kind:"message",T:Pe},{no:99,name:"extra",kind:"message",T:h}]),Ps=o.makeMessageType("viam.component.arm.v1.MoveToPositionResponse",[]),Ds=o.makeMessageType("viam.component.arm.v1.MoveToJointPositionsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"positions",kind:"message",T:Tn},{no:99,name:"extra",kind:"message",T:h}]),As=o.makeMessageType("viam.component.arm.v1.MoveToJointPositionsResponse",[]),Gs=o.makeMessageType("viam.component.arm.v1.MoveThroughJointPositionsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"positions",kind:"message",T:Tn,repeated:!0},{no:3,name:"options",kind:"message",T:Js,opt:!0},{no:99,name:"extra",kind:"message",T:h}]),xs=o.makeMessageType("viam.component.arm.v1.MoveThroughJointPositionsResponse",[]),Fs=o.makeMessageType("viam.component.arm.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ls=o.makeMessageType("viam.component.arm.v1.StopResponse",[]),Rd=o.makeMessageType("viam.component.arm.v1.Status",()=>[{no:1,name:"end_position",kind:"message",T:Pe},{no:2,name:"joint_positions",kind:"message",T:Tn},{no:3,name:"is_moving",kind:"scalar",T:8}]),qs=o.makeMessageType("viam.component.arm.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),Bs=o.makeMessageType("viam.component.arm.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),Js=o.makeMessageType("viam.component.arm.v1.MoveOptions",()=>[{no:1,name:"max_vel_degs_per_sec",kind:"scalar",T:1,opt:!0},{no:2,name:"max_acc_degs_per_sec2",kind:"scalar",T:1,opt:!0},{no:3,name:"max_vel_degs_per_sec_joints",kind:"scalar",T:1,repeated:!0},{no:4,name:"max_acc_degs_per_sec2_joints",kind:"scalar",T:1,repeated:!0}]),Od=Object.freeze(Object.defineProperty({__proto__:null,GetEndPositionRequest:_s,GetEndPositionResponse:Ms,GetJointPositionsRequest:Ns,GetJointPositionsResponse:Cs,IsMovingRequest:qs,IsMovingResponse:Bs,JointPositions:Tn,MoveOptions:Js,MoveThroughJointPositionsRequest:Gs,MoveThroughJointPositionsResponse:xs,MoveToJointPositionsRequest:Ds,MoveToJointPositionsResponse:As,MoveToPositionRequest:Us,MoveToPositionResponse:Ps,Status:Rd,StopRequest:Fs,StopResponse:Ls},Symbol.toStringTag,{value:"Module"})),Id={typeName:"viam.component.arm.v1.ArmService",methods:{getEndPosition:{name:"GetEndPosition",I:_s,O:Ms,kind:i.Unary},moveToPosition:{name:"MoveToPosition",I:Us,O:Ps,kind:i.Unary},getJointPositions:{name:"GetJointPositions",I:Ns,O:Cs,kind:i.Unary},moveToJointPositions:{name:"MoveToJointPositions",I:Ds,O:As,kind:i.Unary},moveThroughJointPositions:{name:"MoveThroughJointPositions",I:Gs,O:xs,kind:i.Unary},stop:{name:"Stop",I:Fs,O:Ls,kind:i.Unary},isMoving:{name:"IsMoving",I:qs,O:Bs,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getKinematics:{name:"GetKinematics",I:et,O:nt,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary},get3DModels:{name:"Get3DModels",I:ws,O:Es,kind:i.Unary}}},js=o.makeMessageType("viam.component.base.v1.MoveStraightRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"distance_mm",kind:"scalar",T:3},{no:3,name:"mm_per_sec",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),Vs=o.makeMessageType("viam.component.base.v1.MoveStraightResponse",[]),Ws=o.makeMessageType("viam.component.base.v1.SpinRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"angle_deg",kind:"scalar",T:1},{no:3,name:"degs_per_sec",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),$s=o.makeMessageType("viam.component.base.v1.SpinResponse",[]),Ys=o.makeMessageType("viam.component.base.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Hs=o.makeMessageType("viam.component.base.v1.StopResponse",[]),zs=o.makeMessageType("viam.component.base.v1.SetPowerRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"linear",kind:"message",T:Ue},{no:3,name:"angular",kind:"message",T:Ue},{no:99,name:"extra",kind:"message",T:h}]),Ks=o.makeMessageType("viam.component.base.v1.SetPowerResponse",[]),Xs=o.makeMessageType("viam.component.base.v1.SetVelocityRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"linear",kind:"message",T:Ue},{no:3,name:"angular",kind:"message",T:Ue},{no:99,name:"extra",kind:"message",T:h}]),Zs=o.makeMessageType("viam.component.base.v1.SetVelocityResponse",[]),Qs=o.makeMessageType("viam.component.base.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),er=o.makeMessageType("viam.component.base.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),nr=o.makeMessageType("viam.component.base.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),tr=o.makeMessageType("viam.component.base.v1.GetPropertiesResponse",()=>[{no:1,name:"width_meters",kind:"scalar",T:1},{no:2,name:"turning_radius_meters",kind:"scalar",T:1},{no:3,name:"wheel_circumference_meters",kind:"scalar",T:1}]),_d=Object.freeze(Object.defineProperty({__proto__:null,GetPropertiesRequest:nr,GetPropertiesResponse:tr,IsMovingRequest:Qs,IsMovingResponse:er,MoveStraightRequest:js,MoveStraightResponse:Vs,SetPowerRequest:zs,SetPowerResponse:Ks,SetVelocityRequest:Xs,SetVelocityResponse:Zs,SpinRequest:Ws,SpinResponse:$s,StopRequest:Ys,StopResponse:Hs},Symbol.toStringTag,{value:"Module"})),Md={typeName:"viam.component.base.v1.BaseService",methods:{moveStraight:{name:"MoveStraight",I:js,O:Vs,kind:i.Unary},spin:{name:"Spin",I:Ws,O:$s,kind:i.Unary},setPower:{name:"SetPower",I:zs,O:Ks,kind:i.Unary},setVelocity:{name:"SetVelocity",I:Xs,O:Zs,kind:i.Unary},stop:{name:"Stop",I:Ys,O:Hs,kind:i.Unary},isMoving:{name:"IsMoving",I:Qs,O:er,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary},getProperties:{name:"GetProperties",I:nr,O:tr,kind:i.Unary}}},ar=o.makeEnum("viam.component.board.v1.PowerMode",[{no:0,name:"POWER_MODE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"POWER_MODE_NORMAL",localName:"NORMAL"},{no:2,name:"POWER_MODE_OFFLINE_DEEP",localName:"OFFLINE_DEEP"}]),Nd=o.makeMessageType("viam.component.board.v1.Status",()=>[{no:1,name:"analogs",kind:"map",K:9,V:{kind:"scalar",T:5}},{no:2,name:"digital_interrupts",kind:"map",K:9,V:{kind:"scalar",T:3}}]),sr=o.makeMessageType("viam.component.board.v1.SetGPIORequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:3,name:"high",kind:"scalar",T:8},{no:99,name:"extra",kind:"message",T:h}]),rr=o.makeMessageType("viam.component.board.v1.SetGPIOResponse",[]),or=o.makeMessageType("viam.component.board.v1.GetGPIORequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),ir=o.makeMessageType("viam.component.board.v1.GetGPIOResponse",()=>[{no:1,name:"high",kind:"scalar",T:8}]),mr=o.makeMessageType("viam.component.board.v1.PWMRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),cr=o.makeMessageType("viam.component.board.v1.PWMResponse",()=>[{no:1,name:"duty_cycle_pct",kind:"scalar",T:1}]),dr=o.makeMessageType("viam.component.board.v1.SetPWMRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:3,name:"duty_cycle_pct",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),lr=o.makeMessageType("viam.component.board.v1.SetPWMResponse",[]),ur=o.makeMessageType("viam.component.board.v1.PWMFrequencyRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),pr=o.makeMessageType("viam.component.board.v1.PWMFrequencyResponse",()=>[{no:1,name:"frequency_hz",kind:"scalar",T:4}]),gr=o.makeMessageType("viam.component.board.v1.SetPWMFrequencyRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:3,name:"frequency_hz",kind:"scalar",T:4},{no:99,name:"extra",kind:"message",T:h}]),fr=o.makeMessageType("viam.component.board.v1.SetPWMFrequencyResponse",[]),Tr=o.makeMessageType("viam.component.board.v1.ReadAnalogReaderRequest",()=>[{no:1,name:"board_name",kind:"scalar",T:9},{no:2,name:"analog_reader_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),hr=o.makeMessageType("viam.component.board.v1.ReadAnalogReaderResponse",()=>[{no:1,name:"value",kind:"scalar",T:5},{no:2,name:"min_range",kind:"scalar",T:2},{no:3,name:"max_range",kind:"scalar",T:2},{no:4,name:"step_size",kind:"scalar",T:2}]),kr=o.makeMessageType("viam.component.board.v1.WriteAnalogRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:3,name:"value",kind:"scalar",T:5},{no:99,name:"extra",kind:"message",T:h}]),yr=o.makeMessageType("viam.component.board.v1.WriteAnalogResponse",[]),vr=o.makeMessageType("viam.component.board.v1.GetDigitalInterruptValueRequest",()=>[{no:1,name:"board_name",kind:"scalar",T:9},{no:2,name:"digital_interrupt_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),br=o.makeMessageType("viam.component.board.v1.GetDigitalInterruptValueResponse",()=>[{no:1,name:"value",kind:"scalar",T:3}]),Sr=o.makeMessageType("viam.component.board.v1.StreamTicksRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin_names",kind:"scalar",T:9,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),wr=o.makeMessageType("viam.component.board.v1.StreamTicksResponse",()=>[{no:1,name:"pin_name",kind:"scalar",T:9},{no:2,name:"time",kind:"scalar",T:4},{no:3,name:"high",kind:"scalar",T:8}]),Er=o.makeMessageType("viam.component.board.v1.SetPowerModeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"power_mode",kind:"enum",T:o.getEnumType(ar)},{no:3,name:"duration",kind:"message",T:$,opt:!0},{no:99,name:"extra",kind:"message",T:h}]),Rr=o.makeMessageType("viam.component.board.v1.SetPowerModeResponse",[]),Cd=Object.freeze(Object.defineProperty({__proto__:null,GetDigitalInterruptValueRequest:vr,GetDigitalInterruptValueResponse:br,GetGPIORequest:or,GetGPIOResponse:ir,PWMFrequencyRequest:ur,PWMFrequencyResponse:pr,PWMRequest:mr,PWMResponse:cr,PowerMode:ar,ReadAnalogReaderRequest:Tr,ReadAnalogReaderResponse:hr,SetGPIORequest:sr,SetGPIOResponse:rr,SetPWMFrequencyRequest:gr,SetPWMFrequencyResponse:fr,SetPWMRequest:dr,SetPWMResponse:lr,SetPowerModeRequest:Er,SetPowerModeResponse:Rr,Status:Nd,StreamTicksRequest:Sr,StreamTicksResponse:wr,WriteAnalogRequest:kr,WriteAnalogResponse:yr},Symbol.toStringTag,{value:"Module"})),Ud={typeName:"viam.component.board.v1.BoardService",methods:{setGPIO:{name:"SetGPIO",I:sr,O:rr,kind:i.Unary},getGPIO:{name:"GetGPIO",I:or,O:ir,kind:i.Unary},pWM:{name:"PWM",I:mr,O:cr,kind:i.Unary},setPWM:{name:"SetPWM",I:dr,O:lr,kind:i.Unary},pWMFrequency:{name:"PWMFrequency",I:ur,O:pr,kind:i.Unary},setPWMFrequency:{name:"SetPWMFrequency",I:gr,O:fr,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},readAnalogReader:{name:"ReadAnalogReader",I:Tr,O:hr,kind:i.Unary},writeAnalog:{name:"WriteAnalog",I:kr,O:yr,kind:i.Unary},getDigitalInterruptValue:{name:"GetDigitalInterruptValue",I:vr,O:br,kind:i.Unary},streamTicks:{name:"StreamTicks",I:Sr,O:wr,kind:i.ServerStreaming},setPowerMode:{name:"SetPowerMode",I:Er,O:Rr,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},Bt=o.makeEnum("viam.component.encoder.v1.PositionType",[{no:0,name:"POSITION_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"POSITION_TYPE_TICKS_COUNT",localName:"TICKS_COUNT"},{no:2,name:"POSITION_TYPE_ANGLE_DEGREES",localName:"ANGLE_DEGREES"}]),Or=o.makeMessageType("viam.component.encoder.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"position_type",kind:"enum",T:o.getEnumType(Bt),opt:!0},{no:99,name:"extra",kind:"message",T:h}]),Ir=o.makeMessageType("viam.component.encoder.v1.GetPositionResponse",()=>[{no:1,name:"value",kind:"scalar",T:2},{no:2,name:"position_type",kind:"enum",T:o.getEnumType(Bt)}]),_r=o.makeMessageType("viam.component.encoder.v1.ResetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Mr=o.makeMessageType("viam.component.encoder.v1.ResetPositionResponse",[]),Nr=o.makeMessageType("viam.component.encoder.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Cr=o.makeMessageType("viam.component.encoder.v1.GetPropertiesResponse",()=>[{no:1,name:"ticks_count_supported",kind:"scalar",T:8},{no:2,name:"angle_degrees_supported",kind:"scalar",T:8}]),Pd=Object.freeze(Object.defineProperty({__proto__:null,GetPositionRequest:Or,GetPositionResponse:Ir,GetPropertiesRequest:Nr,GetPropertiesResponse:Cr,PositionType:Bt,ResetPositionRequest:_r,ResetPositionResponse:Mr},Symbol.toStringTag,{value:"Module"})),Dd={typeName:"viam.component.encoder.v1.EncoderService",methods:{getPosition:{name:"GetPosition",I:Or,O:Ir,kind:i.Unary},resetPosition:{name:"ResetPosition",I:_r,O:Mr,kind:i.Unary},getProperties:{name:"GetProperties",I:Nr,O:Cr,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},Ad=o.makeMessageType("viam.component.gantry.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Gd=o.makeMessageType("viam.component.gantry.v1.GetPositionResponse",()=>[{no:1,name:"positions_mm",kind:"scalar",T:1,repeated:!0}]),xd=o.makeMessageType("viam.component.gantry.v1.MoveToPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"positions_mm",kind:"scalar",T:1,repeated:!0},{no:3,name:"speeds_mm_per_sec",kind:"scalar",T:1,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),Fd=o.makeMessageType("viam.component.gantry.v1.MoveToPositionResponse",[]),Ld=o.makeMessageType("viam.component.gantry.v1.HomeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),qd=o.makeMessageType("viam.component.gantry.v1.HomeResponse",()=>[{no:1,name:"homed",kind:"scalar",T:8}]),Bd=o.makeMessageType("viam.component.gantry.v1.GetLengthsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Jd=o.makeMessageType("viam.component.gantry.v1.GetLengthsResponse",()=>[{no:1,name:"lengths_mm",kind:"scalar",T:1,repeated:!0}]),jd=o.makeMessageType("viam.component.gantry.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Vd=o.makeMessageType("viam.component.gantry.v1.StopResponse",[]),Wd=o.makeMessageType("viam.component.gantry.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),$d=o.makeMessageType("viam.component.gantry.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),Yd={typeName:"viam.component.gantry.v1.GantryService",methods:{getPosition:{name:"GetPosition",I:Ad,O:Gd,kind:i.Unary},moveToPosition:{name:"MoveToPosition",I:xd,O:Fd,kind:i.Unary},home:{name:"Home",I:Ld,O:qd,kind:i.Unary},getLengths:{name:"GetLengths",I:Bd,O:Jd,kind:i.Unary},stop:{name:"Stop",I:jd,O:Vd,kind:i.Unary},isMoving:{name:"IsMoving",I:Wd,O:$d,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getKinematics:{name:"GetKinematics",I:et,O:nt,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},Hd={typeName:"viam.component.generic.v1.GenericService",methods:{doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},zd=o.makeMessageType("viam.component.gripper.v1.OpenRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Kd=o.makeMessageType("viam.component.gripper.v1.OpenResponse",[]),Xd=o.makeMessageType("viam.component.gripper.v1.GrabRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Zd=o.makeMessageType("viam.component.gripper.v1.GrabResponse",()=>[{no:1,name:"success",kind:"scalar",T:8},{no:99,name:"extra",kind:"message",T:h}]),Qd=o.makeMessageType("viam.component.gripper.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),el=o.makeMessageType("viam.component.gripper.v1.StopResponse",[]),nl=o.makeMessageType("viam.component.gripper.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),tl=o.makeMessageType("viam.component.gripper.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),al=o.makeMessageType("viam.component.gripper.v1.IsHoldingSomethingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),sl=o.makeMessageType("viam.component.gripper.v1.IsHoldingSomethingResponse",()=>[{no:1,name:"is_holding_something",kind:"scalar",T:8},{no:99,name:"meta",kind:"message",T:h}]),rl={typeName:"viam.component.gripper.v1.GripperService",methods:{open:{name:"Open",I:zd,O:Kd,kind:i.Unary},grab:{name:"Grab",I:Xd,O:Zd,kind:i.Unary},stop:{name:"Stop",I:Qd,O:el,kind:i.Unary},isMoving:{name:"IsMoving",I:nl,O:tl,kind:i.Unary},isHoldingSomething:{name:"IsHoldingSomething",I:al,O:sl,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary},getKinematics:{name:"GetKinematics",I:et,O:nt,kind:i.Unary}}},Ur=o.makeMessageType("viam.component.inputcontroller.v1.GetControlsRequest",()=>[{no:1,name:"controller",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Pr=o.makeMessageType("viam.component.inputcontroller.v1.GetControlsResponse",()=>[{no:1,name:"controls",kind:"scalar",T:9,repeated:!0}]),Dr=o.makeMessageType("viam.component.inputcontroller.v1.GetEventsRequest",()=>[{no:1,name:"controller",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ar=o.makeMessageType("viam.component.inputcontroller.v1.GetEventsResponse",()=>[{no:1,name:"events",kind:"message",T:hn,repeated:!0}]),Gr=o.makeMessageType("viam.component.inputcontroller.v1.TriggerEventRequest",()=>[{no:1,name:"controller",kind:"scalar",T:9},{no:2,name:"event",kind:"message",T:hn},{no:99,name:"extra",kind:"message",T:h}]),xr=o.makeMessageType("viam.component.inputcontroller.v1.TriggerEventResponse",[]),hn=o.makeMessageType("viam.component.inputcontroller.v1.Event",()=>[{no:1,name:"time",kind:"message",T:A},{no:2,name:"event",kind:"scalar",T:9},{no:3,name:"control",kind:"scalar",T:9},{no:4,name:"value",kind:"scalar",T:1}]),Fr=o.makeMessageType("viam.component.inputcontroller.v1.StreamEventsRequest",()=>[{no:1,name:"controller",kind:"scalar",T:9},{no:2,name:"events",kind:"message",T:Lr,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),Lr=o.makeMessageType("viam.component.inputcontroller.v1.StreamEventsRequest.Events",()=>[{no:1,name:"control",kind:"scalar",T:9},{no:2,name:"events",kind:"scalar",T:9,repeated:!0},{no:3,name:"cancelled_events",kind:"scalar",T:9,repeated:!0}],{localName:"StreamEventsRequest_Events"}),qr=o.makeMessageType("viam.component.inputcontroller.v1.StreamEventsResponse",()=>[{no:1,name:"event",kind:"message",T:hn}]),ol=o.makeMessageType("viam.component.inputcontroller.v1.Status",()=>[{no:1,name:"events",kind:"message",T:hn,repeated:!0}]),il=Object.freeze(Object.defineProperty({__proto__:null,Event:hn,GetControlsRequest:Ur,GetControlsResponse:Pr,GetEventsRequest:Dr,GetEventsResponse:Ar,Status:ol,StreamEventsRequest:Fr,StreamEventsRequest_Events:Lr,StreamEventsResponse:qr,TriggerEventRequest:Gr,TriggerEventResponse:xr},Symbol.toStringTag,{value:"Module"})),ml={typeName:"viam.component.inputcontroller.v1.InputControllerService",methods:{getControls:{name:"GetControls",I:Ur,O:Pr,kind:i.Unary},getEvents:{name:"GetEvents",I:Dr,O:Ar,kind:i.Unary},streamEvents:{name:"StreamEvents",I:Fr,O:qr,kind:i.ServerStreaming},triggerEvent:{name:"TriggerEvent",I:Gr,O:xr,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},cl=o.makeMessageType("viam.component.motor.v1.SetPowerRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"power_pct",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),dl=o.makeMessageType("viam.component.motor.v1.SetPowerResponse",[]),ll=o.makeMessageType("viam.component.motor.v1.GoForRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"rpm",kind:"scalar",T:1},{no:3,name:"revolutions",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),ul=o.makeMessageType("viam.component.motor.v1.GoForResponse",[]),pl=o.makeMessageType("viam.component.motor.v1.GoToRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"rpm",kind:"scalar",T:1},{no:3,name:"position_revolutions",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),gl=o.makeMessageType("viam.component.motor.v1.GoToResponse",[]),fl=o.makeMessageType("viam.component.motor.v1.SetRPMRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"rpm",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),Tl=o.makeMessageType("viam.component.motor.v1.SetRPMResponse",[]),hl=o.makeMessageType("viam.component.motor.v1.ResetZeroPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"offset",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),kl=o.makeMessageType("viam.component.motor.v1.ResetZeroPositionResponse",[]),yl=o.makeMessageType("viam.component.motor.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),vl=o.makeMessageType("viam.component.motor.v1.GetPositionResponse",()=>[{no:1,name:"position",kind:"scalar",T:1}]),bl=o.makeMessageType("viam.component.motor.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Sl=o.makeMessageType("viam.component.motor.v1.StopResponse",[]),wl=o.makeMessageType("viam.component.motor.v1.IsPoweredRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),El=o.makeMessageType("viam.component.motor.v1.IsPoweredResponse",()=>[{no:1,name:"is_on",kind:"scalar",T:8},{no:2,name:"power_pct",kind:"scalar",T:1}]),Rl=o.makeMessageType("viam.component.motor.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ol=o.makeMessageType("viam.component.motor.v1.GetPropertiesResponse",()=>[{no:1,name:"position_reporting",kind:"scalar",T:8}]),Il=o.makeMessageType("viam.component.motor.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),_l=o.makeMessageType("viam.component.motor.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),Ml={typeName:"viam.component.motor.v1.MotorService",methods:{setPower:{name:"SetPower",I:cl,O:dl,kind:i.Unary},goFor:{name:"GoFor",I:ll,O:ul,kind:i.Unary},goTo:{name:"GoTo",I:pl,O:gl,kind:i.Unary},setRPM:{name:"SetRPM",I:fl,O:Tl,kind:i.Unary},resetZeroPosition:{name:"ResetZeroPosition",I:hl,O:kl,kind:i.Unary},getPosition:{name:"GetPosition",I:yl,O:vl,kind:i.Unary},getProperties:{name:"GetProperties",I:Rl,O:Ol,kind:i.Unary},stop:{name:"Stop",I:bl,O:Sl,kind:i.Unary},isPowered:{name:"IsPowered",I:wl,O:El,kind:i.Unary},isMoving:{name:"IsMoving",I:Il,O:_l,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},Br=o.makeMessageType("viam.component.movementsensor.v1.GetLinearVelocityRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Jr=o.makeMessageType("viam.component.movementsensor.v1.GetLinearVelocityResponse",()=>[{no:1,name:"linear_velocity",kind:"message",T:Ue}]),jr=o.makeMessageType("viam.component.movementsensor.v1.GetAngularVelocityRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Vr=o.makeMessageType("viam.component.movementsensor.v1.GetAngularVelocityResponse",()=>[{no:1,name:"angular_velocity",kind:"message",T:Ue}]),Wr=o.makeMessageType("viam.component.movementsensor.v1.GetCompassHeadingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),$r=o.makeMessageType("viam.component.movementsensor.v1.GetCompassHeadingResponse",()=>[{no:1,name:"value",kind:"scalar",T:1}]),Yr=o.makeMessageType("viam.component.movementsensor.v1.GetOrientationRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Hr=o.makeMessageType("viam.component.movementsensor.v1.GetOrientationResponse",()=>[{no:1,name:"orientation",kind:"message",T:hs}]),zr=o.makeMessageType("viam.component.movementsensor.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Kr=o.makeMessageType("viam.component.movementsensor.v1.GetPositionResponse",()=>[{no:1,name:"coordinate",kind:"message",T:Be},{no:2,name:"altitude_m",kind:"scalar",T:2}]),Xr=o.makeMessageType("viam.component.movementsensor.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Zr=o.makeMessageType("viam.component.movementsensor.v1.GetPropertiesResponse",()=>[{no:1,name:"linear_velocity_supported",kind:"scalar",T:8},{no:2,name:"angular_velocity_supported",kind:"scalar",T:8},{no:3,name:"orientation_supported",kind:"scalar",T:8},{no:4,name:"position_supported",kind:"scalar",T:8},{no:5,name:"compass_heading_supported",kind:"scalar",T:8},{no:6,name:"linear_acceleration_supported",kind:"scalar",T:8}]),Qr=o.makeMessageType("viam.component.movementsensor.v1.GetAccuracyRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),eo=o.makeMessageType("viam.component.movementsensor.v1.GetAccuracyResponse",()=>[{no:1,name:"accuracy",kind:"map",K:9,V:{kind:"scalar",T:2}},{no:2,name:"position_hdop",kind:"scalar",T:2,opt:!0},{no:3,name:"position_vdop",kind:"scalar",T:2,opt:!0},{no:4,name:"position_nmea_gga_fix",kind:"scalar",T:5,opt:!0},{no:5,name:"compass_degrees_error",kind:"scalar",T:2,opt:!0}]),no=o.makeMessageType("viam.component.movementsensor.v1.GetLinearAccelerationRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),to=o.makeMessageType("viam.component.movementsensor.v1.GetLinearAccelerationResponse",()=>[{no:1,name:"linear_acceleration",kind:"message",T:Ue}]),Nl=Object.freeze(Object.defineProperty({__proto__:null,GetAccuracyRequest:Qr,GetAccuracyResponse:eo,GetAngularVelocityRequest:jr,GetAngularVelocityResponse:Vr,GetCompassHeadingRequest:Wr,GetCompassHeadingResponse:$r,GetLinearAccelerationRequest:no,GetLinearAccelerationResponse:to,GetLinearVelocityRequest:Br,GetLinearVelocityResponse:Jr,GetOrientationRequest:Yr,GetOrientationResponse:Hr,GetPositionRequest:zr,GetPositionResponse:Kr,GetPropertiesRequest:Xr,GetPropertiesResponse:Zr},Symbol.toStringTag,{value:"Module"})),Cl={typeName:"viam.component.movementsensor.v1.MovementSensorService",methods:{getLinearVelocity:{name:"GetLinearVelocity",I:Br,O:Jr,kind:i.Unary},getAngularVelocity:{name:"GetAngularVelocity",I:jr,O:Vr,kind:i.Unary},getCompassHeading:{name:"GetCompassHeading",I:Wr,O:$r,kind:i.Unary},getOrientation:{name:"GetOrientation",I:Yr,O:Hr,kind:i.Unary},getPosition:{name:"GetPosition",I:zr,O:Kr,kind:i.Unary},getProperties:{name:"GetProperties",I:Xr,O:Zr,kind:i.Unary},getAccuracy:{name:"GetAccuracy",I:Qr,O:eo,kind:i.Unary},getLinearAcceleration:{name:"GetLinearAcceleration",I:no,O:to,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary},getReadings:{name:"GetReadings",I:Lt,O:qt,kind:i.Unary}}},Ul=o.makeMessageType("viam.component.powersensor.v1.GetVoltageRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Pl=o.makeMessageType("viam.component.powersensor.v1.GetVoltageResponse",()=>[{no:1,name:"volts",kind:"scalar",T:1},{no:2,name:"is_ac",kind:"scalar",T:8}]),Dl=o.makeMessageType("viam.component.powersensor.v1.GetCurrentRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Al=o.makeMessageType("viam.component.powersensor.v1.GetCurrentResponse",()=>[{no:1,name:"amperes",kind:"scalar",T:1},{no:2,name:"is_ac",kind:"scalar",T:8}]),Gl=o.makeMessageType("viam.component.powersensor.v1.GetPowerRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),xl=o.makeMessageType("viam.component.powersensor.v1.GetPowerResponse",()=>[{no:1,name:"watts",kind:"scalar",T:1}]),Fl={typeName:"viam.component.powersensor.v1.PowerSensorService",methods:{getVoltage:{name:"GetVoltage",I:Ul,O:Pl,kind:i.Unary},getCurrent:{name:"GetCurrent",I:Dl,O:Al,kind:i.Unary},getPower:{name:"GetPower",I:Gl,O:xl,kind:i.Unary},getReadings:{name:"GetReadings",I:Lt,O:qt,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},Ll=o.makeMessageType("viam.component.servo.v1.MoveRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"angle_deg",kind:"scalar",T:13},{no:99,name:"extra",kind:"message",T:h}]),ql=o.makeMessageType("viam.component.servo.v1.MoveResponse",[]),Bl=o.makeMessageType("viam.component.servo.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Jl=o.makeMessageType("viam.component.servo.v1.GetPositionResponse",()=>[{no:1,name:"position_deg",kind:"scalar",T:13}]),jl=o.makeMessageType("viam.component.servo.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Vl=o.makeMessageType("viam.component.servo.v1.StopResponse",[]),Wl=o.makeMessageType("viam.component.servo.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),$l=o.makeMessageType("viam.component.servo.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),Yl={typeName:"viam.component.servo.v1.ServoService",methods:{move:{name:"Move",I:Ll,O:ql,kind:i.Unary},getPosition:{name:"GetPosition",I:Bl,O:Jl,kind:i.Unary},stop:{name:"Stop",I:jl,O:Vl,kind:i.Unary},isMoving:{name:"IsMoving",I:Wl,O:$l,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},ao=o.makeMessageType("opentelemetry.proto.common.v1.AnyValue",()=>[{no:1,name:"string_value",kind:"scalar",T:9,oneof:"value"},{no:2,name:"bool_value",kind:"scalar",T:8,oneof:"value"},{no:3,name:"int_value",kind:"scalar",T:3,oneof:"value"},{no:4,name:"double_value",kind:"scalar",T:1,oneof:"value"},{no:5,name:"array_value",kind:"message",T:Hl,oneof:"value"},{no:6,name:"kvlist_value",kind:"message",T:zl,oneof:"value"},{no:7,name:"bytes_value",kind:"scalar",T:12,oneof:"value"}]),Hl=o.makeMessageType("opentelemetry.proto.common.v1.ArrayValue",()=>[{no:1,name:"values",kind:"message",T:ao,repeated:!0}]),zl=o.makeMessageType("opentelemetry.proto.common.v1.KeyValueList",()=>[{no:1,name:"values",kind:"message",T:en,repeated:!0}]),en=o.makeMessageType("opentelemetry.proto.common.v1.KeyValue",()=>[{no:1,name:"key",kind:"scalar",T:9},{no:2,name:"value",kind:"message",T:ao}]),Kl=o.makeMessageType("opentelemetry.proto.common.v1.InstrumentationScope",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"attributes",kind:"message",T:en,repeated:!0},{no:4,name:"dropped_attributes_count",kind:"scalar",T:13}]),Xl=o.makeMessageType("opentelemetry.proto.common.v1.EntityRef",()=>[{no:1,name:"schema_url",kind:"scalar",T:9},{no:2,name:"type",kind:"scalar",T:9},{no:3,name:"id_keys",kind:"scalar",T:9,repeated:!0},{no:4,name:"description_keys",kind:"scalar",T:9,repeated:!0}]),Zl=o.makeMessageType("opentelemetry.proto.resource.v1.Resource",()=>[{no:1,name:"attributes",kind:"message",T:en,repeated:!0},{no:2,name:"dropped_attributes_count",kind:"scalar",T:13},{no:3,name:"entity_refs",kind:"message",T:Xl,repeated:!0}]),Ql=o.makeMessageType("opentelemetry.proto.trace.v1.ResourceSpans",()=>[{no:1,name:"resource",kind:"message",T:Zl},{no:2,name:"scope_spans",kind:"message",T:eu,repeated:!0},{no:3,name:"schema_url",kind:"scalar",T:9}]),eu=o.makeMessageType("opentelemetry.proto.trace.v1.ScopeSpans",()=>[{no:1,name:"scope",kind:"message",T:Kl},{no:2,name:"spans",kind:"message",T:nu,repeated:!0},{no:3,name:"schema_url",kind:"scalar",T:9}]),nu=o.makeMessageType("opentelemetry.proto.trace.v1.Span",()=>[{no:1,name:"trace_id",kind:"scalar",T:12},{no:2,name:"span_id",kind:"scalar",T:12},{no:3,name:"trace_state",kind:"scalar",T:9},{no:4,name:"parent_span_id",kind:"scalar",T:12},{no:16,name:"flags",kind:"scalar",T:7},{no:5,name:"name",kind:"scalar",T:9},{no:6,name:"kind",kind:"enum",T:o.getEnumType(tu)},{no:7,name:"start_time_unix_nano",kind:"scalar",T:6},{no:8,name:"end_time_unix_nano",kind:"scalar",T:6},{no:9,name:"attributes",kind:"message",T:en,repeated:!0},{no:10,name:"dropped_attributes_count",kind:"scalar",T:13},{no:11,name:"events",kind:"message",T:au,repeated:!0},{no:12,name:"dropped_events_count",kind:"scalar",T:13},{no:13,name:"links",kind:"message",T:su,repeated:!0},{no:14,name:"dropped_links_count",kind:"scalar",T:13},{no:15,name:"status",kind:"message",T:ru}]),tu=o.makeEnum("opentelemetry.proto.trace.v1.Span.SpanKind",[{no:0,name:"SPAN_KIND_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"SPAN_KIND_INTERNAL",localName:"INTERNAL"},{no:2,name:"SPAN_KIND_SERVER",localName:"SERVER"},{no:3,name:"SPAN_KIND_CLIENT",localName:"CLIENT"},{no:4,name:"SPAN_KIND_PRODUCER",localName:"PRODUCER"},{no:5,name:"SPAN_KIND_CONSUMER",localName:"CONSUMER"}]),au=o.makeMessageType("opentelemetry.proto.trace.v1.Span.Event",()=>[{no:1,name:"time_unix_nano",kind:"scalar",T:6},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"attributes",kind:"message",T:en,repeated:!0},{no:4,name:"dropped_attributes_count",kind:"scalar",T:13}],{localName:"Span_Event"}),su=o.makeMessageType("opentelemetry.proto.trace.v1.Span.Link",()=>[{no:1,name:"trace_id",kind:"scalar",T:12},{no:2,name:"span_id",kind:"scalar",T:12},{no:3,name:"trace_state",kind:"scalar",T:9},{no:4,name:"attributes",kind:"message",T:en,repeated:!0},{no:5,name:"dropped_attributes_count",kind:"scalar",T:13},{no:6,name:"flags",kind:"scalar",T:7}],{localName:"Span_Link"}),ru=o.makeMessageType("opentelemetry.proto.trace.v1.Status",()=>[{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"code",kind:"enum",T:o.getEnumType(ou)}]),ou=o.makeEnum("opentelemetry.proto.trace.v1.Status.StatusCode",[{no:0,name:"STATUS_CODE_UNSET",localName:"UNSET"},{no:1,name:"STATUS_CODE_OK",localName:"OK"},{no:2,name:"STATUS_CODE_ERROR",localName:"ERROR"}]),iu=o.makeEnum("viam.robot.v1.PeerConnectionType",[{no:0,name:"PEER_CONNECTION_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"PEER_CONNECTION_TYPE_GRPC",localName:"GRPC"},{no:2,name:"PEER_CONNECTION_TYPE_WEBRTC",localName:"WEBRTC"}]),mu=o.makeMessageType("viam.robot.v1.SendTracesRequest",()=>[{no:1,name:"resource_spans",kind:"message",T:Ql,repeated:!0}]),cu=o.makeMessageType("viam.robot.v1.SendTracesResponse",[]),du=o.makeMessageType("viam.robot.v1.TunnelRequest",()=>[{no:1,name:"destination_port",kind:"scalar",T:13},{no:2,name:"data",kind:"scalar",T:12}]),lu=o.makeMessageType("viam.robot.v1.TunnelResponse",()=>[{no:1,name:"data",kind:"scalar",T:12}]),uu=o.makeMessageType("viam.robot.v1.ListTunnelsRequest",[]),pu=o.makeMessageType("viam.robot.v1.ListTunnelsResponse",()=>[{no:1,name:"tunnels",kind:"message",T:gu,repeated:!0}]),gu=o.makeMessageType("viam.robot.v1.Tunnel",()=>[{no:1,name:"port",kind:"scalar",T:13},{no:2,name:"connection_timeout",kind:"message",T:$}]),fu=o.makeMessageType("viam.robot.v1.FrameSystemConfig",()=>[{no:1,name:"frame",kind:"message",T:De},{no:2,name:"kinematics",kind:"message",T:h}]),Tu=o.makeMessageType("viam.robot.v1.FrameSystemConfigRequest",()=>[{no:1,name:"supplemental_transforms",kind:"message",T:De,repeated:!0}]),hu=o.makeMessageType("viam.robot.v1.FrameSystemConfigResponse",()=>[{no:1,name:"frame_system_configs",kind:"message",T:fu,repeated:!0}]),so=o.makeMessageType("viam.robot.v1.TransformPoseRequest",()=>[{no:1,name:"source",kind:"message",T:We},{no:2,name:"destination",kind:"scalar",T:9},{no:3,name:"supplemental_transforms",kind:"message",T:De,repeated:!0}]),ku=o.makeMessageType("viam.robot.v1.TransformPoseResponse",()=>[{no:1,name:"pose",kind:"message",T:We}]),ro=o.makeMessageType("viam.robot.v1.TransformPCDRequest",()=>[{no:1,name:"point_cloud_pcd",kind:"scalar",T:12},{no:2,name:"source",kind:"scalar",T:9},{no:3,name:"destination",kind:"scalar",T:9}]),yu=o.makeMessageType("viam.robot.v1.TransformPCDResponse",()=>[{no:1,name:"point_cloud_pcd",kind:"scalar",T:12}]),vu=o.makeMessageType("viam.robot.v1.ResourceNamesRequest",[]),bu=o.makeMessageType("viam.robot.v1.ResourceNamesResponse",()=>[{no:1,name:"resources",kind:"message",T:G,repeated:!0}]),Su=o.makeMessageType("viam.robot.v1.ResourceRPCSubtype",()=>[{no:1,name:"subtype",kind:"message",T:G},{no:2,name:"proto_service",kind:"scalar",T:9}]),wu=o.makeMessageType("viam.robot.v1.ResourceRPCSubtypesRequest",[]),Eu=o.makeMessageType("viam.robot.v1.ResourceRPCSubtypesResponse",()=>[{no:1,name:"resource_rpc_subtypes",kind:"message",T:Su,repeated:!0}]),Ru=o.makeMessageType("viam.robot.v1.Operation",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"method",kind:"scalar",T:9},{no:3,name:"arguments",kind:"message",T:h},{no:4,name:"started",kind:"message",T:A},{no:5,name:"session_id",kind:"scalar",T:9,opt:!0}]),Ou=o.makeMessageType("viam.robot.v1.GetOperationsRequest",[]),Iu=o.makeMessageType("viam.robot.v1.GetOperationsResponse",()=>[{no:1,name:"operations",kind:"message",T:Ru,repeated:!0}]),_u=o.makeMessageType("viam.robot.v1.CancelOperationRequest",()=>[{no:1,name:"id",kind:"scalar",T:9}]),Mu=o.makeMessageType("viam.robot.v1.CancelOperationResponse",[]),Nu=o.makeMessageType("viam.robot.v1.BlockForOperationRequest",()=>[{no:1,name:"id",kind:"scalar",T:9}]),Cu=o.makeMessageType("viam.robot.v1.BlockForOperationResponse",[]),Uu=o.makeMessageType("viam.robot.v1.PeerConnectionInfo",()=>[{no:1,name:"type",kind:"enum",T:o.getEnumType(iu)},{no:2,name:"remote_address",kind:"scalar",T:9,opt:!0},{no:3,name:"local_address",kind:"scalar",T:9,opt:!0}]),Pu=o.makeMessageType("viam.robot.v1.Session",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"peer_connection_info",kind:"message",T:Uu,opt:!0}]),Du=o.makeMessageType("viam.robot.v1.GetSessionsRequest",[]),Au=o.makeMessageType("viam.robot.v1.GetSessionsResponse",()=>[{no:1,name:"sessions",kind:"message",T:Pu,repeated:!0}]),Gu=o.makeMessageType("viam.robot.v1.ModuleModel",()=>[{no:1,name:"module_name",kind:"scalar",T:9},{no:2,name:"model",kind:"scalar",T:9},{no:3,name:"api",kind:"scalar",T:9},{no:4,name:"from_local_module",kind:"scalar",T:8}]),oo=o.makeMessageType("viam.robot.v1.GetModelsFromModulesRequest",[]),xu=o.makeMessageType("viam.robot.v1.GetModelsFromModulesResponse",()=>[{no:1,name:"models",kind:"message",T:Gu,repeated:!0}]),io=o.makeMessageType("viam.robot.v1.Status",()=>[{no:1,name:"name",kind:"message",T:G},{no:2,name:"status",kind:"message",T:h},{no:3,name:"last_reconfigured",kind:"message",T:A}]),Fu=o.makeMessageType("viam.robot.v1.GetStatusRequest",()=>[{no:1,name:"resource_names",kind:"message",T:G,repeated:!0}]),Lu=o.makeMessageType("viam.robot.v1.GetStatusResponse",()=>[{no:1,name:"status",kind:"message",T:io,repeated:!0}]),qu=o.makeMessageType("viam.robot.v1.StreamStatusRequest",()=>[{no:1,name:"resource_names",kind:"message",T:G,repeated:!0},{no:2,name:"every",kind:"message",T:$}]),Bu=o.makeMessageType("viam.robot.v1.StreamStatusResponse",()=>[{no:1,name:"status",kind:"message",T:io,repeated:!0}]),Ju=o.makeMessageType("viam.robot.v1.StopExtraParameters",()=>[{no:1,name:"name",kind:"message",T:G},{no:2,name:"params",kind:"message",T:h}]),ju=o.makeMessageType("viam.robot.v1.StopAllRequest",()=>[{no:99,name:"extra",kind:"message",T:Ju,repeated:!0}]),Vu=o.makeMessageType("viam.robot.v1.StopAllResponse",[]),mo=o.makeMessageType("viam.robot.v1.StartSessionRequest",()=>[{no:1,name:"resume",kind:"scalar",T:9}]),Wu=o.makeMessageType("viam.robot.v1.StartSessionResponse",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"heartbeat_window",kind:"message",T:$}]),co=o.makeMessageType("viam.robot.v1.SendSessionHeartbeatRequest",()=>[{no:1,name:"id",kind:"scalar",T:9}]),$u=o.makeMessageType("viam.robot.v1.SendSessionHeartbeatResponse",[]),Yu=o.makeMessageType("viam.robot.v1.LogRequest",()=>[{no:1,name:"logs",kind:"message",T:Rs,repeated:!0}]),Hu=o.makeMessageType("viam.robot.v1.LogResponse",[]),zu=o.makeMessageType("viam.robot.v1.GetCloudMetadataRequest",[]),lo=o.makeMessageType("viam.robot.v1.GetCloudMetadataResponse",()=>[{no:1,name:"robot_part_id",kind:"scalar",T:9},{no:2,name:"primary_org_id",kind:"scalar",T:9},{no:3,name:"location_id",kind:"scalar",T:9},{no:4,name:"machine_id",kind:"scalar",T:9},{no:5,name:"machine_part_id",kind:"scalar",T:9}]),uo=o.makeMessageType("viam.robot.v1.RestartModuleRequest",()=>[{no:1,name:"module_id",kind:"scalar",T:9,oneof:"id_or_name"},{no:2,name:"module_name",kind:"scalar",T:9,oneof:"id_or_name"}]),Ku=o.makeMessageType("viam.robot.v1.RestartModuleResponse",[]),Xu=o.makeMessageType("viam.robot.v1.ShutdownRequest",[]),Zu=o.makeMessageType("viam.robot.v1.ShutdownResponse",[]),Qu=o.makeMessageType("viam.robot.v1.GetMachineStatusRequest",[]),ep=o.makeMessageType("viam.robot.v1.GetMachineStatusResponse",()=>[{no:1,name:"resources",kind:"message",T:ap,repeated:!0},{no:2,name:"config",kind:"message",T:rp},{no:3,name:"state",kind:"enum",T:o.getEnumType(np)},{no:4,name:"job_statuses",kind:"message",T:tp,repeated:!0}]),np=o.makeEnum("viam.robot.v1.GetMachineStatusResponse.State",[{no:0,name:"STATE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"STATE_INITIALIZING",localName:"INITIALIZING"},{no:2,name:"STATE_RUNNING",localName:"RUNNING"}]),tp=o.makeMessageType("viam.robot.v1.JobStatus",()=>[{no:1,name:"job_name",kind:"scalar",T:9},{no:2,name:"recent_successful_runs",kind:"message",T:A,repeated:!0},{no:3,name:"recent_failed_runs",kind:"message",T:A,repeated:!0}]),ap=o.makeMessageType("viam.robot.v1.ResourceStatus",()=>[{no:1,name:"name",kind:"message",T:G},{no:2,name:"state",kind:"enum",T:o.getEnumType(sp)},{no:3,name:"last_updated",kind:"message",T:A},{no:4,name:"revision",kind:"scalar",T:9},{no:5,name:"error",kind:"scalar",T:9},{no:6,name:"cloud_metadata",kind:"message",T:lo,opt:!0}]),sp=o.makeEnum("viam.robot.v1.ResourceStatus.State",[{no:0,name:"STATE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"STATE_UNCONFIGURED",localName:"UNCONFIGURED"},{no:2,name:"STATE_CONFIGURING",localName:"CONFIGURING"},{no:3,name:"STATE_READY",localName:"READY"},{no:4,name:"STATE_REMOVING",localName:"REMOVING"},{no:5,name:"STATE_UNHEALTHY",localName:"UNHEALTHY"}]),rp=o.makeMessageType("viam.robot.v1.ConfigStatus",()=>[{no:1,name:"revision",kind:"scalar",T:9},{no:2,name:"last_updated",kind:"message",T:A}]),op=o.makeMessageType("viam.robot.v1.GetVersionRequest",[]),ip=o.makeMessageType("viam.robot.v1.GetVersionResponse",()=>[{no:1,name:"platform",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"api_version",kind:"scalar",T:9}]),po=o.makeMessageType("viam.robot.v1.GetPoseRequest",()=>[{no:1,name:"component_name",kind:"scalar",T:9},{no:2,name:"destination_frame",kind:"scalar",T:9},{no:3,name:"supplemental_transforms",kind:"message",T:De,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),mp=o.makeMessageType("viam.robot.v1.GetPoseResponse",()=>[{no:1,name:"pose",kind:"message",T:We}]),Jt={typeName:"viam.robot.v1.RobotService",methods:{getOperations:{name:"GetOperations",I:Ou,O:Iu,kind:i.Unary},getSessions:{name:"GetSessions",I:Du,O:Au,kind:i.Unary},resourceNames:{name:"ResourceNames",I:vu,O:bu,kind:i.Unary},resourceRPCSubtypes:{name:"ResourceRPCSubtypes",I:wu,O:Eu,kind:i.Unary},cancelOperation:{name:"CancelOperation",I:_u,O:Mu,kind:i.Unary},blockForOperation:{name:"BlockForOperation",I:Nu,O:Cu,kind:i.Unary},getModelsFromModules:{name:"GetModelsFromModules",I:oo,O:xu,kind:i.Unary},getStatus:{name:"GetStatus",I:Fu,O:Lu,kind:i.Unary},streamStatus:{name:"StreamStatus",I:qu,O:Bu,kind:i.ServerStreaming},stopAll:{name:"StopAll",I:ju,O:Vu,kind:i.Unary},startSession:{name:"StartSession",I:mo,O:Wu,kind:i.Unary},sendSessionHeartbeat:{name:"SendSessionHeartbeat",I:co,O:$u,kind:i.Unary},log:{name:"Log",I:Yu,O:Hu,kind:i.Unary},getCloudMetadata:{name:"GetCloudMetadata",I:zu,O:lo,kind:i.Unary},restartModule:{name:"RestartModule",I:uo,O:Ku,kind:i.Unary},shutdown:{name:"Shutdown",I:Xu,O:Zu,kind:i.Unary},getMachineStatus:{name:"GetMachineStatus",I:Qu,O:ep,kind:i.Unary},getVersion:{name:"GetVersion",I:op,O:ip,kind:i.Unary},tunnel:{name:"Tunnel",I:du,O:lu,kind:i.BiDiStreaming},listTunnels:{name:"ListTunnels",I:uu,O:pu,kind:i.Unary},frameSystemConfig:{name:"FrameSystemConfig",I:Tu,O:hu,kind:i.Unary},getPose:{name:"GetPose",I:po,O:mp,kind:i.Unary},transformPose:{name:"TransformPose",I:so,O:ku,kind:i.Unary},transformPCD:{name:"TransformPCD",I:ro,O:yu,kind:i.Unary},sendTraces:{name:"SendTraces",I:mu,O:cu,kind:i.Unary}}},cp=o.makeMessageType("viam.app.v1.ComponentConfig",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"namespace",kind:"scalar",T:9},{no:3,name:"type",kind:"scalar",T:9},{no:4,name:"model",kind:"scalar",T:9},{no:5,name:"frame",kind:"message",T:lp},{no:6,name:"depends_on",kind:"scalar",T:9,repeated:!0},{no:7,name:"service_configs",kind:"message",T:dp,repeated:!0},{no:8,name:"attributes",kind:"message",T:h},{no:9,name:"api",kind:"scalar",T:9},{no:10,name:"log_configuration",kind:"message",T:up}]),dp=o.makeMessageType("viam.app.v1.ResourceLevelServiceConfig",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"attributes",kind:"message",T:h}]),lp=o.makeMessageType("viam.app.v1.Frame",()=>[{no:1,name:"parent",kind:"scalar",T:9},{no:2,name:"translation",kind:"message",T:pp},{no:3,name:"orientation",kind:"message",T:gp},{no:4,name:"geometry",kind:"message",T:$e}]),up=o.makeMessageType("viam.app.v1.LogConfiguration",()=>[{no:1,name:"level",kind:"scalar",T:9}]),pp=o.makeMessageType("viam.app.v1.Translation",()=>[{no:1,name:"x",kind:"scalar",T:1},{no:2,name:"y",kind:"scalar",T:1},{no:3,name:"z",kind:"scalar",T:1}]),gp=o.makeMessageType("viam.app.v1.Orientation",()=>[{no:1,name:"no_orientation",kind:"message",T:fp,oneof:"type"},{no:2,name:"vector_radians",kind:"message",T:Tp,oneof:"type"},{no:3,name:"vector_degrees",kind:"message",T:hp,oneof:"type"},{no:4,name:"euler_angles",kind:"message",T:kp,oneof:"type"},{no:5,name:"axis_angles",kind:"message",T:yp,oneof:"type"},{no:6,name:"quaternion",kind:"message",T:vp,oneof:"type"}]),fp=o.makeMessageType("viam.app.v1.Orientation.NoOrientation",[],{localName:"Orientation_NoOrientation"}),Tp=o.makeMessageType("viam.app.v1.Orientation.OrientationVectorRadians",()=>[{no:1,name:"theta",kind:"scalar",T:1},{no:2,name:"x",kind:"scalar",T:1},{no:3,name:"y",kind:"scalar",T:1},{no:4,name:"z",kind:"scalar",T:1}],{localName:"Orientation_OrientationVectorRadians"}),hp=o.makeMessageType("viam.app.v1.Orientation.OrientationVectorDegrees",()=>[{no:1,name:"theta",kind:"scalar",T:1},{no:2,name:"x",kind:"scalar",T:1},{no:3,name:"y",kind:"scalar",T:1},{no:4,name:"z",kind:"scalar",T:1}],{localName:"Orientation_OrientationVectorDegrees"}),kp=o.makeMessageType("viam.app.v1.Orientation.EulerAngles",()=>[{no:1,name:"roll",kind:"scalar",T:1},{no:2,name:"pitch",kind:"scalar",T:1},{no:3,name:"yaw",kind:"scalar",T:1}],{localName:"Orientation_EulerAngles"}),yp=o.makeMessageType("viam.app.v1.Orientation.AxisAngles",()=>[{no:1,name:"theta",kind:"scalar",T:1},{no:2,name:"x",kind:"scalar",T:1},{no:3,name:"y",kind:"scalar",T:1},{no:4,name:"z",kind:"scalar",T:1}],{localName:"Orientation_AxisAngles"}),vp=o.makeMessageType("viam.app.v1.Orientation.Quaternion",()=>[{no:1,name:"w",kind:"scalar",T:1},{no:2,name:"x",kind:"scalar",T:1},{no:3,name:"y",kind:"scalar",T:1},{no:4,name:"z",kind:"scalar",T:1}],{localName:"Orientation_Quaternion"}),bp=o.makeMessageType("viam.service.discovery.v1.DiscoverResourcesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Sp=o.makeMessageType("viam.service.discovery.v1.DiscoverResourcesResponse",()=>[{no:1,name:"discoveries",kind:"message",T:cp,repeated:!0}]),wp={typeName:"viam.service.discovery.v1.DiscoveryService",methods:{discoverResources:{name:"DiscoverResources",I:bp,O:Sp,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},go=o.makeEnum("viam.service.motion.v1.PlanState",[{no:0,name:"PLAN_STATE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"PLAN_STATE_IN_PROGRESS",localName:"IN_PROGRESS"},{no:2,name:"PLAN_STATE_STOPPED",localName:"STOPPED"},{no:3,name:"PLAN_STATE_SUCCEEDED",localName:"SUCCEEDED"},{no:4,name:"PLAN_STATE_FAILED",localName:"FAILED"}]),fo=o.makeMessageType("viam.service.motion.v1.MoveRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"destination",kind:"message",T:We},{no:3,name:"component_name_deprecated",kind:"message",T:G},{no:4,name:"world_state",kind:"message",T:Ss,opt:!0},{no:5,name:"constraints",kind:"message",T:No,opt:!0},{no:6,name:"component_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),To=o.makeMessageType("viam.service.motion.v1.MoveResponse",()=>[{no:1,name:"success",kind:"scalar",T:8}]),ho=o.makeMessageType("viam.service.motion.v1.MoveOnMapRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"destination",kind:"message",T:Pe},{no:3,name:"component_name_deprecated",kind:"message",T:G},{no:4,name:"slam_service_name_deprecated",kind:"message",T:G},{no:5,name:"motion_configuration",kind:"message",T:jt,opt:!0},{no:6,name:"obstacles",kind:"message",T:$e,repeated:!0},{no:7,name:"component_name",kind:"scalar",T:9},{no:8,name:"slam_service_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),ko=o.makeMessageType("viam.service.motion.v1.MoveOnMapResponse",()=>[{no:1,name:"execution_id",kind:"scalar",T:9}]),yo=o.makeMessageType("viam.service.motion.v1.ObstacleDetector",()=>[{no:1,name:"vision_service_deprecated",kind:"message",T:G},{no:2,name:"camera_deprecated",kind:"message",T:G},{no:3,name:"vision_service",kind:"scalar",T:9},{no:4,name:"camera",kind:"scalar",T:9}]),jt=o.makeMessageType("viam.service.motion.v1.MotionConfiguration",()=>[{no:1,name:"obstacle_detectors",kind:"message",T:yo,repeated:!0},{no:2,name:"position_polling_frequency_hz",kind:"scalar",T:1,opt:!0},{no:3,name:"obstacle_polling_frequency_hz",kind:"scalar",T:1,opt:!0},{no:4,name:"plan_deviation_m",kind:"scalar",T:1,opt:!0},{no:5,name:"linear_m_per_sec",kind:"scalar",T:1,opt:!0},{no:6,name:"angular_degs_per_sec",kind:"scalar",T:1,opt:!0}]),vo=o.makeMessageType("viam.service.motion.v1.MoveOnGlobeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"destination",kind:"message",T:Be},{no:3,name:"heading",kind:"scalar",T:1,opt:!0},{no:4,name:"component_name_deprecated",kind:"message",T:G},{no:5,name:"movement_sensor_name_deprecated",kind:"message",T:G},{no:6,name:"obstacles",kind:"message",T:$n,repeated:!0},{no:7,name:"motion_configuration",kind:"message",T:jt,opt:!0},{no:8,name:"bounding_regions",kind:"message",T:$n,repeated:!0},{no:9,name:"component_name",kind:"scalar",T:9},{no:10,name:"movement_sensor_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),bo=o.makeMessageType("viam.service.motion.v1.MoveOnGlobeResponse",()=>[{no:1,name:"execution_id",kind:"scalar",T:9}]),So=o.makeMessageType("viam.service.motion.v1.GetPoseRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"destination_frame",kind:"scalar",T:9},{no:4,name:"supplemental_transforms",kind:"message",T:De,repeated:!0},{no:5,name:"component_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),wo=o.makeMessageType("viam.service.motion.v1.GetPoseResponse",()=>[{no:1,name:"pose",kind:"message",T:We}]),Eo=o.makeMessageType("viam.service.motion.v1.StopPlanRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"component_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ro=o.makeMessageType("viam.service.motion.v1.StopPlanResponse",[]),Oo=o.makeMessageType("viam.service.motion.v1.ListPlanStatusesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"only_active_plans",kind:"scalar",T:8},{no:99,name:"extra",kind:"message",T:h}]),Io=o.makeMessageType("viam.service.motion.v1.ListPlanStatusesResponse",()=>[{no:1,name:"plan_statuses_with_ids",kind:"message",T:Go,repeated:!0}]),_o=o.makeMessageType("viam.service.motion.v1.GetPlanRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"last_plan_only",kind:"scalar",T:8},{no:4,name:"execution_id",kind:"scalar",T:9,opt:!0},{no:5,name:"component_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Mo=o.makeMessageType("viam.service.motion.v1.GetPlanResponse",()=>[{no:1,name:"current_plan_with_status",kind:"message",T:Rt},{no:2,name:"replan_history",kind:"message",T:Rt,repeated:!0}]),No=o.makeMessageType("viam.service.motion.v1.Constraints",()=>[{no:1,name:"linear_constraint",kind:"message",T:Co,repeated:!0},{no:2,name:"orientation_constraint",kind:"message",T:Po,repeated:!0},{no:3,name:"collision_specification",kind:"message",T:Do,repeated:!0},{no:4,name:"pseudolinear_constraint",kind:"message",T:Uo,repeated:!0}]),Co=o.makeMessageType("viam.service.motion.v1.LinearConstraint",()=>[{no:1,name:"line_tolerance_mm",kind:"scalar",T:2,opt:!0},{no:2,name:"orientation_tolerance_degs",kind:"scalar",T:2,opt:!0}]),Uo=o.makeMessageType("viam.service.motion.v1.PseudolinearConstraint",()=>[{no:1,name:"line_tolerance_factor",kind:"scalar",T:2,opt:!0},{no:2,name:"orientation_tolerance_factor",kind:"scalar",T:2,opt:!0}]),Po=o.makeMessageType("viam.service.motion.v1.OrientationConstraint",()=>[{no:1,name:"orientation_tolerance_degs",kind:"scalar",T:2,opt:!0}]),Do=o.makeMessageType("viam.service.motion.v1.CollisionSpecification",()=>[{no:1,name:"allows",kind:"message",T:Ao,repeated:!0}]),Ao=o.makeMessageType("viam.service.motion.v1.CollisionSpecification.AllowedFrameCollisions",()=>[{no:1,name:"frame1",kind:"scalar",T:9},{no:2,name:"frame2",kind:"scalar",T:9}],{localName:"CollisionSpecification_AllowedFrameCollisions"}),Rt=o.makeMessageType("viam.service.motion.v1.PlanWithStatus",()=>[{no:1,name:"plan",kind:"message",T:xo},{no:2,name:"status",kind:"message",T:Yn},{no:3,name:"status_history",kind:"message",T:Yn,repeated:!0}]),Go=o.makeMessageType("viam.service.motion.v1.PlanStatusWithID",()=>[{no:1,name:"plan_id",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"execution_id",kind:"scalar",T:9},{no:4,name:"status",kind:"message",T:Yn},{no:5,name:"component_name",kind:"scalar",T:9}]),Yn=o.makeMessageType("viam.service.motion.v1.PlanStatus",()=>[{no:1,name:"state",kind:"enum",T:o.getEnumType(go)},{no:2,name:"timestamp",kind:"message",T:A},{no:3,name:"reason",kind:"scalar",T:9,opt:!0}]),xo=o.makeMessageType("viam.service.motion.v1.Plan",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"execution_id",kind:"scalar",T:9},{no:4,name:"steps",kind:"message",T:Fo,repeated:!0},{no:5,name:"component_name",kind:"scalar",T:9}]),Fo=o.makeMessageType("viam.service.motion.v1.PlanStep",()=>[{no:1,name:"step",kind:"map",K:9,V:{kind:"message",T:Lo}}]),Lo=o.makeMessageType("viam.service.motion.v1.ComponentState",()=>[{no:1,name:"pose",kind:"message",T:Pe}]),Ep=Object.freeze(Object.defineProperty({__proto__:null,CollisionSpecification:Do,CollisionSpecification_AllowedFrameCollisions:Ao,ComponentState:Lo,Constraints:No,GetPlanRequest:_o,GetPlanResponse:Mo,GetPoseRequest:So,GetPoseResponse:wo,LinearConstraint:Co,ListPlanStatusesRequest:Oo,ListPlanStatusesResponse:Io,MotionConfiguration:jt,MoveOnGlobeRequest:vo,MoveOnGlobeResponse:bo,MoveOnMapRequest:ho,MoveOnMapResponse:ko,MoveRequest:fo,MoveResponse:To,ObstacleDetector:yo,OrientationConstraint:Po,Plan:xo,PlanState:go,PlanStatus:Yn,PlanStatusWithID:Go,PlanStep:Fo,PlanWithStatus:Rt,PseudolinearConstraint:Uo,StopPlanRequest:Eo,StopPlanResponse:Ro},Symbol.toStringTag,{value:"Module"})),Rp={typeName:"viam.service.motion.v1.MotionService",methods:{move:{name:"Move",I:fo,O:To,kind:i.Unary},moveOnMap:{name:"MoveOnMap",I:ho,O:ko,kind:i.Unary},moveOnGlobe:{name:"MoveOnGlobe",I:vo,O:bo,kind:i.Unary},getPose:{name:"GetPose",I:So,O:wo,kind:i.Unary},stopPlan:{name:"StopPlan",I:Eo,O:Ro,kind:i.Unary},listPlanStatuses:{name:"ListPlanStatuses",I:Oo,O:Io,kind:i.Unary},getPlan:{name:"GetPlan",I:_o,O:Mo,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},qo=o.makeEnum("viam.service.navigation.v1.MapType",[{no:0,name:"MAP_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"MAP_TYPE_NONE",localName:"NONE"},{no:2,name:"MAP_TYPE_GPS",localName:"GPS"}]),Vt=o.makeEnum("viam.service.navigation.v1.Mode",[{no:0,name:"MODE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"MODE_MANUAL",localName:"MANUAL"},{no:2,name:"MODE_WAYPOINT",localName:"WAYPOINT"},{no:3,name:"MODE_EXPLORE",localName:"EXPLORE"}]),Bo=o.makeMessageType("viam.service.navigation.v1.GetModeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Jo=o.makeMessageType("viam.service.navigation.v1.GetModeResponse",()=>[{no:1,name:"mode",kind:"enum",T:o.getEnumType(Vt)}]),jo=o.makeMessageType("viam.service.navigation.v1.SetModeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"mode",kind:"enum",T:o.getEnumType(Vt)},{no:99,name:"extra",kind:"message",T:h}]),Vo=o.makeMessageType("viam.service.navigation.v1.SetModeResponse",[]),Wo=o.makeMessageType("viam.service.navigation.v1.Waypoint",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"location",kind:"message",T:Be}]),$o=o.makeMessageType("viam.service.navigation.v1.GetLocationRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Yo=o.makeMessageType("viam.service.navigation.v1.GetLocationResponse",()=>[{no:1,name:"location",kind:"message",T:Be},{no:2,name:"compass_heading",kind:"scalar",T:1}]),Ho=o.makeMessageType("viam.service.navigation.v1.GetWaypointsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),zo=o.makeMessageType("viam.service.navigation.v1.GetWaypointsResponse",()=>[{no:1,name:"waypoints",kind:"message",T:Wo,repeated:!0}]),Ko=o.makeMessageType("viam.service.navigation.v1.AddWaypointRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"location",kind:"message",T:Be},{no:99,name:"extra",kind:"message",T:h}]),Xo=o.makeMessageType("viam.service.navigation.v1.AddWaypointResponse",[]),Zo=o.makeMessageType("viam.service.navigation.v1.RemoveWaypointRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"id",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Qo=o.makeMessageType("viam.service.navigation.v1.RemoveWaypointResponse",[]),ei=o.makeMessageType("viam.service.navigation.v1.GetObstaclesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),ni=o.makeMessageType("viam.service.navigation.v1.GetObstaclesResponse",()=>[{no:1,name:"obstacles",kind:"message",T:$n,repeated:!0}]),ti=o.makeMessageType("viam.service.navigation.v1.Path",()=>[{no:1,name:"destination_waypoint_id",kind:"scalar",T:9},{no:2,name:"geopoints",kind:"message",T:Be,repeated:!0}]),ai=o.makeMessageType("viam.service.navigation.v1.GetPathsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),si=o.makeMessageType("viam.service.navigation.v1.GetPathsResponse",()=>[{no:1,name:"paths",kind:"message",T:ti,repeated:!0}]),ri=o.makeMessageType("viam.service.navigation.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),oi=o.makeMessageType("viam.service.navigation.v1.GetPropertiesResponse",()=>[{no:1,name:"map_type",kind:"enum",T:o.getEnumType(qo)}]),Op=Object.freeze(Object.defineProperty({__proto__:null,AddWaypointRequest:Ko,AddWaypointResponse:Xo,GetLocationRequest:$o,GetLocationResponse:Yo,GetModeRequest:Bo,GetModeResponse:Jo,GetObstaclesRequest:ei,GetObstaclesResponse:ni,GetPathsRequest:ai,GetPathsResponse:si,GetPropertiesRequest:ri,GetPropertiesResponse:oi,GetWaypointsRequest:Ho,GetWaypointsResponse:zo,MapType:qo,Mode:Vt,Path:ti,RemoveWaypointRequest:Zo,RemoveWaypointResponse:Qo,SetModeRequest:jo,SetModeResponse:Vo,Waypoint:Wo},Symbol.toStringTag,{value:"Module"})),Ip={typeName:"viam.service.navigation.v1.NavigationService",methods:{getMode:{name:"GetMode",I:Bo,O:Jo,kind:i.Unary},setMode:{name:"SetMode",I:jo,O:Vo,kind:i.Unary},getLocation:{name:"GetLocation",I:$o,O:Yo,kind:i.Unary},getWaypoints:{name:"GetWaypoints",I:Ho,O:zo,kind:i.Unary},addWaypoint:{name:"AddWaypoint",I:Ko,O:Xo,kind:i.Unary},removeWaypoint:{name:"RemoveWaypoint",I:Zo,O:Qo,kind:i.Unary},getObstacles:{name:"GetObstacles",I:ei,O:ni,kind:i.Unary},getPaths:{name:"GetPaths",I:ai,O:si,kind:i.Unary},getProperties:{name:"GetProperties",I:ri,O:oi,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},ii=o.makeEnum("viam.service.slam.v1.MappingMode",[{no:0,name:"MAPPING_MODE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"MAPPING_MODE_CREATE_NEW_MAP",localName:"CREATE_NEW_MAP"},{no:2,name:"MAPPING_MODE_LOCALIZE_ONLY",localName:"LOCALIZE_ONLY"},{no:3,name:"MAPPING_MODE_UPDATE_EXISTING_MAP",localName:"UPDATE_EXISTING_MAP"}]),mi=o.makeEnum("viam.service.slam.v1.SensorType",[{no:0,name:"SENSOR_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"SENSOR_TYPE_CAMERA",localName:"CAMERA"},{no:2,name:"SENSOR_TYPE_MOVEMENT_SENSOR",localName:"MOVEMENT_SENSOR"}]),ci=o.makeMessageType("viam.service.slam.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),di=o.makeMessageType("viam.service.slam.v1.GetPositionResponse",()=>[{no:1,name:"pose",kind:"message",T:Pe}]),li=o.makeMessageType("viam.service.slam.v1.GetPointCloudMapRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"return_edited_map",kind:"scalar",T:8,opt:!0}]),ui=o.makeMessageType("viam.service.slam.v1.GetPointCloudMapResponse",()=>[{no:1,name:"point_cloud_pcd_chunk",kind:"scalar",T:12}]),pi=o.makeMessageType("viam.service.slam.v1.GetInternalStateRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),gi=o.makeMessageType("viam.service.slam.v1.GetInternalStateResponse",()=>[{no:1,name:"internal_state_chunk",kind:"scalar",T:12}]),fi=o.makeMessageType("viam.service.slam.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),Ti=o.makeMessageType("viam.service.slam.v1.GetPropertiesResponse",()=>[{no:1,name:"cloud_slam",kind:"scalar",T:8},{no:2,name:"mapping_mode",kind:"enum",T:o.getEnumType(ii)},{no:3,name:"internal_state_file_type",kind:"scalar",T:9,opt:!0},{no:4,name:"sensor_info",kind:"message",T:hi,repeated:!0}]),hi=o.makeMessageType("viam.service.slam.v1.SensorInfo",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:o.getEnumType(mi)}]),_p=Object.freeze(Object.defineProperty({__proto__:null,GetInternalStateRequest:pi,GetInternalStateResponse:gi,GetPointCloudMapRequest:li,GetPointCloudMapResponse:ui,GetPositionRequest:ci,GetPositionResponse:di,GetPropertiesRequest:fi,GetPropertiesResponse:Ti,MappingMode:ii,SensorInfo:hi,SensorType:mi},Symbol.toStringTag,{value:"Module"})),Mp={typeName:"viam.service.slam.v1.SLAMService",methods:{getPosition:{name:"GetPosition",I:ci,O:di,kind:i.Unary},getPointCloudMap:{name:"GetPointCloudMap",I:li,O:ui,kind:i.ServerStreaming},getInternalState:{name:"GetInternalState",I:pi,O:gi,kind:i.ServerStreaming},getProperties:{name:"GetProperties",I:fi,O:Ti,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},Np=o.makeMessageType("viam.app.data.v1.BoundingBox",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"label",kind:"scalar",T:9},{no:3,name:"x_min_normalized",kind:"scalar",T:1},{no:4,name:"y_min_normalized",kind:"scalar",T:1},{no:5,name:"x_max_normalized",kind:"scalar",T:1},{no:6,name:"y_max_normalized",kind:"scalar",T:1},{no:7,name:"confidence",kind:"scalar",T:1,opt:!0}]),Cp=o.makeMessageType("viam.app.data.v1.Classification",()=>[{no:3,name:"id",kind:"scalar",T:9},{no:1,name:"label",kind:"scalar",T:9},{no:2,name:"confidence",kind:"scalar",T:1,opt:!0}]),Up=o.makeMessageType("viam.app.data.v1.Annotations",()=>[{no:1,name:"bboxes",kind:"message",T:Np,repeated:!0},{no:2,name:"classifications",kind:"message",T:Cp,repeated:!0}]),Pp=o.makeEnum("viam.component.camera.v1.Format",[{no:0,name:"FORMAT_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"FORMAT_RAW_RGBA",localName:"RAW_RGBA"},{no:2,name:"FORMAT_RAW_DEPTH",localName:"RAW_DEPTH"},{no:3,name:"FORMAT_JPEG",localName:"JPEG"},{no:4,name:"FORMAT_PNG",localName:"PNG"}]),Dp=o.makeMessageType("viam.component.camera.v1.Image",()=>[{no:1,name:"source_name",kind:"scalar",T:9},{no:2,name:"format",kind:"enum",T:o.getEnumType(Pp)},{no:3,name:"image",kind:"scalar",T:12},{no:4,name:"mime_type",kind:"scalar",T:9},{no:5,name:"annotations",kind:"message",T:Up}]),ki=o.makeMessageType("viam.service.vision.v1.GetDetectionsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"image",kind:"scalar",T:12},{no:3,name:"width",kind:"scalar",T:3},{no:4,name:"height",kind:"scalar",T:3},{no:5,name:"mime_type",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),yi=o.makeMessageType("viam.service.vision.v1.GetDetectionsResponse",()=>[{no:1,name:"detections",kind:"message",T:at,repeated:!0}]),vi=o.makeMessageType("viam.service.vision.v1.GetDetectionsFromCameraRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"camera_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),bi=o.makeMessageType("viam.service.vision.v1.GetDetectionsFromCameraResponse",()=>[{no:1,name:"detections",kind:"message",T:at,repeated:!0}]),at=o.makeMessageType("viam.service.vision.v1.Detection",()=>[{no:1,name:"x_min",kind:"scalar",T:3,opt:!0},{no:2,name:"y_min",kind:"scalar",T:3,opt:!0},{no:3,name:"x_max",kind:"scalar",T:3,opt:!0},{no:4,name:"y_max",kind:"scalar",T:3,opt:!0},{no:5,name:"confidence",kind:"scalar",T:1},{no:6,name:"class_name",kind:"scalar",T:9},{no:7,name:"x_min_normalized",kind:"scalar",T:1,opt:!0},{no:8,name:"y_min_normalized",kind:"scalar",T:1,opt:!0},{no:9,name:"x_max_normalized",kind:"scalar",T:1,opt:!0},{no:10,name:"y_max_normalized",kind:"scalar",T:1,opt:!0}]),Si=o.makeMessageType("viam.service.vision.v1.GetClassificationsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"image",kind:"scalar",T:12},{no:3,name:"width",kind:"scalar",T:5},{no:4,name:"height",kind:"scalar",T:5},{no:5,name:"mime_type",kind:"scalar",T:9},{no:6,name:"n",kind:"scalar",T:5},{no:99,name:"extra",kind:"message",T:h}]),wi=o.makeMessageType("viam.service.vision.v1.GetClassificationsResponse",()=>[{no:1,name:"classifications",kind:"message",T:st,repeated:!0}]),Ei=o.makeMessageType("viam.service.vision.v1.GetClassificationsFromCameraRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"camera_name",kind:"scalar",T:9},{no:3,name:"n",kind:"scalar",T:5},{no:99,name:"extra",kind:"message",T:h}]),Ri=o.makeMessageType("viam.service.vision.v1.GetClassificationsFromCameraResponse",()=>[{no:1,name:"classifications",kind:"message",T:st,repeated:!0}]),st=o.makeMessageType("viam.service.vision.v1.Classification",()=>[{no:1,name:"class_name",kind:"scalar",T:9},{no:2,name:"confidence",kind:"scalar",T:1}]),Oi=o.makeMessageType("viam.service.vision.v1.GetObjectPointCloudsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"camera_name",kind:"scalar",T:9},{no:3,name:"mime_type",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ii=o.makeMessageType("viam.service.vision.v1.GetObjectPointCloudsResponse",()=>[{no:1,name:"mime_type",kind:"scalar",T:9},{no:2,name:"objects",kind:"message",T:Ft,repeated:!0}]),_i=o.makeMessageType("viam.service.vision.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Mi=o.makeMessageType("viam.service.vision.v1.CaptureAllFromCameraRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"camera_name",kind:"scalar",T:9},{no:3,name:"return_image",kind:"scalar",T:8},{no:4,name:"return_classifications",kind:"scalar",T:8},{no:5,name:"return_detections",kind:"scalar",T:8},{no:6,name:"return_object_point_clouds",kind:"scalar",T:8},{no:99,name:"extra",kind:"message",T:h}]),Ni=o.makeMessageType("viam.service.vision.v1.CaptureAllFromCameraResponse",()=>[{no:1,name:"image",kind:"message",T:Dp},{no:2,name:"detections",kind:"message",T:at,repeated:!0},{no:3,name:"classifications",kind:"message",T:st,repeated:!0},{no:4,name:"objects",kind:"message",T:Ft,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),Ci=o.makeMessageType("viam.service.vision.v1.GetPropertiesResponse",()=>[{no:1,name:"classifications_supported",kind:"scalar",T:8},{no:2,name:"detections_supported",kind:"scalar",T:8},{no:3,name:"object_point_clouds_supported",kind:"scalar",T:8}]),Ap=Object.freeze(Object.defineProperty({__proto__:null,CaptureAllFromCameraRequest:Mi,CaptureAllFromCameraResponse:Ni,Classification:st,Detection:at,GetClassificationsFromCameraRequest:Ei,GetClassificationsFromCameraResponse:Ri,GetClassificationsRequest:Si,GetClassificationsResponse:wi,GetDetectionsFromCameraRequest:vi,GetDetectionsFromCameraResponse:bi,GetDetectionsRequest:ki,GetDetectionsResponse:yi,GetObjectPointCloudsRequest:Oi,GetObjectPointCloudsResponse:Ii,GetPropertiesRequest:_i,GetPropertiesResponse:Ci},Symbol.toStringTag,{value:"Module"})),Gp={typeName:"viam.service.vision.v1.VisionService",methods:{getDetectionsFromCamera:{name:"GetDetectionsFromCamera",I:vi,O:bi,kind:i.Unary},getDetections:{name:"GetDetections",I:ki,O:yi,kind:i.Unary},getClassificationsFromCamera:{name:"GetClassificationsFromCamera",I:Ei,O:Ri,kind:i.Unary},getClassifications:{name:"GetClassifications",I:Si,O:wi,kind:i.Unary},getObjectPointClouds:{name:"GetObjectPointClouds",I:Oi,O:Ii,kind:i.Unary},getProperties:{name:"GetProperties",I:_i,O:Ci,kind:i.Unary},captureAllFromCamera:{name:"CaptureAllFromCamera",I:Mi,O:Ni,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},xp=new Blob([`self.onmessage = function(e) { + setTimeout(() => self.postMessage(""), e.data); + };`],{type:"text/javascript"});class Fp{constructor(e,n,a=1e4){this.deferredTransport=e,this.onDisconnect=n,this.heartbeatIntervalMs=a}connecting;get client(){const e=this.deferredTransport();return qe(Jt,e)}heartbeat(){let e;const n=async()=>{try{await this.client.getOperations({})}catch{this.onDisconnect();return}e?e.postMessage(this.heartbeatIntervalMs):setTimeout(()=>{n().catch(console.error)},this.heartbeatIntervalMs)};if(globalThis.Worker!==void 0){const a=window.URL.createObjectURL(xp);e=new Worker(a),URL.revokeObjectURL(a),e.addEventListener("message",()=>{n().catch(console.error)})}n().catch(console.error)}async start(){this.connecting&&await this.connecting,this.connecting=new Promise((e,n)=>{(async()=>{await this.client.getOperations({})})().then(e).catch(n).finally(()=>{this.connecting=void 0})});try{await this.connecting}finally{this.connecting=void 0}this.heartbeat()}}const Hn=o.makeMessageType("grpc.reflection.v1.ServerReflectionRequest",()=>[{no:1,name:"host",kind:"scalar",T:9},{no:3,name:"file_by_filename",kind:"scalar",T:9,oneof:"message_request"},{no:4,name:"file_containing_symbol",kind:"scalar",T:9,oneof:"message_request"},{no:5,name:"file_containing_extension",kind:"message",T:Lp,oneof:"message_request"},{no:6,name:"all_extension_numbers_of_type",kind:"scalar",T:9,oneof:"message_request"},{no:7,name:"list_services",kind:"scalar",T:9,oneof:"message_request"}]),Lp=o.makeMessageType("grpc.reflection.v1.ExtensionRequest",()=>[{no:1,name:"containing_type",kind:"scalar",T:9},{no:2,name:"extension_number",kind:"scalar",T:5}]),qp=o.makeMessageType("grpc.reflection.v1.ServerReflectionResponse",()=>[{no:1,name:"valid_host",kind:"scalar",T:9},{no:2,name:"original_request",kind:"message",T:Hn},{no:4,name:"file_descriptor_response",kind:"message",T:Bp,oneof:"message_response"},{no:5,name:"all_extension_numbers_response",kind:"message",T:Jp,oneof:"message_response"},{no:6,name:"list_services_response",kind:"message",T:jp,oneof:"message_response"},{no:7,name:"error_response",kind:"message",T:Wp,oneof:"message_response"}]),Bp=o.makeMessageType("grpc.reflection.v1.FileDescriptorResponse",()=>[{no:1,name:"file_descriptor_proto",kind:"scalar",T:12,repeated:!0}]),Jp=o.makeMessageType("grpc.reflection.v1.ExtensionNumberResponse",()=>[{no:1,name:"base_type_name",kind:"scalar",T:9},{no:2,name:"extension_number",kind:"scalar",T:5,repeated:!0}]),jp=o.makeMessageType("grpc.reflection.v1.ListServiceResponse",()=>[{no:1,name:"service",kind:"message",T:Vp,repeated:!0}]),Vp=o.makeMessageType("grpc.reflection.v1.ServiceResponse",()=>[{no:1,name:"name",kind:"scalar",T:9}]),Wp=o.makeMessageType("grpc.reflection.v1.ErrorResponse",()=>[{no:1,name:"error_code",kind:"scalar",T:5},{no:2,name:"error_message",kind:"scalar",T:9}]),$p={typeName:"grpc.reflection.v1.ServerReflection",methods:{serverReflectionInfo:{name:"ServerReflectionInfo",I:Hn,O:qp,kind:i.BiDiStreaming}}};class Yp{constructor(e,n){this.deferredTransport=e,this.sessionManager=n}async getSessionMetadata(){try{return await this.sessionManager.getSessionMetadata()}catch(e){throw e instanceof M&&e.code===E.InvalidArgument&&e.message==="SESSION_EXPIRED"&&this.sessionManager.reset(),e}}async unary(e,n,a,s,r,m,c){const l=pn(r),d=`/${e.typeName}/${n.name}`;for(const[p,v]of Et)l.set(p,v);if(Ve.heartbeatMonitoredMethods[d]??!1){const p=await this.getSessionMetadata();for(const[v,S]of p)l.set(v,S)}return this.deferredTransport().unary(e,n,a,s,l,m,c)}async stream(e,n,a,s,r,m,c){const l=pn(r),d=`/${e.typeName}/${n.name}`;for(const[p,v]of Et)l.set(p,v);if(Ve.heartbeatMonitoredMethods[d]??!1){const p=await this.getSessionMetadata();for(const[v,S]of p)l.set(v,S)}return this.deferredTransport().stream(e,n,a,s,l,m,c)}}const Hp=new Blob([`self.onmessage = function(e) { + setTimeout(() => self.postMessage(""), e.data); +};`],{type:"text/javascript"});class Ve{constructor(e,n){this.deferredTransport=n,this.host=e??"",this.transport=new Yp(this.deferredTransport,this)}static heartbeatMonitoredMethods={};transport;currentSessionID="";sessionsSupported;heartbeatIntervalMs;host="";starting;get client(){const e=this.deferredTransport();return qe(Jt,e)}get sessionID(){return this.currentSessionID}setHost(e){this.host=e}getSessionMetadataInner(){const e=new Headers;return this.sessionsSupported&&this.currentSessionID!==""&&e.set("viam-sid",this.currentSessionID),e}reset(){this.starting||(this.sessionsSupported=void 0)}backgroundHeartbeat=!0;async heartbeat(){if(!this.sessionsSupported||this.currentSessionID==="")return;for(;this.starting;)await this.starting;let e;const n=async()=>{const a=new co({id:this.currentSessionID});try{await this.client.sendSessionHeartbeat(a)}catch(s){if(s instanceof M&&s.code===E.Unimplemented){console.error("sessions unsupported; will not try again"),this.sessionsSupported=!1;return}if(s instanceof Ce||s instanceof M&&s.rawMessage==="closed"){this.reset();return}}e?e.postMessage(this.heartbeatIntervalMs):setTimeout(()=>{n().catch(console.error)},this.heartbeatIntervalMs)};if(this.backgroundHeartbeat&&globalThis.Worker!==void 0){const a=window.URL.createObjectURL(Hp);e=new Worker(a),URL.revokeObjectURL(a),e.addEventListener("message",()=>{n().catch(console.error)})}n().catch(console.error)}async getSessionMetadata(){for(;this.starting;)await this.starting;return this.sessionsSupported!==void 0?this.getSessionMetadataInner():(this.starting=new Promise((e,n)=>{(async()=>{const a=new mo;this.currentSessionID!==""&&(a.resume=this.currentSessionID);let s;try{s=await this.client.startSession(a)}catch(m){if(m instanceof M&&m.code===E.Unimplemented){console.error("sessions unsupported; will not try again"),this.sessionsSupported=!1;return}throw m}const{heartbeatWindow:r}=s;if(!r)throw new Error("expected heartbeat window in response to start session");this.sessionsSupported=!0,this.currentSessionID=s.id,this.heartbeatIntervalMs=(Number(r.seconds)*1e3+r.nanos/1e6)/5,await this.applyHeartbeatMonitoredMethods(),e(),this.heartbeat().catch(console.error)})().then(e).catch(n).finally(()=>{this.starting=void 0})}),await this.starting,this.getSessionMetadataInner())}async applyHeartbeatMonitoredMethods(){try{const e=qe($p,this.transport),n=new Hn({host:this.host,messageRequest:{case:"listServices",value:""}}),a=e.serverReflectionInfo(gt([n]),{timeoutMs:1e4});for await(const s of a){const r=s.messageResponse.value.service.map(c=>new Hn({messageRequest:{case:"fileContainingSymbol",value:c.name}})),m=e.serverReflectionInfo(gt(r),{timeoutMs:1e4});for await(const c of m)for(const l of c.messageResponse.value.fileDescriptorProto){const d=ne.fromBinary(l);for(const p of d.service)for(const v of p.method)Ve.heartbeatMonitoredMethods[`/${d.package}.${p.name}/${v.name}`]=Ve.hasHeartbeatOption(v.options)}}}catch{Ve.heartbeatMonitoredMethods={"/viam.component.arm.v1.ArmService/MoveToPosition":!0,"/viam.component.arm.v1.ArmService/MoveToJointPositions":!0,"/viam.component.arm.v1.ArmService/MoveThroughJointPositions":!0,"/viam.component.base.v1.BaseService/MoveStraight":!0,"/viam.component.base.v1.BaseService/Spin":!0,"/viam.component.base.v1.BaseService/SetPower":!0,"/viam.component.base.v1.BaseService/SetVelocity":!0,"/viam.component.gantry.v1.GantryService/MoveToPosition":!0,"/viam.component.gripper.v1.GripperService/Open":!0,"/viam.component.gripper.v1.GripperService/Grab":!0,"/viam.component.motor.v1.MotorService/SetPower":!0,"/viam.component.motor.v1.MotorService/GoFor":!0,"/viam.component.motor.v1.MotorService/GoTo":!0,"/viam.component.motor.v1.MotorService/SetRPM":!0,"/viam.component.servo.v1.ServoService/Move":!0}}}static hasHeartbeatOption(e){if(!e)return!1;const n=new Ga(e.toBinary());for(;n.pos[{no:1,name:"name",kind:"scalar",T:9},{no:3,name:"input_tensors",kind:"message",T:Ui},{no:99,name:"extra",kind:"message",T:h}]),Xp=o.makeMessageType("viam.service.mlmodel.v1.InferResponse",()=>[{no:3,name:"output_tensors",kind:"message",T:Ui}]),Zp=o.makeMessageType("viam.service.mlmodel.v1.MetadataRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Qp=o.makeMessageType("viam.service.mlmodel.v1.MetadataResponse",()=>[{no:1,name:"metadata",kind:"message",T:eg}]),eg=o.makeMessageType("viam.service.mlmodel.v1.Metadata",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"type",kind:"scalar",T:9},{no:3,name:"description",kind:"scalar",T:9},{no:4,name:"input_info",kind:"message",T:Sa,repeated:!0},{no:5,name:"output_info",kind:"message",T:Sa,repeated:!0}]),Sa=o.makeMessageType("viam.service.mlmodel.v1.TensorInfo",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"description",kind:"scalar",T:9},{no:3,name:"data_type",kind:"scalar",T:9},{no:4,name:"shape",kind:"scalar",T:5,repeated:!0},{no:5,name:"associated_files",kind:"message",T:ng,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),ng=o.makeMessageType("viam.service.mlmodel.v1.File",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"description",kind:"scalar",T:9},{no:3,name:"label_type",kind:"enum",T:o.getEnumType(zp)}]),tg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataInt8",()=>[{no:1,name:"data",kind:"scalar",T:12}]),ag=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataUInt8",()=>[{no:1,name:"data",kind:"scalar",T:12}]),sg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataInt16",()=>[{no:1,name:"data",kind:"scalar",T:7,repeated:!0}]),rg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataUInt16",()=>[{no:1,name:"data",kind:"scalar",T:7,repeated:!0}]),og=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataInt32",()=>[{no:1,name:"data",kind:"scalar",T:15,repeated:!0}]),ig=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataUInt32",()=>[{no:1,name:"data",kind:"scalar",T:7,repeated:!0}]),mg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataInt64",()=>[{no:1,name:"data",kind:"scalar",T:16,repeated:!0}]),cg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataUInt64",()=>[{no:1,name:"data",kind:"scalar",T:6,repeated:!0}]),dg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataFloat",()=>[{no:1,name:"data",kind:"scalar",T:2,repeated:!0}]),lg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataDouble",()=>[{no:1,name:"data",kind:"scalar",T:1,repeated:!0}]),ug=o.makeMessageType("viam.service.mlmodel.v1.FlatTensor",()=>[{no:1,name:"shape",kind:"scalar",T:6,repeated:!0},{no:2,name:"int8_tensor",kind:"message",T:tg,oneof:"tensor"},{no:3,name:"uint8_tensor",kind:"message",T:ag,oneof:"tensor"},{no:4,name:"int16_tensor",kind:"message",T:sg,oneof:"tensor"},{no:5,name:"uint16_tensor",kind:"message",T:rg,oneof:"tensor"},{no:6,name:"int32_tensor",kind:"message",T:og,oneof:"tensor"},{no:7,name:"uint32_tensor",kind:"message",T:ig,oneof:"tensor"},{no:8,name:"int64_tensor",kind:"message",T:mg,oneof:"tensor"},{no:9,name:"uint64_tensor",kind:"message",T:cg,oneof:"tensor"},{no:10,name:"float_tensor",kind:"message",T:dg,oneof:"tensor"},{no:11,name:"double_tensor",kind:"message",T:lg,oneof:"tensor"}]),Ui=o.makeMessageType("viam.service.mlmodel.v1.FlatTensors",()=>[{no:1,name:"tensors",kind:"map",K:9,V:{kind:"message",T:ug}}]),pg={typeName:"viam.service.mlmodel.v1.MLModelService",methods:{infer:{name:"Infer",I:Kp,O:Xp,kind:i.Unary},metadata:{name:"Metadata",I:Zp,O:Qp,kind:i.Unary}}},gg=o.makeEnum("viam.service.worldstatestore.v1.TransformChangeType",[{no:0,name:"TRANSFORM_CHANGE_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"TRANSFORM_CHANGE_TYPE_ADDED",localName:"ADDED"},{no:2,name:"TRANSFORM_CHANGE_TYPE_REMOVED",localName:"REMOVED"},{no:3,name:"TRANSFORM_CHANGE_TYPE_UPDATED",localName:"UPDATED"}]),fg=o.makeMessageType("viam.service.worldstatestore.v1.ListUUIDsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Tg=o.makeMessageType("viam.service.worldstatestore.v1.ListUUIDsResponse",()=>[{no:1,name:"uuids",kind:"scalar",T:12,repeated:!0}]),hg=o.makeMessageType("viam.service.worldstatestore.v1.GetTransformRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"uuid",kind:"scalar",T:12},{no:99,name:"extra",kind:"message",T:h}]),kg=o.makeMessageType("viam.service.worldstatestore.v1.GetTransformResponse",()=>[{no:2,name:"transform",kind:"message",T:De}]),yg=o.makeMessageType("viam.service.worldstatestore.v1.StreamTransformChangesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),vg=o.makeMessageType("viam.service.worldstatestore.v1.StreamTransformChangesResponse",()=>[{no:1,name:"change_type",kind:"enum",T:o.getEnumType(gg)},{no:2,name:"transform",kind:"message",T:De},{no:3,name:"updated_fields",kind:"message",T:Ne}]),bg={typeName:"viam.service.worldstatestore.v1.WorldStateStoreService",methods:{listUUIDs:{name:"ListUUIDs",I:fg,O:Tg,kind:i.Unary},getTransform:{name:"GetTransform",I:hg,O:kg,kind:i.Unary},streamTransformChanges:{name:"StreamTransformChanges",I:yg,O:vg,kind:i.ServerStreaming},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},Sg=(t,e)=>{if(t==null)throw new Error(e)},He="Dial operation aborted",wg=t=>{const e=t;return typeof e.signalingAddress!="string"?!1:!e.iceServers||Array.isArray(e.iceServers)},wa=t=>t>0&&Number.isInteger(t),Ea=t=>{if(t instanceof M&&[E.Canceled,E.InvalidArgument,E.NotFound,E.AlreadyExists,E.PermissionDenied,E.FailedPrecondition,E.OutOfRange,E.Unimplemented,E.Unauthenticated].includes(t.code))return!1;if(t instanceof Error){const e=t.message.toLowerCase();if(e.includes("invalid")||e.includes("configuration")||e.includes("cannot dial"))return!1}return!0},Eg=t=>{if(t.credentials&&tt(t.credentials))try{t.credentials.authEntity=new URL(t.credentials.authEntity).host}catch(e){if(!(e instanceof TypeError))throw e}if(t.reconnectMaxAttempts!==void 0&&!wa(t.reconnectMaxAttempts))throw new Error(`Value of max reconnect attempts (${t.reconnectMaxAttempts}) should be a positive integer`);if(t.reconnectMaxWait!==void 0&&!wa(t.reconnectMaxWait))throw new Error(`Value of max reconnect wait (${t.reconnectMaxWait}) should be a positive integer`)},Ra=t=>{if(t instanceof Error&&t.message===He)throw t};class Ke extends Ed{serviceHost="";webrtcOptions={enabled:!1,host:"",signalingAddress:"",rtcConfig:{}};directOptions={};sessionOptions={disabled:!1};gRPCConnectionManager;sessionManager;peerConn;dataChannel;transport;connecting;connectResolve;dialing;currentDialAbortSignal;savedCreds;closed;robotServiceClient;armServiceClient;baseServiceClient;boardServiceClient;encoderServiceClient;gantryServiceClient;genericServiceClient;gripperServiceClient;mlModelServiceClient;movementSensorServiceClient;powerSensorServiceClient;inputControllerServiceClient;motorServiceClient;navigationServiceClient;discoveryServiceClient;motionServiceClient;visionServiceClient;servoServiceClient;slamServiceClient;worldStateStoreServiceClient;currentRetryAttempt=0;onICEConnectionStateChange;onDataChannelClose;onTrack;constructor(e,n,a,s){super(),e!==void 0&&(this.serviceHost=e),n&&(this.webrtcOptions=n),s&&(this.directOptions=s),a&&(this.sessionOptions=a),this.gRPCConnectionManager=new Fp(()=>{if(!this.transport)throw new Error(Ke.notConnectedYetStr);return this.transport},()=>{this.onDisconnect()}),this.sessionManager=new Ve(this.serviceHost,()=>{if(!this.transport)throw new Error(Ke.notConnectedYetStr);return this.transport});for(const r of Object.values(W))this.on(r,()=>{this.emit("connectionstatechange",{eventType:r})});this.closed=!1}cleanupEventListeners(){this.peerConn&&this.onICEConnectionStateChange&&(this.peerConn.removeEventListener("iceconnectionstatechange",this.onICEConnectionStateChange),this.onICEConnectionStateChange=void 0),this.peerConn&&this.onTrack&&(this.peerConn.removeEventListener("track",this.onTrack),this.onTrack=void 0),this.dataChannel&&this.onDataChannelClose&&(this.dataChannel.removeEventListener("close",this.onDataChannelClose),this.onDataChannelClose=void 0)}onDisconnect(e){if(this.emit(W.DISCONNECTED,e??{}),this.noReconnect!==void 0&&this.noReconnect||this.closed)return;console.debug("Connection closed, will try to reconnect");const n={retry:(a,s)=>(console.debug(`Failed to connect, attempt ${s} with backoff`,a),this.currentRetryAttempt=s,this.closed?!1:Ea(a)?!0:(console.debug("Non-retryable error encountered, stopping reconnection attempts",a),!1))};this.reconnectMaxWait!==void 0&&(n.maxDelay=this.reconnectMaxWait),this.reconnectMaxAttempts!==void 0&&(n.numOfAttempts=this.reconnectMaxAttempts),this.currentRetryAttempt=0,dt(async()=>this.connect(),n).then(()=>{console.debug("Reconnected successfully!")}).catch(a=>{if(this.reconnectMaxAttempts!==void 0&&this.currentRetryAttempt>=this.reconnectMaxAttempts){console.debug(`Reached max attempts: ${this.reconnectMaxAttempts}`);return}console.error(a)})}get noReconnect(){return this.webrtcOptions.noReconnect??this.directOptions.noReconnect}get reconnectMaxAttempts(){return this.webrtcOptions.reconnectMaxAttempts??this.directOptions.reconnectMaxAttempts}get reconnectMaxWait(){return this.webrtcOptions.reconnectMaxWait??this.directOptions.reconnectMaxWait}get sessionId(){return this.sessionManager.sessionID}static notConnectedYetStr="not connected yet";get robotService(){if(!this.robotServiceClient)throw new Error(Ke.notConnectedYetStr);return this.robotServiceClient}get armService(){return this.armServiceClient??=this.createServiceClient(Id),this.armServiceClient}get baseService(){return this.baseServiceClient??=this.createServiceClient(Md),this.baseServiceClient}get boardService(){return this.boardServiceClient??=this.createServiceClient(Ud),this.boardServiceClient}get encoderService(){return this.encoderServiceClient??=this.createServiceClient(Dd),this.encoderServiceClient}get gantryService(){return this.gantryServiceClient??=this.createServiceClient(Yd),this.gantryServiceClient}get genericService(){return this.genericServiceClient??=this.createServiceClient(Hd),this.genericServiceClient}get gripperService(){return this.gripperServiceClient??=this.createServiceClient(rl),this.gripperServiceClient}get mlModelService(){return this.mlModelServiceClient??=this.createServiceClient(pg),this.mlModelServiceClient}get movementSensorService(){return this.movementSensorServiceClient??=this.createServiceClient(Cl),this.movementSensorServiceClient}get powerSensorService(){return this.powerSensorServiceClient??=this.createServiceClient(Fl),this.powerSensorServiceClient}get inputControllerService(){return this.inputControllerServiceClient??=this.createServiceClient(ml),this.inputControllerServiceClient}get motorService(){return this.motorServiceClient??=this.createServiceClient(Ml),this.motorServiceClient}get navigationService(){return this.navigationServiceClient??=this.createServiceClient(Ip),this.navigationServiceClient}get discoveryService(){return this.discoveryServiceClient??=this.createServiceClient(wp),this.discoveryServiceClient}get motionService(){return this.motionServiceClient??=this.createServiceClient(Rp),this.motionServiceClient}get visionService(){return this.visionServiceClient??=this.createServiceClient(Gp),this.visionServiceClient}get servoService(){return this.servoServiceClient??=this.createServiceClient(Yl),this.servoServiceClient}get slamService(){return this.slamServiceClient??=this.createServiceClient(Mp),this.slamServiceClient}get worldStateStoreService(){return this.worldStateStoreServiceClient??=this.createServiceClient(bg),this.worldStateStoreServiceClient}createServiceClient(e){return Sg(this.clientTransport,Ke.notConnectedYetStr),qe(e,this.clientTransport)}get peerConnection(){return this.peerConn}get clientTransport(){return this.sessionOptions.disabled?this.transport:this.sessionManager.transport}async dialWebRTC(e,n){if(n?.abort===!0)throw new Error(He);return this.emit(W.DIALING,{method:"webrtc",attempt:this.currentRetryAttempt}),this.serviceHost=e.serviceHost??e.host,this.sessionManager.setHost(this.serviceHost),this.webrtcOptions.enabled=!0,this.webrtcOptions.host=e.host,this.webrtcOptions.signalingAddress=e.signalingAddress,this.webrtcOptions.rtcConfig.iceServers=e.iceServers??[],this.webrtcOptions.noReconnect=e.noReconnect,this.webrtcOptions.reconnectMaxWait=e.reconnectMaxWait,this.webrtcOptions.reconnectMaxAttempts=e.reconnectMaxAttempts,this.sessionOptions.disabled=e.disableSessions??!1,await this.connect({priority:e.priority,dialTimeout:e.dialTimeout??ut,creds:e.credentials,extraHeaders:e.extraHeaders}),this}async dialDirect(e,n){if(n?.abort===!0)throw new Error(He);if(this.emit(W.DIALING,{method:"grpc",attempt:this.currentRetryAttempt}),!e.host.includes("local"))throw new Error(`cannot dial "${e.host}" directly, please use a local url instead.`);return this.serviceHost=e.host,this.sessionManager.setHost(this.serviceHost),this.webrtcOptions.enabled=!1,this.directOptions.noReconnect=e.noReconnect,this.directOptions.reconnectMaxWait=e.reconnectMaxWait,this.directOptions.reconnectMaxAttempts=e.reconnectMaxAttempts,this.sessionOptions.disabled=e.disableSessions??!1,await this.connect({creds:e.credentials,dialTimeout:e.dialTimeout??ut,extraHeaders:e.extraHeaders}),this}resetDialing(e){this.dialing===e&&(this.dialing=void 0,this.currentDialAbortSignal=void 0)}async dial(e){Eg(e),this.dialing&&this.currentDialAbortSignal&&(console.debug("Aborting previous dial attempt due to new dial call"),this.currentDialAbortSignal.abort=!0,this.dialing.catch(()=>{console.debug("Ignored abort error from previous dial")})),this.currentDialAbortSignal={abort:!1};const n=this.performDial(e,this.currentDialAbortSignal,e.reconnectAbortSignal??{abort:!1});this.dialing=n;try{const a=await n;return this.resetDialing(n),a}catch(a){if(this.resetDialing(n),a instanceof Error&&a.message===He)return console.debug(He),this;throw a}}createBackOffOpts({abort:e},{abort:n}){return{retry:(a,s)=>{if(e||n)throw new Error(He);return console.debug(`Failed to connect, attempt ${s} with backoff`,a),this.currentRetryAttempt=s,this.closed?!1:Ea(a)?!0:(console.debug("Non-retryable error encountered, stopping connection attempts",a),!1)}}}async tryWebRTCDial(e,n,a){try{return{dialer:await dt(async()=>this.dialWebRTC(e,n),a)}}catch(s){Ra(s);const r=s instanceof Error?s:new Error(String(s));return console.debug("Failed to connect via WebRTC",r),this.emit(W.DISCONNECTED,{error:r}),{dialer:this,error:r}}}async tryDirectDial(e,n,a){try{return{dialer:await dt(async()=>this.dialDirect(e,n),a)}}catch(s){Ra(s);const r=s instanceof Error?s:new Error(String(s));return console.debug("Failed to connect via gRPC",r),this.emit(W.DISCONNECTED,{error:r}),{dialer:this,error:r}}}async performDial(e,n,a){const s=this.createBackOffOpts(n,a??{abort:!1});e.reconnectMaxWait!==void 0&&(s.maxDelay=e.reconnectMaxWait),s.numOfAttempts=e.noReconnect?1:e.reconnectMaxAttempts,this.currentRetryAttempt=0;const r=[],m=wg(e),c=m?2:1,l=n.abort||a?.abort===!0;if(m&&!l){const{dialer:d,error:p}=await this.tryWebRTCDial(e,n,s);if(!p)return d;r.push(p)}if(this.currentRetryAttempt=0,!(n.abort||a?.abort===!0)){const{dialer:d,error:p}=await this.tryDirectDial(e,n,s);if(!p)return d;r.push(p)}if(r.length===c)throw new Error("Failed to connect via all methods",{cause:r});return this}async disconnect(){for(this.emit(W.DISCONNECTING,{}),this.currentDialAbortSignal&&this.dialing&&(this.currentDialAbortSignal.abort=!0,this.dialing.catch(()=>{console.debug("Ignored abort error from previous dial")}),this.resetDialing(this.dialing));this.connecting;)await this.connecting;this.cleanupEventListeners(),this.peerConn&&(this.peerConn.close(),this.peerConn=void 0),this.dataChannel&&(this.dataChannel.close(),this.dataChannel=void 0),this.sessionManager.reset(),this.closed=!0,this.emit(W.DISCONNECTED,{})}isConnected(){return this.peerConn?.iceConnectionState==="connected"}async connect({creds:e=this.savedCreds,priority:n,dialTimeout:a,extraHeaders:s}={}){if(this.emit(W.CONNECTING,{}),this.closed=!1,this.connecting){for(;this.connecting!==void 0;)await this.connecting;return}this.connecting=new Promise(r=>{this.connectResolve=r}),this.peerConn&&(this.peerConn.close(),this.peerConn=void 0),this.dataChannel&&(this.dataChannel.close(),this.dataChannel=void 0),(!e||e!==this.savedCreds||this.sessionOptions.disabled)&&this.sessionManager.reset();try{const r=new Headers(Et);if(s)for(const[l,d]of Object.entries(s))if(l==="viam_client"&&r.has("viam_client")){const p=r.get("viam_client").replace("typescript;",`typescript(${d});`);r.set("viam_client",p)}else r.set(l,d);const m={webrtcOptions:{disableTrickleICE:!1,rtcConfig:this.webrtcOptions.rtcConfig},dialTimeout:a??ut,extraHeaders:r};if(e&&(tt(e)?m.credentials=e:m.accessToken=e.payload),n!==void 0&&m.webrtcOptions&&(m.webrtcOptions.additionalSdpFields={"x-priority":n}),this.savedCreds=e,this.webrtcOptions.enabled){m.webrtcOptions&&(m.webrtcOptions.signalingCredentials=m.credentials);const l=this.webrtcOptions.signalingAddress||this.serviceHost,d=await fd(l,this.webrtcOptions.host,m,this.serviceHost!==""&&l!==this.serviceHost);this.peerConn=d.peerConnection,this.dataChannel=d.dataChannel,this.cleanupEventListeners(),this.onICEConnectionStateChange=()=>{this.peerConn?.iceConnectionState==="connected"?this.emit(W.CONNECTED,{}):this.peerConn?.iceConnectionState==="closed"&&this.onDisconnect()},this.peerConn.addEventListener("iceconnectionstatechange",this.onICEConnectionStateChange),this.onDataChannelClose=p=>this.onDisconnect(p),this.dataChannel.addEventListener("close",this.onDataChannelClose),this.transport=d.transport,this.onTrack=p=>{const[v]=p.streams;if(!v)throw this.emit("track",p),new Error("expected event stream to exist");const S=v.id.replaceAll("+",":");Object.defineProperty(v,"id",{value:S}),this.emit("track",p)},this.peerConn.addEventListener("track",this.onTrack)}else this.transport=await gs(this.serviceHost,m),await this.gRPCConnectionManager.start();const c=this.sessionOptions.disabled?this.transport:this.sessionManager.transport;this.robotServiceClient=qe(Jt,c),this.emit(W.CONNECTED,{})}catch(r){throw this.emit(W.DISCONNECTED,{}),r}finally{this.connectResolve?.(),this.connectResolve=void 0,this.connecting=void 0}}async getSessions(){return(await this.robotService.getSessions({})).sessions}async getOperations(){return(await this.robotService.getOperations({})).operations}async cancelOperation(e){await this.robotService.cancelOperation({id:e})}async blockForOperation(e){await this.robotService.blockForOperation({id:e})}async stopAll(){await this.robotService.stopAll({})}async frameSystemConfig(e){return(await this.robotService.frameSystemConfig({supplementalTransforms:e})).frameSystemConfigs}async transformPose(e,n,a){const s=new so({source:e,destination:n,supplementalTransforms:a}),r=(await this.robotService.transformPose(s)).pose;if(!r)throw new Error("no pose");return r}async transformPCD(e,n,a){const s=new ro({pointCloudPcd:e,source:n,destination:a});return(await this.robotService.transformPCD(s)).pointCloudPcd}async getModelsFromModules(){const e=new oo({});return(await this.robotService.getModelsFromModules(e)).models}async getCloudMetadata(){return this.robotService.getCloudMetadata({})}async resourceNames(){return(await this.robotService.resourceNames({})).resources}async resourceRPCSubtypes(){return(await this.robotService.resourceRPCSubtypes({})).resourceRpcSubtypes}async getMachineStatus(){return this.robotService.getMachineStatus({})}async getVersion(){return this.robotService.getVersion({})}async restartModule(e,n){const a=new uo;e!==void 0&&(a.idOrName.case="moduleId",a.idOrName.value=e),n!==void 0&&(a.idOrName.case="moduleName",a.idOrName.value=n),await this.robotService.restartModule(a)}async getPose(e,n,a){const s=new po({componentName:e,destinationFrame:n,supplementalTransforms:a}),r=(await this.robotService.getPose(s)).pose;if(!r)throw new Error("no pose");return r}}const Rg=async t=>{const e=await new Ke().dial(t);if(e.isConnected())return e;throw new Error("Failed to connect to robot")};i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.ServerStreaming,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.ClientStreaming,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.ServerStreaming,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;var Pi={},Di={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),(function(e){var n=(function(){function f(k){this._id=new Uint8Array(k)}return f.prototype.buffer=function(){return this._id},f})();e.UUID=n;var a=(function(){function f(k){this._id=new Uint8Array(k)}return f.prototype.buffer=function(){return this._id},f})();e.ObjectId=a;var s=(function(){function f(k){this._time=typeof k!="string"?new Uint8Array(k||b(Date.now())):b(+new Date(k))}return f.prototype.buffer=function(){return this._time},f.prototype.fromString=function(k){this._time=b(+new Date(k))},f.prototype.toNumber=function(){return w(this._time)},f.prototype.toDate=function(){return new Date(w(this._time))},f})();e.UTC=s;function r(f){var k=5;for(var g in f)k+=m(g,f[g]);return k}function m(f,k){var g=1;if(f&&(g+=P(f)+1),k==null)return g;switch(k.constructor){case String:return g+4+P(k)+1;case Number:return Math.floor(k)===k&&k<=2147483647&&k>=-2147483647?g+4:g+8;case Boolean:return g+1;case Array:case Object:return g+r(k);case Int8Array:case Uint8Array:return g+5+k.byteLength;case Date:case s:return g+8;case n:return g+5+16;case a:return g+12;default:return 0}}function c(f){var k=new Uint8Array(r(f));return l(f,k),k}e.serialize=c;function l(f,k,g){if(g===void 0&&(g=0),g+=p(k.length,k,g),f.constructor===Array)for(var T=0,R=f.length;T>>8&255,k[g++]=f>>>16&255,k[g++]=f>>>24&255,4}function v(f,k,g,T){if(k==null)return g[T++]=10,T+=d(f,g,T),T;switch(k.constructor){case String:g[T++]=2,T+=d(f,g,T);var R=d(k,g,T+4);return T+=p(R,g,T),T+R;case Number:if(Math.floor(k)===k)k<=2147483647&&k>=-2147483647?(g[T++]=16,T+=d(f,g,T),T+=p(k,g,T)):(g[T++]=18,T+=d(f,g,T),g.set(b(k),T),T+=8);else{g[T++]=1,T+=d(f,g,T);var O=new Float64Array([k]),H=new Uint8Array(O.buffer);g.set(H,T),T+=8}return T;case Boolean:return g[T++]=8,T+=d(f,g,T),g[T++]=k?1:0,T;case Array:case Object:g[T++]=k.constructor===Array?4:3,T+=d(f,g,T);var C=l(k,g,T);return p(C-T,g,T),C;case Int8Array:case Uint8Array:return g[T++]=5,T+=d(f,g,T),T+=p(k.byteLength,g,T),g[T++]=0,g.set(k,T),T+=k.byteLength,T;case Date:return g[T++]=9,T+=d(f,g,T),g.set(b(k.getTime()),T),T+=8,T;case s:return g[T++]=9,T+=d(f,g,T),g.set(k.buffer(),T),T+=8,T;case n:return g[T++]=5,T+=d(f,g,T),T+=p(16,g,T),g[T++]=4,g.set(k.buffer(),T),T+=16,T;case a:return g[T++]=7,T+=d(f,g,T),g.set(k.buffer(),T),T+=12,T;case RegExp:return g[T++]=11,T+=d(f,g,T),T+=d(k.source,g,T),k.global&&(g[T++]=115),k.ignoreCase&&(g[T++]=105),k.multiline&&(g[T++]=109),g[T++]=0,T;default:return T}}function S(f,k,g,T){if(k===void 0&&(k=!1),g===void 0&&(g=0),T===void 0&&(T=!1),!(f.length<5)){var R=f[g++]|f[g++]<<8|f[g++]<<16|f[g++]<<24;if(!(R<5||R>f.length)&&f[f.length-1]===0){for(var O=T?[]:{};;){var H=f[g++];if(H===0)break;for(var C=g;f[C]!==0&&C=f.length-1)return;var q=N(f.subarray(g,C));switch(T&&(q=parseInt(q)),g=++C,H){case 1:O[q]=new Float64Array(f.slice(g,g+=8).buffer)[0];break;case 2:R=f[g++]|f[g++]<<8|f[g++]<<16|f[g++]<<24,O[q]=N(f.subarray(g,g+=R-1)),g++;break;case 3:R=f[g]|f[g+1]<<8|f[g+2]<<16|f[g+3]<<24,O[q]=S(f,k,g,!1),g+=R;break;case 4:R=f[g]|f[g+1]<<8|f[g+2]<<16|f[g+3]<<24,O[q]=S(f,k,g,!0),g+=R;break;case 5:if(R=f[g++]|f[g++]<<8|f[g++]<<16|f[g++]<<24,f[g++]===4){if(R!==16)return;O[q]=new n(f.subarray(g,g+=R))}else O[q]=f.slice(g,g+=R);break;case 6:O[q]=null;break;case 7:O[q]=new a(f.subarray(g,g+=12));break;case 8:O[q]=f[g++]===1;break;case 9:O[q]=k?new s(f.subarray(g,g+=8)):new Date(w(f.subarray(g,g+=8)));break;case 10:O[q]=null;break;case 11:for(C=g;C=f.length)return;var rt=N(f.subarray(g,C));for(g=C;C=f.length)return;var qi=N(f.subarray(g,C));g=C,O[q]=new RegExp(rt,qi);break;case 16:O[q]=f[g++]|f[g++]<<8|f[g++]<<16|f[g++]<<24;break;case 18:O[q]=w(f.subarray(g,g+=8));break;default:return}}return O}}}e.deserialize=S;function b(f){var k=new Uint8Array(8);if(Math.floor(f)===f){var g=4294967296,T=f%g|0,R=f/g|0;f<0&&(T=~(-f%g)|0,R=~(-f/g)|0,T=T+1&4294967295,T||R++);var O=0;k[O++]=T&255,k[O++]=T>>>8&255,k[O++]=T>>>16&255,k[O++]=T>>>24&255,k[O++]=R&255,k[O++]=R>>>8&255,k[O++]=R>>>16&255,k[O]=R>>>24&255}else{var H=new Float64Array([f]),C=new Uint8Array(H.buffer);k.set(C)}return k}function w(f,k){k===void 0&&(k=0);var g=4294967296,T=f[k++]|f[k++]<<8|f[k++]<<16|f[k++]<<24,R=f[k++]|f[k++]<<8|f[k++]<<16|f[k]<<24;return R*g+(T>=0?T:g+T)}function _(f){f=f.replace(/\r\n/g,` +`);for(var k=[],g=0,T=0,R=f.length;T>>6|192,k[g++]=O&63|128):(k[g++]=O>>>12|224,k[g++]=O>>>6&63|128,k[g++]=O&63|128)}return new Uint8Array(k)}function N(f){for(var k="",g=f.length,T=0,R,O,H;T191&&R<224?(O=f[T+1],k+=String.fromCharCode((R&31)<<6|O&63),T+=2):(O=f[T+1],H=f[T+2],k+=String.fromCharCode((R&15)<<12|(O&63)<<6|H&63),T+=3);return k}function P(f){return encodeURI(f).split(/%..|./).length-1}})(t.BSON||(t.BSON={}))})(Di);Object.defineProperty(Pi,"__esModule",{value:!0});var Og=Di;Pi.BSON=Og.BSON;i.Unary,i.Unary,i.Unary,i.ServerStreaming,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.ClientStreaming,i.ClientStreaming;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;const{JointPositions:Pg}=Od;i.ServerStreaming,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary;const{GetPropertiesResponse:Dg}=_d,{ReadAnalogReaderResponse:Ag,PowerMode:Gg}=Cd;i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;const{GetPropertiesResponse:xg,PositionType:Fg}=Pd,{Capsule:Lg,GeoGeometry:qg,GeoPoint:Bg,GeometriesInFrame:Jg,Geometry:jg,Orientation:Vg,PointCloud:Wg,Pose:$g,PoseInFrame:Yg,RectangularPrism:Hg,ResourceName:zg,Sphere:Kg,Transform:Xg,Vector3:Zg,WorldState:Qg}=Is,{GetAccuracyResponse:ef,GetPositionResponse:nf,GetPropertiesResponse:tf}=Nl;i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary;const{Event:af}=il,{CollisionSpecification:sf,Constraints:rf,LinearConstraint:of,ListPlanStatusesResponse:mf,MotionConfiguration:cf,ObstacleDetector:df,OrientationConstraint:lf}=Ep;i.Unary,i.Unary,i.Unary;const{GetLocationResponse:uf,GetPropertiesResponse:pf,Path:gf,Waypoint:ff}=Op,{GetPositionResponse:Tf,GetPropertiesResponse:hf}=_p,{Classification:kf,Detection:yf}=Ap,{PointCloudObject:vf}=Is;i.ServerStreaming,i.Unary;i.Unary;const Ai=t=>encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),Gi=t=>encodeURIComponent(t).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent),Wt=decodeURIComponent,$t=t=>(t[0]==='"'&&(t=t.slice(1,-1)),t.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent));function Ig(t){return t=Object.assign({},t),typeof t.expires=="number"&&(t.expires=new Date(Date.now()+t.expires*864e5)),t.expires!=null&&(t.expires=t.expires.toUTCString()),Object.entries(t).filter(([e,n])=>n!=null&&n!==!1).map(([e,n])=>n===!0?`; ${e}`:`; ${e}=${n.split(";")[0]}`).join("")}function xi(t,e,n){const a=/(?:^|; )([^=]*)=([^;]*)/g,s={};let r;for(;(r=a.exec(document.cookie))!=null;)try{const m=n(r[1]);if(s[m]=e(r[2],m),t===m)break}catch{}return t!=null?s[t]:s}const Oa=Object.freeze({decodeName:Wt,decodeValue:$t,encodeName:Ai,encodeValue:Gi}),Yt=Object.freeze({path:"/"});function Fi(t,e,n=Yt,{encodeValue:a=Gi,encodeName:s=Ai}={}){return document.cookie=`${s(t)}=${a(e,t)}${Ig(n)}`}function ze(t,{decodeValue:e=$t,decodeName:n=Wt}={}){return xi(t,e,n)}function _g({decodeValue:t=$t,decodeName:e=Wt}={}){return xi(void 0,t,e)}function Mg(t,e=Yt){Fi(t,"",Object.assign({},e,{expires:-1}))}function Ot(t,e){const n={set:function(s,r,m){return Fi(s,r,Object.assign({},this.attributes,m),{encodeValue:this.converter.write})},get:function(s){if(arguments.length===0)return _g(this.converter.read);if(s!=null)return ze(s,this.converter.read)},remove:function(s,r){Mg(s,Object.assign({},this.attributes,r))},withAttributes:function(s){return Ot(this.converter,Object.assign({},this.attributes,s))},withConverter:function(s){return Ot(Object.assign({},this.converter,s),this.attributes)}},a={attributes:{value:Object.freeze(e)},converter:{value:Object.freeze(t)}};return Object.create(n,a)}Ot({read:Oa.decodeValue,write:Oa.encodeValue},Yt);const Ng="default-host";function Cg(){const t=ze("host"),e=ze("api-key-id"),n=ze("api-key");if(t&&e&&n)return{host:t,credentials:{type:"api-key",payload:n,authEntity:e},machineId:null};const a=window.location.pathname.split("/");if(a&&a.length>=3&&a[1]=="machine"){const r=a[2],m=ze(r);if(m)try{const c=JSON.parse(m),l=c?.apiKey?.id,d=c?.apiKey?.key,p=c?.hostname,v=c?.machineId||null;if(p&&l&&d)return{host:p,credentials:{type:"api-key",payload:d,authEntity:l},machineId:v}}catch{}}const s=ze(Ng);if(s)try{const{host:r,id:m,key:c}=JSON.parse(s);if(r&&m&&c)return{host:r,credentials:{type:"api-key",payload:c,authEntity:m},machineId:null}}catch{}return{host:"",credentials:{type:"api-key",payload:"",authEntity:""},machineId:null}}const vn=document.getElementById("status"),Li=document.getElementById("resources"),Ia=document.getElementById("build-info");Ia&&(Ia.textContent="Build: 2026-04-21T16:36:20.509Z");function V(t){console.log("[viam-app] "+t);const e=document.createElement("li");e.textContent=t,e.style.color="#666",e.style.fontSize="12px",Li.appendChild(e)}async function Ug(){V("Starting...");const{host:t,credentials:e,machineId:n}=Cg();if(V("Host: "+(t||"(empty)")),V("API Key ID: "+(e.authEntity?e.authEntity.slice(0,8)+"...":"(empty)")),V("API Key: "+(e.payload?"***"+e.payload.slice(-4):"(empty)")),V("Machine ID: "+(n||"(none)")),V("Credential type: "+e.type),V("Cookies: "+(document.cookie||"(none)")),!t){vn.textContent="No credentials found. Are you running via the local server or app.viam.com?";return}V("Connecting to "+t+" via signaling at https://app.viam.com:443..."),vn.textContent="Connecting to "+t+"...";try{const a=await Rg({host:t,credentials:e,signalingAddress:"https://app.viam.com:443"});V("Connected successfully"),vn.textContent="Connected to "+t,V("Fetching resource names...");const s=await a.resourceNames();V("Found "+s.length+" resources");for(const r of s){const m=document.createElement("li");m.textContent=`${r.namespace}:${r.type}:${r.subtype}/${r.name}`,Li.appendChild(m)}}catch(a){const s=a;V("Connection error: "+s.message),V("Error name: "+s.name),s.stack&&V("Stack: "+s.stack.split(` +`)[1]?.trim()),vn.textContent="Connection failed: "+s.message}}Ug(); From 3d106a6a27d6a29e428ed527fb5a615e76667a7e Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Tue, 21 Apr 2026 13:00:55 -0400 Subject: [PATCH 13/27] remove yarn and bun package mangement support --- cli/module_generate.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index 425007b03d6..d502dadf515 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -418,8 +418,6 @@ func promptAppUser(app *appInputs, moduleLanguage string) error { Options( huh.NewOption("npm", "npm"), huh.NewOption("pnpm", "pnpm"), - huh.NewOption("yarn", "yarn"), - huh.NewOption("bun", "bun"), ). Value(&app.PackageManager), ), From 11a7d8f50a3dd4066d9ca705000577ace87cdc91 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Tue, 21 Apr 2026 14:15:40 -0400 Subject: [PATCH 14/27] Revert to vmodutils for local server Replace inlined HTTP server + cookie injection code with github.com/erh/vmodutils.NewWebModuleAndStart(). The vmodutils package is actively maintained and handles the server lifecycle. make setup fetches the latest vmodutils version via go get. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../_templates/app/tmpl-Makefile | 1 + .../_templates/app/tmpl-module.go | 84 +------------------ 2 files changed, 4 insertions(+), 81 deletions(-) diff --git a/cli/module_generate/_templates/app/tmpl-Makefile b/cli/module_generate/_templates/app/tmpl-Makefile index 08935cce2fc..83d5c3359f9 100644 --- a/cli/module_generate/_templates/app/tmpl-Makefile +++ b/cli/module_generate/_templates/app/tmpl-Makefile @@ -58,6 +58,7 @@ frontend: node_modules dist/index.html: frontend setup: + go get github.com/erh/vmodutils@latest go mod tidy $(INSTALL_NODE) $(INSTALL_PKG_MGR) diff --git a/cli/module_generate/_templates/app/tmpl-module.go b/cli/module_generate/_templates/app/tmpl-module.go index 6274fdc7a2f..0d2b1bdd853 100644 --- a/cli/module_generate/_templates/app/tmpl-module.go +++ b/cli/module_generate/_templates/app/tmpl-module.go @@ -3,11 +3,9 @@ package {{ .ModuleLowercase }} import ( "context" "embed" - "fmt" "io/fs" - "net/http" - "os" + "github.com/erh/vmodutils" "go.viam.com/rdk/components/generic" "go.viam.com/rdk/logging" "go.viam.com/rdk/resource" @@ -28,14 +26,6 @@ type Config struct { Port *int `json:"port,omitempty"` } -type webApp struct { - resource.AlwaysRebuild - - name resource.Name - server *http.Server - logger logging.Logger -} - func init() { resource.RegisterComponent(generic.API, Model, resource.Registration[resource.Resource, *Config]{ @@ -49,84 +39,16 @@ func NewServer(_ context.Context, _ resource.Dependencies, rawConf resource.Conf if err != nil { return nil, err } - return newWebApp(rawConf.ResourceName(), conf, logger) -} -func newWebApp(name resource.Name, conf *Config, logger logging.Logger) (resource.Resource, error) { - distFiles, err := distFS() + fs, err := distFS() if err != nil { return nil, err } - mux := http.NewServeMux() - mux.Handle("/", http.FileServerFS(distFiles)) - - handler := &cookieSetter{ - handler: mux, - logger: logger, - } - handler.addEnvCookie("VIAM_MACHINE_FQDN", "host") - handler.addEnvCookie("VIAM_API_KEY_ID", "api-key-id") - handler.addEnvCookie("VIAM_API_KEY", "api-key") - port := 8888 if conf.Port != nil { port = *conf.Port } - server := &http.Server{ - Addr: fmt.Sprintf(":%d", port), - Handler: handler, - } - - logger.Infof("starting web app server on port %d", port) - go func() { - if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { - logger.Errorf("web app server error: %v", err) - } - }() - - return &webApp{ - name: name, - server: server, - logger: logger, - }, nil -} - -func (w *webApp) Name() resource.Name { - return w.name -} - -func (w *webApp) DoCommand(_ context.Context, _ map[string]interface{}) (map[string]interface{}, error) { - return nil, nil -} - -func (w *webApp) Status(_ context.Context) (map[string]interface{}, error) { - return map[string]interface{}{"status": "running"}, nil -} - -func (w *webApp) Close(_ context.Context) error { - return w.server.Close() -} - -// cookieSetter is an http.Handler that injects credential cookies into every response. -type cookieSetter struct { - handler http.Handler - cookies []*http.Cookie - logger logging.Logger -} - -func (cs *cookieSetter) addEnvCookie(envVar, cookieName string) { - v := os.Getenv(envVar) - if v == "" { - cs.logger.Warnf("no value for env var %s (cookie %s)", envVar, cookieName) - } - cs.cookies = append(cs.cookies, &http.Cookie{Name: cookieName, Value: v}) -} - -func (cs *cookieSetter) ServeHTTP(w http.ResponseWriter, r *http.Request) { - for _, c := range cs.cookies { - http.SetCookie(w, c) - } - cs.handler.ServeHTTP(w, r) + return vmodutils.NewWebModuleAndStart(rawConf.ResourceName(), fs, logger, port) } From 8b3b8c894b36f7889310f15a365986cbded2b5bd Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Tue, 21 Apr 2026 14:43:32 -0400 Subject: [PATCH 15/27] Remove accidentally committed dist assets --- testapp/dist/assets/index-EkW2iQQd.js | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 testapp/dist/assets/index-EkW2iQQd.js diff --git a/testapp/dist/assets/index-EkW2iQQd.js b/testapp/dist/assets/index-EkW2iQQd.js deleted file mode 100644 index b72b8141583..00000000000 --- a/testapp/dist/assets/index-EkW2iQQd.js +++ /dev/null @@ -1,10 +0,0 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const r of s)if(r.type==="childList")for(const m of r.addedNodes)m.tagName==="LINK"&&m.rel==="modulepreload"&&a(m)}).observe(document,{childList:!0,subtree:!0});function n(s){const r={};return s.integrity&&(r.integrity=s.integrity),s.referrerPolicy&&(r.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?r.credentials="include":s.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function a(s){if(s.ep)return;s.ep=!0;const r=n(s);fetch(s.href,r)}})();var Ht={};function U(t,e){if(!t)throw new Error(e)}const Bi=34028234663852886e22,Ji=-34028234663852886e22,ji=4294967295,Vi=2147483647,Wi=-2147483648;function bn(t){if(typeof t!="number")throw new Error("invalid int 32: "+typeof t);if(!Number.isInteger(t)||t>Vi||tji||t<0)throw new Error("invalid uint 32: "+t)}function _a(t){if(typeof t!="number")throw new Error("invalid float 32: "+typeof t);if(Number.isFinite(t)&&(t>Bi||t({no:s.no,name:s.name,localName:t[s.no]})))}function Ca(t,e,n){const a=Object.create(null),s=Object.create(null),r=[];for(const m of e){const c=Ua(m);r.push(c),a[m.name]=c,s[m.no]=c}return{typeName:t,values:r,findName(m){return a[m]},findNumber(m){return s[m]}}}function Yi(t,e,n){const a={};for(const s of e){const r=Ua(s);a[r.localName]=r.no,a[r.no]=r.localName}return Na(a,t,e),a}function Ua(t){return"localName"in t?t:Object.assign(Object.assign({},t),{localName:t.name})}class I{equals(e){return this.getType().runtime.util.equals(this.getType(),this,e)}clone(){return this.getType().runtime.util.clone(this)}fromBinary(e,n){const a=this.getType(),s=a.runtime.bin,r=s.makeReadOptions(n);return s.readMessage(this,r.readerFactory(e),e.byteLength,r),this}fromJson(e,n){const a=this.getType(),s=a.runtime.json,r=s.makeReadOptions(n);return s.readMessage(a,e,r,this),this}fromJsonString(e,n){let a;try{a=JSON.parse(e)}catch(s){throw new Error(`cannot decode ${this.getType().typeName} from JSON: ${s instanceof Error?s.message:String(s)}`)}return this.fromJson(a,n)}toBinary(e){const n=this.getType(),a=n.runtime.bin,s=a.makeWriteOptions(e),r=s.writerFactory();return a.writeMessage(this,r,s),r.finish()}toJson(e){const n=this.getType(),a=n.runtime.json,s=a.makeWriteOptions(e);return a.writeMessage(this,s)}toJsonString(e){var n;const a=this.toJson(e);return JSON.stringify(a,null,(n=e?.prettySpaces)!==null&&n!==void 0?n:0)}toJSON(){return this.toJson({emitDefaultValues:!0})}getType(){return Object.getPrototypeOf(this).constructor}}function Hi(t,e,n,a){var s;const r=(s=a?.localName)!==null&&s!==void 0?s:e.substring(e.lastIndexOf(".")+1),m={[r]:function(c){t.util.initFields(this),t.util.initPartial(c,this)}}[r];return Object.setPrototypeOf(m.prototype,new I),Object.assign(m,{runtime:t,typeName:e,fields:t.util.newFieldList(n),fromBinary(c,l){return new m().fromBinary(c,l)},fromJson(c,l){return new m().fromJson(c,l)},fromJsonString(c,l){return new m().fromJsonString(c,l)},equals(c,l){return t.util.equals(m,c,l)}}),m}function zi(){let t=0,e=0;for(let a=0;a<28;a+=7){let s=this.buf[this.pos++];if(t|=(s&127)<>4,!(n&128))return this.assertBounds(),[t,e];for(let a=3;a<=31;a+=7){let s=this.buf[this.pos++];if(e|=(s&127)<>>r,c=!(!(m>>>7)&&e==0),l=(c?m|128:m)&255;if(n.push(l),!c)return}const a=t>>>28&15|(e&7)<<4,s=!!(e>>3);if(n.push((s?a|128:a)&255),!!s){for(let r=3;r<31;r=r+7){const m=e>>>r,c=!!(m>>>7),l=(c?m|128:m)&255;if(n.push(l),!c)return}n.push(e>>>31&1)}}const Sn=4294967296;function zt(t){const e=t[0]==="-";e&&(t=t.slice(1));const n=1e6;let a=0,s=0;function r(m,c){const l=Number(t.slice(m,c));s*=n,a=a*n+l,a>=Sn&&(s=s+(a/Sn|0),a=a%Sn)}return r(-24,-18),r(-18,-12),r(-12,-6),r(-6),e?Da(a,s):It(a,s)}function Ki(t,e){let n=It(t,e);const a=n.hi&2147483648;a&&(n=Da(n.lo,n.hi));const s=Pa(n.lo,n.hi);return a?"-"+s:s}function Pa(t,e){if({lo:t,hi:e}=Xi(t,e),e<=2097151)return String(Sn*e+t);const n=t&16777215,a=(t>>>24|e<<8)&16777215,s=e>>16&65535;let r=n+a*6777216+s*6710656,m=a+s*8147497,c=s*2;const l=1e7;return r>=l&&(m+=Math.floor(r/l),r%=l),m>=l&&(c+=Math.floor(m/l),m%=l),c.toString()+Kt(m)+Kt(r)}function Xi(t,e){return{lo:t>>>0,hi:e>>>0}}function It(t,e){return{lo:t|0,hi:e|0}}function Da(t,e){return e=~e,t?t=~t+1:e+=1,It(t,e)}const Kt=t=>{const e=String(t);return"0000000".slice(e.length)+e};function Xt(t,e){if(t>=0){for(;t>127;)e.push(t&127|128),t=t>>>7;e.push(t)}else{for(let n=0;n<9;n++)e.push(t&127|128),t=t>>7;e.push(1)}}function Zi(){let t=this.buf[this.pos++],e=t&127;if(!(t&128))return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<7,!(t&128))return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<14,!(t&128))return this.assertBounds(),e;if(t=this.buf[this.pos++],e|=(t&127)<<21,!(t&128))return this.assertBounds(),e;t=this.buf[this.pos++],e|=(t&15)<<28;for(let n=5;t&128&&n<10;n++)t=this.buf[this.pos++];if(t&128)throw new Error("invalid varint");return this.assertBounds(),e>>>0}function Qi(){const t=new DataView(new ArrayBuffer(8));if(typeof BigInt=="function"&&typeof t.getBigInt64=="function"&&typeof t.getBigUint64=="function"&&typeof t.setBigInt64=="function"&&typeof t.setBigUint64=="function"&&(typeof process!="object"||typeof Ht!="object"||Ht.BUF_BIGINT_DISABLE!=="1")){const a=BigInt("-9223372036854775808"),s=BigInt("9223372036854775807"),r=BigInt("0"),m=BigInt("18446744073709551615");return{zero:BigInt(0),supported:!0,parse(c){const l=typeof c=="bigint"?c:BigInt(c);if(l>s||lm||lU(/^-?[0-9]+$/.test(a),`int64 invalid: ${a}`),n=a=>U(/^[0-9]+$/.test(a),`uint64 invalid: ${a}`);return{zero:"0",supported:!1,parse(a){return typeof a!="string"&&(a=a.toString()),e(a),a},uParse(a){return typeof a!="string"&&(a=a.toString()),n(a),a},enc(a){return typeof a!="string"&&(a=a.toString()),e(a),zt(a)},uEnc(a){return typeof a!="string"&&(a=a.toString()),n(a),zt(a)},dec(a,s){return Ki(a,s)},uDec(a,s){return Pa(a,s)}}}const B=Qi();var y;(function(t){t[t.DOUBLE=1]="DOUBLE",t[t.FLOAT=2]="FLOAT",t[t.INT64=3]="INT64",t[t.UINT64=4]="UINT64",t[t.INT32=5]="INT32",t[t.FIXED64=6]="FIXED64",t[t.FIXED32=7]="FIXED32",t[t.BOOL=8]="BOOL",t[t.STRING=9]="STRING",t[t.BYTES=12]="BYTES",t[t.UINT32=13]="UINT32",t[t.SFIXED32=15]="SFIXED32",t[t.SFIXED64=16]="SFIXED64",t[t.SINT32=17]="SINT32",t[t.SINT64=18]="SINT64"})(y||(y={}));var Le;(function(t){t[t.BIGINT=0]="BIGINT",t[t.STRING=1]="STRING"})(Le||(Le={}));function Ae(t,e,n){if(e===n)return!0;if(t==y.BYTES){if(!(e instanceof Uint8Array)||!(n instanceof Uint8Array)||e.length!==n.length)return!1;for(let a=0;a>>0)}raw(e){return this.buf.length&&(this.chunks.push(new Uint8Array(this.buf)),this.buf=[]),this.chunks.push(e),this}uint32(e){for(pt(e);e>127;)this.buf.push(e&127|128),e=e>>>7;return this.buf.push(e),this}int32(e){return bn(e),Xt(e,this.buf),this}bool(e){return this.buf.push(e?1:0),this}bytes(e){return this.uint32(e.byteLength),this.raw(e)}string(e){let n=this.textEncoder.encode(e);return this.uint32(n.byteLength),this.raw(n)}float(e){_a(e);let n=new Uint8Array(4);return new DataView(n.buffer).setFloat32(0,e,!0),this.raw(n)}double(e){let n=new Uint8Array(8);return new DataView(n.buffer).setFloat64(0,e,!0),this.raw(n)}fixed32(e){pt(e);let n=new Uint8Array(4);return new DataView(n.buffer).setUint32(0,e,!0),this.raw(n)}sfixed32(e){bn(e);let n=new Uint8Array(4);return new DataView(n.buffer).setInt32(0,e,!0),this.raw(n)}sint32(e){return bn(e),e=(e<<1^e>>31)>>>0,Xt(e,this.buf),this}sfixed64(e){let n=new Uint8Array(8),a=new DataView(n.buffer),s=B.enc(e);return a.setInt32(0,s.lo,!0),a.setInt32(4,s.hi,!0),this.raw(n)}fixed64(e){let n=new Uint8Array(8),a=new DataView(n.buffer),s=B.uEnc(e);return a.setInt32(0,s.lo,!0),a.setInt32(4,s.hi,!0),this.raw(n)}int64(e){let n=B.enc(e);return ot(n.lo,n.hi,this.buf),this}sint64(e){let n=B.enc(e),a=n.hi>>31,s=n.lo<<1^a,r=(n.hi<<1|n.lo>>>31)^a;return ot(s,r,this.buf),this}uint64(e){let n=B.uEnc(e);return ot(n.lo,n.hi,this.buf),this}}class Ga{constructor(e,n){this.varint64=zi,this.uint32=Zi,this.buf=e,this.len=e.length,this.pos=0,this.view=new DataView(e.buffer,e.byteOffset,e.byteLength),this.textDecoder=n??new TextDecoder}tag(){let e=this.uint32(),n=e>>>3,a=e&7;if(n<=0||a<0||a>5)throw new Error("illegal tag: field no "+n+" wire type "+a);return[n,a]}skip(e,n){let a=this.pos;switch(e){case D.Varint:for(;this.buf[this.pos++]&128;);break;case D.Bit64:this.pos+=4;case D.Bit32:this.pos+=4;break;case D.LengthDelimited:let s=this.uint32();this.pos+=s;break;case D.StartGroup:for(;;){const[r,m]=this.tag();if(m===D.EndGroup){if(n!==void 0&&r!==n)throw new Error("invalid end group tag");break}this.skip(m,r)}break;default:throw new Error("cant skip wire type "+e)}return this.assertBounds(),this.buf.subarray(a,this.pos)}assertBounds(){if(this.pos>this.len)throw new RangeError("premature EOF")}int32(){return this.uint32()|0}sint32(){let e=this.uint32();return e>>>1^-(e&1)}int64(){return B.dec(...this.varint64())}uint64(){return B.uDec(...this.varint64())}sint64(){let[e,n]=this.varint64(),a=-(e&1);return e=(e>>>1|(n&1)<<31)^a,n=n>>>1^a,B.dec(e,n)}bool(){let[e,n]=this.varint64();return e!==0||n!==0}fixed32(){return this.view.getUint32((this.pos+=4)-4,!0)}sfixed32(){return this.view.getInt32((this.pos+=4)-4,!0)}fixed64(){return B.uDec(this.sfixed32(),this.sfixed32())}sfixed64(){return B.dec(this.sfixed32(),this.sfixed32())}float(){return this.view.getFloat32((this.pos+=4)-4,!0)}double(){return this.view.getFloat64((this.pos+=8)-8,!0)}bytes(){let e=this.uint32(),n=this.pos;return this.pos+=e,this.assertBounds(),this.buf.subarray(n,n+e)}string(){return this.textDecoder.decode(this.bytes())}}function nm(t,e,n,a){let s;return{typeName:e,extendee:n,get field(){if(!s){const r=typeof a=="function"?a():a;r.name=e.split(".").pop(),r.jsonName=`[${e}]`,s=t.util.newFieldList([r]).list()[0]}return s},runtime:t}}function xa(t){const e=t.field.localName,n=Object.create(null);return n[e]=tm(t),[n,()=>n[e]]}function tm(t){const e=t.field;if(e.repeated)return[];if(e.default!==void 0)return e.default;switch(e.kind){case"enum":return e.T.values[0].no;case"scalar":return Xe(e.T,e.L);case"message":const n=e.T,a=new n;return n.fieldWrapper?n.fieldWrapper.unwrapField(a):a;case"map":throw"map fields are not allowed to be extensions"}}function am(t,e){if(!e.repeated&&(e.kind=="enum"||e.kind=="scalar")){for(let n=t.length-1;n>=0;--n)if(t[n].no==e.no)return[t[n]];return[]}return t.filter(n=>n.no===e.no)}let ie="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split(""),zn=[];for(let t=0;t>4,m=r,s=2;break;case 2:n[a++]=(m&15)<<4|(r&60)>>2,m=r,s=3;break;case 3:n[a++]=(m&3)<<6|r,s=0;break}}if(s==1)throw Error("invalid base64 string.");return n.subarray(0,a)},enc(t){let e="",n=0,a,s=0;for(let r=0;r>2],s=(a&3)<<4,n=1;break;case 1:e+=ie[s|a>>4],s=(a&15)<<2,n=2;break;case 2:e+=ie[s|a>>6],e+=ie[a&63],n=0;break}return n&&(e+=ie[s],e+="=",n==1&&(e+="=")),e}};function sm(t,e,n){La(e,t);const a=e.runtime.bin.makeReadOptions(n),s=am(t.getType().runtime.bin.listUnknownFields(t),e.field),[r,m]=xa(e);for(const c of s)e.runtime.bin.readField(r,a.readerFactory(c.data),e.field,c.wireType,a);return m()}function rm(t,e,n,a){La(e,t);const s=e.runtime.bin.makeReadOptions(a),r=e.runtime.bin.makeWriteOptions(a);if(Fa(t,e)){const d=t.getType().runtime.bin.listUnknownFields(t).filter(p=>p.no!=e.field.no);t.getType().runtime.bin.discardUnknownFields(t);for(const p of d)t.getType().runtime.bin.onUnknownField(t,p.no,p.wireType,p.data)}const m=r.writerFactory();let c=e.field;!c.opt&&!c.repeated&&(c.kind=="enum"||c.kind=="scalar")&&(c=Object.assign(Object.assign({},e.field),{opt:!0})),e.runtime.bin.writeField(c,n,m,r);const l=s.readerFactory(m.finish());for(;l.posa.no==e.field.no)}function La(t,e){U(t.extendee.typeName==e.getType().typeName,`extension ${t.typeName} can only be applied to message ${t.extendee.typeName}`)}function qa(t,e){const n=t.localName;if(t.repeated)return e[n].length>0;if(t.oneof)return e[t.oneof.localName].case===n;switch(t.kind){case"enum":case"scalar":return t.opt||t.req?e[n]!==void 0:t.kind=="enum"?e[n]!==t.T.values[0].no:!Aa(t.T,e[n]);case"message":return e[n]!==void 0;case"map":return Object.keys(e[n]).length>0}}function Zt(t,e){const n=t.localName,a=!t.opt&&!t.req;if(t.repeated)e[n]=[];else if(t.oneof)e[t.oneof.localName]={case:void 0};else switch(t.kind){case"map":e[n]={};break;case"enum":e[n]=a?t.T.values[0].no:void 0;break;case"scalar":e[n]=a?Xe(t.T,t.L):void 0;break;case"message":e[n]=void 0;break}}function je(t,e){if(t===null||typeof t!="object"||!Object.getOwnPropertyNames(I.prototype).every(a=>a in t&&typeof t[a]=="function"))return!1;const n=t.getType();return n===null||typeof n!="function"||!("typeName"in n)||typeof n.typeName!="string"?!1:e===void 0?!0:n.typeName==e.typeName}function Ba(t,e){return je(e)||!t.fieldWrapper?e:t.fieldWrapper.wrapField(e)}y.DOUBLE,y.FLOAT,y.INT64,y.UINT64,y.INT32,y.UINT32,y.BOOL,y.STRING,y.BYTES;const Qt={ignoreUnknownFields:!1},ea={emitDefaultValues:!1,enumAsInteger:!1,useProtoFieldName:!1,prettySpaces:0};function om(t){return t?Object.assign(Object.assign({},Qt),t):Qt}function im(t){return t?Object.assign(Object.assign({},ea),t):ea}const _n=Symbol(),wn=Symbol();function mm(){return{makeReadOptions:om,makeWriteOptions:im,readMessage(t,e,n,a){if(e==null||Array.isArray(e)||typeof e!="object")throw new Error(`cannot decode message ${t.typeName} from JSON: ${ee(e)}`);a=a??new t;const s=new Map,r=n.typeRegistry;for(const[m,c]of Object.entries(e)){const l=t.fields.findJsonName(m);if(l){if(l.oneof){if(c===null&&l.kind=="scalar")continue;const d=s.get(l.oneof);if(d!==void 0)throw new Error(`cannot decode message ${t.typeName} from JSON: multiple keys for oneof "${l.oneof.name}" present: "${d}", "${m}"`);s.set(l.oneof,m)}na(a,c,l,n,t)}else{let d=!1;if(r?.findExtension&&m.startsWith("[")&&m.endsWith("]")){const p=r.findExtension(m.substring(1,m.length-1));if(p&&p.extendee.typeName==t.typeName){d=!0;const[v,S]=xa(p);na(v,c,p.field,n,p),rm(a,p,S(),n)}}if(!d&&!n.ignoreUnknownFields)throw new Error(`cannot decode message ${t.typeName} from JSON: key "${m}" is unknown`)}}return a},writeMessage(t,e){const n=t.getType(),a={};let s;try{for(s of n.fields.byNumber()){if(!qa(s,t)){if(s.req)throw"required field not set";if(!e.emitDefaultValues||!dm(s))continue}const m=s.oneof?t[s.oneof.localName].value:t[s.localName],c=ta(s,m,e);c!==void 0&&(a[e.useProtoFieldName?s.name:s.jsonName]=c)}const r=e.typeRegistry;if(r?.findExtensionFor)for(const m of n.runtime.bin.listUnknownFields(t)){const c=r.findExtensionFor(n.typeName,m.no);if(c&&Fa(t,c)){const l=sm(t,c,e),d=ta(c.field,l,e);d!==void 0&&(a[c.field.jsonName]=d)}}}catch(r){const m=s?`cannot encode field ${n.typeName}.${s.name} to JSON`:`cannot encode message ${n.typeName} to JSON`,c=r instanceof Error?r.message:String(r);throw new Error(m+(c.length>0?`: ${c}`:""))}return a},readScalar(t,e,n){return an(t,e,n??Le.BIGINT,!0)},writeScalar(t,e,n){if(e!==void 0&&(n||Aa(t,e)))return En(t,e)},debug:ee}}function ee(t){if(t===null)return"null";switch(typeof t){case"object":return Array.isArray(t)?"array":"object";case"string":return t.length>100?"string":`"${t.split('"').join('\\"')}"`;default:return String(t)}}function na(t,e,n,a,s){let r=n.localName;if(n.repeated){if(U(n.kind!="map"),e===null)return;if(!Array.isArray(e))throw new Error(`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(e)}`);const m=t[r];for(const c of e){if(c===null)throw new Error(`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(c)}`);switch(n.kind){case"message":m.push(n.T.fromJson(c,a));break;case"enum":const l=it(n.T,c,a.ignoreUnknownFields,!0);l!==wn&&m.push(l);break;case"scalar":try{m.push(an(n.T,c,n.L,!0))}catch(d){let p=`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(c)}`;throw d instanceof Error&&d.message.length>0&&(p+=`: ${d.message}`),new Error(p)}break}}}else if(n.kind=="map"){if(e===null)return;if(typeof e!="object"||Array.isArray(e))throw new Error(`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(e)}`);const m=t[r];for(const[c,l]of Object.entries(e)){if(l===null)throw new Error(`cannot decode field ${s.typeName}.${n.name} from JSON: map value null`);let d;try{d=cm(n.K,c)}catch(p){let v=`cannot decode map key for field ${s.typeName}.${n.name} from JSON: ${ee(e)}`;throw p instanceof Error&&p.message.length>0&&(v+=`: ${p.message}`),new Error(v)}switch(n.V.kind){case"message":m[d]=n.V.T.fromJson(l,a);break;case"enum":const p=it(n.V.T,l,a.ignoreUnknownFields,!0);p!==wn&&(m[d]=p);break;case"scalar":try{m[d]=an(n.V.T,l,Le.BIGINT,!0)}catch(v){let S=`cannot decode map value for field ${s.typeName}.${n.name} from JSON: ${ee(e)}`;throw v instanceof Error&&v.message.length>0&&(S+=`: ${v.message}`),new Error(S)}break}}}else switch(n.oneof&&(t=t[n.oneof.localName]={case:r},r="value"),n.kind){case"message":const m=n.T;if(e===null&&m.typeName!="google.protobuf.Value")return;let c=t[r];je(c)?c.fromJson(e,a):(t[r]=c=m.fromJson(e,a),m.fieldWrapper&&!n.oneof&&(t[r]=m.fieldWrapper.unwrapField(c)));break;case"enum":const l=it(n.T,e,a.ignoreUnknownFields,!1);switch(l){case _n:Zt(n,t);break;case wn:break;default:t[r]=l;break}break;case"scalar":try{const d=an(n.T,e,n.L,!1);d===_n?Zt(n,t):t[r]=d}catch(d){let p=`cannot decode field ${s.typeName}.${n.name} from JSON: ${ee(e)}`;throw d instanceof Error&&d.message.length>0&&(p+=`: ${d.message}`),new Error(p)}break}}function cm(t,e){if(t===y.BOOL)switch(e){case"true":e=!0;break;case"false":e=!1;break}return an(t,e,Le.BIGINT,!0).toString()}function an(t,e,n,a){if(e===null)return a?Xe(t,n):_n;switch(t){case y.DOUBLE:case y.FLOAT:if(e==="NaN")return Number.NaN;if(e==="Infinity")return Number.POSITIVE_INFINITY;if(e==="-Infinity")return Number.NEGATIVE_INFINITY;if(e===""||typeof e=="string"&&e.trim().length!==e.length||typeof e!="string"&&typeof e!="number")break;const s=Number(e);if(Number.isNaN(s)||!Number.isFinite(s))break;return t==y.FLOAT&&_a(s),s;case y.INT32:case y.FIXED32:case y.SFIXED32:case y.SINT32:case y.UINT32:let r;if(typeof e=="number"?r=e:typeof e=="string"&&e.length>0&&e.trim().length===e.length&&(r=Number(e)),r===void 0)break;return t==y.UINT32||t==y.FIXED32?pt(r):bn(r),r;case y.INT64:case y.SFIXED64:case y.SINT64:if(typeof e!="number"&&typeof e!="string")break;const m=B.parse(e);return n?m.toString():m;case y.FIXED64:case y.UINT64:if(typeof e!="number"&&typeof e!="string")break;const c=B.uParse(e);return n?c.toString():c;case y.BOOL:if(typeof e!="boolean")break;return e;case y.STRING:if(typeof e!="string")break;try{encodeURIComponent(e)}catch{throw new Error("invalid UTF8")}return e;case y.BYTES:if(e==="")return new Uint8Array(0);if(typeof e!="string")break;return _t.dec(e)}throw new Error}function it(t,e,n,a){if(e===null)return t.typeName=="google.protobuf.NullValue"?0:a?t.values[0].no:_n;switch(typeof e){case"number":if(Number.isInteger(e))return e;break;case"string":const s=t.findName(e);if(s!==void 0)return s.no;if(n)return wn;break}throw new Error(`cannot decode enum ${t.typeName} from JSON: ${ee(e)}`)}function dm(t){return t.repeated||t.kind=="map"?!0:!(t.oneof||t.kind=="message"||t.opt||t.req)}function ta(t,e,n){if(t.kind=="map"){U(typeof e=="object"&&e!=null);const a={},s=Object.entries(e);switch(t.V.kind){case"scalar":for(const[m,c]of s)a[m.toString()]=En(t.V.T,c);break;case"message":for(const[m,c]of s)a[m.toString()]=c.toJson(n);break;case"enum":const r=t.V.T;for(const[m,c]of s)a[m.toString()]=mt(r,c,n.enumAsInteger);break}return n.emitDefaultValues||s.length>0?a:void 0}if(t.repeated){U(Array.isArray(e));const a=[];switch(t.kind){case"scalar":for(let s=0;s0?a:void 0}switch(t.kind){case"scalar":return En(t.T,e);case"enum":return mt(t.T,e,n.enumAsInteger);case"message":return Ba(t.T,e).toJson(n)}}function mt(t,e,n){var a;return U(typeof e=="number"),t.typeName=="google.protobuf.NullValue"?null:n?e:(a=t.findNumber(e)?.name)!==null&&a!==void 0?a:e}function En(t,e){switch(t){case y.INT32:case y.SFIXED32:case y.SINT32:case y.FIXED32:case y.UINT32:return U(typeof e=="number"),e;case y.FLOAT:case y.DOUBLE:return U(typeof e=="number"),Number.isNaN(e)?"NaN":e===Number.POSITIVE_INFINITY?"Infinity":e===Number.NEGATIVE_INFINITY?"-Infinity":e;case y.STRING:return U(typeof e=="string"),e;case y.BOOL:return U(typeof e=="boolean"),e;case y.UINT64:case y.FIXED64:case y.INT64:case y.SFIXED64:case y.SINT64:return U(typeof e=="bigint"||typeof e=="string"||typeof e=="number"),e.toString();case y.BYTES:return U(e instanceof Uint8Array),_t.enc(e)}}const Ye=Symbol("@bufbuild/protobuf/unknown-fields"),aa={readUnknownFields:!0,readerFactory:t=>new Ga(t)},sa={writeUnknownFields:!0,writerFactory:()=>new em};function lm(t){return t?Object.assign(Object.assign({},aa),t):aa}function um(t){return t?Object.assign(Object.assign({},sa),t):sa}function pm(){return{makeReadOptions:lm,makeWriteOptions:um,listUnknownFields(t){var e;return(e=t[Ye])!==null&&e!==void 0?e:[]},discardUnknownFields(t){delete t[Ye]},writeUnknownFields(t,e){const n=t[Ye];if(n)for(const a of n)e.tag(a.no,a.wireType).raw(a.data)},onUnknownField(t,e,n,a){const s=t;Array.isArray(s[Ye])||(s[Ye]=[]),s[Ye].push({no:e,wireType:n,data:a})},readMessage(t,e,n,a,s){const r=t.getType(),m=s?e.len:e.pos+n;let c,l;for(;e.pos0&&(l=fm),r){let S=t[m];if(a==D.LengthDelimited&&c!=y.STRING&&c!=y.BYTES){let b=e.uint32()+e.pos;for(;e.posje(S,v)?S:new v(S));else{const S=m[s];v.fieldWrapper?v.typeName==="google.protobuf.BytesValue"?r[s]=nn(S):r[s]=S:r[s]=je(S,v)?S:new v(S)}break}}},equals(t,e,n){return e===n?!0:!e||!n?!1:t.fields.byMember().every(a=>{const s=e[a.localName],r=n[a.localName];if(a.repeated){if(s.length!==r.length)return!1;switch(a.kind){case"message":return s.every((m,c)=>a.T.equals(m,r[c]));case"scalar":return s.every((m,c)=>Ae(a.T,m,r[c]));case"enum":return s.every((m,c)=>Ae(y.INT32,m,r[c]))}throw new Error(`repeated cannot contain ${a.kind}`)}switch(a.kind){case"message":return a.T.equals(s,r);case"enum":return Ae(y.INT32,s,r);case"scalar":return Ae(a.T,s,r);case"oneof":if(s.case!==r.case)return!1;const m=a.findField(s.case);if(m===void 0)return!0;switch(m.kind){case"message":return m.T.equals(s.value,r.value);case"enum":return Ae(y.INT32,s.value,r.value);case"scalar":return Ae(m.T,s.value,r.value)}throw new Error(`oneof cannot contain ${m.kind}`);case"map":const c=Object.keys(s).concat(Object.keys(r));switch(a.V.kind){case"message":const l=a.V.T;return c.every(p=>l.equals(s[p],r[p]));case"enum":return c.every(p=>Ae(y.INT32,s[p],r[p]));case"scalar":const d=a.V.T;return c.every(p=>Ae(d,s[p],r[p]))}break}})},clone(t){const e=t.getType(),n=new e,a=n;for(const s of e.fields.byMember()){const r=t[s.localName];let m;if(s.repeated)m=r.map(kn);else if(s.kind=="map"){m=a[s.localName];for(const[c,l]of Object.entries(r))m[c]=kn(l)}else s.kind=="oneof"?m=s.findField(r.case)?{case:r.case,value:kn(r.value)}:{case:void 0}:m=kn(r);a[s.localName]=m}for(const s of e.runtime.bin.listUnknownFields(t))e.runtime.bin.onUnknownField(a,s.no,s.wireType,s.data);return n}}}function kn(t){if(t===void 0)return t;if(je(t))return t.clone();if(t instanceof Uint8Array){const e=new Uint8Array(t.byteLength);return e.set(t),e}return t}function nn(t){return t instanceof Uint8Array?t:new Uint8Array(t)}function ja(t,e,n){return{syntax:t,json:mm(),bin:pm(),util:Object.assign(Object.assign({},km()),{newFieldList:e,initFields:n}),makeMessageType(a,s,r){return Hi(this,a,s,r)},makeEnum:Yi,makeEnumType:Ca,getEnumType:$i,makeExtension(a,s,r){return nm(this,a,s,r)}}}class Va{constructor(e,n){this._fields=e,this._normalizer=n}findJsonName(e){if(!this.jsonNames){const n={};for(const a of this.list())n[a.jsonName]=n[a.name]=a;this.jsonNames=n}return this.jsonNames[e]}find(e){if(!this.numbers){const n={};for(const a of this.list())n[a.no]=a;this.numbers=n}return this.numbers[e]}list(){return this.all||(this.all=this._normalizer(this._fields)),this.all}byNumber(){return this.numbersAsc||(this.numbersAsc=this.list().concat().sort((e,n)=>e.no-n.no)),this.numbersAsc}byMember(){if(!this.members){this.members=[];const e=this.members;let n;for(const a of this.list())a.oneof?a.oneof!==n&&(n=a.oneof,e.push(n)):e.push(a)}return this.members}}function Wa(t,e){const n=$a(t);return e?n:Em(wm(n))}function ym(t){return Wa(t,!1)}const vm=$a;function $a(t){let e=!1;const n=[];for(let a=0;a`${t}$`,wm=t=>Sm.has(t)?Ya(t):t,Em=t=>bm.has(t)?Ya(t):t;class Rm{constructor(e){this.kind="oneof",this.repeated=!1,this.packed=!1,this.opt=!1,this.req=!1,this.default=void 0,this.fields=[],this.name=e,this.localName=ym(e)}addField(e){U(e.oneof===this,`field ${e.name} not one of ${this.name}`),this.fields.push(e)}findField(e){if(!this._lookup){this._lookup=Object.create(null);for(let n=0;nnew Va(t,e=>Ha(e,!0)),t=>{for(const e of t.getType().fields.byMember()){if(e.opt)continue;const n=e.localName,a=t;if(e.repeated){a[n]=[];continue}switch(e.kind){case"oneof":a[n]={case:void 0};break;case"enum":a[n]=0;break;case"map":a[n]={};break;case"scalar":a[n]=Xe(e.T,e.L);break}}}),u=ja("proto2",t=>new Va(t,e=>Ha(e,!1)),t=>{for(const e of t.getType().fields.byMember()){const n=e.localName,a=t;if(e.repeated){a[n]=[];continue}switch(e.kind){case"oneof":a[n]={case:void 0};break;case"map":a[n]={};break}}});var i;(function(t){t[t.Unary=0]="Unary",t[t.ServerStreaming=1]="ServerStreaming",t[t.ClientStreaming=2]="ClientStreaming",t[t.BiDiStreaming=3]="BiDiStreaming"})(i||(i={}));var ma;(function(t){t[t.NoSideEffects=1]="NoSideEffects",t[t.Idempotent=2]="Idempotent"})(ma||(ma={}));var Q;(function(t){t[t.EDITION_UNKNOWN=0]="EDITION_UNKNOWN",t[t.EDITION_LEGACY=900]="EDITION_LEGACY",t[t.EDITION_PROTO2=998]="EDITION_PROTO2",t[t.EDITION_PROTO3=999]="EDITION_PROTO3",t[t.EDITION_2023=1e3]="EDITION_2023",t[t.EDITION_2024=1001]="EDITION_2024",t[t.EDITION_1_TEST_ONLY=1]="EDITION_1_TEST_ONLY",t[t.EDITION_2_TEST_ONLY=2]="EDITION_2_TEST_ONLY",t[t.EDITION_99997_TEST_ONLY=99997]="EDITION_99997_TEST_ONLY",t[t.EDITION_99998_TEST_ONLY=99998]="EDITION_99998_TEST_ONLY",t[t.EDITION_99999_TEST_ONLY=99999]="EDITION_99999_TEST_ONLY",t[t.EDITION_MAX=2147483647]="EDITION_MAX"})(Q||(Q={}));u.util.setEnumType(Q,"google.protobuf.Edition",[{no:0,name:"EDITION_UNKNOWN"},{no:900,name:"EDITION_LEGACY"},{no:998,name:"EDITION_PROTO2"},{no:999,name:"EDITION_PROTO3"},{no:1e3,name:"EDITION_2023"},{no:1001,name:"EDITION_2024"},{no:1,name:"EDITION_1_TEST_ONLY"},{no:2,name:"EDITION_2_TEST_ONLY"},{no:99997,name:"EDITION_99997_TEST_ONLY"},{no:99998,name:"EDITION_99998_TEST_ONLY"},{no:99999,name:"EDITION_99999_TEST_ONLY"},{no:2147483647,name:"EDITION_MAX"}]);class Ge extends I{constructor(e){super(),this.file=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Ge().fromBinary(e,n)}static fromJson(e,n){return new Ge().fromJson(e,n)}static fromJsonString(e,n){return new Ge().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Ge,e,n)}}Ge.runtime=u;Ge.typeName="google.protobuf.FileDescriptorSet";Ge.fields=u.util.newFieldList(()=>[{no:1,name:"file",kind:"message",T:ne,repeated:!0}]);class ne extends I{constructor(e){super(),this.dependency=[],this.publicDependency=[],this.weakDependency=[],this.messageType=[],this.enumType=[],this.service=[],this.extension=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new ne().fromBinary(e,n)}static fromJson(e,n){return new ne().fromJson(e,n)}static fromJsonString(e,n){return new ne().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ne,e,n)}}ne.runtime=u;ne.typeName="google.protobuf.FileDescriptorProto";ne.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"package",kind:"scalar",T:9,opt:!0},{no:3,name:"dependency",kind:"scalar",T:9,repeated:!0},{no:10,name:"public_dependency",kind:"scalar",T:5,repeated:!0},{no:11,name:"weak_dependency",kind:"scalar",T:5,repeated:!0},{no:4,name:"message_type",kind:"message",T:te,repeated:!0},{no:5,name:"enum_type",kind:"message",T:ae,repeated:!0},{no:6,name:"service",kind:"message",T:fe,repeated:!0},{no:7,name:"extension",kind:"message",T:Z,repeated:!0},{no:8,name:"options",kind:"message",T:he,opt:!0},{no:9,name:"source_code_info",kind:"message",T:Ie,opt:!0},{no:12,name:"syntax",kind:"scalar",T:9,opt:!0},{no:14,name:"edition",kind:"enum",T:u.getEnumType(Q),opt:!0}]);class te extends I{constructor(e){super(),this.field=[],this.extension=[],this.nestedType=[],this.enumType=[],this.extensionRange=[],this.oneofDecl=[],this.reservedRange=[],this.reservedName=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new te().fromBinary(e,n)}static fromJson(e,n){return new te().fromJson(e,n)}static fromJsonString(e,n){return new te().fromJsonString(e,n)}static equals(e,n){return u.util.equals(te,e,n)}}te.runtime=u;te.typeName="google.protobuf.DescriptorProto";te.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"field",kind:"message",T:Z,repeated:!0},{no:6,name:"extension",kind:"message",T:Z,repeated:!0},{no:3,name:"nested_type",kind:"message",T:te,repeated:!0},{no:4,name:"enum_type",kind:"message",T:ae,repeated:!0},{no:5,name:"extension_range",kind:"message",T:me,repeated:!0},{no:8,name:"oneof_decl",kind:"message",T:ue,repeated:!0},{no:7,name:"options",kind:"message",T:ke,opt:!0},{no:9,name:"reserved_range",kind:"message",T:ce,repeated:!0},{no:10,name:"reserved_name",kind:"scalar",T:9,repeated:!0}]);class me extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new me().fromBinary(e,n)}static fromJson(e,n){return new me().fromJson(e,n)}static fromJsonString(e,n){return new me().fromJsonString(e,n)}static equals(e,n){return u.util.equals(me,e,n)}}me.runtime=u;me.typeName="google.protobuf.DescriptorProto.ExtensionRange";me.fields=u.util.newFieldList(()=>[{no:1,name:"start",kind:"scalar",T:5,opt:!0},{no:2,name:"end",kind:"scalar",T:5,opt:!0},{no:3,name:"options",kind:"message",T:de,opt:!0}]);class ce extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new ce().fromBinary(e,n)}static fromJson(e,n){return new ce().fromJson(e,n)}static fromJsonString(e,n){return new ce().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ce,e,n)}}ce.runtime=u;ce.typeName="google.protobuf.DescriptorProto.ReservedRange";ce.fields=u.util.newFieldList(()=>[{no:1,name:"start",kind:"scalar",T:5,opt:!0},{no:2,name:"end",kind:"scalar",T:5,opt:!0}]);class de extends I{constructor(e){super(),this.uninterpretedOption=[],this.declaration=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new de().fromBinary(e,n)}static fromJson(e,n){return new de().fromJson(e,n)}static fromJsonString(e,n){return new de().fromJsonString(e,n)}static equals(e,n){return u.util.equals(de,e,n)}}de.runtime=u;de.typeName="google.protobuf.ExtensionRangeOptions";de.fields=u.util.newFieldList(()=>[{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0},{no:2,name:"declaration",kind:"message",T:le,repeated:!0},{no:50,name:"features",kind:"message",T:x,opt:!0},{no:3,name:"verification",kind:"enum",T:u.getEnumType(rn),opt:!0,default:rn.UNVERIFIED}]);var rn;(function(t){t[t.DECLARATION=0]="DECLARATION",t[t.UNVERIFIED=1]="UNVERIFIED"})(rn||(rn={}));u.util.setEnumType(rn,"google.protobuf.ExtensionRangeOptions.VerificationState",[{no:0,name:"DECLARATION"},{no:1,name:"UNVERIFIED"}]);class le extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new le().fromBinary(e,n)}static fromJson(e,n){return new le().fromJson(e,n)}static fromJsonString(e,n){return new le().fromJsonString(e,n)}static equals(e,n){return u.util.equals(le,e,n)}}le.runtime=u;le.typeName="google.protobuf.ExtensionRangeOptions.Declaration";le.fields=u.util.newFieldList(()=>[{no:1,name:"number",kind:"scalar",T:5,opt:!0},{no:2,name:"full_name",kind:"scalar",T:9,opt:!0},{no:3,name:"type",kind:"scalar",T:9,opt:!0},{no:5,name:"reserved",kind:"scalar",T:8,opt:!0},{no:6,name:"repeated",kind:"scalar",T:8,opt:!0}]);class Z extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new Z().fromBinary(e,n)}static fromJson(e,n){return new Z().fromJson(e,n)}static fromJsonString(e,n){return new Z().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Z,e,n)}}Z.runtime=u;Z.typeName="google.protobuf.FieldDescriptorProto";Z.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:3,name:"number",kind:"scalar",T:5,opt:!0},{no:4,name:"label",kind:"enum",T:u.getEnumType(Cn),opt:!0},{no:5,name:"type",kind:"enum",T:u.getEnumType(Nn),opt:!0},{no:6,name:"type_name",kind:"scalar",T:9,opt:!0},{no:2,name:"extendee",kind:"scalar",T:9,opt:!0},{no:7,name:"default_value",kind:"scalar",T:9,opt:!0},{no:9,name:"oneof_index",kind:"scalar",T:5,opt:!0},{no:10,name:"json_name",kind:"scalar",T:9,opt:!0},{no:8,name:"options",kind:"message",T:ye,opt:!0},{no:17,name:"proto3_optional",kind:"scalar",T:8,opt:!0}]);var Nn;(function(t){t[t.DOUBLE=1]="DOUBLE",t[t.FLOAT=2]="FLOAT",t[t.INT64=3]="INT64",t[t.UINT64=4]="UINT64",t[t.INT32=5]="INT32",t[t.FIXED64=6]="FIXED64",t[t.FIXED32=7]="FIXED32",t[t.BOOL=8]="BOOL",t[t.STRING=9]="STRING",t[t.GROUP=10]="GROUP",t[t.MESSAGE=11]="MESSAGE",t[t.BYTES=12]="BYTES",t[t.UINT32=13]="UINT32",t[t.ENUM=14]="ENUM",t[t.SFIXED32=15]="SFIXED32",t[t.SFIXED64=16]="SFIXED64",t[t.SINT32=17]="SINT32",t[t.SINT64=18]="SINT64"})(Nn||(Nn={}));u.util.setEnumType(Nn,"google.protobuf.FieldDescriptorProto.Type",[{no:1,name:"TYPE_DOUBLE"},{no:2,name:"TYPE_FLOAT"},{no:3,name:"TYPE_INT64"},{no:4,name:"TYPE_UINT64"},{no:5,name:"TYPE_INT32"},{no:6,name:"TYPE_FIXED64"},{no:7,name:"TYPE_FIXED32"},{no:8,name:"TYPE_BOOL"},{no:9,name:"TYPE_STRING"},{no:10,name:"TYPE_GROUP"},{no:11,name:"TYPE_MESSAGE"},{no:12,name:"TYPE_BYTES"},{no:13,name:"TYPE_UINT32"},{no:14,name:"TYPE_ENUM"},{no:15,name:"TYPE_SFIXED32"},{no:16,name:"TYPE_SFIXED64"},{no:17,name:"TYPE_SINT32"},{no:18,name:"TYPE_SINT64"}]);var Cn;(function(t){t[t.OPTIONAL=1]="OPTIONAL",t[t.REPEATED=3]="REPEATED",t[t.REQUIRED=2]="REQUIRED"})(Cn||(Cn={}));u.util.setEnumType(Cn,"google.protobuf.FieldDescriptorProto.Label",[{no:1,name:"LABEL_OPTIONAL"},{no:3,name:"LABEL_REPEATED"},{no:2,name:"LABEL_REQUIRED"}]);class ue extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new ue().fromBinary(e,n)}static fromJson(e,n){return new ue().fromJson(e,n)}static fromJsonString(e,n){return new ue().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ue,e,n)}}ue.runtime=u;ue.typeName="google.protobuf.OneofDescriptorProto";ue.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"options",kind:"message",T:be,opt:!0}]);class ae extends I{constructor(e){super(),this.value=[],this.reservedRange=[],this.reservedName=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new ae().fromBinary(e,n)}static fromJson(e,n){return new ae().fromJson(e,n)}static fromJsonString(e,n){return new ae().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ae,e,n)}}ae.runtime=u;ae.typeName="google.protobuf.EnumDescriptorProto";ae.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"value",kind:"message",T:ge,repeated:!0},{no:3,name:"options",kind:"message",T:Se,opt:!0},{no:4,name:"reserved_range",kind:"message",T:pe,repeated:!0},{no:5,name:"reserved_name",kind:"scalar",T:9,repeated:!0}]);class pe extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new pe().fromBinary(e,n)}static fromJson(e,n){return new pe().fromJson(e,n)}static fromJsonString(e,n){return new pe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(pe,e,n)}}pe.runtime=u;pe.typeName="google.protobuf.EnumDescriptorProto.EnumReservedRange";pe.fields=u.util.newFieldList(()=>[{no:1,name:"start",kind:"scalar",T:5,opt:!0},{no:2,name:"end",kind:"scalar",T:5,opt:!0}]);class ge extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new ge().fromBinary(e,n)}static fromJson(e,n){return new ge().fromJson(e,n)}static fromJsonString(e,n){return new ge().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ge,e,n)}}ge.runtime=u;ge.typeName="google.protobuf.EnumValueDescriptorProto";ge.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"number",kind:"scalar",T:5,opt:!0},{no:3,name:"options",kind:"message",T:we,opt:!0}]);class fe extends I{constructor(e){super(),this.method=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new fe().fromBinary(e,n)}static fromJson(e,n){return new fe().fromJson(e,n)}static fromJsonString(e,n){return new fe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(fe,e,n)}}fe.runtime=u;fe.typeName="google.protobuf.ServiceDescriptorProto";fe.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"method",kind:"message",T:Te,repeated:!0},{no:3,name:"options",kind:"message",T:Ee,opt:!0}]);class Te extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new Te().fromBinary(e,n)}static fromJson(e,n){return new Te().fromJson(e,n)}static fromJsonString(e,n){return new Te().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Te,e,n)}}Te.runtime=u;Te.typeName="google.protobuf.MethodDescriptorProto";Te.fields=u.util.newFieldList(()=>[{no:1,name:"name",kind:"scalar",T:9,opt:!0},{no:2,name:"input_type",kind:"scalar",T:9,opt:!0},{no:3,name:"output_type",kind:"scalar",T:9,opt:!0},{no:4,name:"options",kind:"message",T:re,opt:!0},{no:5,name:"client_streaming",kind:"scalar",T:8,opt:!0,default:!1},{no:6,name:"server_streaming",kind:"scalar",T:8,opt:!0,default:!1}]);class he extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new he().fromBinary(e,n)}static fromJson(e,n){return new he().fromJson(e,n)}static fromJsonString(e,n){return new he().fromJsonString(e,n)}static equals(e,n){return u.util.equals(he,e,n)}}he.runtime=u;he.typeName="google.protobuf.FileOptions";he.fields=u.util.newFieldList(()=>[{no:1,name:"java_package",kind:"scalar",T:9,opt:!0},{no:8,name:"java_outer_classname",kind:"scalar",T:9,opt:!0},{no:10,name:"java_multiple_files",kind:"scalar",T:8,opt:!0,default:!1},{no:20,name:"java_generate_equals_and_hash",kind:"scalar",T:8,opt:!0},{no:27,name:"java_string_check_utf8",kind:"scalar",T:8,opt:!0,default:!1},{no:9,name:"optimize_for",kind:"enum",T:u.getEnumType(on),opt:!0,default:on.SPEED},{no:11,name:"go_package",kind:"scalar",T:9,opt:!0},{no:16,name:"cc_generic_services",kind:"scalar",T:8,opt:!0,default:!1},{no:17,name:"java_generic_services",kind:"scalar",T:8,opt:!0,default:!1},{no:18,name:"py_generic_services",kind:"scalar",T:8,opt:!0,default:!1},{no:23,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:31,name:"cc_enable_arenas",kind:"scalar",T:8,opt:!0,default:!0},{no:36,name:"objc_class_prefix",kind:"scalar",T:9,opt:!0},{no:37,name:"csharp_namespace",kind:"scalar",T:9,opt:!0},{no:39,name:"swift_prefix",kind:"scalar",T:9,opt:!0},{no:40,name:"php_class_prefix",kind:"scalar",T:9,opt:!0},{no:41,name:"php_namespace",kind:"scalar",T:9,opt:!0},{no:44,name:"php_metadata_namespace",kind:"scalar",T:9,opt:!0},{no:45,name:"ruby_package",kind:"scalar",T:9,opt:!0},{no:50,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);var on;(function(t){t[t.SPEED=1]="SPEED",t[t.CODE_SIZE=2]="CODE_SIZE",t[t.LITE_RUNTIME=3]="LITE_RUNTIME"})(on||(on={}));u.util.setEnumType(on,"google.protobuf.FileOptions.OptimizeMode",[{no:1,name:"SPEED"},{no:2,name:"CODE_SIZE"},{no:3,name:"LITE_RUNTIME"}]);class ke extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new ke().fromBinary(e,n)}static fromJson(e,n){return new ke().fromJson(e,n)}static fromJsonString(e,n){return new ke().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ke,e,n)}}ke.runtime=u;ke.typeName="google.protobuf.MessageOptions";ke.fields=u.util.newFieldList(()=>[{no:1,name:"message_set_wire_format",kind:"scalar",T:8,opt:!0,default:!1},{no:2,name:"no_standard_descriptor_accessor",kind:"scalar",T:8,opt:!0,default:!1},{no:3,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:7,name:"map_entry",kind:"scalar",T:8,opt:!0},{no:11,name:"deprecated_legacy_json_field_conflicts",kind:"scalar",T:8,opt:!0},{no:12,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class ye extends I{constructor(e){super(),this.targets=[],this.editionDefaults=[],this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new ye().fromBinary(e,n)}static fromJson(e,n){return new ye().fromJson(e,n)}static fromJsonString(e,n){return new ye().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ye,e,n)}}ye.runtime=u;ye.typeName="google.protobuf.FieldOptions";ye.fields=u.util.newFieldList(()=>[{no:1,name:"ctype",kind:"enum",T:u.getEnumType(mn),opt:!0,default:mn.STRING},{no:2,name:"packed",kind:"scalar",T:8,opt:!0},{no:6,name:"jstype",kind:"enum",T:u.getEnumType(cn),opt:!0,default:cn.JS_NORMAL},{no:5,name:"lazy",kind:"scalar",T:8,opt:!0,default:!1},{no:15,name:"unverified_lazy",kind:"scalar",T:8,opt:!0,default:!1},{no:3,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:10,name:"weak",kind:"scalar",T:8,opt:!0,default:!1},{no:16,name:"debug_redact",kind:"scalar",T:8,opt:!0,default:!1},{no:17,name:"retention",kind:"enum",T:u.getEnumType(Un),opt:!0},{no:19,name:"targets",kind:"enum",T:u.getEnumType(Pn),repeated:!0},{no:20,name:"edition_defaults",kind:"message",T:ve,repeated:!0},{no:21,name:"features",kind:"message",T:x,opt:!0},{no:22,name:"feature_support",kind:"message",T:se,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);var mn;(function(t){t[t.STRING=0]="STRING",t[t.CORD=1]="CORD",t[t.STRING_PIECE=2]="STRING_PIECE"})(mn||(mn={}));u.util.setEnumType(mn,"google.protobuf.FieldOptions.CType",[{no:0,name:"STRING"},{no:1,name:"CORD"},{no:2,name:"STRING_PIECE"}]);var cn;(function(t){t[t.JS_NORMAL=0]="JS_NORMAL",t[t.JS_STRING=1]="JS_STRING",t[t.JS_NUMBER=2]="JS_NUMBER"})(cn||(cn={}));u.util.setEnumType(cn,"google.protobuf.FieldOptions.JSType",[{no:0,name:"JS_NORMAL"},{no:1,name:"JS_STRING"},{no:2,name:"JS_NUMBER"}]);var Un;(function(t){t[t.RETENTION_UNKNOWN=0]="RETENTION_UNKNOWN",t[t.RETENTION_RUNTIME=1]="RETENTION_RUNTIME",t[t.RETENTION_SOURCE=2]="RETENTION_SOURCE"})(Un||(Un={}));u.util.setEnumType(Un,"google.protobuf.FieldOptions.OptionRetention",[{no:0,name:"RETENTION_UNKNOWN"},{no:1,name:"RETENTION_RUNTIME"},{no:2,name:"RETENTION_SOURCE"}]);var Pn;(function(t){t[t.TARGET_TYPE_UNKNOWN=0]="TARGET_TYPE_UNKNOWN",t[t.TARGET_TYPE_FILE=1]="TARGET_TYPE_FILE",t[t.TARGET_TYPE_EXTENSION_RANGE=2]="TARGET_TYPE_EXTENSION_RANGE",t[t.TARGET_TYPE_MESSAGE=3]="TARGET_TYPE_MESSAGE",t[t.TARGET_TYPE_FIELD=4]="TARGET_TYPE_FIELD",t[t.TARGET_TYPE_ONEOF=5]="TARGET_TYPE_ONEOF",t[t.TARGET_TYPE_ENUM=6]="TARGET_TYPE_ENUM",t[t.TARGET_TYPE_ENUM_ENTRY=7]="TARGET_TYPE_ENUM_ENTRY",t[t.TARGET_TYPE_SERVICE=8]="TARGET_TYPE_SERVICE",t[t.TARGET_TYPE_METHOD=9]="TARGET_TYPE_METHOD"})(Pn||(Pn={}));u.util.setEnumType(Pn,"google.protobuf.FieldOptions.OptionTargetType",[{no:0,name:"TARGET_TYPE_UNKNOWN"},{no:1,name:"TARGET_TYPE_FILE"},{no:2,name:"TARGET_TYPE_EXTENSION_RANGE"},{no:3,name:"TARGET_TYPE_MESSAGE"},{no:4,name:"TARGET_TYPE_FIELD"},{no:5,name:"TARGET_TYPE_ONEOF"},{no:6,name:"TARGET_TYPE_ENUM"},{no:7,name:"TARGET_TYPE_ENUM_ENTRY"},{no:8,name:"TARGET_TYPE_SERVICE"},{no:9,name:"TARGET_TYPE_METHOD"}]);class ve extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new ve().fromBinary(e,n)}static fromJson(e,n){return new ve().fromJson(e,n)}static fromJsonString(e,n){return new ve().fromJsonString(e,n)}static equals(e,n){return u.util.equals(ve,e,n)}}ve.runtime=u;ve.typeName="google.protobuf.FieldOptions.EditionDefault";ve.fields=u.util.newFieldList(()=>[{no:3,name:"edition",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:2,name:"value",kind:"scalar",T:9,opt:!0}]);class se extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new se().fromBinary(e,n)}static fromJson(e,n){return new se().fromJson(e,n)}static fromJsonString(e,n){return new se().fromJsonString(e,n)}static equals(e,n){return u.util.equals(se,e,n)}}se.runtime=u;se.typeName="google.protobuf.FieldOptions.FeatureSupport";se.fields=u.util.newFieldList(()=>[{no:1,name:"edition_introduced",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:2,name:"edition_deprecated",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:3,name:"deprecation_warning",kind:"scalar",T:9,opt:!0},{no:4,name:"edition_removed",kind:"enum",T:u.getEnumType(Q),opt:!0}]);class be extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new be().fromBinary(e,n)}static fromJson(e,n){return new be().fromJson(e,n)}static fromJsonString(e,n){return new be().fromJsonString(e,n)}static equals(e,n){return u.util.equals(be,e,n)}}be.runtime=u;be.typeName="google.protobuf.OneofOptions";be.fields=u.util.newFieldList(()=>[{no:1,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class Se extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Se().fromBinary(e,n)}static fromJson(e,n){return new Se().fromJson(e,n)}static fromJsonString(e,n){return new Se().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Se,e,n)}}Se.runtime=u;Se.typeName="google.protobuf.EnumOptions";Se.fields=u.util.newFieldList(()=>[{no:2,name:"allow_alias",kind:"scalar",T:8,opt:!0},{no:3,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:6,name:"deprecated_legacy_json_field_conflicts",kind:"scalar",T:8,opt:!0},{no:7,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class we extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new we().fromBinary(e,n)}static fromJson(e,n){return new we().fromJson(e,n)}static fromJsonString(e,n){return new we().fromJsonString(e,n)}static equals(e,n){return u.util.equals(we,e,n)}}we.runtime=u;we.typeName="google.protobuf.EnumValueOptions";we.fields=u.util.newFieldList(()=>[{no:1,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:2,name:"features",kind:"message",T:x,opt:!0},{no:3,name:"debug_redact",kind:"scalar",T:8,opt:!0,default:!1},{no:4,name:"feature_support",kind:"message",T:se,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class Ee extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Ee().fromBinary(e,n)}static fromJson(e,n){return new Ee().fromJson(e,n)}static fromJsonString(e,n){return new Ee().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Ee,e,n)}}Ee.runtime=u;Ee.typeName="google.protobuf.ServiceOptions";Ee.fields=u.util.newFieldList(()=>[{no:34,name:"features",kind:"message",T:x,opt:!0},{no:33,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);class re extends I{constructor(e){super(),this.uninterpretedOption=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new re().fromBinary(e,n)}static fromJson(e,n){return new re().fromJson(e,n)}static fromJsonString(e,n){return new re().fromJsonString(e,n)}static equals(e,n){return u.util.equals(re,e,n)}}re.runtime=u;re.typeName="google.protobuf.MethodOptions";re.fields=u.util.newFieldList(()=>[{no:33,name:"deprecated",kind:"scalar",T:8,opt:!0,default:!1},{no:34,name:"idempotency_level",kind:"enum",T:u.getEnumType(dn),opt:!0,default:dn.IDEMPOTENCY_UNKNOWN},{no:35,name:"features",kind:"message",T:x,opt:!0},{no:999,name:"uninterpreted_option",kind:"message",T:J,repeated:!0}]);var dn;(function(t){t[t.IDEMPOTENCY_UNKNOWN=0]="IDEMPOTENCY_UNKNOWN",t[t.NO_SIDE_EFFECTS=1]="NO_SIDE_EFFECTS",t[t.IDEMPOTENT=2]="IDEMPOTENT"})(dn||(dn={}));u.util.setEnumType(dn,"google.protobuf.MethodOptions.IdempotencyLevel",[{no:0,name:"IDEMPOTENCY_UNKNOWN"},{no:1,name:"NO_SIDE_EFFECTS"},{no:2,name:"IDEMPOTENT"}]);class J extends I{constructor(e){super(),this.name=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new J().fromBinary(e,n)}static fromJson(e,n){return new J().fromJson(e,n)}static fromJsonString(e,n){return new J().fromJsonString(e,n)}static equals(e,n){return u.util.equals(J,e,n)}}J.runtime=u;J.typeName="google.protobuf.UninterpretedOption";J.fields=u.util.newFieldList(()=>[{no:2,name:"name",kind:"message",T:Re,repeated:!0},{no:3,name:"identifier_value",kind:"scalar",T:9,opt:!0},{no:4,name:"positive_int_value",kind:"scalar",T:4,opt:!0},{no:5,name:"negative_int_value",kind:"scalar",T:3,opt:!0},{no:6,name:"double_value",kind:"scalar",T:1,opt:!0},{no:7,name:"string_value",kind:"scalar",T:12,opt:!0},{no:8,name:"aggregate_value",kind:"scalar",T:9,opt:!0}]);class Re extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new Re().fromBinary(e,n)}static fromJson(e,n){return new Re().fromJson(e,n)}static fromJsonString(e,n){return new Re().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Re,e,n)}}Re.runtime=u;Re.typeName="google.protobuf.UninterpretedOption.NamePart";Re.fields=u.util.newFieldList(()=>[{no:1,name:"name_part",kind:"scalar",T:9,req:!0},{no:2,name:"is_extension",kind:"scalar",T:8,req:!0}]);class x extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new x().fromBinary(e,n)}static fromJson(e,n){return new x().fromJson(e,n)}static fromJsonString(e,n){return new x().fromJsonString(e,n)}static equals(e,n){return u.util.equals(x,e,n)}}x.runtime=u;x.typeName="google.protobuf.FeatureSet";x.fields=u.util.newFieldList(()=>[{no:1,name:"field_presence",kind:"enum",T:u.getEnumType(Dn),opt:!0},{no:2,name:"enum_type",kind:"enum",T:u.getEnumType(An),opt:!0},{no:3,name:"repeated_field_encoding",kind:"enum",T:u.getEnumType(Gn),opt:!0},{no:4,name:"utf8_validation",kind:"enum",T:u.getEnumType(xn),opt:!0},{no:5,name:"message_encoding",kind:"enum",T:u.getEnumType(Fn),opt:!0},{no:6,name:"json_format",kind:"enum",T:u.getEnumType(Ln),opt:!0}]);var Dn;(function(t){t[t.FIELD_PRESENCE_UNKNOWN=0]="FIELD_PRESENCE_UNKNOWN",t[t.EXPLICIT=1]="EXPLICIT",t[t.IMPLICIT=2]="IMPLICIT",t[t.LEGACY_REQUIRED=3]="LEGACY_REQUIRED"})(Dn||(Dn={}));u.util.setEnumType(Dn,"google.protobuf.FeatureSet.FieldPresence",[{no:0,name:"FIELD_PRESENCE_UNKNOWN"},{no:1,name:"EXPLICIT"},{no:2,name:"IMPLICIT"},{no:3,name:"LEGACY_REQUIRED"}]);var An;(function(t){t[t.ENUM_TYPE_UNKNOWN=0]="ENUM_TYPE_UNKNOWN",t[t.OPEN=1]="OPEN",t[t.CLOSED=2]="CLOSED"})(An||(An={}));u.util.setEnumType(An,"google.protobuf.FeatureSet.EnumType",[{no:0,name:"ENUM_TYPE_UNKNOWN"},{no:1,name:"OPEN"},{no:2,name:"CLOSED"}]);var Gn;(function(t){t[t.REPEATED_FIELD_ENCODING_UNKNOWN=0]="REPEATED_FIELD_ENCODING_UNKNOWN",t[t.PACKED=1]="PACKED",t[t.EXPANDED=2]="EXPANDED"})(Gn||(Gn={}));u.util.setEnumType(Gn,"google.protobuf.FeatureSet.RepeatedFieldEncoding",[{no:0,name:"REPEATED_FIELD_ENCODING_UNKNOWN"},{no:1,name:"PACKED"},{no:2,name:"EXPANDED"}]);var xn;(function(t){t[t.UTF8_VALIDATION_UNKNOWN=0]="UTF8_VALIDATION_UNKNOWN",t[t.VERIFY=2]="VERIFY",t[t.NONE=3]="NONE"})(xn||(xn={}));u.util.setEnumType(xn,"google.protobuf.FeatureSet.Utf8Validation",[{no:0,name:"UTF8_VALIDATION_UNKNOWN"},{no:2,name:"VERIFY"},{no:3,name:"NONE"}]);var Fn;(function(t){t[t.MESSAGE_ENCODING_UNKNOWN=0]="MESSAGE_ENCODING_UNKNOWN",t[t.LENGTH_PREFIXED=1]="LENGTH_PREFIXED",t[t.DELIMITED=2]="DELIMITED"})(Fn||(Fn={}));u.util.setEnumType(Fn,"google.protobuf.FeatureSet.MessageEncoding",[{no:0,name:"MESSAGE_ENCODING_UNKNOWN"},{no:1,name:"LENGTH_PREFIXED"},{no:2,name:"DELIMITED"}]);var Ln;(function(t){t[t.JSON_FORMAT_UNKNOWN=0]="JSON_FORMAT_UNKNOWN",t[t.ALLOW=1]="ALLOW",t[t.LEGACY_BEST_EFFORT=2]="LEGACY_BEST_EFFORT"})(Ln||(Ln={}));u.util.setEnumType(Ln,"google.protobuf.FeatureSet.JsonFormat",[{no:0,name:"JSON_FORMAT_UNKNOWN"},{no:1,name:"ALLOW"},{no:2,name:"LEGACY_BEST_EFFORT"}]);class xe extends I{constructor(e){super(),this.defaults=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new xe().fromBinary(e,n)}static fromJson(e,n){return new xe().fromJson(e,n)}static fromJsonString(e,n){return new xe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(xe,e,n)}}xe.runtime=u;xe.typeName="google.protobuf.FeatureSetDefaults";xe.fields=u.util.newFieldList(()=>[{no:1,name:"defaults",kind:"message",T:Oe,repeated:!0},{no:4,name:"minimum_edition",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:5,name:"maximum_edition",kind:"enum",T:u.getEnumType(Q),opt:!0}]);class Oe extends I{constructor(e){super(),u.util.initPartial(e,this)}static fromBinary(e,n){return new Oe().fromBinary(e,n)}static fromJson(e,n){return new Oe().fromJson(e,n)}static fromJsonString(e,n){return new Oe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Oe,e,n)}}Oe.runtime=u;Oe.typeName="google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault";Oe.fields=u.util.newFieldList(()=>[{no:3,name:"edition",kind:"enum",T:u.getEnumType(Q),opt:!0},{no:4,name:"overridable_features",kind:"message",T:x,opt:!0},{no:5,name:"fixed_features",kind:"message",T:x,opt:!0}]);class Ie extends I{constructor(e){super(),this.location=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Ie().fromBinary(e,n)}static fromJson(e,n){return new Ie().fromJson(e,n)}static fromJsonString(e,n){return new Ie().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Ie,e,n)}}Ie.runtime=u;Ie.typeName="google.protobuf.SourceCodeInfo";Ie.fields=u.util.newFieldList(()=>[{no:1,name:"location",kind:"message",T:_e,repeated:!0}]);class _e extends I{constructor(e){super(),this.path=[],this.span=[],this.leadingDetachedComments=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new _e().fromBinary(e,n)}static fromJson(e,n){return new _e().fromJson(e,n)}static fromJsonString(e,n){return new _e().fromJsonString(e,n)}static equals(e,n){return u.util.equals(_e,e,n)}}_e.runtime=u;_e.typeName="google.protobuf.SourceCodeInfo.Location";_e.fields=u.util.newFieldList(()=>[{no:1,name:"path",kind:"scalar",T:5,repeated:!0,packed:!0},{no:2,name:"span",kind:"scalar",T:5,repeated:!0,packed:!0},{no:3,name:"leading_comments",kind:"scalar",T:9,opt:!0},{no:4,name:"trailing_comments",kind:"scalar",T:9,opt:!0},{no:6,name:"leading_detached_comments",kind:"scalar",T:9,repeated:!0}]);class Fe extends I{constructor(e){super(),this.annotation=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Fe().fromBinary(e,n)}static fromJson(e,n){return new Fe().fromJson(e,n)}static fromJsonString(e,n){return new Fe().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Fe,e,n)}}Fe.runtime=u;Fe.typeName="google.protobuf.GeneratedCodeInfo";Fe.fields=u.util.newFieldList(()=>[{no:1,name:"annotation",kind:"message",T:Me,repeated:!0}]);class Me extends I{constructor(e){super(),this.path=[],u.util.initPartial(e,this)}static fromBinary(e,n){return new Me().fromBinary(e,n)}static fromJson(e,n){return new Me().fromJson(e,n)}static fromJsonString(e,n){return new Me().fromJsonString(e,n)}static equals(e,n){return u.util.equals(Me,e,n)}}Me.runtime=u;Me.typeName="google.protobuf.GeneratedCodeInfo.Annotation";Me.fields=u.util.newFieldList(()=>[{no:1,name:"path",kind:"scalar",T:5,repeated:!0,packed:!0},{no:2,name:"source_file",kind:"scalar",T:9,opt:!0},{no:3,name:"begin",kind:"scalar",T:5,opt:!0},{no:4,name:"end",kind:"scalar",T:5,opt:!0},{no:5,name:"semantic",kind:"enum",T:u.getEnumType(qn),opt:!0}]);var qn;(function(t){t[t.NONE=0]="NONE",t[t.SET=1]="SET",t[t.ALIAS=2]="ALIAS"})(qn||(qn={}));u.util.setEnumType(qn,"google.protobuf.GeneratedCodeInfo.Annotation.Semantic",[{no:0,name:"NONE"},{no:1,name:"SET"},{no:2,name:"ALIAS"}]);class A extends I{constructor(e){super(),this.seconds=B.zero,this.nanos=0,o.util.initPartial(e,this)}fromJson(e,n){if(typeof e!="string")throw new Error(`cannot decode google.protobuf.Timestamp from JSON: ${o.json.debug(e)}`);const a=e.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);if(!a)throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");const s=Date.parse(a[1]+"-"+a[2]+"-"+a[3]+"T"+a[4]+":"+a[5]+":"+a[6]+(a[8]?a[8]:"Z"));if(Number.isNaN(s))throw new Error("cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string");if(sDate.parse("9999-12-31T23:59:59Z"))throw new Error("cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");return this.seconds=B.parse(s/1e3),this.nanos=0,a[7]&&(this.nanos=parseInt("1"+a[7]+"0".repeat(9-a[7].length))-1e9),this}toJson(e){const n=Number(this.seconds)*1e3;if(nDate.parse("9999-12-31T23:59:59Z"))throw new Error("cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive");if(this.nanos<0)throw new Error("cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative");let a="Z";if(this.nanos>0){const s=(this.nanos+1e9).toString().substring(1);s.substring(3)==="000000"?a="."+s.substring(0,3)+"Z":s.substring(6)==="000"?a="."+s.substring(0,6)+"Z":a="."+s+"Z"}return new Date(n).toISOString().replace(".000Z",a)}toDate(){return new Date(Number(this.seconds)*1e3+Math.ceil(this.nanos/1e6))}static now(){return A.fromDate(new Date)}static fromDate(e){const n=e.getTime();return new A({seconds:B.parse(Math.floor(n/1e3)),nanos:n%1e3*1e6})}static fromBinary(e,n){return new A().fromBinary(e,n)}static fromJson(e,n){return new A().fromJson(e,n)}static fromJsonString(e,n){return new A().fromJsonString(e,n)}static equals(e,n){return o.util.equals(A,e,n)}}A.runtime=o;A.typeName="google.protobuf.Timestamp";A.fields=o.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);class $ extends I{constructor(e){super(),this.seconds=B.zero,this.nanos=0,o.util.initPartial(e,this)}fromJson(e,n){if(typeof e!="string")throw new Error(`cannot decode google.protobuf.Duration from JSON: ${o.json.debug(e)}`);const a=e.match(/^(-?[0-9]+)(?:\.([0-9]+))?s/);if(a===null)throw new Error(`cannot decode google.protobuf.Duration from JSON: ${o.json.debug(e)}`);const s=Number(a[1]);if(s>315576e6||s<-315576e6)throw new Error(`cannot decode google.protobuf.Duration from JSON: ${o.json.debug(e)}`);if(this.seconds=B.parse(s),typeof a[2]=="string"){const r=a[2]+"0".repeat(9-a[2].length);this.nanos=parseInt(r),(s<0||Object.is(s,-0))&&(this.nanos=-this.nanos)}return this}toJson(e){if(Number(this.seconds)>315576e6||Number(this.seconds)<-315576e6)throw new Error("cannot encode google.protobuf.Duration to JSON: value out of range");let n=this.seconds.toString();if(this.nanos!==0){let a=Math.abs(this.nanos).toString();a="0".repeat(9-a.length)+a,a.substring(3)==="000000"?a=a.substring(0,3):a.substring(6)==="000"&&(a=a.substring(0,6)),n+="."+a,this.nanos<0&&Number(this.seconds)==0&&(n="-"+n)}return n+"s"}static fromBinary(e,n){return new $().fromBinary(e,n)}static fromJson(e,n){return new $().fromJson(e,n)}static fromJsonString(e,n){return new $().fromJsonString(e,n)}static equals(e,n){return o.util.equals($,e,n)}}$.runtime=o;$.typeName="google.protobuf.Duration";$.fields=o.util.newFieldList(()=>[{no:1,name:"seconds",kind:"scalar",T:3},{no:2,name:"nanos",kind:"scalar",T:5}]);class X extends I{constructor(e){super(),this.typeUrl="",this.value=new Uint8Array(0),o.util.initPartial(e,this)}toJson(e){var n;if(this.typeUrl==="")return{};const a=this.typeUrlToName(this.typeUrl),s=(n=e?.typeRegistry)===null||n===void 0?void 0:n.findMessage(a);if(!s)throw new Error(`cannot encode message google.protobuf.Any to JSON: "${this.typeUrl}" is not in the type registry`);let r=s.fromBinary(this.value).toJson(e);return(a.startsWith("google.protobuf.")||r===null||Array.isArray(r)||typeof r!="object")&&(r={value:r}),r["@type"]=this.typeUrl,r}fromJson(e,n){var a;if(e===null||Array.isArray(e)||typeof e!="object")throw new Error(`cannot decode message google.protobuf.Any from JSON: expected object but got ${e===null?"null":Array.isArray(e)?"array":typeof e}`);if(Object.keys(e).length==0)return this;const s=e["@type"];if(typeof s!="string"||s=="")throw new Error('cannot decode message google.protobuf.Any from JSON: "@type" is empty');const r=this.typeUrlToName(s),m=(a=n?.typeRegistry)===null||a===void 0?void 0:a.findMessage(r);if(!m)throw new Error(`cannot decode message google.protobuf.Any from JSON: ${s} is not in the type registry`);let c;if(r.startsWith("google.protobuf.")&&Object.prototype.hasOwnProperty.call(e,"value"))c=m.fromJson(e.value,n);else{const l=Object.assign({},e);delete l["@type"],c=m.fromJson(l,n)}return this.packFrom(c),this}packFrom(e){this.value=e.toBinary(),this.typeUrl=this.typeNameToUrl(e.getType().typeName)}unpackTo(e){return this.is(e.getType())?(e.fromBinary(this.value),!0):!1}unpack(e){if(this.typeUrl==="")return;const n=e.findMessage(this.typeUrlToName(this.typeUrl));if(n)return n.fromBinary(this.value)}is(e){if(this.typeUrl==="")return!1;const n=this.typeUrlToName(this.typeUrl);let a="";return typeof e=="string"?a=e:a=e.typeName,n===a}typeNameToUrl(e){return`type.googleapis.com/${e}`}typeUrlToName(e){if(!e.length)throw new Error(`invalid type url: ${e}`);const n=e.lastIndexOf("/"),a=n>=0?e.substring(n+1):e;if(!a.length)throw new Error(`invalid type url: ${e}`);return a}static pack(e){const n=new X;return n.packFrom(e),n}static fromBinary(e,n){return new X().fromBinary(e,n)}static fromJson(e,n){return new X().fromJson(e,n)}static fromJsonString(e,n){return new X().fromJsonString(e,n)}static equals(e,n){return o.util.equals(X,e,n)}}X.runtime=o;X.typeName="google.protobuf.Any";X.fields=o.util.newFieldList(()=>[{no:1,name:"type_url",kind:"scalar",T:9},{no:2,name:"value",kind:"scalar",T:12}]);class Ne extends I{constructor(e){super(),this.paths=[],o.util.initPartial(e,this)}toJson(e){function n(a){let s=!1;const r=[];for(let m=0;m{if(a.match(/_[0-9]?_/g)||a.match(/[A-Z]/g))throw new Error('cannot encode google.protobuf.FieldMask to JSON: lowerCamelCase of path name "'+a+'" is irreversible');return n(a)}).join(",")}fromJson(e,n){if(typeof e!="string")throw new Error("cannot decode google.protobuf.FieldMask from JSON: "+o.json.debug(e));if(e==="")return this;function a(s){if(s.includes("_"))throw new Error("cannot decode google.protobuf.FieldMask from JSON: path names must be lowerCamelCase");const r=s.replace(/[A-Z]/g,m=>"_"+m.toLowerCase());return r[0]==="_"?r.substring(1):r}return this.paths=e.split(",").map(a),this}static fromBinary(e,n){return new Ne().fromBinary(e,n)}static fromJson(e,n){return new Ne().fromJson(e,n)}static fromJsonString(e,n){return new Ne().fromJsonString(e,n)}static equals(e,n){return o.util.equals(Ne,e,n)}}Ne.runtime=o;Ne.typeName="google.protobuf.FieldMask";Ne.fields=o.util.newFieldList(()=>[{no:1,name:"paths",kind:"scalar",T:9,repeated:!0}]);var ln;(function(t){t[t.NULL_VALUE=0]="NULL_VALUE"})(ln||(ln={}));o.util.setEnumType(ln,"google.protobuf.NullValue",[{no:0,name:"NULL_VALUE"}]);class h extends I{constructor(e){super(),this.fields={},o.util.initPartial(e,this)}toJson(e){const n={};for(const[a,s]of Object.entries(this.fields))n[a]=s.toJson(e);return n}fromJson(e,n){if(typeof e!="object"||e==null||Array.isArray(e))throw new Error("cannot decode google.protobuf.Struct from JSON "+o.json.debug(e));for(const[a,s]of Object.entries(e))this.fields[a]=Y.fromJson(s);return this}static fromBinary(e,n){return new h().fromBinary(e,n)}static fromJson(e,n){return new h().fromJson(e,n)}static fromJsonString(e,n){return new h().fromJsonString(e,n)}static equals(e,n){return o.util.equals(h,e,n)}}h.runtime=o;h.typeName="google.protobuf.Struct";h.fields=o.util.newFieldList(()=>[{no:1,name:"fields",kind:"map",K:9,V:{kind:"message",T:Y}}]);class Y extends I{constructor(e){super(),this.kind={case:void 0},o.util.initPartial(e,this)}toJson(e){switch(this.kind.case){case"nullValue":return null;case"numberValue":if(!Number.isFinite(this.kind.value))throw new Error("google.protobuf.Value cannot be NaN or Infinity");return this.kind.value;case"boolValue":return this.kind.value;case"stringValue":return this.kind.value;case"structValue":case"listValue":return this.kind.value.toJson(Object.assign(Object.assign({},e),{emitDefaultValues:!0}))}throw new Error("google.protobuf.Value must have a value")}fromJson(e,n){switch(typeof e){case"number":this.kind={case:"numberValue",value:e};break;case"string":this.kind={case:"stringValue",value:e};break;case"boolean":this.kind={case:"boolValue",value:e};break;case"object":e===null?this.kind={case:"nullValue",value:ln.NULL_VALUE}:Array.isArray(e)?this.kind={case:"listValue",value:oe.fromJson(e)}:this.kind={case:"structValue",value:h.fromJson(e)};break;default:throw new Error("cannot decode google.protobuf.Value from JSON "+o.json.debug(e))}return this}static fromBinary(e,n){return new Y().fromBinary(e,n)}static fromJson(e,n){return new Y().fromJson(e,n)}static fromJsonString(e,n){return new Y().fromJsonString(e,n)}static equals(e,n){return o.util.equals(Y,e,n)}}Y.runtime=o;Y.typeName="google.protobuf.Value";Y.fields=o.util.newFieldList(()=>[{no:1,name:"null_value",kind:"enum",T:o.getEnumType(ln),oneof:"kind"},{no:2,name:"number_value",kind:"scalar",T:1,oneof:"kind"},{no:3,name:"string_value",kind:"scalar",T:9,oneof:"kind"},{no:4,name:"bool_value",kind:"scalar",T:8,oneof:"kind"},{no:5,name:"struct_value",kind:"message",T:h,oneof:"kind"},{no:6,name:"list_value",kind:"message",T:oe,oneof:"kind"}]);class oe extends I{constructor(e){super(),this.values=[],o.util.initPartial(e,this)}toJson(e){return this.values.map(n=>n.toJson())}fromJson(e,n){if(!Array.isArray(e))throw new Error("cannot decode google.protobuf.ListValue from JSON "+o.json.debug(e));for(let a of e)this.values.push(Y.fromJson(a));return this}static fromBinary(e,n){return new oe().fromBinary(e,n)}static fromJson(e,n){return new oe().fromJson(e,n)}static fromJsonString(e,n){return new oe().fromJsonString(e,n)}static equals(e,n){return o.util.equals(oe,e,n)}}oe.runtime=o;oe.typeName="google.protobuf.ListValue";oe.fields=o.util.newFieldList(()=>[{no:1,name:"values",kind:"message",T:Y,repeated:!0}]);var E;(function(t){t[t.Canceled=1]="Canceled",t[t.Unknown=2]="Unknown",t[t.InvalidArgument=3]="InvalidArgument",t[t.DeadlineExceeded=4]="DeadlineExceeded",t[t.NotFound=5]="NotFound",t[t.AlreadyExists=6]="AlreadyExists",t[t.PermissionDenied=7]="PermissionDenied",t[t.ResourceExhausted=8]="ResourceExhausted",t[t.FailedPrecondition=9]="FailedPrecondition",t[t.Aborted=10]="Aborted",t[t.OutOfRange=11]="OutOfRange",t[t.Unimplemented=12]="Unimplemented",t[t.Internal=13]="Internal",t[t.Unavailable=14]="Unavailable",t[t.DataLoss=15]="DataLoss",t[t.Unauthenticated=16]="Unauthenticated"})(E||(E={}));function ca(t){const e=E[t];return typeof e!="string"?t.toString():e[0].toLowerCase()+e.substring(1).replace(/[A-Z]/g,n=>"_"+n.toLowerCase())}class M extends Error{constructor(e,n=E.Unknown,a,s,r){super(Om(e,n)),this.name="ConnectError",Object.setPrototypeOf(this,new.target.prototype),this.rawMessage=e,this.code=n,this.metadata=new Headers(a??{}),this.details=s??[],this.cause=r}static from(e,n=E.Unknown){return e instanceof M?e:e instanceof Error?e.name=="AbortError"?new M(e.message,E.Canceled):new M(e.message,n,void 0,void 0,e):new M(String(e),n,void 0,void 0,e)}static[Symbol.hasInstance](e){return e instanceof Error?Object.getPrototypeOf(e)===M.prototype?!0:e.name==="ConnectError"&&"code"in e&&typeof e.code=="number"&&"metadata"in e&&"details"in e&&Array.isArray(e.details)&&"rawMessage"in e&&typeof e.rawMessage=="string"&&"cause"in e:!1}findDetails(e){const n="typeName"in e?{findMessage:s=>s===e.typeName?e:void 0}:e,a=[];for(const s of this.details){if("getType"in s){n.findMessage(s.getType().typeName)&&a.push(s);continue}const r=n.findMessage(s.type);if(r)try{a.push(r.fromBinary(s.value))}catch{}}return a}}function Om(t,e){return t.length?`[${ca(e)}] ${t}`:`[${ca(e)}]`}function Im(t,e,n){try{const a=_t.dec(t);return e?e.fromBinary(a,n):a}catch(a){throw M.from(a,E.DataLoss)}}function _m(t,e){const n={};for(const[a,s]of Object.entries(t.methods)){const r=e(Object.assign(Object.assign({},s),{localName:a,service:t}));r!=null&&(n[a]=r)}return n}const da=1;function la(t){let e,n=new Uint8Array(0);function a(s){const r=new Uint8Array(n.length+s.length);r.set(n),r.set(s,n.length),n=r}return new ReadableStream({start(){e=t.getReader()},async pull(s){let r;for(;;){if(r===void 0&&n.byteLength>=5){let l=0;for(let d=1;d<5;d++)l=(l<<8)+n[d];r={flags:n[0],length:l}}if(r!==void 0&&n.byteLength>=r.length+5)break;const c=await e.read();if(c.done)break;a(c.value)}if(r===void 0){if(n.byteLength==0){s.close();return}s.error(new M("premature end of stream",E.DataLoss));return}const m=n.subarray(5,5+r.length);n=n.subarray(5+r.length),s.enqueue({flags:r.flags,data:m})}})}function ua(t,e){const n=new Uint8Array(e.length+5);n.set(e,5);const a=new DataView(n.buffer,n.byteOffset,n.byteLength);return a.setUint8(0,t),a.setUint32(1,e.length),n}var Mm=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],n;return e?e.call(t):(t=typeof __values=="function"?__values(t):t[Symbol.iterator](),n={},a("next"),a("throw"),a("return"),n[Symbol.asyncIterator]=function(){return this},n);function a(r){n[r]=t[r]&&function(m){return new Promise(function(c,l){m=t[r](m),s(c,l,m.done,m.value)})}}function s(r,m,c,l){Promise.resolve(l).then(function(d){r({value:d,done:c})},m)}},un=function(t){return this instanceof un?(this.v=t,this):new un(t)},Nm=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var a=n.apply(t,e||[]),s,r=[];return s={},c("next"),c("throw"),c("return",m),s[Symbol.asyncIterator]=function(){return this},s;function m(b){return function(w){return Promise.resolve(w).then(b,v)}}function c(b,w){a[b]&&(s[b]=function(_){return new Promise(function(N,P){r.push([b,_,N,P])>1||l(b,_)})},w&&(s[b]=w(s[b])))}function l(b,w){try{d(a[b](w))}catch(_){S(r[0][3],_)}}function d(b){b.value instanceof un?Promise.resolve(b.value.v).then(p,v):S(r[0][2],b)}function p(b){l("next",b)}function v(b){l("throw",b)}function S(b,w){b(w),r.shift(),r.length&&l(r[0][0],r[0][1])}},Cm=function(t){var e,n;return e={},a("next"),a("throw",function(s){throw s}),a("return"),e[Symbol.iterator]=function(){return this},e;function a(s,r){e[s]=t[s]?function(m){return(n=!n)?{value:un(t[s](m)),done:!1}:r?r(m):m}:r}};function Um(){const t=[],e=[];let n,a,s,r=new Promise((l,d)=>{a=l,s=d}),m=!1;function c(){for(const l of t.splice(0,t.length))l({done:!0,value:void 0})}return{close(){m=!0,c()},async write(l){if(m)throw n??new Error("cannot write, WritableIterable already closed");const d=t.shift();if(d===void 0)e.push(l);else if(d({done:!1,value:l}),t.length>0)return;const p=e.length+1;for(let v=0;v{a=v,s=S});const l=e.shift();if(l!==void 0)return Promise.resolve({done:!1,value:l});if(m)return Promise.resolve({done:!0,value:void 0});let d;const p=new Promise(v=>d=v);return t.push(d),p},throw(l){return n=l,m=!0,e.splice(0,e.length),r.catch(()=>{}),s(n),c(),Promise.resolve({done:!0,value:void 0})},return(){return m=!0,e.splice(0,e.length),a(),r=Promise.reject(new Error("cannot write, consumer called return")),r.catch(()=>{}),c(),Promise.resolve({done:!0,value:void 0})}}}}}function gt(t){return Nm(this,arguments,function*(){yield un(yield*Cm(Mm(t)))})}var za=function(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var e=t[Symbol.asyncIterator],n;return e?e.call(t):(t=typeof __values=="function"?__values(t):t[Symbol.iterator](),n={},a("next"),a("throw"),a("return"),n[Symbol.asyncIterator]=function(){return this},n);function a(r){n[r]=t[r]&&function(m){return new Promise(function(c,l){m=t[r](m),s(c,l,m.done,m.value)})}}function s(r,m,c,l){Promise.resolve(l).then(function(d){r({value:d,done:c})},m)}},Ze=function(t){return this instanceof Ze?(this.v=t,this):new Ze(t)},Pm=function(t){var e,n;return e={},a("next"),a("throw",function(s){throw s}),a("return"),e[Symbol.iterator]=function(){return this},e;function a(s,r){e[s]=t[s]?function(m){return(n=!n)?{value:Ze(t[s](m)),done:!1}:r?r(m):m}:r}},Dm=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var a=n.apply(t,e||[]),s,r=[];return s={},c("next"),c("throw"),c("return",m),s[Symbol.asyncIterator]=function(){return this},s;function m(b){return function(w){return Promise.resolve(w).then(b,v)}}function c(b,w){a[b]&&(s[b]=function(_){return new Promise(function(N,P){r.push([b,_,N,P])>1||l(b,_)})},w&&(s[b]=w(s[b])))}function l(b,w){try{d(a[b](w))}catch(_){S(r[0][3],_)}}function d(b){b.value instanceof Ze?Promise.resolve(b.value.v).then(p,v):S(r[0][2],b)}function p(b){l("next",b)}function v(b){l("throw",b)}function S(b,w){b(w),r.shift(),r.length&&l(r[0][0],r[0][1])}};function qe(t,e){return _m(t,n=>{switch(n.kind){case i.Unary:return Am(e,t,n);case i.ServerStreaming:return Gm(e,t,n);case i.ClientStreaming:return xm(e,t,n);case i.BiDiStreaming:return Fm(e,t,n);default:return null}})}function Am(t,e,n){return async function(a,s){var r,m;const c=await t.unary(e,n,s?.signal,s?.timeoutMs,s?.headers,a,s?.contextValues);return(r=s?.onHeader)===null||r===void 0||r.call(s,c.header),(m=s?.onTrailer)===null||m===void 0||m.call(s,c.trailer),c.message}}function Gm(t,e,n){return function(a,s){return Ka(t.stream(e,n,s?.signal,s?.timeoutMs,s?.headers,gt([a]),s?.contextValues),s)}}function xm(t,e,n){return async function(a,s){var r,m,c,l,d,p;const v=await t.stream(e,n,s?.signal,s?.timeoutMs,s?.headers,a,s?.contextValues);(d=s?.onHeader)===null||d===void 0||d.call(s,v.header);let S,b=0;try{for(var w=!0,_=za(v.message),N;N=await _.next(),r=N.done,!r;w=!0)l=N.value,w=!1,S=l,b++}catch(P){m={error:P}}finally{try{!w&&!r&&(c=_.return)&&await c.call(_)}finally{if(m)throw m.error}}if(!S)throw new M("protocol error: missing response message",E.Unimplemented);if(b>1)throw new M("protocol error: received extra messages for client streaming method",E.Unimplemented);return(p=s?.onTrailer)===null||p===void 0||p.call(s,v.trailer),S}}function Fm(t,e,n){return function(a,s){return Ka(t.stream(e,n,s?.signal,s?.timeoutMs,s?.headers,a,s?.contextValues),s)}}function Ka(t,e){const n=(function(){return Dm(this,arguments,function*(){var a,s;const r=yield Ze(t);(a=e?.onHeader)===null||a===void 0||a.call(e,r.header),yield Ze(yield*Pm(za(r.message))),(s=e?.onTrailer)===null||s===void 0||s.call(e,r.trailer)})})()[Symbol.asyncIterator]();return{[Symbol.asyncIterator]:()=>({next:()=>n.next()})}}function Lm(...t){const e=new AbortController,n=t.filter(s=>s!==void 0).concat(e.signal);for(const s of n){if(s.aborted){a.apply(s);break}s.addEventListener("abort",a)}function a(){e.signal.aborted||e.abort(Xa(this));for(const s of n)s.removeEventListener("abort",a)}return e}function qm(t){const e=new AbortController,n=()=>{e.abort(new M("the operation timed out",E.DeadlineExceeded))};let a;return t!==void 0&&(t<=0?n():a=setTimeout(n,t)),{signal:e.signal,cleanup:()=>clearTimeout(a)}}function Xa(t){if(!t.aborted)return;if(t.reason!==void 0)return t.reason;const e=new Error("This operation was aborted");return e.name="AbortError",e}function Bn(){return{get(t){return t.id in this?this[t.id]:t.defaultValue},set(t,e){return this[t.id]=e,this},delete(t){return delete this[t.id],this}}}const ct=128;function pa(t){const e=new Headers,n=new TextDecoder().decode(t).split(`\r -`);for(const a of n){if(a==="")continue;const s=a.indexOf(":");if(s>0){const r=a.substring(0,s).trim(),m=a.substring(s+1).trim();e.append(r,m)}}return e}const Bm="Content-Type",Jm="Grpc-Timeout",Qe="Grpc-Status",Za="Grpc-Message",jm="Grpc-Status-Details-Bin",Vm="X-User-Agent",Wm="X-Grpc-Web",$m="application/grpc-web+proto",Ym="application/grpc-web+json";let Kn=class tn extends I{constructor(e){super(),this.code=0,this.message="",this.details=[],o.util.initPartial(e,this)}static fromBinary(e,n){return new tn().fromBinary(e,n)}static fromJson(e,n){return new tn().fromJson(e,n)}static fromJsonString(e,n){return new tn().fromJsonString(e,n)}static equals(e,n){return o.util.equals(tn,e,n)}};Kn.runtime=o;Kn.typeName="google.rpc.Status";Kn.fields=o.util.newFieldList(()=>[{no:1,name:"code",kind:"scalar",T:5},{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"details",kind:"message",T:X,repeated:!0}]);const Hm="0";function Qa(t){var e;const n=t.get(jm);if(n!=null){const s=Im(n,Kn);if(s.code==0)return;const r=new M(s.message,s.code,t);return r.details=s.details.map(m=>({type:m.typeUrl.substring(m.typeUrl.lastIndexOf("/")+1),value:m.value})),r}const a=t.get(Qe);if(a!=null){if(a===Hm)return;const s=parseInt(a,10);return s in E?new M(decodeURIComponent((e=t.get(Za))!==null&&e!==void 0?e:""),s,t):new M(`invalid grpc-status: ${a}`,E.Internal,t)}}function ga(t,e,n){const a=typeof e=="string"?e:e.typeName,s=typeof n=="string"?n:n.name;return t.toString().replace(/\/?$/,`/${a}/${s}`)}function es(t,e){return e instanceof t?e:new t(e)}function zm(t,e){function n(a){return a.done===!0?a:{done:a.done,value:es(t,a.value)}}return{[Symbol.asyncIterator](){const a=e[Symbol.asyncIterator](),s={next:()=>a.next().then(n)};return a.throw!==void 0&&(s.throw=r=>a.throw(r).then(n)),a.return!==void 0&&(s.return=r=>a.return(r).then(n)),s}}}function ns(t,e){var n;return(n=e?.concat().reverse().reduce((a,s)=>s(a),t))!==null&&n!==void 0?n:t}function Km(t){var e;const n=Object.assign({},t);return(e=n.ignoreUnknownFields)!==null&&e!==void 0||(n.ignoreUnknownFields=!0),n}function ft(t,e,n,a){const s=e?fa(t.I,a):Ta(t.I,n);return{parse:(e?fa(t.O,a):Ta(t.O,n)).parse,serialize:s.serialize}}function fa(t,e){return{parse(n){try{return t.fromBinary(n,e)}catch(a){const s=a instanceof Error?a.message:String(a);throw new M(`parse binary: ${s}`,E.Internal)}},serialize(n){try{return n.toBinary(e)}catch(a){const s=a instanceof Error?a.message:String(a);throw new M(`serialize binary: ${s}`,E.Internal)}}}}function Ta(t,e){var n,a;const s=(n=e?.textEncoder)!==null&&n!==void 0?n:new TextEncoder,r=(a=e?.textDecoder)!==null&&a!==void 0?a:new TextDecoder,m=Km(e);return{parse(c){try{const l=r.decode(c);return t.fromJsonString(l,m)}catch(l){throw M.from(l,E.InvalidArgument)}},serialize(c){try{const l=c.toJsonString(m);return s.encode(l)}catch(l){throw M.from(l,E.Internal)}}}}function ts(t){const e=ns(t.next,t.interceptors),[n,a,s]=ss(t),r=Object.assign(Object.assign({},t.req),{message:es(t.req.method.I,t.req.message),signal:n});return e(r).then(m=>(s(),m),a)}function as(t){const e=ns(t.next,t.interceptors),[n,a,s]=ss(t),r=Object.assign(Object.assign({},t.req),{message:zm(t.req.method.I,t.req.message),signal:n});let m=!1;return n.addEventListener("abort",function(){var c,l;const d=t.req.message[Symbol.asyncIterator]();m||(c=d.throw)===null||c===void 0||c.call(d,this.reason).catch(()=>{}),(l=d.return)===null||l===void 0||l.call(d).catch(()=>{})}),e(r).then(c=>Object.assign(Object.assign({},c),{message:{[Symbol.asyncIterator](){const l=c.message[Symbol.asyncIterator]();return{next(){return l.next().then(d=>(d.done==!0&&(m=!0,s()),d),a)}}}}}),a)}function ss(t){const{signal:e,cleanup:n}=qm(t.timeoutMs),a=Lm(t.signal,e);return[a.signal,function(s){const r=M.from(e.aborted?Xa(e):s);return a.abort(r),n(),Promise.reject(r)},function(){n(),a.abort()}]}var j=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},rs={},Mt={},Jn=j&&j.__assign||function(){return Jn=Object.assign||function(t){for(var e,n=1,a=arguments.length;n0&&r[r.length-1])&&(d[0]===6||d[0]===2)){n=0;continue}if(d[0]===3&&(!r||d[1]>r[0]&&d[1]0&&r[r.length-1])&&(d[0]===6||d[0]===2)){n=0;continue}if(d[0]===3&&(!r||d[1]>r[0]&&d[1]=this.options.numOfAttempts},enumerable:!0,configurable:!0}),t.prototype.applyDelay=function(){return Tt(this,void 0,void 0,function(){var e;return ht(this,function(n){switch(n.label){case 0:return e=yc.DelayFactory(this.options,this.attemptNumber),[4,e.apply()];case 1:return n.sent(),[2]}})})},t})();const os=o.makeMessageType("proto.rpc.v1.Credentials",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"payload",kind:"scalar",T:9}]),kt=o.makeMessageType("proto.rpc.v1.AuthenticateRequest",()=>[{no:1,name:"entity",kind:"scalar",T:9},{no:2,name:"credentials",kind:"message",T:os}]),Sc=o.makeMessageType("proto.rpc.v1.AuthenticateResponse",()=>[{no:1,name:"access_token",kind:"scalar",T:9}]),wc=o.makeMessageType("proto.rpc.v1.AuthenticateToRequest",()=>[{no:1,name:"entity",kind:"scalar",T:9}]),Ec=o.makeMessageType("proto.rpc.v1.AuthenticateToResponse",()=>[{no:1,name:"access_token",kind:"scalar",T:9}]),Rc={typeName:"proto.rpc.v1.AuthService",methods:{authenticate:{name:"Authenticate",I:kt,O:Sc,kind:i.Unary}}},Oc={typeName:"proto.rpc.v1.ExternalAuthService",methods:{authenticateTo:{name:"AuthenticateTo",I:wc,O:Ec,kind:i.Unary}}},gn=o.makeMessageType("google.rpc.Status",()=>[{no:1,name:"code",kind:"scalar",T:5},{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"details",kind:"message",T:X,repeated:!0}]),fn=o.makeMessageType("proto.rpc.webrtc.v1.ICECandidate",()=>[{no:1,name:"candidate",kind:"scalar",T:9},{no:2,name:"sdp_mid",kind:"scalar",T:9,opt:!0},{no:3,name:"sdpm_line_index",kind:"scalar",T:13,opt:!0},{no:4,name:"username_fragment",kind:"scalar",T:9,opt:!0}]),is=o.makeMessageType("proto.rpc.webrtc.v1.CallRequest",()=>[{no:1,name:"sdp",kind:"scalar",T:9},{no:2,name:"disable_trickle",kind:"scalar",T:8}]),Ic=o.makeMessageType("proto.rpc.webrtc.v1.CallResponseInitStage",()=>[{no:1,name:"sdp",kind:"scalar",T:9}]),_c=o.makeMessageType("proto.rpc.webrtc.v1.CallResponseUpdateStage",()=>[{no:1,name:"candidate",kind:"message",T:fn}]),Mc=o.makeMessageType("proto.rpc.webrtc.v1.CallResponse",()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"init",kind:"message",T:Ic,oneof:"stage"},{no:3,name:"update",kind:"message",T:_c,oneof:"stage"}]),On=o.makeMessageType("proto.rpc.webrtc.v1.CallUpdateRequest",()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"candidate",kind:"message",T:fn,oneof:"update"},{no:3,name:"done",kind:"scalar",T:8,oneof:"update"},{no:4,name:"error",kind:"message",T:gn,oneof:"update"}]),Nc=o.makeMessageType("proto.rpc.webrtc.v1.CallUpdateResponse",[]),Cc=o.makeMessageType("proto.rpc.webrtc.v1.ICEServer",()=>[{no:1,name:"urls",kind:"scalar",T:9,repeated:!0},{no:2,name:"username",kind:"scalar",T:9},{no:3,name:"credential",kind:"scalar",T:9}]),jn=o.makeMessageType("proto.rpc.webrtc.v1.WebRTCConfig",()=>[{no:1,name:"additional_ice_servers",kind:"message",T:Cc,repeated:!0},{no:2,name:"disable_trickle",kind:"scalar",T:8}]),Uc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestInitStage",()=>[{no:1,name:"sdp",kind:"scalar",T:9},{no:2,name:"optional_config",kind:"message",T:jn},{no:3,name:"deadline",kind:"message",T:A,opt:!0}]),Pc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestUpdateStage",()=>[{no:1,name:"candidate",kind:"message",T:fn}]),Dc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestDoneStage",[]),Ac=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestErrorStage",()=>[{no:1,name:"status",kind:"message",T:gn}]),Gc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequestHeartbeatStage",[]),xc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerRequest",()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"init",kind:"message",T:Uc,oneof:"stage"},{no:3,name:"update",kind:"message",T:Pc,oneof:"stage"},{no:4,name:"done",kind:"message",T:Dc,oneof:"stage"},{no:5,name:"error",kind:"message",T:Ac,oneof:"stage"},{no:6,name:"heartbeat",kind:"message",T:Gc,oneof:"stage"}]),Fc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponseInitStage",()=>[{no:1,name:"sdp",kind:"scalar",T:9}]),Lc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponseUpdateStage",()=>[{no:1,name:"candidate",kind:"message",T:fn}]),qc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponseDoneStage",[]),Bc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponseErrorStage",()=>[{no:1,name:"status",kind:"message",T:gn}]),Jc=o.makeMessageType("proto.rpc.webrtc.v1.AnswerResponse",()=>[{no:1,name:"uuid",kind:"scalar",T:9},{no:2,name:"init",kind:"message",T:Fc,oneof:"stage"},{no:3,name:"update",kind:"message",T:Lc,oneof:"stage"},{no:4,name:"done",kind:"message",T:qc,oneof:"stage"},{no:5,name:"error",kind:"message",T:Bc,oneof:"stage"}]),jc=o.makeMessageType("proto.rpc.webrtc.v1.OptionalWebRTCConfigRequest",[]),Vc=o.makeMessageType("proto.rpc.webrtc.v1.OptionalWebRTCConfigResponse",()=>[{no:1,name:"config",kind:"message",T:jn}]),Wc={typeName:"proto.rpc.webrtc.v1.SignalingService",methods:{call:{name:"Call",I:is,O:Mc,kind:i.ServerStreaming},callUpdate:{name:"CallUpdate",I:On,O:Nc,kind:i.Unary},answer:{name:"Answer",I:Jc,O:xc,kind:i.BiDiStreaming},optionalWebRTCConfig:{name:"OptionalWebRTCConfig",I:jc,O:Vc,kind:i.Unary}}},ms="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",yt=(t="")=>{const e=t;let n="";for(let a=0,s,r=0,m=ms;e.charAt(Math.trunc(r))||(m="=",r%1);n+=m.charAt(63&a>>8-r%1*8)){if(s=e.charCodeAt(r+=3/4),s>255)throw new Error("'btoa' failed: The string to be encoded contains characters outside of the Latin1 range.");a=a<<8|s}return n},cs=(t="")=>{const e=t.replace(/=+$/,"");let n="";if(e.length%4===1)throw new Error("'atob' failed: The string to be decoded is not correctly encoded.");for(let a=0,s=0,r,m=0;r=e.charAt(m++);~r&&(s=a%4?s*64+r:r,a++%4)?n+=String.fromCharCode(255&s>>(-2*a&6)):0)r=ms.indexOf(r);return n},vt=(t,e)=>{const n={sdp:t?.sdp,type:t?.type};if(e)for(const[a,s]of Object.entries(e))n.sdp=[n.sdp,`a=${a}:${s}\r -`].join("");return n},$c=async(t,e,n)=>{const a=e??{iceServers:[{urls:"stun:global.stun.twilio.com:3478"}]},s=new RTCPeerConnection(a);let r;const m=new Promise(v=>{r=v}),c=s.createDataChannel("data",{id:0,negotiated:!0,ordered:!0});c.binaryType="arraybuffer";const l=s.createDataChannel("negotiation",{id:1,negotiated:!0,ordered:!0});l.binaryType="arraybuffer";let d=!1;if(l.addEventListener("open",()=>{d=!0}),l.addEventListener("message",v=>{(async()=>{const S=new RTCSessionDescription(JSON.parse(cs(v.data)));if(await s.setRemoteDescription(S),S.type==="offer"){await s.setLocalDescription();const b=vt(s.localDescription,n);l.send(yt(JSON.stringify(b)))}})().catch(console.error)}),s.addEventListener("negotiationneeded",()=>{(async()=>{if(!d)return;await s.setLocalDescription();const v=vt(s.localDescription,n);l.send(yt(JSON.stringify(v)))})().catch(console.error)}),!t)return{pc:s,dc:c};const p=await s.createOffer({});return await s.setLocalDescription(p),s.addEventListener("icecandidate",v=>{v.candidate===null&&r({pc:s,dc:c})}),m};function Yc(){try{new Headers}catch{throw new Error("connect-web requires the fetch API. Are you running on an old version of Node.js? Node.js is not supported in Connect for Web - please stay tuned for Connect for Node.")}}function ha(t,e){const n=Qa(t);if(n)throw e.forEach((a,s)=>{n.metadata.append(s,a)}),n;if(!e.has(Qe)&&!t.has(Qe))throw new M("protocol error: missing status",E.Internal)}function ka(t,e,n,a){const s=new Headers(n??{});return s.set(Bm,t?$m:Ym),s.set(Wm,"1"),s.set(Vm,"connect-es/1.6.1"),e!==void 0&&s.set(Jm,`${e}m`),s}function Hc(t){switch(t){case 400:return E.Internal;case 401:return E.Unauthenticated;case 403:return E.PermissionDenied;case 404:return E.Unimplemented;case 429:return E.Unavailable;case 502:return E.Unavailable;case 503:return E.Unavailable;case 504:return E.Unavailable;default:return E.Unknown}}function ya(t,e){var n;if(t>=200&&t<300)return{foundStatus:e.has(Qe),headerError:Qa(e)};throw new M(decodeURIComponent((n=e.get(Za))!==null&&n!==void 0?n:`HTTP ${t}`),Hc(t),e)}var Je=function(t){return this instanceof Je?(this.v=t,this):new Je(t)},zc=function(t,e,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var a=n.apply(t,e||[]),s,r=[];return s={},c("next"),c("throw"),c("return",m),s[Symbol.asyncIterator]=function(){return this},s;function m(b){return function(w){return Promise.resolve(w).then(b,v)}}function c(b,w){a[b]&&(s[b]=function(_){return new Promise(function(N,P){r.push([b,_,N,P])>1||l(b,_)})},w&&(s[b]=w(s[b])))}function l(b,w){try{d(a[b](w))}catch(_){S(r[0][3],_)}}function d(b){b.value instanceof Je?Promise.resolve(b.value.v).then(p,v):S(r[0][2],b)}function p(b){l("next",b)}function v(b){l("throw",b)}function S(b,w){b(w),r.shift(),r.length&&l(r[0][0],r[0][1])}};function Kc(t){var e;Yc();const n=(e=t.useBinaryFormat)!==null&&e!==void 0?e:!0;return{async unary(a,s,r,m,c,l,d){var p;const{serialize:v,parse:S}=ft(s,n,t.jsonOptions,t.binaryOptions);return m=m===void 0?t.defaultTimeoutMs:m<=0?void 0:m,await ts({interceptors:t.interceptors,signal:r,timeoutMs:m,req:{stream:!1,service:a,method:s,url:ga(t.baseUrl,a,s),init:{method:"POST",credentials:(p=t.credentials)!==null&&p!==void 0?p:"same-origin",redirect:"error",mode:"cors"},header:ka(n,m,c),contextValues:d??Bn(),message:l},next:async b=>{var w;const _=await((w=t.fetch)!==null&&w!==void 0?w:globalThis.fetch)(b.url,Object.assign(Object.assign({},b.init),{headers:b.header,signal:b.signal,body:ua(0,v(b.message))})),{headerError:N}=ya(_.status,_.headers);if(!_.body)throw N!==void 0?N:"missing response body";const P=la(_.body).getReader();let f,k;for(;;){const g=await P.read();if(g.done)break;const{flags:T,data:R}=g.value;if((T&da)===da)throw new M("protocol error: received unsupported compressed output",E.Internal);if(T===ct){if(f!==void 0)throw"extra trailer";f=pa(R);continue}if(k!==void 0)throw new M("extra message",E.Unimplemented);k=S(R)}if(f===void 0)throw N!==void 0?N:new M("missing trailer",_.headers.has(Qe)?E.Unimplemented:E.Unknown);if(ha(f,_.headers),k===void 0)throw new M("missing message",f.has(Qe)?E.Unimplemented:E.Unknown);return{stream:!1,service:a,method:s,header:_.headers,message:k,trailer:f}}})},async stream(a,s,r,m,c,l,d){var p;const{serialize:v,parse:S}=ft(s,n,t.jsonOptions,t.binaryOptions);function b(_,N,P,f,k){return zc(this,arguments,function*(){const g=la(_).getReader();if(N){if(!(yield Je(g.read())).done)throw"extra data for trailers-only";return yield Je(void 0)}let T=!1;for(;;){const R=yield Je(g.read());if(R.done)break;const{flags:O,data:H}=R.value;if((O&ct)===ct){if(T)throw"extra trailer";T=!0;const C=pa(H);ha(C,f),C.forEach((q,rt)=>P.set(rt,q));continue}if(T)throw"extra message";yield yield Je(S(H))}if("throwIfAborted"in k&&k.throwIfAborted(),!T)throw"missing trailer"})}async function w(_){if(s.kind!=i.ServerStreaming)throw"The fetch API does not support streaming request bodies";const N=await _[Symbol.asyncIterator]().next();if(N.done==!0)throw"missing request message";return ua(0,v(N.value))}return m=m===void 0?t.defaultTimeoutMs:m<=0?void 0:m,as({interceptors:t.interceptors,signal:r,timeoutMs:m,req:{stream:!0,service:a,method:s,url:ga(t.baseUrl,a,s),init:{method:"POST",credentials:(p=t.credentials)!==null&&p!==void 0?p:"same-origin",redirect:"error",mode:"cors"},header:ka(n,m,c),contextValues:d??Bn(),message:l},next:async _=>{var N;const P=await((N=t.fetch)!==null&&N!==void 0?N:globalThis.fetch)(_.url,Object.assign(Object.assign({},_.init),{headers:_.header,signal:_.signal,body:await w(_.message)})),{foundStatus:f,headerError:k}=ya(P.status,P.headers);if(k!=null)throw k;if(!P.body)throw"missing response body";const g=new Headers;return Object.assign(Object.assign({},_),{header:P.headers,trailer:g,message:b(P.body,f,g,P.headers,_.signal)})}})}}}const Vn=o.makeMessageType("proto.rpc.webrtc.v1.PacketMessage",()=>[{no:1,name:"data",kind:"scalar",T:12},{no:2,name:"eom",kind:"scalar",T:8}]),Gt=o.makeMessageType("proto.rpc.webrtc.v1.Stream",()=>[{no:1,name:"id",kind:"scalar",T:4}]),lt=o.makeMessageType("proto.rpc.webrtc.v1.Request",()=>[{no:1,name:"stream",kind:"message",T:Gt},{no:2,name:"headers",kind:"message",T:ds,oneof:"type"},{no:3,name:"message",kind:"message",T:bt,oneof:"type"},{no:4,name:"rst_stream",kind:"scalar",T:8,oneof:"type"}]),ds=o.makeMessageType("proto.rpc.webrtc.v1.RequestHeaders",()=>[{no:1,name:"method",kind:"scalar",T:9},{no:2,name:"metadata",kind:"message",T:Zn},{no:3,name:"timeout",kind:"message",T:$}]),bt=o.makeMessageType("proto.rpc.webrtc.v1.RequestMessage",()=>[{no:1,name:"has_message",kind:"scalar",T:8},{no:2,name:"packet_message",kind:"message",T:Vn},{no:3,name:"eos",kind:"scalar",T:8}]),Xc=o.makeMessageType("proto.rpc.webrtc.v1.Response",()=>[{no:1,name:"stream",kind:"message",T:Gt},{no:2,name:"headers",kind:"message",T:Zc,oneof:"type"},{no:3,name:"message",kind:"message",T:Qc,oneof:"type"},{no:4,name:"trailers",kind:"message",T:ed,oneof:"type"}]),Zc=o.makeMessageType("proto.rpc.webrtc.v1.ResponseHeaders",()=>[{no:1,name:"metadata",kind:"message",T:Zn}]),Qc=o.makeMessageType("proto.rpc.webrtc.v1.ResponseMessage",()=>[{no:1,name:"packet_message",kind:"message",T:Vn}]),ed=o.makeMessageType("proto.rpc.webrtc.v1.ResponseTrailers",()=>[{no:1,name:"status",kind:"message",T:gn},{no:2,name:"metadata",kind:"message",T:Zn}]),ls=o.makeMessageType("proto.rpc.webrtc.v1.Strings",()=>[{no:1,name:"values",kind:"scalar",T:9,repeated:!0}]),Zn=o.makeMessageType("proto.rpc.webrtc.v1.Metadata",()=>[{no:1,name:"md",kind:"map",K:9,V:{kind:"message",T:ls}}]);class Ce extends Error{name="ConnectionClosedError";constructor(e){super(e),Object.setPrototypeOf(this,Ce.prototype)}static isError(e){return e instanceof Ce||e instanceof M&&e.rawMessage==="closed"?!0:typeof e=="string"?e==="Response closed without headers":e instanceof Error?e.message==="Response closed without headers":!1}}class nd{ready;peerConn;dataChannel;pResolve;pReject;closed=!1;closedReason;maxDataChannelSize=65535;constructor(e,n){this.peerConn=e,this.dataChannel=n,this.ready=new Promise((a,s)=>{this.pResolve=a,this.pReject=s}),n.addEventListener("open",()=>this.onChannelOpen()),n.addEventListener("close",()=>this.onChannelClose()),n.addEventListener("error",a=>{this.onChannelError(a)}),e.addEventListener("iceconnectionstatechange",()=>{const a=e.iceConnectionState;(a==="failed"||a==="disconnected"||a==="closed")&&this.pReject?.(new Error(`ICE connection failed with state: ${a}`))})}isClosed(){return this.closed}isClosedReason(){return this.closedReason}closeWithReason(e){this.closed||(this.closed=!0,this.closedReason=e,this.pReject?.(e),this.peerConn.close(),this.dataChannel.close())}onChannelOpen(){this.pResolve?.(void 0)}onChannelClose(){this.closeWithReason(new Ce("data channel closed"))}onChannelError(e){console.error("channel error",e),this.closeWithReason(new Error(JSON.stringify(e)))}write(e){this.dataChannel.send(e.toBinary())}}const va=33554432;class td{grpcStream;onDone;closed=!1;packetBuf=[];packetBufSize=0;constructor(e,n){this.grpcStream=e,this.onDone=n}closeWithRecvError(){this.closed||(this.closed=!0,this.onDone(this.grpcStream.id))}processPacketMessage(e){const{data:n}=e;if(n.length+this.packetBufSize>va){this.packetBuf.length=0,this.packetBufSize=0,console.error(`message size larger than max ${va}; discarding`);return}if(this.packetBuf.push(n),this.packetBufSize+=n.length,e.eom){const a=new Uint8Array(this.packetBufSize);let s=0;for(const r of this.packetBuf)a.set(r,s),s+=r.length;return this.packetBuf.length=0,this.packetBufSize=0,a}}}const ad=16373;class us extends td{channel;service;method;parseMessage;requestHeaders;headersReceived=!1;trailersReceived=!1;constructor(e,n,a,s,r,m){super(n,a),this.channel=e,this.service=s,this.method=r;const{parse:c}=ft(r,!0,void 0,void 0);this.parseMessage=c;const l=`/${s.typeName}/${r.name}`;this.requestHeaders=new ds({method:l});const d=sd(pn(m));d&&(this.requestHeaders.metadata=d)}startRequest(e){e&&e.addEventListener("abort",()=>{this.resetStream()});try{this.channel.writeHeaders(this.grpcStream,this.requestHeaders)}catch(n){console.error("error writing headers",n),this.closeWithRecvError()}}sendMessage(e){if(e){this.writeMessage(!1,e);return}this.writeMessage(!1,void 0)}resetStream(){if(!this.closed)try{this.channel.writeReset(this.grpcStream)}catch(e){console.error("error writing reset",e),this.closeWithRecvError()}}writeMessage(e,n){try{if(!n||n.length===0){const s=new Vn({eom:!0}),r=new bt({hasMessage:!!n,packetMessage:s,eos:e});this.channel.writeMessage(this.grpcStream,r);return}let a=n;for(;a.length>0;){const s=Math.min(a.length,ad),r=new Vn;r.data=a.slice(0,s),a=a.slice(s),a.length===0&&(r.eom=!0);const m=new bt({hasMessage:!!a,packetMessage:r,eos:e});this.channel.writeMessage(this.grpcStream,m)}}catch(a){console.error("error writing message",a),this.closeWithRecvError()}}onResponse(e){switch(e.type.case){case"headers":{if(this.headersReceived){console.error(`invariant: headers already received for ${this.grpcStream.id}`);return}if(this.trailersReceived){console.error(`invariant: headers received after trailers for ${this.grpcStream.id}`);return}this.processHeaders(e.type.value);break}case"message":{if(!this.headersReceived){console.error(`invariant: headers not yet received for ${this.grpcStream.id}`);return}if(this.trailersReceived){console.error(`invariant: headers received after trailers for ${this.grpcStream.id}`);return}this.processMessage(e.type.value);break}case"trailers":{this.processTrailers(e.type.value);break}default:{console.error("unknown response type",e.type.case);break}}}processHeaders(e){this.headersReceived=!0,this.onHeaders(e)}processMessage(e){if(!e.packetMessage)return;const n=super.processPacketMessage(e.packetMessage);n&&this.onMessage(n)}processTrailers(e){this.trailersReceived=!0;const{status:n}=e,a=n?n.code:0;if(this.onTrailers(e),a===0){this.closeWithRecvError();return}this.closeWithRecvError()}}const sd=t=>{if(!t)return;const e=new Zn({md:Object.fromEntries([...t.entries()].map(([n,a])=>[n,new ls({values:[a]})]))});return Object.keys(e.md).length>0?e:void 0},St=t=>{const e=Object.entries(t?.md??{}).flatMap(([n,{values:a}])=>a.map(s=>[n,s]));return new Headers(e)};class rd extends us{awaitingHeadersResult;gotHeaders=!1;respStream=Um();trailers=new Headers;respStreamQueue;async run(e,n,a,s){const r={req:{stream:!0,url:"",init:{},service:this.service,method:this.method,header:new Headers,contextValues:s??Bn(),message:a},next:async m=>{const c=await new Promise((l,d)=>{this.awaitingHeadersResult={success:l,failure:d},this.startRequest(e),this.sendMessages(m.message).catch(p=>{console.error("error sending streaming message",p),this.closeWithRecvError()})});return{...m,header:c,trailer:this.trailers,message:this.respStream}}};return e&&(r.signal=e),n!==void 0&&(r.timeoutMs=n),as(r)}async sendMessages(e){for await(const n of e)this.sendMessage(n.toBinary());this.writeMessage(!0,void 0)}onHeaders(e){this.gotHeaders=!0,this.awaitingHeadersResult?.success(St(e.metadata))}onTrailers(e){if(e.metadata?.md){for(const n in e.metadata.md)if(Object.hasOwn(e.metadata.md,n)){const a=e.metadata.md[n];for(const s of a?.values??[])this.trailers.append(n,s)}}if(this.respStream.close(),!e.status||e.status.code===0){if(this.gotHeaders)return;this.awaitingHeadersResult?.success(new Headers);return}this.gotHeaders||this.awaitingHeadersResult?.failure(e.status.message)}onMessage(e){const n=this.parseMessage(e);this.respStreamQueue=this.respStreamQueue?this.respStreamQueue.then(async()=>this.respStream.write(n)):this.respStream.write(n),this.respStreamQueue.catch(a=>{console.error(`error pushing received message into stream; failing: ${a}`),this.resetStream()})}}class od extends us{result;headers;message;async run(e,n,a,s){const r={req:{stream:!1,url:"",init:{},service:this.service,method:this.method,header:new Headers,contextValues:s??Bn(),message:a},next:async m=>new Promise((c,l)=>{this.result={success:c,failure:l},this.startRequest(),this.sendMessage(m.message.toBinary())})};return e&&(r.signal=e),n!==void 0&&(r.timeoutMs=n),ts(r)}onHeaders(e){if(this.headers!==void 0){this.result?.failure(new Error("invariant: received headers more than once"));return}this.headers=St(e.metadata)}onTrailers(e){const n=St(e.metadata);if(!e.status||e.status.code===0){if(!this.headers){this.result?.failure(new Error("invariant: received trailers for successful unary request without headers"));return}if(this.message===void 0){this.result?.failure(new Error("invariant: received trailers for successful unary request without message"));return}this.result?.success({stream:!1,header:this.headers,message:this.message,trailer:n,service:this.service,method:this.method});return}this.result?.failure(e.status.message)}onMessage(e){if(this.message!==void 0){this.result?.failure(new Error("invariant: received two response messages for unary request"));return}this.message=this.parseMessage(e)}}const id=256;class md extends nd{streamIDCounter=0;streams=new Map;constructor(e,n){super(e,n),n.addEventListener("message",a=>{this.onChannelMessage(a)}),e.addEventListener("iceconnectionstatechange",()=>{const a=e.iceConnectionState;(a==="failed"||a==="disconnected"||a==="closed")&&this.onConnectionTerminated()}),n.addEventListener("close",()=>this.onConnectionTerminated())}onConnectionTerminated(){this.closeWithReason(new Ce("data channel closed"));for(const e of this.streams.values())e.cs.closeWithRecvError()}onChannelMessage(e){const n=Xc.fromBinary(new Uint8Array(e.data)),{stream:a}=n;if(a===void 0){console.error("no stream id; discarding");return}const{id:s}=a,r=this.streams.get(s.toString());if(r===void 0){console.error("no stream for id; discarding","id",s);return}r.cs.onResponse(n)}nextStreamID(){const e=this.streamIDCounter;return this.streamIDCounter+=1,new Gt({id:BigInt(e)})}newStream(e,n,a,s,r){if(this.isClosed())throw new Ce("connection closed");let m=this.streams.get(n.id.toString());if(m!==void 0)throw new Error("invariant: stream should not exist yet");if(Object.keys(this.streams).length>id)throw new Error("stream limit hit");const c=new e(this,n,l=>this.removeStreamByID(l),a,s,r);return m={cs:c},this.streams.set(n.id.toString(),m),c}removeStreamByID(e){this.streams.delete(e.toString())}writeHeaders(e,n){this.write(new lt({stream:e,type:{case:"headers",value:n}}))}writeMessage(e,n){this.write(new lt({stream:e,type:{case:"message",value:n}}))}writeReset(e){this.write(new lt({stream:e,type:{case:"rstStream",value:!0}}))}async unary(e,n,a,s,r,m,c){return this.newStream(od,this.nextStreamID(),e,n,r).run(a,s,m,c)}async stream(e,n,a,s,r,m,c){return this.newStream(rd,this.nextStreamID(),e,n,r).run(a,s,m,c)}}const yn="invariant: call uuid unset";class cd{constructor(e,n,a,s,r){this.signalingClient=e,this.callOpts=n,this.pc=a,this.dc=s,this.dialOpts=r,this.clientChannel=new md(this.pc,this.dc)}clientChannel;callUuid;sentDoneOrErrorOnce=!1;exchangeDone=!1;iceComplete=!1;haveInitResponse=!1;awaitingRemoteDescription;remoteDescriptionSet;numCallUpdates=0;maxCallUpdateDuration=0;totalCallUpdateDuration=0;async doExchange(){await this.setup();const e=vt(this.pc.localDescription,this.dialOpts?.additionalSdpFields),n=yt(JSON.stringify(e)),a=new is({sdp:n});this.dialOpts&&this.dialOpts.disableTrickleICE&&(a.disableTrickle=this.dialOpts.disableTrickleICE),this.clientChannel.ready.then(async()=>{this.exchangeDone=!0,await this.sendDone()}).catch(console.error);const s=this.signalingClient.call(a,this.callOpts),r=this.processCallResponses(s);return await Promise.all([this.clientChannel.ready,r]),this.clientChannel}async setup(){if(this.remoteDescriptionSet=new Promise((e,n)=>{this.awaitingRemoteDescription={success:e,failure:n}}),!this.dialOpts?.disableTrickleICE){const e=await this.pc.createOffer({});this.pc.addEventListener("iceconnectionstatechange",()=>{if(this.pc.iceConnectionState!=="completed"||this.numCallUpdates===0)return;const n=this.totalCallUpdateDuration/this.numCallUpdates;console.groupCollapsed("Caller update statistics"),console.table({num_updates:this.numCallUpdates,average_duration:`${n}ms`,max_duration:`${this.maxCallUpdateDuration}ms`}),console.groupEnd()}),this.pc.addEventListener("icecandidate",n=>{this.onLocalICECandidate(n).catch(a=>{console.error(`error processing local ICE candidate ${a}`)})}),await this.pc.setLocalDescription(e)}}terminate(e){this.clientChannel.closeWithReason(e)}async processCallResponses(e){try{for await(const n of e)switch(n.stage.case){case"init":{if(!await this.handleInitResponse(n.uuid,n.stage.value))return;break}case"update":{if(!await this.handleUpdateResponse(n.uuid,n.stage.value))return;break}default:{await this.sendError("unknown CallResponse stage");return}}}catch(n){this.handleInitError(n)}}handleInitError(e){if(!(this.exchangeDone||this.pc.iceConnectionState==="connected")){if(e instanceof M&&e.code===E.Unimplemented){if(e.message==="Response closed without headers")throw new Ce("failed to dial");if(this.clientChannel.isClosed())throw new Ce("client channel is closed");console.error(e.message)}throw e}}async handleInitResponse(e,n){if(this.haveInitResponse)return await this.sendError("got init stage more than once"),!1;this.haveInitResponse=!0,this.callUuid=e;const a=new RTCSessionDescription(JSON.parse(cs(n.sdp)));return this.clientChannel.isClosed()?(await this.sendError("client channel is closed"),!1):(await this.pc.setRemoteDescription(a),this.awaitingRemoteDescription?.success(!0),this.dialOpts?.disableTrickleICE?(this.exchangeDone=!0,await this.sendDone(),!1):!0)}async handleUpdateResponse(e,n){if(!this.haveInitResponse)return await this.sendError("got update stage before init stage"),!1;if(e!==this.callUuid)return await this.sendError(`uuid mismatch; have=${e} want=${this.callUuid}`),!1;if(n.candidate===void 0)return await this.sendError("no candidate"),!1;const a=dd(n.candidate);a.candidate!==void 0&&console.debug(`received remote ICE ${a.candidate}`);try{await this.pc.addIceCandidate(a)}catch(s){throw console.log("error adding ice candidate",s),await this.sendError(JSON.stringify(s)),s}return!0}async onLocalICECandidate(e){if(await this.remoteDescriptionSet,this.exchangeDone||this.pc.iceConnectionState==="connected"){e.candidate!==null&&console.info("Dropping ICE candidate - exchange done or already connected",{exchangeDone:this.exchangeDone,iceConnectionState:this.pc.iceConnectionState,candidate:e.candidate.candidate});return}if(e.candidate===null){console.info("ICE gathering complete"),this.iceComplete=!0,await this.sendDone();return}if(this.callUuid===void 0||this.callUuid==="")throw console.error(yn),new Error(yn);e.candidate.candidate!==void 0&&console.info(`Gathered local ICE ${e.candidate.candidate}`);const n=ld(e.candidate),a=new On({uuid:this.callUuid,update:{case:"candidate",value:n}}),s=new Date;try{await this.signalingClient.callUpdate(a,this.callOpts),this.numCallUpdates+=1;const r=new Date().getTime()-s.getTime();r>this.maxCallUpdateDuration&&(this.maxCallUpdateDuration=r),this.totalCallUpdateDuration+=r}catch(r){if(this.exchangeDone||this.iceComplete||this.pc.iceConnectionState==="connected")return;console.error(r)}}async sendError(e){if(this.sentDoneOrErrorOnce)return;if(this.callUuid===void 0||this.callUuid==="")throw new Error(yn);this.sentDoneOrErrorOnce=!0;const n=new On({uuid:this.callUuid,update:{case:"error",value:new gn({code:E.Unknown,message:e})}});try{await this.signalingClient.callUpdate(n,this.callOpts)}catch(a){console.error("failed to send call update; continuing",a)}}async sendDone(){if(this.sentDoneOrErrorOnce)return;if(this.callUuid===void 0||this.callUuid==="")throw new Error(yn);this.sentDoneOrErrorOnce=!0;const e=new On({uuid:this.callUuid,update:{case:"done",value:!0}});try{await this.signalingClient.callUpdate(e,this.callOpts)}catch(n){console.error(n)}}}const dd=t=>{const e={candidate:t.candidate};return t.sdpMid!==void 0&&(e.sdpMid=t.sdpMid),t.sdpmLineIndex!==void 0&&(e.sdpMLineIndex=t.sdpmLineIndex),t.usernameFragment!==void 0&&(e.usernameFragment=t.usernameFragment),e},ld=t=>{const e=new fn;return t.candidate!==void 0&&(e.candidate=t.candidate),t.sdpMid!==void 0&&t.sdpMid!==null&&(e.sdpMid=t.sdpMid),t.sdpMLineIndex!==void 0&&t.sdpMLineIndex!==null&&(e.sdpmLineIndex=t.sdpMLineIndex),t.usernameFragment!==void 0&&t.usernameFragment!==null&&(e.usernameFragment=t.usernameFragment),e};var ps={exports:{}};(function(t,e){(function(n,a){t.exports=a()})(j,function(){return(function(n){var a={};function s(r){if(a[r])return a[r].exports;var m=a[r]={i:r,l:!1,exports:{}};return n[r].call(m.exports,m,m.exports,s),m.l=!0,m.exports}return s.m=n,s.c=a,s.d=function(r,m,c){s.o(r,m)||Object.defineProperty(r,m,{enumerable:!0,get:c})},s.r=function(r){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},s.t=function(r,m){if(1&m&&(r=s(r)),8&m||4&m&&typeof r=="object"&&r&&r.__esModule)return r;var c=Object.create(null);if(s.r(c),Object.defineProperty(c,"default",{enumerable:!0,value:r}),2&m&&typeof r!="string")for(var l in r)s.d(c,l,(function(d){return r[d]}).bind(null,l));return c},s.n=function(r){var m=r&&r.__esModule?function(){return r.default}:function(){return r};return s.d(m,"a",m),m},s.o=function(r,m){return Object.prototype.hasOwnProperty.call(r,m)},s.p="",s(s.s=0)})([function(n,a,s){s.r(a),s.d(a,"UuidTool",function(){return c}),s.d(a,"Uuid",function(){return m});var r={uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i},m=(function(){function l(d){this.id="",typeof d=="string"?this.fromString(d):Array.isArray(d)?this.fromBytes(d):this.generate()}return l.fromJson=function(d){if(typeof d=="string"&&(d=JSON.parse(d)),!d||!d.id)throw new TypeError("The input cannot be converted to Uuid.");return new l(d.id)},l.prototype.generate=function(){var d=new Array(16).fill(0).map(function(){return 256*Math.random()&255});return d[6]=79&(64|d[6]),this.fromBytes(d),this},l.prototype.fromBytes=function(d){return this.id=d.map(function(p){return("00"+p.toString(16)).slice(-2)}).join("").replace(/(.{8})(.{4})(.{4})(.{4})(.{12})/,"$1-$2-$3-$4-$5"),this.id=this.toString(),this},l.prototype.toBytes=function(){return(this.id.replace(/-/g,"").match(/.{2}/g)||[]).map(function(d){return parseInt(d,16)})},l.prototype.fromString=function(d){return this.id=d.trim(),this.id=this.toString(),this},l.prototype.toString=function(){switch(l.stringExportFormat){default:case"lowercase":return this.id.toLowerCase();case"uppercase":return this.id.toUpperCase()}},l.prototype.isValid=function(){return typeof this.id=="string"&&this.id.length===36&&r.uuid.test(this.id)},l.prototype.equals=function(d){return typeof d=="string"&&(d=new l(d)),this.toString()===d.toString()},l.stringExportFormat="lowercase",l})(),c=(function(){function l(){}return l.toBytes=function(d){return new m().fromString(d).toBytes()},l.toString=function(d){return new m().fromBytes(d).toString()},l.newUuid=function(){return new m().toString()},l.isUuid=function(d){return new m().fromString(d).isValid()},l.compare=function(d,p){return new m(d).equals(new m(p))},l})()}])})})(ps);var ba=ps.exports;const In=(t,e)=>globalThis.VIAM?.GRPC_TRACE_LOGGING===!0?{...t,unary:async(n,a,s,r,m,c,l)=>{const d=ba.UuidTool.newUuid();console.trace(`Unary request ${d} : ${e}/${n.typeName}.${a.name}`);const p=await t.unary(n,a,s,r,m,c,l);return console.debug(`Unary response received: ${d}`),p},stream:async(n,a,s,r,m,c,l)=>{const d=ba.UuidTool.newUuid();console.trace(`Stream request ${d} : ${e}/${n.typeName}.${a.name}`);const p=await t.stream(n,a,s,r,m,c,l);return console.debug(`Stream response received: ${d}`),p}}:t,gs=async(t,e,n=!1)=>{fs(e);const a=globalThis.VIAM?.GRPC_TRANSPORT_FACTORY??Kc,s={baseUrl:t,credentials:"same-origin"};if(e?.accessToken!==void 0&&e.accessToken!==""&&!(e.externalAuthAddress!==void 0&&e.externalAuthAddress!==""&&e.externalAuthToEntity!==void 0&&e.externalAuthToEntity!=="")){const m=new Headers(e.extraHeaders);m.set("authorization",`Bearer ${e.accessToken}`);const c=new Wn(s,a,m);return In(c,t)}if(e===void 0||e.credentials===void 0&&e.accessToken===void 0){n&&(s.credentials="include");const m=new Headers(e?.extraHeaders??{}),c=new Wn(s,a,m);return In(c,t)}const r=await ud(t,a,e,s);return In(r,t)},wt=/^.*:\/\//u,ud=async(t,e,n,a)=>{const s=new Headers(n.extraHeaders);let r;if(n.accessToken===void 0||n.accessToken===""){const m=new kt({entity:tt(n.credentials)&&n.credentials.authEntity?n.credentials.authEntity:t.replace(wt,"")});n.credentials&&(m.credentials=new os({type:n.credentials.type,payload:n.credentials.payload}));const c=n.externalAuthAddress??t,l=e({baseUrl:c});r=(await qe(Rc,l).authenticate(m)).accessToken}else r=n.accessToken;if(n.externalAuthAddress!==void 0&&n.externalAuthAddress!==""&&n.externalAuthToEntity!==void 0&&n.externalAuthToEntity!==""){const m=new Headers;m.set("authorization",`Bearer ${r}`),r="";const c=new kt({entity:n.externalAuthToEntity}),l=e({baseUrl:n.externalAuthAddress});r=(await qe(Oc,l).authenticateTo(c,{headers:m})).accessToken}return s.set("authorization",`Bearer ${r}`),new Wn(a,e,s)};class Wn{transport;extraHeaders;constructor(e,n,a){this.extraHeaders=a,this.transport=n(e)}unary=async(e,n,a,s,r,m,c)=>{const l=pn(r);for(const[d,p]of this.extraHeaders)l.set(d,p);return this.transport.unary(e,n,a,s,l,m,c)};stream=async(e,n,a,s,r,m,c)=>{const l=pn(r);for(const[d,p]of this.extraHeaders)l.set(d,p);return this.transport.stream(e,n,a,s,l,m,c)}}const pn=t=>{const e=new Headers;if(t!==void 0)if(Array.isArray(t))for(const[n,a]of t)e.append(n,a);else if("forEach"in t)typeof t.forEach=="function"&&t.forEach((n,a)=>{e.append(a,n)});else for(const[n,a]of Object.entries(t))e.append(n,a);return e},pd=async(t,e,n=!1)=>{const a=await gs(t,e,n);return qe(Wc,a)},gd=async(t,e)=>{try{return(await e.optionalWebRTCConfig({},t)).config??new jn}catch(n){if(n instanceof M&&n.code===E.Unimplemented)return new jn;throw n}},fd=async(t,e,n,a=!1)=>{const s=t.replace(/\/$/u,"");fs(n);const r={headers:{"rpc-host":e}},m=hd(s,n),c=await pd(s,m,a),l=await Td(c,r,n),{pc:d,dc:p}=await $c(l.disableTrickleICE,l.rtcConfig,l.additionalSdpFields);let v=!1;const S=new cd(c,r,d,p,l);let b;n?.dialTimeout!==void 0&&n.dialTimeout>0&&(b=setTimeout(()=>{v||S.terminate(new Error("timed out"))},n.dialTimeout));try{const w=await S.doExchange();n?.externalAuthAddress!==void 0&&n.externalAuthAddress!==""||n?.credentials?.type,v=!0;const _=new Headers(n?.extraHeaders??{}),N=new Wn({baseUrl:e},()=>w,_);return{transport:In(N,e),peerConnection:d,dataChannel:p}}catch(w){throw console.error("error dialing",w),w}finally{b!==void 0&&(clearTimeout(b),b=void 0),v||(d.close(),p.close())}},Td=async(t,e,n)=>{const a=await gd(e,t),s=a.additionalIceServers.map(c=>{const l=[];for(const d of c.urls)d.endsWith("udp")&&l.push(`${d.slice(0,-3)}tcp`),l.push(d);return{urls:l,credential:c.credential,username:c.username}}),r=n??{};let m;return r.webrtcOptions===void 0?m={disableTrickleICE:a.disableTrickle,rtcConfig:{iceServers:s}}:(m=JSON.parse(JSON.stringify(r.webrtcOptions)),m.rtcConfig===void 0?m.rtcConfig={iceServers:s}:m.rtcConfig.iceServers=[...m.rtcConfig.iceServers??[],...s]),m},hd=(t,e)=>{let n=e;return e&&(n={...e},e.accessToken===void 0&&(tt(n.credentials)&&!n.credentials.authEntity&&(n.credentials.authEntity=n.externalAuthAddress!==void 0&&n.externalAuthAddress!==""?n.externalAuthAddress.replace(wt,""):t.replace(wt,"")),n.credentials=e.webrtcOptions?.signalingCredentials,n.accessToken=e.webrtcOptions?.signalingAccessToken),n.externalAuthAddress=e.webrtcOptions?.signalingExternalAuthAddress,n.externalAuthToEntity=e.webrtcOptions?.signalingExternalAuthToEntity),n},fs=t=>{if(t){if(t.accessToken!==void 0&&t.accessToken.length>0){if(t.credentials)throw new Error("cannot set credentials with accessToken");if(t.webrtcOptions?.signalingAccessToken!==void 0)throw new Error("cannot set webrtcOptions.signalingAccessToken with accessToken");if(t.webrtcOptions?.signalingCredentials!==void 0)throw new Error("cannot set webrtcOptions.signalingCredentials with accessToken")}if(t.webrtcOptions?.signalingAccessToken!==void 0&&t.webrtcOptions.signalingAccessToken.length>0&&t.webrtcOptions.signalingCredentials!==void 0)throw new Error("cannot set webrtcOptions.signalingCredentials with webrtcOptions.signalingAccessToken")}},kd="v0.1.523",Ts=o.makeEnum("viam.common.v1.KinematicsFileFormat",[{no:0,name:"KINEMATICS_FILE_FORMAT_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"KINEMATICS_FILE_FORMAT_SVA",localName:"SVA"},{no:2,name:"KINEMATICS_FILE_FORMAT_URDF",localName:"URDF"}]),G=o.makeMessageType("viam.common.v1.ResourceName",()=>[{no:1,name:"namespace",kind:"scalar",T:9},{no:2,name:"type",kind:"scalar",T:9},{no:3,name:"subtype",kind:"scalar",T:9},{no:4,name:"name",kind:"scalar",T:9}]),Pe=o.makeMessageType("viam.common.v1.Pose",()=>[{no:1,name:"x",kind:"scalar",T:1},{no:2,name:"y",kind:"scalar",T:1},{no:3,name:"z",kind:"scalar",T:1},{no:4,name:"o_x",kind:"scalar",T:1},{no:5,name:"o_y",kind:"scalar",T:1},{no:6,name:"o_z",kind:"scalar",T:1},{no:7,name:"theta",kind:"scalar",T:1}]),hs=o.makeMessageType("viam.common.v1.Orientation",()=>[{no:1,name:"o_x",kind:"scalar",T:1},{no:2,name:"o_y",kind:"scalar",T:1},{no:3,name:"o_z",kind:"scalar",T:1},{no:4,name:"theta",kind:"scalar",T:1}]),We=o.makeMessageType("viam.common.v1.PoseInFrame",()=>[{no:1,name:"reference_frame",kind:"scalar",T:9},{no:2,name:"pose",kind:"message",T:Pe}]),Ue=o.makeMessageType("viam.common.v1.Vector3",()=>[{no:1,name:"x",kind:"scalar",T:1},{no:2,name:"y",kind:"scalar",T:1},{no:3,name:"z",kind:"scalar",T:1}]),ks=o.makeMessageType("viam.common.v1.Sphere",()=>[{no:1,name:"radius_mm",kind:"scalar",T:1}]),ys=o.makeMessageType("viam.common.v1.Capsule",()=>[{no:1,name:"radius_mm",kind:"scalar",T:1},{no:2,name:"length_mm",kind:"scalar",T:1}]),vs=o.makeMessageType("viam.common.v1.RectangularPrism",()=>[{no:1,name:"dims_mm",kind:"message",T:Ue}]),Qn=o.makeMessageType("viam.common.v1.Mesh",()=>[{no:1,name:"content_type",kind:"scalar",T:9},{no:2,name:"mesh",kind:"scalar",T:12}]),bs=o.makeMessageType("viam.common.v1.PointCloud",()=>[{no:1,name:"point_cloud",kind:"scalar",T:12}]),$e=o.makeMessageType("viam.common.v1.Geometry",()=>[{no:1,name:"center",kind:"message",T:Pe},{no:2,name:"sphere",kind:"message",T:ks,oneof:"geometry_type"},{no:3,name:"box",kind:"message",T:vs,oneof:"geometry_type"},{no:5,name:"capsule",kind:"message",T:ys,oneof:"geometry_type"},{no:6,name:"mesh",kind:"message",T:Qn,oneof:"geometry_type"},{no:7,name:"pointcloud",kind:"message",T:bs,oneof:"geometry_type"},{no:4,name:"label",kind:"scalar",T:9}]),xt=o.makeMessageType("viam.common.v1.GeometriesInFrame",()=>[{no:1,name:"reference_frame",kind:"scalar",T:9},{no:2,name:"geometries",kind:"message",T:$e,repeated:!0}]),Ft=o.makeMessageType("viam.common.v1.PointCloudObject",()=>[{no:1,name:"point_cloud",kind:"scalar",T:12},{no:2,name:"geometries",kind:"message",T:xt}]),Be=o.makeMessageType("viam.common.v1.GeoPoint",()=>[{no:1,name:"latitude",kind:"scalar",T:1},{no:2,name:"longitude",kind:"scalar",T:1}]),$n=o.makeMessageType("viam.common.v1.GeoGeometry",()=>[{no:1,name:"location",kind:"message",T:Be},{no:2,name:"geometries",kind:"message",T:$e,repeated:!0}]),De=o.makeMessageType("viam.common.v1.Transform",()=>[{no:1,name:"reference_frame",kind:"scalar",T:9},{no:2,name:"pose_in_observer_frame",kind:"message",T:We},{no:3,name:"physical_object",kind:"message",T:$e,opt:!0},{no:4,name:"uuid",kind:"scalar",T:12},{no:5,name:"metadata",kind:"message",T:h,opt:!0}]),Ss=o.makeMessageType("viam.common.v1.WorldState",()=>[{no:1,name:"obstacles",kind:"message",T:xt,repeated:!0},{no:3,name:"transforms",kind:"message",T:De,repeated:!0}]),yd=o.makeMessageType("viam.common.v1.ActuatorStatus",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),vd=o.makeMessageType("viam.common.v1.ResponseMetadata",()=>[{no:1,name:"captured_at",kind:"message",T:A,opt:!0}]),F=o.makeMessageType("viam.common.v1.DoCommandRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"command",kind:"message",T:h}]),L=o.makeMessageType("viam.common.v1.DoCommandResponse",()=>[{no:1,name:"result",kind:"message",T:h}]),et=o.makeMessageType("viam.common.v1.GetKinematicsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),nt=o.makeMessageType("viam.common.v1.GetKinematicsResponse",()=>[{no:1,name:"format",kind:"enum",T:o.getEnumType(Ts)},{no:2,name:"kinematics_data",kind:"scalar",T:12},{no:3,name:"meshes_by_urdf_filepath",kind:"map",K:9,V:{kind:"message",T:Qn}}]),z=o.makeMessageType("viam.common.v1.GetGeometriesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),K=o.makeMessageType("viam.common.v1.GetGeometriesResponse",()=>[{no:1,name:"geometries",kind:"message",T:$e,repeated:!0}]),ws=o.makeMessageType("viam.common.v1.Get3DModelsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Es=o.makeMessageType("viam.common.v1.Get3DModelsResponse",()=>[{no:1,name:"models",kind:"map",K:9,V:{kind:"message",T:Qn}}]),Lt=o.makeMessageType("viam.common.v1.GetReadingsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),qt=o.makeMessageType("viam.common.v1.GetReadingsResponse",()=>[{no:1,name:"readings",kind:"map",K:9,V:{kind:"message",T:Y}}]),Rs=o.makeMessageType("viam.common.v1.LogEntry",()=>[{no:1,name:"host",kind:"scalar",T:9},{no:2,name:"level",kind:"scalar",T:9},{no:3,name:"time",kind:"message",T:A},{no:4,name:"logger_name",kind:"scalar",T:9},{no:5,name:"message",kind:"scalar",T:9},{no:6,name:"caller",kind:"message",T:h},{no:7,name:"stack",kind:"scalar",T:9},{no:8,name:"fields",kind:"message",T:h,repeated:!0}]),bd=o.makeMessageType("viam.common.v1.AudioInfo",()=>[{no:1,name:"codec",kind:"scalar",T:9},{no:2,name:"sample_rate_hz",kind:"scalar",T:5},{no:3,name:"num_channels",kind:"scalar",T:5}]),Sd=o.makeMessageType("viam.common.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),wd=o.makeMessageType("viam.common.v1.GetPropertiesResponse",()=>[{no:1,name:"supported_codecs",kind:"scalar",T:9,repeated:!0},{no:2,name:"sample_rate_hz",kind:"scalar",T:5},{no:3,name:"num_channels",kind:"scalar",T:5}]),Os=o.makeExtension("viam.common.v1.safety_heartbeat_monitored",re,{no:84260,kind:"scalar",T:8,opt:!0}),Is=Object.freeze(Object.defineProperty({__proto__:null,ActuatorStatus:yd,AudioInfo:bd,Capsule:ys,DoCommandRequest:F,DoCommandResponse:L,GeoGeometry:$n,GeoPoint:Be,GeometriesInFrame:xt,Geometry:$e,Get3DModelsRequest:ws,Get3DModelsResponse:Es,GetGeometriesRequest:z,GetGeometriesResponse:K,GetKinematicsRequest:et,GetKinematicsResponse:nt,GetPropertiesRequest:Sd,GetPropertiesResponse:wd,GetReadingsRequest:Lt,GetReadingsResponse:qt,KinematicsFileFormat:Ts,LogEntry:Rs,Mesh:Qn,Orientation:hs,PointCloud:bs,PointCloudObject:Ft,Pose:Pe,PoseInFrame:We,RectangularPrism:vs,ResourceName:G,ResponseMetadata:vd,Sphere:ks,Transform:De,Vector3:Ue,WorldState:Ss,safety_heartbeat_monitored:Os},Symbol.toStringTag,{value:"Module"})),Et=new Headers({viam_client:`typescript;v0.66.1;${kd}`}),tt=t=>t!==void 0&&"authEntity"in t,ut=1e4;var W=(t=>(t.CONNECTING="connecting",t.CONNECTED="connected",t.DISCONNECTING="disconnecting",t.DISCONNECTED="disconnected",t.DIALING="dialing",t))(W||{});class Ed{listeners={};on(e,n){const{listeners:a}=this;a[e]??=new Set,a[e]?.add(n)}once(e,n){const a=s=>{n(s),this.off(e,n)};this.on(e,a)}has(e,n){return this.listeners[e]?.has(n)}off(e,n){this.listeners[e]?.delete(n)}emit(e,n){for(const a of this.listeners[e]??[])a(n)}}const _s=o.makeMessageType("viam.component.arm.v1.GetEndPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ms=o.makeMessageType("viam.component.arm.v1.GetEndPositionResponse",()=>[{no:1,name:"pose",kind:"message",T:Pe}]),Tn=o.makeMessageType("viam.component.arm.v1.JointPositions",()=>[{no:1,name:"values",kind:"scalar",T:1,repeated:!0}]),Ns=o.makeMessageType("viam.component.arm.v1.GetJointPositionsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Cs=o.makeMessageType("viam.component.arm.v1.GetJointPositionsResponse",()=>[{no:1,name:"positions",kind:"message",T:Tn}]),Us=o.makeMessageType("viam.component.arm.v1.MoveToPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"to",kind:"message",T:Pe},{no:99,name:"extra",kind:"message",T:h}]),Ps=o.makeMessageType("viam.component.arm.v1.MoveToPositionResponse",[]),Ds=o.makeMessageType("viam.component.arm.v1.MoveToJointPositionsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"positions",kind:"message",T:Tn},{no:99,name:"extra",kind:"message",T:h}]),As=o.makeMessageType("viam.component.arm.v1.MoveToJointPositionsResponse",[]),Gs=o.makeMessageType("viam.component.arm.v1.MoveThroughJointPositionsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"positions",kind:"message",T:Tn,repeated:!0},{no:3,name:"options",kind:"message",T:Js,opt:!0},{no:99,name:"extra",kind:"message",T:h}]),xs=o.makeMessageType("viam.component.arm.v1.MoveThroughJointPositionsResponse",[]),Fs=o.makeMessageType("viam.component.arm.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ls=o.makeMessageType("viam.component.arm.v1.StopResponse",[]),Rd=o.makeMessageType("viam.component.arm.v1.Status",()=>[{no:1,name:"end_position",kind:"message",T:Pe},{no:2,name:"joint_positions",kind:"message",T:Tn},{no:3,name:"is_moving",kind:"scalar",T:8}]),qs=o.makeMessageType("viam.component.arm.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),Bs=o.makeMessageType("viam.component.arm.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),Js=o.makeMessageType("viam.component.arm.v1.MoveOptions",()=>[{no:1,name:"max_vel_degs_per_sec",kind:"scalar",T:1,opt:!0},{no:2,name:"max_acc_degs_per_sec2",kind:"scalar",T:1,opt:!0},{no:3,name:"max_vel_degs_per_sec_joints",kind:"scalar",T:1,repeated:!0},{no:4,name:"max_acc_degs_per_sec2_joints",kind:"scalar",T:1,repeated:!0}]),Od=Object.freeze(Object.defineProperty({__proto__:null,GetEndPositionRequest:_s,GetEndPositionResponse:Ms,GetJointPositionsRequest:Ns,GetJointPositionsResponse:Cs,IsMovingRequest:qs,IsMovingResponse:Bs,JointPositions:Tn,MoveOptions:Js,MoveThroughJointPositionsRequest:Gs,MoveThroughJointPositionsResponse:xs,MoveToJointPositionsRequest:Ds,MoveToJointPositionsResponse:As,MoveToPositionRequest:Us,MoveToPositionResponse:Ps,Status:Rd,StopRequest:Fs,StopResponse:Ls},Symbol.toStringTag,{value:"Module"})),Id={typeName:"viam.component.arm.v1.ArmService",methods:{getEndPosition:{name:"GetEndPosition",I:_s,O:Ms,kind:i.Unary},moveToPosition:{name:"MoveToPosition",I:Us,O:Ps,kind:i.Unary},getJointPositions:{name:"GetJointPositions",I:Ns,O:Cs,kind:i.Unary},moveToJointPositions:{name:"MoveToJointPositions",I:Ds,O:As,kind:i.Unary},moveThroughJointPositions:{name:"MoveThroughJointPositions",I:Gs,O:xs,kind:i.Unary},stop:{name:"Stop",I:Fs,O:Ls,kind:i.Unary},isMoving:{name:"IsMoving",I:qs,O:Bs,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getKinematics:{name:"GetKinematics",I:et,O:nt,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary},get3DModels:{name:"Get3DModels",I:ws,O:Es,kind:i.Unary}}},js=o.makeMessageType("viam.component.base.v1.MoveStraightRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"distance_mm",kind:"scalar",T:3},{no:3,name:"mm_per_sec",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),Vs=o.makeMessageType("viam.component.base.v1.MoveStraightResponse",[]),Ws=o.makeMessageType("viam.component.base.v1.SpinRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"angle_deg",kind:"scalar",T:1},{no:3,name:"degs_per_sec",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),$s=o.makeMessageType("viam.component.base.v1.SpinResponse",[]),Ys=o.makeMessageType("viam.component.base.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Hs=o.makeMessageType("viam.component.base.v1.StopResponse",[]),zs=o.makeMessageType("viam.component.base.v1.SetPowerRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"linear",kind:"message",T:Ue},{no:3,name:"angular",kind:"message",T:Ue},{no:99,name:"extra",kind:"message",T:h}]),Ks=o.makeMessageType("viam.component.base.v1.SetPowerResponse",[]),Xs=o.makeMessageType("viam.component.base.v1.SetVelocityRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"linear",kind:"message",T:Ue},{no:3,name:"angular",kind:"message",T:Ue},{no:99,name:"extra",kind:"message",T:h}]),Zs=o.makeMessageType("viam.component.base.v1.SetVelocityResponse",[]),Qs=o.makeMessageType("viam.component.base.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),er=o.makeMessageType("viam.component.base.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),nr=o.makeMessageType("viam.component.base.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),tr=o.makeMessageType("viam.component.base.v1.GetPropertiesResponse",()=>[{no:1,name:"width_meters",kind:"scalar",T:1},{no:2,name:"turning_radius_meters",kind:"scalar",T:1},{no:3,name:"wheel_circumference_meters",kind:"scalar",T:1}]),_d=Object.freeze(Object.defineProperty({__proto__:null,GetPropertiesRequest:nr,GetPropertiesResponse:tr,IsMovingRequest:Qs,IsMovingResponse:er,MoveStraightRequest:js,MoveStraightResponse:Vs,SetPowerRequest:zs,SetPowerResponse:Ks,SetVelocityRequest:Xs,SetVelocityResponse:Zs,SpinRequest:Ws,SpinResponse:$s,StopRequest:Ys,StopResponse:Hs},Symbol.toStringTag,{value:"Module"})),Md={typeName:"viam.component.base.v1.BaseService",methods:{moveStraight:{name:"MoveStraight",I:js,O:Vs,kind:i.Unary},spin:{name:"Spin",I:Ws,O:$s,kind:i.Unary},setPower:{name:"SetPower",I:zs,O:Ks,kind:i.Unary},setVelocity:{name:"SetVelocity",I:Xs,O:Zs,kind:i.Unary},stop:{name:"Stop",I:Ys,O:Hs,kind:i.Unary},isMoving:{name:"IsMoving",I:Qs,O:er,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary},getProperties:{name:"GetProperties",I:nr,O:tr,kind:i.Unary}}},ar=o.makeEnum("viam.component.board.v1.PowerMode",[{no:0,name:"POWER_MODE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"POWER_MODE_NORMAL",localName:"NORMAL"},{no:2,name:"POWER_MODE_OFFLINE_DEEP",localName:"OFFLINE_DEEP"}]),Nd=o.makeMessageType("viam.component.board.v1.Status",()=>[{no:1,name:"analogs",kind:"map",K:9,V:{kind:"scalar",T:5}},{no:2,name:"digital_interrupts",kind:"map",K:9,V:{kind:"scalar",T:3}}]),sr=o.makeMessageType("viam.component.board.v1.SetGPIORequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:3,name:"high",kind:"scalar",T:8},{no:99,name:"extra",kind:"message",T:h}]),rr=o.makeMessageType("viam.component.board.v1.SetGPIOResponse",[]),or=o.makeMessageType("viam.component.board.v1.GetGPIORequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),ir=o.makeMessageType("viam.component.board.v1.GetGPIOResponse",()=>[{no:1,name:"high",kind:"scalar",T:8}]),mr=o.makeMessageType("viam.component.board.v1.PWMRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),cr=o.makeMessageType("viam.component.board.v1.PWMResponse",()=>[{no:1,name:"duty_cycle_pct",kind:"scalar",T:1}]),dr=o.makeMessageType("viam.component.board.v1.SetPWMRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:3,name:"duty_cycle_pct",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),lr=o.makeMessageType("viam.component.board.v1.SetPWMResponse",[]),ur=o.makeMessageType("viam.component.board.v1.PWMFrequencyRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),pr=o.makeMessageType("viam.component.board.v1.PWMFrequencyResponse",()=>[{no:1,name:"frequency_hz",kind:"scalar",T:4}]),gr=o.makeMessageType("viam.component.board.v1.SetPWMFrequencyRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:3,name:"frequency_hz",kind:"scalar",T:4},{no:99,name:"extra",kind:"message",T:h}]),fr=o.makeMessageType("viam.component.board.v1.SetPWMFrequencyResponse",[]),Tr=o.makeMessageType("viam.component.board.v1.ReadAnalogReaderRequest",()=>[{no:1,name:"board_name",kind:"scalar",T:9},{no:2,name:"analog_reader_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),hr=o.makeMessageType("viam.component.board.v1.ReadAnalogReaderResponse",()=>[{no:1,name:"value",kind:"scalar",T:5},{no:2,name:"min_range",kind:"scalar",T:2},{no:3,name:"max_range",kind:"scalar",T:2},{no:4,name:"step_size",kind:"scalar",T:2}]),kr=o.makeMessageType("viam.component.board.v1.WriteAnalogRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin",kind:"scalar",T:9},{no:3,name:"value",kind:"scalar",T:5},{no:99,name:"extra",kind:"message",T:h}]),yr=o.makeMessageType("viam.component.board.v1.WriteAnalogResponse",[]),vr=o.makeMessageType("viam.component.board.v1.GetDigitalInterruptValueRequest",()=>[{no:1,name:"board_name",kind:"scalar",T:9},{no:2,name:"digital_interrupt_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),br=o.makeMessageType("viam.component.board.v1.GetDigitalInterruptValueResponse",()=>[{no:1,name:"value",kind:"scalar",T:3}]),Sr=o.makeMessageType("viam.component.board.v1.StreamTicksRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"pin_names",kind:"scalar",T:9,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),wr=o.makeMessageType("viam.component.board.v1.StreamTicksResponse",()=>[{no:1,name:"pin_name",kind:"scalar",T:9},{no:2,name:"time",kind:"scalar",T:4},{no:3,name:"high",kind:"scalar",T:8}]),Er=o.makeMessageType("viam.component.board.v1.SetPowerModeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"power_mode",kind:"enum",T:o.getEnumType(ar)},{no:3,name:"duration",kind:"message",T:$,opt:!0},{no:99,name:"extra",kind:"message",T:h}]),Rr=o.makeMessageType("viam.component.board.v1.SetPowerModeResponse",[]),Cd=Object.freeze(Object.defineProperty({__proto__:null,GetDigitalInterruptValueRequest:vr,GetDigitalInterruptValueResponse:br,GetGPIORequest:or,GetGPIOResponse:ir,PWMFrequencyRequest:ur,PWMFrequencyResponse:pr,PWMRequest:mr,PWMResponse:cr,PowerMode:ar,ReadAnalogReaderRequest:Tr,ReadAnalogReaderResponse:hr,SetGPIORequest:sr,SetGPIOResponse:rr,SetPWMFrequencyRequest:gr,SetPWMFrequencyResponse:fr,SetPWMRequest:dr,SetPWMResponse:lr,SetPowerModeRequest:Er,SetPowerModeResponse:Rr,Status:Nd,StreamTicksRequest:Sr,StreamTicksResponse:wr,WriteAnalogRequest:kr,WriteAnalogResponse:yr},Symbol.toStringTag,{value:"Module"})),Ud={typeName:"viam.component.board.v1.BoardService",methods:{setGPIO:{name:"SetGPIO",I:sr,O:rr,kind:i.Unary},getGPIO:{name:"GetGPIO",I:or,O:ir,kind:i.Unary},pWM:{name:"PWM",I:mr,O:cr,kind:i.Unary},setPWM:{name:"SetPWM",I:dr,O:lr,kind:i.Unary},pWMFrequency:{name:"PWMFrequency",I:ur,O:pr,kind:i.Unary},setPWMFrequency:{name:"SetPWMFrequency",I:gr,O:fr,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},readAnalogReader:{name:"ReadAnalogReader",I:Tr,O:hr,kind:i.Unary},writeAnalog:{name:"WriteAnalog",I:kr,O:yr,kind:i.Unary},getDigitalInterruptValue:{name:"GetDigitalInterruptValue",I:vr,O:br,kind:i.Unary},streamTicks:{name:"StreamTicks",I:Sr,O:wr,kind:i.ServerStreaming},setPowerMode:{name:"SetPowerMode",I:Er,O:Rr,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},Bt=o.makeEnum("viam.component.encoder.v1.PositionType",[{no:0,name:"POSITION_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"POSITION_TYPE_TICKS_COUNT",localName:"TICKS_COUNT"},{no:2,name:"POSITION_TYPE_ANGLE_DEGREES",localName:"ANGLE_DEGREES"}]),Or=o.makeMessageType("viam.component.encoder.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"position_type",kind:"enum",T:o.getEnumType(Bt),opt:!0},{no:99,name:"extra",kind:"message",T:h}]),Ir=o.makeMessageType("viam.component.encoder.v1.GetPositionResponse",()=>[{no:1,name:"value",kind:"scalar",T:2},{no:2,name:"position_type",kind:"enum",T:o.getEnumType(Bt)}]),_r=o.makeMessageType("viam.component.encoder.v1.ResetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Mr=o.makeMessageType("viam.component.encoder.v1.ResetPositionResponse",[]),Nr=o.makeMessageType("viam.component.encoder.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Cr=o.makeMessageType("viam.component.encoder.v1.GetPropertiesResponse",()=>[{no:1,name:"ticks_count_supported",kind:"scalar",T:8},{no:2,name:"angle_degrees_supported",kind:"scalar",T:8}]),Pd=Object.freeze(Object.defineProperty({__proto__:null,GetPositionRequest:Or,GetPositionResponse:Ir,GetPropertiesRequest:Nr,GetPropertiesResponse:Cr,PositionType:Bt,ResetPositionRequest:_r,ResetPositionResponse:Mr},Symbol.toStringTag,{value:"Module"})),Dd={typeName:"viam.component.encoder.v1.EncoderService",methods:{getPosition:{name:"GetPosition",I:Or,O:Ir,kind:i.Unary},resetPosition:{name:"ResetPosition",I:_r,O:Mr,kind:i.Unary},getProperties:{name:"GetProperties",I:Nr,O:Cr,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},Ad=o.makeMessageType("viam.component.gantry.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Gd=o.makeMessageType("viam.component.gantry.v1.GetPositionResponse",()=>[{no:1,name:"positions_mm",kind:"scalar",T:1,repeated:!0}]),xd=o.makeMessageType("viam.component.gantry.v1.MoveToPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"positions_mm",kind:"scalar",T:1,repeated:!0},{no:3,name:"speeds_mm_per_sec",kind:"scalar",T:1,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),Fd=o.makeMessageType("viam.component.gantry.v1.MoveToPositionResponse",[]),Ld=o.makeMessageType("viam.component.gantry.v1.HomeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),qd=o.makeMessageType("viam.component.gantry.v1.HomeResponse",()=>[{no:1,name:"homed",kind:"scalar",T:8}]),Bd=o.makeMessageType("viam.component.gantry.v1.GetLengthsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Jd=o.makeMessageType("viam.component.gantry.v1.GetLengthsResponse",()=>[{no:1,name:"lengths_mm",kind:"scalar",T:1,repeated:!0}]),jd=o.makeMessageType("viam.component.gantry.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Vd=o.makeMessageType("viam.component.gantry.v1.StopResponse",[]),Wd=o.makeMessageType("viam.component.gantry.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),$d=o.makeMessageType("viam.component.gantry.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),Yd={typeName:"viam.component.gantry.v1.GantryService",methods:{getPosition:{name:"GetPosition",I:Ad,O:Gd,kind:i.Unary},moveToPosition:{name:"MoveToPosition",I:xd,O:Fd,kind:i.Unary},home:{name:"Home",I:Ld,O:qd,kind:i.Unary},getLengths:{name:"GetLengths",I:Bd,O:Jd,kind:i.Unary},stop:{name:"Stop",I:jd,O:Vd,kind:i.Unary},isMoving:{name:"IsMoving",I:Wd,O:$d,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getKinematics:{name:"GetKinematics",I:et,O:nt,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},Hd={typeName:"viam.component.generic.v1.GenericService",methods:{doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},zd=o.makeMessageType("viam.component.gripper.v1.OpenRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Kd=o.makeMessageType("viam.component.gripper.v1.OpenResponse",[]),Xd=o.makeMessageType("viam.component.gripper.v1.GrabRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Zd=o.makeMessageType("viam.component.gripper.v1.GrabResponse",()=>[{no:1,name:"success",kind:"scalar",T:8},{no:99,name:"extra",kind:"message",T:h}]),Qd=o.makeMessageType("viam.component.gripper.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),el=o.makeMessageType("viam.component.gripper.v1.StopResponse",[]),nl=o.makeMessageType("viam.component.gripper.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),tl=o.makeMessageType("viam.component.gripper.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),al=o.makeMessageType("viam.component.gripper.v1.IsHoldingSomethingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),sl=o.makeMessageType("viam.component.gripper.v1.IsHoldingSomethingResponse",()=>[{no:1,name:"is_holding_something",kind:"scalar",T:8},{no:99,name:"meta",kind:"message",T:h}]),rl={typeName:"viam.component.gripper.v1.GripperService",methods:{open:{name:"Open",I:zd,O:Kd,kind:i.Unary},grab:{name:"Grab",I:Xd,O:Zd,kind:i.Unary},stop:{name:"Stop",I:Qd,O:el,kind:i.Unary},isMoving:{name:"IsMoving",I:nl,O:tl,kind:i.Unary},isHoldingSomething:{name:"IsHoldingSomething",I:al,O:sl,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary},getKinematics:{name:"GetKinematics",I:et,O:nt,kind:i.Unary}}},Ur=o.makeMessageType("viam.component.inputcontroller.v1.GetControlsRequest",()=>[{no:1,name:"controller",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Pr=o.makeMessageType("viam.component.inputcontroller.v1.GetControlsResponse",()=>[{no:1,name:"controls",kind:"scalar",T:9,repeated:!0}]),Dr=o.makeMessageType("viam.component.inputcontroller.v1.GetEventsRequest",()=>[{no:1,name:"controller",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ar=o.makeMessageType("viam.component.inputcontroller.v1.GetEventsResponse",()=>[{no:1,name:"events",kind:"message",T:hn,repeated:!0}]),Gr=o.makeMessageType("viam.component.inputcontroller.v1.TriggerEventRequest",()=>[{no:1,name:"controller",kind:"scalar",T:9},{no:2,name:"event",kind:"message",T:hn},{no:99,name:"extra",kind:"message",T:h}]),xr=o.makeMessageType("viam.component.inputcontroller.v1.TriggerEventResponse",[]),hn=o.makeMessageType("viam.component.inputcontroller.v1.Event",()=>[{no:1,name:"time",kind:"message",T:A},{no:2,name:"event",kind:"scalar",T:9},{no:3,name:"control",kind:"scalar",T:9},{no:4,name:"value",kind:"scalar",T:1}]),Fr=o.makeMessageType("viam.component.inputcontroller.v1.StreamEventsRequest",()=>[{no:1,name:"controller",kind:"scalar",T:9},{no:2,name:"events",kind:"message",T:Lr,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),Lr=o.makeMessageType("viam.component.inputcontroller.v1.StreamEventsRequest.Events",()=>[{no:1,name:"control",kind:"scalar",T:9},{no:2,name:"events",kind:"scalar",T:9,repeated:!0},{no:3,name:"cancelled_events",kind:"scalar",T:9,repeated:!0}],{localName:"StreamEventsRequest_Events"}),qr=o.makeMessageType("viam.component.inputcontroller.v1.StreamEventsResponse",()=>[{no:1,name:"event",kind:"message",T:hn}]),ol=o.makeMessageType("viam.component.inputcontroller.v1.Status",()=>[{no:1,name:"events",kind:"message",T:hn,repeated:!0}]),il=Object.freeze(Object.defineProperty({__proto__:null,Event:hn,GetControlsRequest:Ur,GetControlsResponse:Pr,GetEventsRequest:Dr,GetEventsResponse:Ar,Status:ol,StreamEventsRequest:Fr,StreamEventsRequest_Events:Lr,StreamEventsResponse:qr,TriggerEventRequest:Gr,TriggerEventResponse:xr},Symbol.toStringTag,{value:"Module"})),ml={typeName:"viam.component.inputcontroller.v1.InputControllerService",methods:{getControls:{name:"GetControls",I:Ur,O:Pr,kind:i.Unary},getEvents:{name:"GetEvents",I:Dr,O:Ar,kind:i.Unary},streamEvents:{name:"StreamEvents",I:Fr,O:qr,kind:i.ServerStreaming},triggerEvent:{name:"TriggerEvent",I:Gr,O:xr,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},cl=o.makeMessageType("viam.component.motor.v1.SetPowerRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"power_pct",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),dl=o.makeMessageType("viam.component.motor.v1.SetPowerResponse",[]),ll=o.makeMessageType("viam.component.motor.v1.GoForRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"rpm",kind:"scalar",T:1},{no:3,name:"revolutions",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),ul=o.makeMessageType("viam.component.motor.v1.GoForResponse",[]),pl=o.makeMessageType("viam.component.motor.v1.GoToRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"rpm",kind:"scalar",T:1},{no:3,name:"position_revolutions",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),gl=o.makeMessageType("viam.component.motor.v1.GoToResponse",[]),fl=o.makeMessageType("viam.component.motor.v1.SetRPMRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"rpm",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),Tl=o.makeMessageType("viam.component.motor.v1.SetRPMResponse",[]),hl=o.makeMessageType("viam.component.motor.v1.ResetZeroPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"offset",kind:"scalar",T:1},{no:99,name:"extra",kind:"message",T:h}]),kl=o.makeMessageType("viam.component.motor.v1.ResetZeroPositionResponse",[]),yl=o.makeMessageType("viam.component.motor.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),vl=o.makeMessageType("viam.component.motor.v1.GetPositionResponse",()=>[{no:1,name:"position",kind:"scalar",T:1}]),bl=o.makeMessageType("viam.component.motor.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Sl=o.makeMessageType("viam.component.motor.v1.StopResponse",[]),wl=o.makeMessageType("viam.component.motor.v1.IsPoweredRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),El=o.makeMessageType("viam.component.motor.v1.IsPoweredResponse",()=>[{no:1,name:"is_on",kind:"scalar",T:8},{no:2,name:"power_pct",kind:"scalar",T:1}]),Rl=o.makeMessageType("viam.component.motor.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ol=o.makeMessageType("viam.component.motor.v1.GetPropertiesResponse",()=>[{no:1,name:"position_reporting",kind:"scalar",T:8}]),Il=o.makeMessageType("viam.component.motor.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),_l=o.makeMessageType("viam.component.motor.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),Ml={typeName:"viam.component.motor.v1.MotorService",methods:{setPower:{name:"SetPower",I:cl,O:dl,kind:i.Unary},goFor:{name:"GoFor",I:ll,O:ul,kind:i.Unary},goTo:{name:"GoTo",I:pl,O:gl,kind:i.Unary},setRPM:{name:"SetRPM",I:fl,O:Tl,kind:i.Unary},resetZeroPosition:{name:"ResetZeroPosition",I:hl,O:kl,kind:i.Unary},getPosition:{name:"GetPosition",I:yl,O:vl,kind:i.Unary},getProperties:{name:"GetProperties",I:Rl,O:Ol,kind:i.Unary},stop:{name:"Stop",I:bl,O:Sl,kind:i.Unary},isPowered:{name:"IsPowered",I:wl,O:El,kind:i.Unary},isMoving:{name:"IsMoving",I:Il,O:_l,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},Br=o.makeMessageType("viam.component.movementsensor.v1.GetLinearVelocityRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Jr=o.makeMessageType("viam.component.movementsensor.v1.GetLinearVelocityResponse",()=>[{no:1,name:"linear_velocity",kind:"message",T:Ue}]),jr=o.makeMessageType("viam.component.movementsensor.v1.GetAngularVelocityRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Vr=o.makeMessageType("viam.component.movementsensor.v1.GetAngularVelocityResponse",()=>[{no:1,name:"angular_velocity",kind:"message",T:Ue}]),Wr=o.makeMessageType("viam.component.movementsensor.v1.GetCompassHeadingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),$r=o.makeMessageType("viam.component.movementsensor.v1.GetCompassHeadingResponse",()=>[{no:1,name:"value",kind:"scalar",T:1}]),Yr=o.makeMessageType("viam.component.movementsensor.v1.GetOrientationRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Hr=o.makeMessageType("viam.component.movementsensor.v1.GetOrientationResponse",()=>[{no:1,name:"orientation",kind:"message",T:hs}]),zr=o.makeMessageType("viam.component.movementsensor.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Kr=o.makeMessageType("viam.component.movementsensor.v1.GetPositionResponse",()=>[{no:1,name:"coordinate",kind:"message",T:Be},{no:2,name:"altitude_m",kind:"scalar",T:2}]),Xr=o.makeMessageType("viam.component.movementsensor.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Zr=o.makeMessageType("viam.component.movementsensor.v1.GetPropertiesResponse",()=>[{no:1,name:"linear_velocity_supported",kind:"scalar",T:8},{no:2,name:"angular_velocity_supported",kind:"scalar",T:8},{no:3,name:"orientation_supported",kind:"scalar",T:8},{no:4,name:"position_supported",kind:"scalar",T:8},{no:5,name:"compass_heading_supported",kind:"scalar",T:8},{no:6,name:"linear_acceleration_supported",kind:"scalar",T:8}]),Qr=o.makeMessageType("viam.component.movementsensor.v1.GetAccuracyRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),eo=o.makeMessageType("viam.component.movementsensor.v1.GetAccuracyResponse",()=>[{no:1,name:"accuracy",kind:"map",K:9,V:{kind:"scalar",T:2}},{no:2,name:"position_hdop",kind:"scalar",T:2,opt:!0},{no:3,name:"position_vdop",kind:"scalar",T:2,opt:!0},{no:4,name:"position_nmea_gga_fix",kind:"scalar",T:5,opt:!0},{no:5,name:"compass_degrees_error",kind:"scalar",T:2,opt:!0}]),no=o.makeMessageType("viam.component.movementsensor.v1.GetLinearAccelerationRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),to=o.makeMessageType("viam.component.movementsensor.v1.GetLinearAccelerationResponse",()=>[{no:1,name:"linear_acceleration",kind:"message",T:Ue}]),Nl=Object.freeze(Object.defineProperty({__proto__:null,GetAccuracyRequest:Qr,GetAccuracyResponse:eo,GetAngularVelocityRequest:jr,GetAngularVelocityResponse:Vr,GetCompassHeadingRequest:Wr,GetCompassHeadingResponse:$r,GetLinearAccelerationRequest:no,GetLinearAccelerationResponse:to,GetLinearVelocityRequest:Br,GetLinearVelocityResponse:Jr,GetOrientationRequest:Yr,GetOrientationResponse:Hr,GetPositionRequest:zr,GetPositionResponse:Kr,GetPropertiesRequest:Xr,GetPropertiesResponse:Zr},Symbol.toStringTag,{value:"Module"})),Cl={typeName:"viam.component.movementsensor.v1.MovementSensorService",methods:{getLinearVelocity:{name:"GetLinearVelocity",I:Br,O:Jr,kind:i.Unary},getAngularVelocity:{name:"GetAngularVelocity",I:jr,O:Vr,kind:i.Unary},getCompassHeading:{name:"GetCompassHeading",I:Wr,O:$r,kind:i.Unary},getOrientation:{name:"GetOrientation",I:Yr,O:Hr,kind:i.Unary},getPosition:{name:"GetPosition",I:zr,O:Kr,kind:i.Unary},getProperties:{name:"GetProperties",I:Xr,O:Zr,kind:i.Unary},getAccuracy:{name:"GetAccuracy",I:Qr,O:eo,kind:i.Unary},getLinearAcceleration:{name:"GetLinearAcceleration",I:no,O:to,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary},getReadings:{name:"GetReadings",I:Lt,O:qt,kind:i.Unary}}},Ul=o.makeMessageType("viam.component.powersensor.v1.GetVoltageRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Pl=o.makeMessageType("viam.component.powersensor.v1.GetVoltageResponse",()=>[{no:1,name:"volts",kind:"scalar",T:1},{no:2,name:"is_ac",kind:"scalar",T:8}]),Dl=o.makeMessageType("viam.component.powersensor.v1.GetCurrentRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Al=o.makeMessageType("viam.component.powersensor.v1.GetCurrentResponse",()=>[{no:1,name:"amperes",kind:"scalar",T:1},{no:2,name:"is_ac",kind:"scalar",T:8}]),Gl=o.makeMessageType("viam.component.powersensor.v1.GetPowerRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),xl=o.makeMessageType("viam.component.powersensor.v1.GetPowerResponse",()=>[{no:1,name:"watts",kind:"scalar",T:1}]),Fl={typeName:"viam.component.powersensor.v1.PowerSensorService",methods:{getVoltage:{name:"GetVoltage",I:Ul,O:Pl,kind:i.Unary},getCurrent:{name:"GetCurrent",I:Dl,O:Al,kind:i.Unary},getPower:{name:"GetPower",I:Gl,O:xl,kind:i.Unary},getReadings:{name:"GetReadings",I:Lt,O:qt,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},Ll=o.makeMessageType("viam.component.servo.v1.MoveRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"angle_deg",kind:"scalar",T:13},{no:99,name:"extra",kind:"message",T:h}]),ql=o.makeMessageType("viam.component.servo.v1.MoveResponse",[]),Bl=o.makeMessageType("viam.component.servo.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Jl=o.makeMessageType("viam.component.servo.v1.GetPositionResponse",()=>[{no:1,name:"position_deg",kind:"scalar",T:13}]),jl=o.makeMessageType("viam.component.servo.v1.StopRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Vl=o.makeMessageType("viam.component.servo.v1.StopResponse",[]),Wl=o.makeMessageType("viam.component.servo.v1.IsMovingRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),$l=o.makeMessageType("viam.component.servo.v1.IsMovingResponse",()=>[{no:1,name:"is_moving",kind:"scalar",T:8}]),Yl={typeName:"viam.component.servo.v1.ServoService",methods:{move:{name:"Move",I:Ll,O:ql,kind:i.Unary},getPosition:{name:"GetPosition",I:Bl,O:Jl,kind:i.Unary},stop:{name:"Stop",I:jl,O:Vl,kind:i.Unary},isMoving:{name:"IsMoving",I:Wl,O:$l,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary},getGeometries:{name:"GetGeometries",I:z,O:K,kind:i.Unary}}},ao=o.makeMessageType("opentelemetry.proto.common.v1.AnyValue",()=>[{no:1,name:"string_value",kind:"scalar",T:9,oneof:"value"},{no:2,name:"bool_value",kind:"scalar",T:8,oneof:"value"},{no:3,name:"int_value",kind:"scalar",T:3,oneof:"value"},{no:4,name:"double_value",kind:"scalar",T:1,oneof:"value"},{no:5,name:"array_value",kind:"message",T:Hl,oneof:"value"},{no:6,name:"kvlist_value",kind:"message",T:zl,oneof:"value"},{no:7,name:"bytes_value",kind:"scalar",T:12,oneof:"value"}]),Hl=o.makeMessageType("opentelemetry.proto.common.v1.ArrayValue",()=>[{no:1,name:"values",kind:"message",T:ao,repeated:!0}]),zl=o.makeMessageType("opentelemetry.proto.common.v1.KeyValueList",()=>[{no:1,name:"values",kind:"message",T:en,repeated:!0}]),en=o.makeMessageType("opentelemetry.proto.common.v1.KeyValue",()=>[{no:1,name:"key",kind:"scalar",T:9},{no:2,name:"value",kind:"message",T:ao}]),Kl=o.makeMessageType("opentelemetry.proto.common.v1.InstrumentationScope",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"attributes",kind:"message",T:en,repeated:!0},{no:4,name:"dropped_attributes_count",kind:"scalar",T:13}]),Xl=o.makeMessageType("opentelemetry.proto.common.v1.EntityRef",()=>[{no:1,name:"schema_url",kind:"scalar",T:9},{no:2,name:"type",kind:"scalar",T:9},{no:3,name:"id_keys",kind:"scalar",T:9,repeated:!0},{no:4,name:"description_keys",kind:"scalar",T:9,repeated:!0}]),Zl=o.makeMessageType("opentelemetry.proto.resource.v1.Resource",()=>[{no:1,name:"attributes",kind:"message",T:en,repeated:!0},{no:2,name:"dropped_attributes_count",kind:"scalar",T:13},{no:3,name:"entity_refs",kind:"message",T:Xl,repeated:!0}]),Ql=o.makeMessageType("opentelemetry.proto.trace.v1.ResourceSpans",()=>[{no:1,name:"resource",kind:"message",T:Zl},{no:2,name:"scope_spans",kind:"message",T:eu,repeated:!0},{no:3,name:"schema_url",kind:"scalar",T:9}]),eu=o.makeMessageType("opentelemetry.proto.trace.v1.ScopeSpans",()=>[{no:1,name:"scope",kind:"message",T:Kl},{no:2,name:"spans",kind:"message",T:nu,repeated:!0},{no:3,name:"schema_url",kind:"scalar",T:9}]),nu=o.makeMessageType("opentelemetry.proto.trace.v1.Span",()=>[{no:1,name:"trace_id",kind:"scalar",T:12},{no:2,name:"span_id",kind:"scalar",T:12},{no:3,name:"trace_state",kind:"scalar",T:9},{no:4,name:"parent_span_id",kind:"scalar",T:12},{no:16,name:"flags",kind:"scalar",T:7},{no:5,name:"name",kind:"scalar",T:9},{no:6,name:"kind",kind:"enum",T:o.getEnumType(tu)},{no:7,name:"start_time_unix_nano",kind:"scalar",T:6},{no:8,name:"end_time_unix_nano",kind:"scalar",T:6},{no:9,name:"attributes",kind:"message",T:en,repeated:!0},{no:10,name:"dropped_attributes_count",kind:"scalar",T:13},{no:11,name:"events",kind:"message",T:au,repeated:!0},{no:12,name:"dropped_events_count",kind:"scalar",T:13},{no:13,name:"links",kind:"message",T:su,repeated:!0},{no:14,name:"dropped_links_count",kind:"scalar",T:13},{no:15,name:"status",kind:"message",T:ru}]),tu=o.makeEnum("opentelemetry.proto.trace.v1.Span.SpanKind",[{no:0,name:"SPAN_KIND_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"SPAN_KIND_INTERNAL",localName:"INTERNAL"},{no:2,name:"SPAN_KIND_SERVER",localName:"SERVER"},{no:3,name:"SPAN_KIND_CLIENT",localName:"CLIENT"},{no:4,name:"SPAN_KIND_PRODUCER",localName:"PRODUCER"},{no:5,name:"SPAN_KIND_CONSUMER",localName:"CONSUMER"}]),au=o.makeMessageType("opentelemetry.proto.trace.v1.Span.Event",()=>[{no:1,name:"time_unix_nano",kind:"scalar",T:6},{no:2,name:"name",kind:"scalar",T:9},{no:3,name:"attributes",kind:"message",T:en,repeated:!0},{no:4,name:"dropped_attributes_count",kind:"scalar",T:13}],{localName:"Span_Event"}),su=o.makeMessageType("opentelemetry.proto.trace.v1.Span.Link",()=>[{no:1,name:"trace_id",kind:"scalar",T:12},{no:2,name:"span_id",kind:"scalar",T:12},{no:3,name:"trace_state",kind:"scalar",T:9},{no:4,name:"attributes",kind:"message",T:en,repeated:!0},{no:5,name:"dropped_attributes_count",kind:"scalar",T:13},{no:6,name:"flags",kind:"scalar",T:7}],{localName:"Span_Link"}),ru=o.makeMessageType("opentelemetry.proto.trace.v1.Status",()=>[{no:2,name:"message",kind:"scalar",T:9},{no:3,name:"code",kind:"enum",T:o.getEnumType(ou)}]),ou=o.makeEnum("opentelemetry.proto.trace.v1.Status.StatusCode",[{no:0,name:"STATUS_CODE_UNSET",localName:"UNSET"},{no:1,name:"STATUS_CODE_OK",localName:"OK"},{no:2,name:"STATUS_CODE_ERROR",localName:"ERROR"}]),iu=o.makeEnum("viam.robot.v1.PeerConnectionType",[{no:0,name:"PEER_CONNECTION_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"PEER_CONNECTION_TYPE_GRPC",localName:"GRPC"},{no:2,name:"PEER_CONNECTION_TYPE_WEBRTC",localName:"WEBRTC"}]),mu=o.makeMessageType("viam.robot.v1.SendTracesRequest",()=>[{no:1,name:"resource_spans",kind:"message",T:Ql,repeated:!0}]),cu=o.makeMessageType("viam.robot.v1.SendTracesResponse",[]),du=o.makeMessageType("viam.robot.v1.TunnelRequest",()=>[{no:1,name:"destination_port",kind:"scalar",T:13},{no:2,name:"data",kind:"scalar",T:12}]),lu=o.makeMessageType("viam.robot.v1.TunnelResponse",()=>[{no:1,name:"data",kind:"scalar",T:12}]),uu=o.makeMessageType("viam.robot.v1.ListTunnelsRequest",[]),pu=o.makeMessageType("viam.robot.v1.ListTunnelsResponse",()=>[{no:1,name:"tunnels",kind:"message",T:gu,repeated:!0}]),gu=o.makeMessageType("viam.robot.v1.Tunnel",()=>[{no:1,name:"port",kind:"scalar",T:13},{no:2,name:"connection_timeout",kind:"message",T:$}]),fu=o.makeMessageType("viam.robot.v1.FrameSystemConfig",()=>[{no:1,name:"frame",kind:"message",T:De},{no:2,name:"kinematics",kind:"message",T:h}]),Tu=o.makeMessageType("viam.robot.v1.FrameSystemConfigRequest",()=>[{no:1,name:"supplemental_transforms",kind:"message",T:De,repeated:!0}]),hu=o.makeMessageType("viam.robot.v1.FrameSystemConfigResponse",()=>[{no:1,name:"frame_system_configs",kind:"message",T:fu,repeated:!0}]),so=o.makeMessageType("viam.robot.v1.TransformPoseRequest",()=>[{no:1,name:"source",kind:"message",T:We},{no:2,name:"destination",kind:"scalar",T:9},{no:3,name:"supplemental_transforms",kind:"message",T:De,repeated:!0}]),ku=o.makeMessageType("viam.robot.v1.TransformPoseResponse",()=>[{no:1,name:"pose",kind:"message",T:We}]),ro=o.makeMessageType("viam.robot.v1.TransformPCDRequest",()=>[{no:1,name:"point_cloud_pcd",kind:"scalar",T:12},{no:2,name:"source",kind:"scalar",T:9},{no:3,name:"destination",kind:"scalar",T:9}]),yu=o.makeMessageType("viam.robot.v1.TransformPCDResponse",()=>[{no:1,name:"point_cloud_pcd",kind:"scalar",T:12}]),vu=o.makeMessageType("viam.robot.v1.ResourceNamesRequest",[]),bu=o.makeMessageType("viam.robot.v1.ResourceNamesResponse",()=>[{no:1,name:"resources",kind:"message",T:G,repeated:!0}]),Su=o.makeMessageType("viam.robot.v1.ResourceRPCSubtype",()=>[{no:1,name:"subtype",kind:"message",T:G},{no:2,name:"proto_service",kind:"scalar",T:9}]),wu=o.makeMessageType("viam.robot.v1.ResourceRPCSubtypesRequest",[]),Eu=o.makeMessageType("viam.robot.v1.ResourceRPCSubtypesResponse",()=>[{no:1,name:"resource_rpc_subtypes",kind:"message",T:Su,repeated:!0}]),Ru=o.makeMessageType("viam.robot.v1.Operation",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"method",kind:"scalar",T:9},{no:3,name:"arguments",kind:"message",T:h},{no:4,name:"started",kind:"message",T:A},{no:5,name:"session_id",kind:"scalar",T:9,opt:!0}]),Ou=o.makeMessageType("viam.robot.v1.GetOperationsRequest",[]),Iu=o.makeMessageType("viam.robot.v1.GetOperationsResponse",()=>[{no:1,name:"operations",kind:"message",T:Ru,repeated:!0}]),_u=o.makeMessageType("viam.robot.v1.CancelOperationRequest",()=>[{no:1,name:"id",kind:"scalar",T:9}]),Mu=o.makeMessageType("viam.robot.v1.CancelOperationResponse",[]),Nu=o.makeMessageType("viam.robot.v1.BlockForOperationRequest",()=>[{no:1,name:"id",kind:"scalar",T:9}]),Cu=o.makeMessageType("viam.robot.v1.BlockForOperationResponse",[]),Uu=o.makeMessageType("viam.robot.v1.PeerConnectionInfo",()=>[{no:1,name:"type",kind:"enum",T:o.getEnumType(iu)},{no:2,name:"remote_address",kind:"scalar",T:9,opt:!0},{no:3,name:"local_address",kind:"scalar",T:9,opt:!0}]),Pu=o.makeMessageType("viam.robot.v1.Session",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"peer_connection_info",kind:"message",T:Uu,opt:!0}]),Du=o.makeMessageType("viam.robot.v1.GetSessionsRequest",[]),Au=o.makeMessageType("viam.robot.v1.GetSessionsResponse",()=>[{no:1,name:"sessions",kind:"message",T:Pu,repeated:!0}]),Gu=o.makeMessageType("viam.robot.v1.ModuleModel",()=>[{no:1,name:"module_name",kind:"scalar",T:9},{no:2,name:"model",kind:"scalar",T:9},{no:3,name:"api",kind:"scalar",T:9},{no:4,name:"from_local_module",kind:"scalar",T:8}]),oo=o.makeMessageType("viam.robot.v1.GetModelsFromModulesRequest",[]),xu=o.makeMessageType("viam.robot.v1.GetModelsFromModulesResponse",()=>[{no:1,name:"models",kind:"message",T:Gu,repeated:!0}]),io=o.makeMessageType("viam.robot.v1.Status",()=>[{no:1,name:"name",kind:"message",T:G},{no:2,name:"status",kind:"message",T:h},{no:3,name:"last_reconfigured",kind:"message",T:A}]),Fu=o.makeMessageType("viam.robot.v1.GetStatusRequest",()=>[{no:1,name:"resource_names",kind:"message",T:G,repeated:!0}]),Lu=o.makeMessageType("viam.robot.v1.GetStatusResponse",()=>[{no:1,name:"status",kind:"message",T:io,repeated:!0}]),qu=o.makeMessageType("viam.robot.v1.StreamStatusRequest",()=>[{no:1,name:"resource_names",kind:"message",T:G,repeated:!0},{no:2,name:"every",kind:"message",T:$}]),Bu=o.makeMessageType("viam.robot.v1.StreamStatusResponse",()=>[{no:1,name:"status",kind:"message",T:io,repeated:!0}]),Ju=o.makeMessageType("viam.robot.v1.StopExtraParameters",()=>[{no:1,name:"name",kind:"message",T:G},{no:2,name:"params",kind:"message",T:h}]),ju=o.makeMessageType("viam.robot.v1.StopAllRequest",()=>[{no:99,name:"extra",kind:"message",T:Ju,repeated:!0}]),Vu=o.makeMessageType("viam.robot.v1.StopAllResponse",[]),mo=o.makeMessageType("viam.robot.v1.StartSessionRequest",()=>[{no:1,name:"resume",kind:"scalar",T:9}]),Wu=o.makeMessageType("viam.robot.v1.StartSessionResponse",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"heartbeat_window",kind:"message",T:$}]),co=o.makeMessageType("viam.robot.v1.SendSessionHeartbeatRequest",()=>[{no:1,name:"id",kind:"scalar",T:9}]),$u=o.makeMessageType("viam.robot.v1.SendSessionHeartbeatResponse",[]),Yu=o.makeMessageType("viam.robot.v1.LogRequest",()=>[{no:1,name:"logs",kind:"message",T:Rs,repeated:!0}]),Hu=o.makeMessageType("viam.robot.v1.LogResponse",[]),zu=o.makeMessageType("viam.robot.v1.GetCloudMetadataRequest",[]),lo=o.makeMessageType("viam.robot.v1.GetCloudMetadataResponse",()=>[{no:1,name:"robot_part_id",kind:"scalar",T:9},{no:2,name:"primary_org_id",kind:"scalar",T:9},{no:3,name:"location_id",kind:"scalar",T:9},{no:4,name:"machine_id",kind:"scalar",T:9},{no:5,name:"machine_part_id",kind:"scalar",T:9}]),uo=o.makeMessageType("viam.robot.v1.RestartModuleRequest",()=>[{no:1,name:"module_id",kind:"scalar",T:9,oneof:"id_or_name"},{no:2,name:"module_name",kind:"scalar",T:9,oneof:"id_or_name"}]),Ku=o.makeMessageType("viam.robot.v1.RestartModuleResponse",[]),Xu=o.makeMessageType("viam.robot.v1.ShutdownRequest",[]),Zu=o.makeMessageType("viam.robot.v1.ShutdownResponse",[]),Qu=o.makeMessageType("viam.robot.v1.GetMachineStatusRequest",[]),ep=o.makeMessageType("viam.robot.v1.GetMachineStatusResponse",()=>[{no:1,name:"resources",kind:"message",T:ap,repeated:!0},{no:2,name:"config",kind:"message",T:rp},{no:3,name:"state",kind:"enum",T:o.getEnumType(np)},{no:4,name:"job_statuses",kind:"message",T:tp,repeated:!0}]),np=o.makeEnum("viam.robot.v1.GetMachineStatusResponse.State",[{no:0,name:"STATE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"STATE_INITIALIZING",localName:"INITIALIZING"},{no:2,name:"STATE_RUNNING",localName:"RUNNING"}]),tp=o.makeMessageType("viam.robot.v1.JobStatus",()=>[{no:1,name:"job_name",kind:"scalar",T:9},{no:2,name:"recent_successful_runs",kind:"message",T:A,repeated:!0},{no:3,name:"recent_failed_runs",kind:"message",T:A,repeated:!0}]),ap=o.makeMessageType("viam.robot.v1.ResourceStatus",()=>[{no:1,name:"name",kind:"message",T:G},{no:2,name:"state",kind:"enum",T:o.getEnumType(sp)},{no:3,name:"last_updated",kind:"message",T:A},{no:4,name:"revision",kind:"scalar",T:9},{no:5,name:"error",kind:"scalar",T:9},{no:6,name:"cloud_metadata",kind:"message",T:lo,opt:!0}]),sp=o.makeEnum("viam.robot.v1.ResourceStatus.State",[{no:0,name:"STATE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"STATE_UNCONFIGURED",localName:"UNCONFIGURED"},{no:2,name:"STATE_CONFIGURING",localName:"CONFIGURING"},{no:3,name:"STATE_READY",localName:"READY"},{no:4,name:"STATE_REMOVING",localName:"REMOVING"},{no:5,name:"STATE_UNHEALTHY",localName:"UNHEALTHY"}]),rp=o.makeMessageType("viam.robot.v1.ConfigStatus",()=>[{no:1,name:"revision",kind:"scalar",T:9},{no:2,name:"last_updated",kind:"message",T:A}]),op=o.makeMessageType("viam.robot.v1.GetVersionRequest",[]),ip=o.makeMessageType("viam.robot.v1.GetVersionResponse",()=>[{no:1,name:"platform",kind:"scalar",T:9},{no:2,name:"version",kind:"scalar",T:9},{no:3,name:"api_version",kind:"scalar",T:9}]),po=o.makeMessageType("viam.robot.v1.GetPoseRequest",()=>[{no:1,name:"component_name",kind:"scalar",T:9},{no:2,name:"destination_frame",kind:"scalar",T:9},{no:3,name:"supplemental_transforms",kind:"message",T:De,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),mp=o.makeMessageType("viam.robot.v1.GetPoseResponse",()=>[{no:1,name:"pose",kind:"message",T:We}]),Jt={typeName:"viam.robot.v1.RobotService",methods:{getOperations:{name:"GetOperations",I:Ou,O:Iu,kind:i.Unary},getSessions:{name:"GetSessions",I:Du,O:Au,kind:i.Unary},resourceNames:{name:"ResourceNames",I:vu,O:bu,kind:i.Unary},resourceRPCSubtypes:{name:"ResourceRPCSubtypes",I:wu,O:Eu,kind:i.Unary},cancelOperation:{name:"CancelOperation",I:_u,O:Mu,kind:i.Unary},blockForOperation:{name:"BlockForOperation",I:Nu,O:Cu,kind:i.Unary},getModelsFromModules:{name:"GetModelsFromModules",I:oo,O:xu,kind:i.Unary},getStatus:{name:"GetStatus",I:Fu,O:Lu,kind:i.Unary},streamStatus:{name:"StreamStatus",I:qu,O:Bu,kind:i.ServerStreaming},stopAll:{name:"StopAll",I:ju,O:Vu,kind:i.Unary},startSession:{name:"StartSession",I:mo,O:Wu,kind:i.Unary},sendSessionHeartbeat:{name:"SendSessionHeartbeat",I:co,O:$u,kind:i.Unary},log:{name:"Log",I:Yu,O:Hu,kind:i.Unary},getCloudMetadata:{name:"GetCloudMetadata",I:zu,O:lo,kind:i.Unary},restartModule:{name:"RestartModule",I:uo,O:Ku,kind:i.Unary},shutdown:{name:"Shutdown",I:Xu,O:Zu,kind:i.Unary},getMachineStatus:{name:"GetMachineStatus",I:Qu,O:ep,kind:i.Unary},getVersion:{name:"GetVersion",I:op,O:ip,kind:i.Unary},tunnel:{name:"Tunnel",I:du,O:lu,kind:i.BiDiStreaming},listTunnels:{name:"ListTunnels",I:uu,O:pu,kind:i.Unary},frameSystemConfig:{name:"FrameSystemConfig",I:Tu,O:hu,kind:i.Unary},getPose:{name:"GetPose",I:po,O:mp,kind:i.Unary},transformPose:{name:"TransformPose",I:so,O:ku,kind:i.Unary},transformPCD:{name:"TransformPCD",I:ro,O:yu,kind:i.Unary},sendTraces:{name:"SendTraces",I:mu,O:cu,kind:i.Unary}}},cp=o.makeMessageType("viam.app.v1.ComponentConfig",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"namespace",kind:"scalar",T:9},{no:3,name:"type",kind:"scalar",T:9},{no:4,name:"model",kind:"scalar",T:9},{no:5,name:"frame",kind:"message",T:lp},{no:6,name:"depends_on",kind:"scalar",T:9,repeated:!0},{no:7,name:"service_configs",kind:"message",T:dp,repeated:!0},{no:8,name:"attributes",kind:"message",T:h},{no:9,name:"api",kind:"scalar",T:9},{no:10,name:"log_configuration",kind:"message",T:up}]),dp=o.makeMessageType("viam.app.v1.ResourceLevelServiceConfig",()=>[{no:1,name:"type",kind:"scalar",T:9},{no:2,name:"attributes",kind:"message",T:h}]),lp=o.makeMessageType("viam.app.v1.Frame",()=>[{no:1,name:"parent",kind:"scalar",T:9},{no:2,name:"translation",kind:"message",T:pp},{no:3,name:"orientation",kind:"message",T:gp},{no:4,name:"geometry",kind:"message",T:$e}]),up=o.makeMessageType("viam.app.v1.LogConfiguration",()=>[{no:1,name:"level",kind:"scalar",T:9}]),pp=o.makeMessageType("viam.app.v1.Translation",()=>[{no:1,name:"x",kind:"scalar",T:1},{no:2,name:"y",kind:"scalar",T:1},{no:3,name:"z",kind:"scalar",T:1}]),gp=o.makeMessageType("viam.app.v1.Orientation",()=>[{no:1,name:"no_orientation",kind:"message",T:fp,oneof:"type"},{no:2,name:"vector_radians",kind:"message",T:Tp,oneof:"type"},{no:3,name:"vector_degrees",kind:"message",T:hp,oneof:"type"},{no:4,name:"euler_angles",kind:"message",T:kp,oneof:"type"},{no:5,name:"axis_angles",kind:"message",T:yp,oneof:"type"},{no:6,name:"quaternion",kind:"message",T:vp,oneof:"type"}]),fp=o.makeMessageType("viam.app.v1.Orientation.NoOrientation",[],{localName:"Orientation_NoOrientation"}),Tp=o.makeMessageType("viam.app.v1.Orientation.OrientationVectorRadians",()=>[{no:1,name:"theta",kind:"scalar",T:1},{no:2,name:"x",kind:"scalar",T:1},{no:3,name:"y",kind:"scalar",T:1},{no:4,name:"z",kind:"scalar",T:1}],{localName:"Orientation_OrientationVectorRadians"}),hp=o.makeMessageType("viam.app.v1.Orientation.OrientationVectorDegrees",()=>[{no:1,name:"theta",kind:"scalar",T:1},{no:2,name:"x",kind:"scalar",T:1},{no:3,name:"y",kind:"scalar",T:1},{no:4,name:"z",kind:"scalar",T:1}],{localName:"Orientation_OrientationVectorDegrees"}),kp=o.makeMessageType("viam.app.v1.Orientation.EulerAngles",()=>[{no:1,name:"roll",kind:"scalar",T:1},{no:2,name:"pitch",kind:"scalar",T:1},{no:3,name:"yaw",kind:"scalar",T:1}],{localName:"Orientation_EulerAngles"}),yp=o.makeMessageType("viam.app.v1.Orientation.AxisAngles",()=>[{no:1,name:"theta",kind:"scalar",T:1},{no:2,name:"x",kind:"scalar",T:1},{no:3,name:"y",kind:"scalar",T:1},{no:4,name:"z",kind:"scalar",T:1}],{localName:"Orientation_AxisAngles"}),vp=o.makeMessageType("viam.app.v1.Orientation.Quaternion",()=>[{no:1,name:"w",kind:"scalar",T:1},{no:2,name:"x",kind:"scalar",T:1},{no:3,name:"y",kind:"scalar",T:1},{no:4,name:"z",kind:"scalar",T:1}],{localName:"Orientation_Quaternion"}),bp=o.makeMessageType("viam.service.discovery.v1.DiscoverResourcesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Sp=o.makeMessageType("viam.service.discovery.v1.DiscoverResourcesResponse",()=>[{no:1,name:"discoveries",kind:"message",T:cp,repeated:!0}]),wp={typeName:"viam.service.discovery.v1.DiscoveryService",methods:{discoverResources:{name:"DiscoverResources",I:bp,O:Sp,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},go=o.makeEnum("viam.service.motion.v1.PlanState",[{no:0,name:"PLAN_STATE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"PLAN_STATE_IN_PROGRESS",localName:"IN_PROGRESS"},{no:2,name:"PLAN_STATE_STOPPED",localName:"STOPPED"},{no:3,name:"PLAN_STATE_SUCCEEDED",localName:"SUCCEEDED"},{no:4,name:"PLAN_STATE_FAILED",localName:"FAILED"}]),fo=o.makeMessageType("viam.service.motion.v1.MoveRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"destination",kind:"message",T:We},{no:3,name:"component_name_deprecated",kind:"message",T:G},{no:4,name:"world_state",kind:"message",T:Ss,opt:!0},{no:5,name:"constraints",kind:"message",T:No,opt:!0},{no:6,name:"component_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),To=o.makeMessageType("viam.service.motion.v1.MoveResponse",()=>[{no:1,name:"success",kind:"scalar",T:8}]),ho=o.makeMessageType("viam.service.motion.v1.MoveOnMapRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"destination",kind:"message",T:Pe},{no:3,name:"component_name_deprecated",kind:"message",T:G},{no:4,name:"slam_service_name_deprecated",kind:"message",T:G},{no:5,name:"motion_configuration",kind:"message",T:jt,opt:!0},{no:6,name:"obstacles",kind:"message",T:$e,repeated:!0},{no:7,name:"component_name",kind:"scalar",T:9},{no:8,name:"slam_service_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),ko=o.makeMessageType("viam.service.motion.v1.MoveOnMapResponse",()=>[{no:1,name:"execution_id",kind:"scalar",T:9}]),yo=o.makeMessageType("viam.service.motion.v1.ObstacleDetector",()=>[{no:1,name:"vision_service_deprecated",kind:"message",T:G},{no:2,name:"camera_deprecated",kind:"message",T:G},{no:3,name:"vision_service",kind:"scalar",T:9},{no:4,name:"camera",kind:"scalar",T:9}]),jt=o.makeMessageType("viam.service.motion.v1.MotionConfiguration",()=>[{no:1,name:"obstacle_detectors",kind:"message",T:yo,repeated:!0},{no:2,name:"position_polling_frequency_hz",kind:"scalar",T:1,opt:!0},{no:3,name:"obstacle_polling_frequency_hz",kind:"scalar",T:1,opt:!0},{no:4,name:"plan_deviation_m",kind:"scalar",T:1,opt:!0},{no:5,name:"linear_m_per_sec",kind:"scalar",T:1,opt:!0},{no:6,name:"angular_degs_per_sec",kind:"scalar",T:1,opt:!0}]),vo=o.makeMessageType("viam.service.motion.v1.MoveOnGlobeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"destination",kind:"message",T:Be},{no:3,name:"heading",kind:"scalar",T:1,opt:!0},{no:4,name:"component_name_deprecated",kind:"message",T:G},{no:5,name:"movement_sensor_name_deprecated",kind:"message",T:G},{no:6,name:"obstacles",kind:"message",T:$n,repeated:!0},{no:7,name:"motion_configuration",kind:"message",T:jt,opt:!0},{no:8,name:"bounding_regions",kind:"message",T:$n,repeated:!0},{no:9,name:"component_name",kind:"scalar",T:9},{no:10,name:"movement_sensor_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),bo=o.makeMessageType("viam.service.motion.v1.MoveOnGlobeResponse",()=>[{no:1,name:"execution_id",kind:"scalar",T:9}]),So=o.makeMessageType("viam.service.motion.v1.GetPoseRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"destination_frame",kind:"scalar",T:9},{no:4,name:"supplemental_transforms",kind:"message",T:De,repeated:!0},{no:5,name:"component_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),wo=o.makeMessageType("viam.service.motion.v1.GetPoseResponse",()=>[{no:1,name:"pose",kind:"message",T:We}]),Eo=o.makeMessageType("viam.service.motion.v1.StopPlanRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"component_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ro=o.makeMessageType("viam.service.motion.v1.StopPlanResponse",[]),Oo=o.makeMessageType("viam.service.motion.v1.ListPlanStatusesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"only_active_plans",kind:"scalar",T:8},{no:99,name:"extra",kind:"message",T:h}]),Io=o.makeMessageType("viam.service.motion.v1.ListPlanStatusesResponse",()=>[{no:1,name:"plan_statuses_with_ids",kind:"message",T:Go,repeated:!0}]),_o=o.makeMessageType("viam.service.motion.v1.GetPlanRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"last_plan_only",kind:"scalar",T:8},{no:4,name:"execution_id",kind:"scalar",T:9,opt:!0},{no:5,name:"component_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Mo=o.makeMessageType("viam.service.motion.v1.GetPlanResponse",()=>[{no:1,name:"current_plan_with_status",kind:"message",T:Rt},{no:2,name:"replan_history",kind:"message",T:Rt,repeated:!0}]),No=o.makeMessageType("viam.service.motion.v1.Constraints",()=>[{no:1,name:"linear_constraint",kind:"message",T:Co,repeated:!0},{no:2,name:"orientation_constraint",kind:"message",T:Po,repeated:!0},{no:3,name:"collision_specification",kind:"message",T:Do,repeated:!0},{no:4,name:"pseudolinear_constraint",kind:"message",T:Uo,repeated:!0}]),Co=o.makeMessageType("viam.service.motion.v1.LinearConstraint",()=>[{no:1,name:"line_tolerance_mm",kind:"scalar",T:2,opt:!0},{no:2,name:"orientation_tolerance_degs",kind:"scalar",T:2,opt:!0}]),Uo=o.makeMessageType("viam.service.motion.v1.PseudolinearConstraint",()=>[{no:1,name:"line_tolerance_factor",kind:"scalar",T:2,opt:!0},{no:2,name:"orientation_tolerance_factor",kind:"scalar",T:2,opt:!0}]),Po=o.makeMessageType("viam.service.motion.v1.OrientationConstraint",()=>[{no:1,name:"orientation_tolerance_degs",kind:"scalar",T:2,opt:!0}]),Do=o.makeMessageType("viam.service.motion.v1.CollisionSpecification",()=>[{no:1,name:"allows",kind:"message",T:Ao,repeated:!0}]),Ao=o.makeMessageType("viam.service.motion.v1.CollisionSpecification.AllowedFrameCollisions",()=>[{no:1,name:"frame1",kind:"scalar",T:9},{no:2,name:"frame2",kind:"scalar",T:9}],{localName:"CollisionSpecification_AllowedFrameCollisions"}),Rt=o.makeMessageType("viam.service.motion.v1.PlanWithStatus",()=>[{no:1,name:"plan",kind:"message",T:xo},{no:2,name:"status",kind:"message",T:Yn},{no:3,name:"status_history",kind:"message",T:Yn,repeated:!0}]),Go=o.makeMessageType("viam.service.motion.v1.PlanStatusWithID",()=>[{no:1,name:"plan_id",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"execution_id",kind:"scalar",T:9},{no:4,name:"status",kind:"message",T:Yn},{no:5,name:"component_name",kind:"scalar",T:9}]),Yn=o.makeMessageType("viam.service.motion.v1.PlanStatus",()=>[{no:1,name:"state",kind:"enum",T:o.getEnumType(go)},{no:2,name:"timestamp",kind:"message",T:A},{no:3,name:"reason",kind:"scalar",T:9,opt:!0}]),xo=o.makeMessageType("viam.service.motion.v1.Plan",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"component_name_deprecated",kind:"message",T:G},{no:3,name:"execution_id",kind:"scalar",T:9},{no:4,name:"steps",kind:"message",T:Fo,repeated:!0},{no:5,name:"component_name",kind:"scalar",T:9}]),Fo=o.makeMessageType("viam.service.motion.v1.PlanStep",()=>[{no:1,name:"step",kind:"map",K:9,V:{kind:"message",T:Lo}}]),Lo=o.makeMessageType("viam.service.motion.v1.ComponentState",()=>[{no:1,name:"pose",kind:"message",T:Pe}]),Ep=Object.freeze(Object.defineProperty({__proto__:null,CollisionSpecification:Do,CollisionSpecification_AllowedFrameCollisions:Ao,ComponentState:Lo,Constraints:No,GetPlanRequest:_o,GetPlanResponse:Mo,GetPoseRequest:So,GetPoseResponse:wo,LinearConstraint:Co,ListPlanStatusesRequest:Oo,ListPlanStatusesResponse:Io,MotionConfiguration:jt,MoveOnGlobeRequest:vo,MoveOnGlobeResponse:bo,MoveOnMapRequest:ho,MoveOnMapResponse:ko,MoveRequest:fo,MoveResponse:To,ObstacleDetector:yo,OrientationConstraint:Po,Plan:xo,PlanState:go,PlanStatus:Yn,PlanStatusWithID:Go,PlanStep:Fo,PlanWithStatus:Rt,PseudolinearConstraint:Uo,StopPlanRequest:Eo,StopPlanResponse:Ro},Symbol.toStringTag,{value:"Module"})),Rp={typeName:"viam.service.motion.v1.MotionService",methods:{move:{name:"Move",I:fo,O:To,kind:i.Unary},moveOnMap:{name:"MoveOnMap",I:ho,O:ko,kind:i.Unary},moveOnGlobe:{name:"MoveOnGlobe",I:vo,O:bo,kind:i.Unary},getPose:{name:"GetPose",I:So,O:wo,kind:i.Unary},stopPlan:{name:"StopPlan",I:Eo,O:Ro,kind:i.Unary},listPlanStatuses:{name:"ListPlanStatuses",I:Oo,O:Io,kind:i.Unary},getPlan:{name:"GetPlan",I:_o,O:Mo,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},qo=o.makeEnum("viam.service.navigation.v1.MapType",[{no:0,name:"MAP_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"MAP_TYPE_NONE",localName:"NONE"},{no:2,name:"MAP_TYPE_GPS",localName:"GPS"}]),Vt=o.makeEnum("viam.service.navigation.v1.Mode",[{no:0,name:"MODE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"MODE_MANUAL",localName:"MANUAL"},{no:2,name:"MODE_WAYPOINT",localName:"WAYPOINT"},{no:3,name:"MODE_EXPLORE",localName:"EXPLORE"}]),Bo=o.makeMessageType("viam.service.navigation.v1.GetModeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Jo=o.makeMessageType("viam.service.navigation.v1.GetModeResponse",()=>[{no:1,name:"mode",kind:"enum",T:o.getEnumType(Vt)}]),jo=o.makeMessageType("viam.service.navigation.v1.SetModeRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"mode",kind:"enum",T:o.getEnumType(Vt)},{no:99,name:"extra",kind:"message",T:h}]),Vo=o.makeMessageType("viam.service.navigation.v1.SetModeResponse",[]),Wo=o.makeMessageType("viam.service.navigation.v1.Waypoint",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"location",kind:"message",T:Be}]),$o=o.makeMessageType("viam.service.navigation.v1.GetLocationRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Yo=o.makeMessageType("viam.service.navigation.v1.GetLocationResponse",()=>[{no:1,name:"location",kind:"message",T:Be},{no:2,name:"compass_heading",kind:"scalar",T:1}]),Ho=o.makeMessageType("viam.service.navigation.v1.GetWaypointsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),zo=o.makeMessageType("viam.service.navigation.v1.GetWaypointsResponse",()=>[{no:1,name:"waypoints",kind:"message",T:Wo,repeated:!0}]),Ko=o.makeMessageType("viam.service.navigation.v1.AddWaypointRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"location",kind:"message",T:Be},{no:99,name:"extra",kind:"message",T:h}]),Xo=o.makeMessageType("viam.service.navigation.v1.AddWaypointResponse",[]),Zo=o.makeMessageType("viam.service.navigation.v1.RemoveWaypointRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"id",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Qo=o.makeMessageType("viam.service.navigation.v1.RemoveWaypointResponse",[]),ei=o.makeMessageType("viam.service.navigation.v1.GetObstaclesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),ni=o.makeMessageType("viam.service.navigation.v1.GetObstaclesResponse",()=>[{no:1,name:"obstacles",kind:"message",T:$n,repeated:!0}]),ti=o.makeMessageType("viam.service.navigation.v1.Path",()=>[{no:1,name:"destination_waypoint_id",kind:"scalar",T:9},{no:2,name:"geopoints",kind:"message",T:Be,repeated:!0}]),ai=o.makeMessageType("viam.service.navigation.v1.GetPathsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),si=o.makeMessageType("viam.service.navigation.v1.GetPathsResponse",()=>[{no:1,name:"paths",kind:"message",T:ti,repeated:!0}]),ri=o.makeMessageType("viam.service.navigation.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),oi=o.makeMessageType("viam.service.navigation.v1.GetPropertiesResponse",()=>[{no:1,name:"map_type",kind:"enum",T:o.getEnumType(qo)}]),Op=Object.freeze(Object.defineProperty({__proto__:null,AddWaypointRequest:Ko,AddWaypointResponse:Xo,GetLocationRequest:$o,GetLocationResponse:Yo,GetModeRequest:Bo,GetModeResponse:Jo,GetObstaclesRequest:ei,GetObstaclesResponse:ni,GetPathsRequest:ai,GetPathsResponse:si,GetPropertiesRequest:ri,GetPropertiesResponse:oi,GetWaypointsRequest:Ho,GetWaypointsResponse:zo,MapType:qo,Mode:Vt,Path:ti,RemoveWaypointRequest:Zo,RemoveWaypointResponse:Qo,SetModeRequest:jo,SetModeResponse:Vo,Waypoint:Wo},Symbol.toStringTag,{value:"Module"})),Ip={typeName:"viam.service.navigation.v1.NavigationService",methods:{getMode:{name:"GetMode",I:Bo,O:Jo,kind:i.Unary},setMode:{name:"SetMode",I:jo,O:Vo,kind:i.Unary},getLocation:{name:"GetLocation",I:$o,O:Yo,kind:i.Unary},getWaypoints:{name:"GetWaypoints",I:Ho,O:zo,kind:i.Unary},addWaypoint:{name:"AddWaypoint",I:Ko,O:Xo,kind:i.Unary},removeWaypoint:{name:"RemoveWaypoint",I:Zo,O:Qo,kind:i.Unary},getObstacles:{name:"GetObstacles",I:ei,O:ni,kind:i.Unary},getPaths:{name:"GetPaths",I:ai,O:si,kind:i.Unary},getProperties:{name:"GetProperties",I:ri,O:oi,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},ii=o.makeEnum("viam.service.slam.v1.MappingMode",[{no:0,name:"MAPPING_MODE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"MAPPING_MODE_CREATE_NEW_MAP",localName:"CREATE_NEW_MAP"},{no:2,name:"MAPPING_MODE_LOCALIZE_ONLY",localName:"LOCALIZE_ONLY"},{no:3,name:"MAPPING_MODE_UPDATE_EXISTING_MAP",localName:"UPDATE_EXISTING_MAP"}]),mi=o.makeEnum("viam.service.slam.v1.SensorType",[{no:0,name:"SENSOR_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"SENSOR_TYPE_CAMERA",localName:"CAMERA"},{no:2,name:"SENSOR_TYPE_MOVEMENT_SENSOR",localName:"MOVEMENT_SENSOR"}]),ci=o.makeMessageType("viam.service.slam.v1.GetPositionRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),di=o.makeMessageType("viam.service.slam.v1.GetPositionResponse",()=>[{no:1,name:"pose",kind:"message",T:Pe}]),li=o.makeMessageType("viam.service.slam.v1.GetPointCloudMapRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"return_edited_map",kind:"scalar",T:8,opt:!0}]),ui=o.makeMessageType("viam.service.slam.v1.GetPointCloudMapResponse",()=>[{no:1,name:"point_cloud_pcd_chunk",kind:"scalar",T:12}]),pi=o.makeMessageType("viam.service.slam.v1.GetInternalStateRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),gi=o.makeMessageType("viam.service.slam.v1.GetInternalStateResponse",()=>[{no:1,name:"internal_state_chunk",kind:"scalar",T:12}]),fi=o.makeMessageType("viam.service.slam.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9}]),Ti=o.makeMessageType("viam.service.slam.v1.GetPropertiesResponse",()=>[{no:1,name:"cloud_slam",kind:"scalar",T:8},{no:2,name:"mapping_mode",kind:"enum",T:o.getEnumType(ii)},{no:3,name:"internal_state_file_type",kind:"scalar",T:9,opt:!0},{no:4,name:"sensor_info",kind:"message",T:hi,repeated:!0}]),hi=o.makeMessageType("viam.service.slam.v1.SensorInfo",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"type",kind:"enum",T:o.getEnumType(mi)}]),_p=Object.freeze(Object.defineProperty({__proto__:null,GetInternalStateRequest:pi,GetInternalStateResponse:gi,GetPointCloudMapRequest:li,GetPointCloudMapResponse:ui,GetPositionRequest:ci,GetPositionResponse:di,GetPropertiesRequest:fi,GetPropertiesResponse:Ti,MappingMode:ii,SensorInfo:hi,SensorType:mi},Symbol.toStringTag,{value:"Module"})),Mp={typeName:"viam.service.slam.v1.SLAMService",methods:{getPosition:{name:"GetPosition",I:ci,O:di,kind:i.Unary},getPointCloudMap:{name:"GetPointCloudMap",I:li,O:ui,kind:i.ServerStreaming},getInternalState:{name:"GetInternalState",I:pi,O:gi,kind:i.ServerStreaming},getProperties:{name:"GetProperties",I:fi,O:Ti,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},Np=o.makeMessageType("viam.app.data.v1.BoundingBox",()=>[{no:1,name:"id",kind:"scalar",T:9},{no:2,name:"label",kind:"scalar",T:9},{no:3,name:"x_min_normalized",kind:"scalar",T:1},{no:4,name:"y_min_normalized",kind:"scalar",T:1},{no:5,name:"x_max_normalized",kind:"scalar",T:1},{no:6,name:"y_max_normalized",kind:"scalar",T:1},{no:7,name:"confidence",kind:"scalar",T:1,opt:!0}]),Cp=o.makeMessageType("viam.app.data.v1.Classification",()=>[{no:3,name:"id",kind:"scalar",T:9},{no:1,name:"label",kind:"scalar",T:9},{no:2,name:"confidence",kind:"scalar",T:1,opt:!0}]),Up=o.makeMessageType("viam.app.data.v1.Annotations",()=>[{no:1,name:"bboxes",kind:"message",T:Np,repeated:!0},{no:2,name:"classifications",kind:"message",T:Cp,repeated:!0}]),Pp=o.makeEnum("viam.component.camera.v1.Format",[{no:0,name:"FORMAT_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"FORMAT_RAW_RGBA",localName:"RAW_RGBA"},{no:2,name:"FORMAT_RAW_DEPTH",localName:"RAW_DEPTH"},{no:3,name:"FORMAT_JPEG",localName:"JPEG"},{no:4,name:"FORMAT_PNG",localName:"PNG"}]),Dp=o.makeMessageType("viam.component.camera.v1.Image",()=>[{no:1,name:"source_name",kind:"scalar",T:9},{no:2,name:"format",kind:"enum",T:o.getEnumType(Pp)},{no:3,name:"image",kind:"scalar",T:12},{no:4,name:"mime_type",kind:"scalar",T:9},{no:5,name:"annotations",kind:"message",T:Up}]),ki=o.makeMessageType("viam.service.vision.v1.GetDetectionsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"image",kind:"scalar",T:12},{no:3,name:"width",kind:"scalar",T:3},{no:4,name:"height",kind:"scalar",T:3},{no:5,name:"mime_type",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),yi=o.makeMessageType("viam.service.vision.v1.GetDetectionsResponse",()=>[{no:1,name:"detections",kind:"message",T:at,repeated:!0}]),vi=o.makeMessageType("viam.service.vision.v1.GetDetectionsFromCameraRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"camera_name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),bi=o.makeMessageType("viam.service.vision.v1.GetDetectionsFromCameraResponse",()=>[{no:1,name:"detections",kind:"message",T:at,repeated:!0}]),at=o.makeMessageType("viam.service.vision.v1.Detection",()=>[{no:1,name:"x_min",kind:"scalar",T:3,opt:!0},{no:2,name:"y_min",kind:"scalar",T:3,opt:!0},{no:3,name:"x_max",kind:"scalar",T:3,opt:!0},{no:4,name:"y_max",kind:"scalar",T:3,opt:!0},{no:5,name:"confidence",kind:"scalar",T:1},{no:6,name:"class_name",kind:"scalar",T:9},{no:7,name:"x_min_normalized",kind:"scalar",T:1,opt:!0},{no:8,name:"y_min_normalized",kind:"scalar",T:1,opt:!0},{no:9,name:"x_max_normalized",kind:"scalar",T:1,opt:!0},{no:10,name:"y_max_normalized",kind:"scalar",T:1,opt:!0}]),Si=o.makeMessageType("viam.service.vision.v1.GetClassificationsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"image",kind:"scalar",T:12},{no:3,name:"width",kind:"scalar",T:5},{no:4,name:"height",kind:"scalar",T:5},{no:5,name:"mime_type",kind:"scalar",T:9},{no:6,name:"n",kind:"scalar",T:5},{no:99,name:"extra",kind:"message",T:h}]),wi=o.makeMessageType("viam.service.vision.v1.GetClassificationsResponse",()=>[{no:1,name:"classifications",kind:"message",T:st,repeated:!0}]),Ei=o.makeMessageType("viam.service.vision.v1.GetClassificationsFromCameraRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"camera_name",kind:"scalar",T:9},{no:3,name:"n",kind:"scalar",T:5},{no:99,name:"extra",kind:"message",T:h}]),Ri=o.makeMessageType("viam.service.vision.v1.GetClassificationsFromCameraResponse",()=>[{no:1,name:"classifications",kind:"message",T:st,repeated:!0}]),st=o.makeMessageType("viam.service.vision.v1.Classification",()=>[{no:1,name:"class_name",kind:"scalar",T:9},{no:2,name:"confidence",kind:"scalar",T:1}]),Oi=o.makeMessageType("viam.service.vision.v1.GetObjectPointCloudsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"camera_name",kind:"scalar",T:9},{no:3,name:"mime_type",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Ii=o.makeMessageType("viam.service.vision.v1.GetObjectPointCloudsResponse",()=>[{no:1,name:"mime_type",kind:"scalar",T:9},{no:2,name:"objects",kind:"message",T:Ft,repeated:!0}]),_i=o.makeMessageType("viam.service.vision.v1.GetPropertiesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Mi=o.makeMessageType("viam.service.vision.v1.CaptureAllFromCameraRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"camera_name",kind:"scalar",T:9},{no:3,name:"return_image",kind:"scalar",T:8},{no:4,name:"return_classifications",kind:"scalar",T:8},{no:5,name:"return_detections",kind:"scalar",T:8},{no:6,name:"return_object_point_clouds",kind:"scalar",T:8},{no:99,name:"extra",kind:"message",T:h}]),Ni=o.makeMessageType("viam.service.vision.v1.CaptureAllFromCameraResponse",()=>[{no:1,name:"image",kind:"message",T:Dp},{no:2,name:"detections",kind:"message",T:at,repeated:!0},{no:3,name:"classifications",kind:"message",T:st,repeated:!0},{no:4,name:"objects",kind:"message",T:Ft,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),Ci=o.makeMessageType("viam.service.vision.v1.GetPropertiesResponse",()=>[{no:1,name:"classifications_supported",kind:"scalar",T:8},{no:2,name:"detections_supported",kind:"scalar",T:8},{no:3,name:"object_point_clouds_supported",kind:"scalar",T:8}]),Ap=Object.freeze(Object.defineProperty({__proto__:null,CaptureAllFromCameraRequest:Mi,CaptureAllFromCameraResponse:Ni,Classification:st,Detection:at,GetClassificationsFromCameraRequest:Ei,GetClassificationsFromCameraResponse:Ri,GetClassificationsRequest:Si,GetClassificationsResponse:wi,GetDetectionsFromCameraRequest:vi,GetDetectionsFromCameraResponse:bi,GetDetectionsRequest:ki,GetDetectionsResponse:yi,GetObjectPointCloudsRequest:Oi,GetObjectPointCloudsResponse:Ii,GetPropertiesRequest:_i,GetPropertiesResponse:Ci},Symbol.toStringTag,{value:"Module"})),Gp={typeName:"viam.service.vision.v1.VisionService",methods:{getDetectionsFromCamera:{name:"GetDetectionsFromCamera",I:vi,O:bi,kind:i.Unary},getDetections:{name:"GetDetections",I:ki,O:yi,kind:i.Unary},getClassificationsFromCamera:{name:"GetClassificationsFromCamera",I:Ei,O:Ri,kind:i.Unary},getClassifications:{name:"GetClassifications",I:Si,O:wi,kind:i.Unary},getObjectPointClouds:{name:"GetObjectPointClouds",I:Oi,O:Ii,kind:i.Unary},getProperties:{name:"GetProperties",I:_i,O:Ci,kind:i.Unary},captureAllFromCamera:{name:"CaptureAllFromCamera",I:Mi,O:Ni,kind:i.Unary},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},xp=new Blob([`self.onmessage = function(e) { - setTimeout(() => self.postMessage(""), e.data); - };`],{type:"text/javascript"});class Fp{constructor(e,n,a=1e4){this.deferredTransport=e,this.onDisconnect=n,this.heartbeatIntervalMs=a}connecting;get client(){const e=this.deferredTransport();return qe(Jt,e)}heartbeat(){let e;const n=async()=>{try{await this.client.getOperations({})}catch{this.onDisconnect();return}e?e.postMessage(this.heartbeatIntervalMs):setTimeout(()=>{n().catch(console.error)},this.heartbeatIntervalMs)};if(globalThis.Worker!==void 0){const a=window.URL.createObjectURL(xp);e=new Worker(a),URL.revokeObjectURL(a),e.addEventListener("message",()=>{n().catch(console.error)})}n().catch(console.error)}async start(){this.connecting&&await this.connecting,this.connecting=new Promise((e,n)=>{(async()=>{await this.client.getOperations({})})().then(e).catch(n).finally(()=>{this.connecting=void 0})});try{await this.connecting}finally{this.connecting=void 0}this.heartbeat()}}const Hn=o.makeMessageType("grpc.reflection.v1.ServerReflectionRequest",()=>[{no:1,name:"host",kind:"scalar",T:9},{no:3,name:"file_by_filename",kind:"scalar",T:9,oneof:"message_request"},{no:4,name:"file_containing_symbol",kind:"scalar",T:9,oneof:"message_request"},{no:5,name:"file_containing_extension",kind:"message",T:Lp,oneof:"message_request"},{no:6,name:"all_extension_numbers_of_type",kind:"scalar",T:9,oneof:"message_request"},{no:7,name:"list_services",kind:"scalar",T:9,oneof:"message_request"}]),Lp=o.makeMessageType("grpc.reflection.v1.ExtensionRequest",()=>[{no:1,name:"containing_type",kind:"scalar",T:9},{no:2,name:"extension_number",kind:"scalar",T:5}]),qp=o.makeMessageType("grpc.reflection.v1.ServerReflectionResponse",()=>[{no:1,name:"valid_host",kind:"scalar",T:9},{no:2,name:"original_request",kind:"message",T:Hn},{no:4,name:"file_descriptor_response",kind:"message",T:Bp,oneof:"message_response"},{no:5,name:"all_extension_numbers_response",kind:"message",T:Jp,oneof:"message_response"},{no:6,name:"list_services_response",kind:"message",T:jp,oneof:"message_response"},{no:7,name:"error_response",kind:"message",T:Wp,oneof:"message_response"}]),Bp=o.makeMessageType("grpc.reflection.v1.FileDescriptorResponse",()=>[{no:1,name:"file_descriptor_proto",kind:"scalar",T:12,repeated:!0}]),Jp=o.makeMessageType("grpc.reflection.v1.ExtensionNumberResponse",()=>[{no:1,name:"base_type_name",kind:"scalar",T:9},{no:2,name:"extension_number",kind:"scalar",T:5,repeated:!0}]),jp=o.makeMessageType("grpc.reflection.v1.ListServiceResponse",()=>[{no:1,name:"service",kind:"message",T:Vp,repeated:!0}]),Vp=o.makeMessageType("grpc.reflection.v1.ServiceResponse",()=>[{no:1,name:"name",kind:"scalar",T:9}]),Wp=o.makeMessageType("grpc.reflection.v1.ErrorResponse",()=>[{no:1,name:"error_code",kind:"scalar",T:5},{no:2,name:"error_message",kind:"scalar",T:9}]),$p={typeName:"grpc.reflection.v1.ServerReflection",methods:{serverReflectionInfo:{name:"ServerReflectionInfo",I:Hn,O:qp,kind:i.BiDiStreaming}}};class Yp{constructor(e,n){this.deferredTransport=e,this.sessionManager=n}async getSessionMetadata(){try{return await this.sessionManager.getSessionMetadata()}catch(e){throw e instanceof M&&e.code===E.InvalidArgument&&e.message==="SESSION_EXPIRED"&&this.sessionManager.reset(),e}}async unary(e,n,a,s,r,m,c){const l=pn(r),d=`/${e.typeName}/${n.name}`;for(const[p,v]of Et)l.set(p,v);if(Ve.heartbeatMonitoredMethods[d]??!1){const p=await this.getSessionMetadata();for(const[v,S]of p)l.set(v,S)}return this.deferredTransport().unary(e,n,a,s,l,m,c)}async stream(e,n,a,s,r,m,c){const l=pn(r),d=`/${e.typeName}/${n.name}`;for(const[p,v]of Et)l.set(p,v);if(Ve.heartbeatMonitoredMethods[d]??!1){const p=await this.getSessionMetadata();for(const[v,S]of p)l.set(v,S)}return this.deferredTransport().stream(e,n,a,s,l,m,c)}}const Hp=new Blob([`self.onmessage = function(e) { - setTimeout(() => self.postMessage(""), e.data); -};`],{type:"text/javascript"});class Ve{constructor(e,n){this.deferredTransport=n,this.host=e??"",this.transport=new Yp(this.deferredTransport,this)}static heartbeatMonitoredMethods={};transport;currentSessionID="";sessionsSupported;heartbeatIntervalMs;host="";starting;get client(){const e=this.deferredTransport();return qe(Jt,e)}get sessionID(){return this.currentSessionID}setHost(e){this.host=e}getSessionMetadataInner(){const e=new Headers;return this.sessionsSupported&&this.currentSessionID!==""&&e.set("viam-sid",this.currentSessionID),e}reset(){this.starting||(this.sessionsSupported=void 0)}backgroundHeartbeat=!0;async heartbeat(){if(!this.sessionsSupported||this.currentSessionID==="")return;for(;this.starting;)await this.starting;let e;const n=async()=>{const a=new co({id:this.currentSessionID});try{await this.client.sendSessionHeartbeat(a)}catch(s){if(s instanceof M&&s.code===E.Unimplemented){console.error("sessions unsupported; will not try again"),this.sessionsSupported=!1;return}if(s instanceof Ce||s instanceof M&&s.rawMessage==="closed"){this.reset();return}}e?e.postMessage(this.heartbeatIntervalMs):setTimeout(()=>{n().catch(console.error)},this.heartbeatIntervalMs)};if(this.backgroundHeartbeat&&globalThis.Worker!==void 0){const a=window.URL.createObjectURL(Hp);e=new Worker(a),URL.revokeObjectURL(a),e.addEventListener("message",()=>{n().catch(console.error)})}n().catch(console.error)}async getSessionMetadata(){for(;this.starting;)await this.starting;return this.sessionsSupported!==void 0?this.getSessionMetadataInner():(this.starting=new Promise((e,n)=>{(async()=>{const a=new mo;this.currentSessionID!==""&&(a.resume=this.currentSessionID);let s;try{s=await this.client.startSession(a)}catch(m){if(m instanceof M&&m.code===E.Unimplemented){console.error("sessions unsupported; will not try again"),this.sessionsSupported=!1;return}throw m}const{heartbeatWindow:r}=s;if(!r)throw new Error("expected heartbeat window in response to start session");this.sessionsSupported=!0,this.currentSessionID=s.id,this.heartbeatIntervalMs=(Number(r.seconds)*1e3+r.nanos/1e6)/5,await this.applyHeartbeatMonitoredMethods(),e(),this.heartbeat().catch(console.error)})().then(e).catch(n).finally(()=>{this.starting=void 0})}),await this.starting,this.getSessionMetadataInner())}async applyHeartbeatMonitoredMethods(){try{const e=qe($p,this.transport),n=new Hn({host:this.host,messageRequest:{case:"listServices",value:""}}),a=e.serverReflectionInfo(gt([n]),{timeoutMs:1e4});for await(const s of a){const r=s.messageResponse.value.service.map(c=>new Hn({messageRequest:{case:"fileContainingSymbol",value:c.name}})),m=e.serverReflectionInfo(gt(r),{timeoutMs:1e4});for await(const c of m)for(const l of c.messageResponse.value.fileDescriptorProto){const d=ne.fromBinary(l);for(const p of d.service)for(const v of p.method)Ve.heartbeatMonitoredMethods[`/${d.package}.${p.name}/${v.name}`]=Ve.hasHeartbeatOption(v.options)}}}catch{Ve.heartbeatMonitoredMethods={"/viam.component.arm.v1.ArmService/MoveToPosition":!0,"/viam.component.arm.v1.ArmService/MoveToJointPositions":!0,"/viam.component.arm.v1.ArmService/MoveThroughJointPositions":!0,"/viam.component.base.v1.BaseService/MoveStraight":!0,"/viam.component.base.v1.BaseService/Spin":!0,"/viam.component.base.v1.BaseService/SetPower":!0,"/viam.component.base.v1.BaseService/SetVelocity":!0,"/viam.component.gantry.v1.GantryService/MoveToPosition":!0,"/viam.component.gripper.v1.GripperService/Open":!0,"/viam.component.gripper.v1.GripperService/Grab":!0,"/viam.component.motor.v1.MotorService/SetPower":!0,"/viam.component.motor.v1.MotorService/GoFor":!0,"/viam.component.motor.v1.MotorService/GoTo":!0,"/viam.component.motor.v1.MotorService/SetRPM":!0,"/viam.component.servo.v1.ServoService/Move":!0}}}static hasHeartbeatOption(e){if(!e)return!1;const n=new Ga(e.toBinary());for(;n.pos[{no:1,name:"name",kind:"scalar",T:9},{no:3,name:"input_tensors",kind:"message",T:Ui},{no:99,name:"extra",kind:"message",T:h}]),Xp=o.makeMessageType("viam.service.mlmodel.v1.InferResponse",()=>[{no:3,name:"output_tensors",kind:"message",T:Ui}]),Zp=o.makeMessageType("viam.service.mlmodel.v1.MetadataRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Qp=o.makeMessageType("viam.service.mlmodel.v1.MetadataResponse",()=>[{no:1,name:"metadata",kind:"message",T:eg}]),eg=o.makeMessageType("viam.service.mlmodel.v1.Metadata",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"type",kind:"scalar",T:9},{no:3,name:"description",kind:"scalar",T:9},{no:4,name:"input_info",kind:"message",T:Sa,repeated:!0},{no:5,name:"output_info",kind:"message",T:Sa,repeated:!0}]),Sa=o.makeMessageType("viam.service.mlmodel.v1.TensorInfo",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"description",kind:"scalar",T:9},{no:3,name:"data_type",kind:"scalar",T:9},{no:4,name:"shape",kind:"scalar",T:5,repeated:!0},{no:5,name:"associated_files",kind:"message",T:ng,repeated:!0},{no:99,name:"extra",kind:"message",T:h}]),ng=o.makeMessageType("viam.service.mlmodel.v1.File",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"description",kind:"scalar",T:9},{no:3,name:"label_type",kind:"enum",T:o.getEnumType(zp)}]),tg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataInt8",()=>[{no:1,name:"data",kind:"scalar",T:12}]),ag=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataUInt8",()=>[{no:1,name:"data",kind:"scalar",T:12}]),sg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataInt16",()=>[{no:1,name:"data",kind:"scalar",T:7,repeated:!0}]),rg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataUInt16",()=>[{no:1,name:"data",kind:"scalar",T:7,repeated:!0}]),og=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataInt32",()=>[{no:1,name:"data",kind:"scalar",T:15,repeated:!0}]),ig=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataUInt32",()=>[{no:1,name:"data",kind:"scalar",T:7,repeated:!0}]),mg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataInt64",()=>[{no:1,name:"data",kind:"scalar",T:16,repeated:!0}]),cg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataUInt64",()=>[{no:1,name:"data",kind:"scalar",T:6,repeated:!0}]),dg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataFloat",()=>[{no:1,name:"data",kind:"scalar",T:2,repeated:!0}]),lg=o.makeMessageType("viam.service.mlmodel.v1.FlatTensorDataDouble",()=>[{no:1,name:"data",kind:"scalar",T:1,repeated:!0}]),ug=o.makeMessageType("viam.service.mlmodel.v1.FlatTensor",()=>[{no:1,name:"shape",kind:"scalar",T:6,repeated:!0},{no:2,name:"int8_tensor",kind:"message",T:tg,oneof:"tensor"},{no:3,name:"uint8_tensor",kind:"message",T:ag,oneof:"tensor"},{no:4,name:"int16_tensor",kind:"message",T:sg,oneof:"tensor"},{no:5,name:"uint16_tensor",kind:"message",T:rg,oneof:"tensor"},{no:6,name:"int32_tensor",kind:"message",T:og,oneof:"tensor"},{no:7,name:"uint32_tensor",kind:"message",T:ig,oneof:"tensor"},{no:8,name:"int64_tensor",kind:"message",T:mg,oneof:"tensor"},{no:9,name:"uint64_tensor",kind:"message",T:cg,oneof:"tensor"},{no:10,name:"float_tensor",kind:"message",T:dg,oneof:"tensor"},{no:11,name:"double_tensor",kind:"message",T:lg,oneof:"tensor"}]),Ui=o.makeMessageType("viam.service.mlmodel.v1.FlatTensors",()=>[{no:1,name:"tensors",kind:"map",K:9,V:{kind:"message",T:ug}}]),pg={typeName:"viam.service.mlmodel.v1.MLModelService",methods:{infer:{name:"Infer",I:Kp,O:Xp,kind:i.Unary},metadata:{name:"Metadata",I:Zp,O:Qp,kind:i.Unary}}},gg=o.makeEnum("viam.service.worldstatestore.v1.TransformChangeType",[{no:0,name:"TRANSFORM_CHANGE_TYPE_UNSPECIFIED",localName:"UNSPECIFIED"},{no:1,name:"TRANSFORM_CHANGE_TYPE_ADDED",localName:"ADDED"},{no:2,name:"TRANSFORM_CHANGE_TYPE_REMOVED",localName:"REMOVED"},{no:3,name:"TRANSFORM_CHANGE_TYPE_UPDATED",localName:"UPDATED"}]),fg=o.makeMessageType("viam.service.worldstatestore.v1.ListUUIDsRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),Tg=o.makeMessageType("viam.service.worldstatestore.v1.ListUUIDsResponse",()=>[{no:1,name:"uuids",kind:"scalar",T:12,repeated:!0}]),hg=o.makeMessageType("viam.service.worldstatestore.v1.GetTransformRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:2,name:"uuid",kind:"scalar",T:12},{no:99,name:"extra",kind:"message",T:h}]),kg=o.makeMessageType("viam.service.worldstatestore.v1.GetTransformResponse",()=>[{no:2,name:"transform",kind:"message",T:De}]),yg=o.makeMessageType("viam.service.worldstatestore.v1.StreamTransformChangesRequest",()=>[{no:1,name:"name",kind:"scalar",T:9},{no:99,name:"extra",kind:"message",T:h}]),vg=o.makeMessageType("viam.service.worldstatestore.v1.StreamTransformChangesResponse",()=>[{no:1,name:"change_type",kind:"enum",T:o.getEnumType(gg)},{no:2,name:"transform",kind:"message",T:De},{no:3,name:"updated_fields",kind:"message",T:Ne}]),bg={typeName:"viam.service.worldstatestore.v1.WorldStateStoreService",methods:{listUUIDs:{name:"ListUUIDs",I:fg,O:Tg,kind:i.Unary},getTransform:{name:"GetTransform",I:hg,O:kg,kind:i.Unary},streamTransformChanges:{name:"StreamTransformChanges",I:yg,O:vg,kind:i.ServerStreaming},doCommand:{name:"DoCommand",I:F,O:L,kind:i.Unary}}},Sg=(t,e)=>{if(t==null)throw new Error(e)},He="Dial operation aborted",wg=t=>{const e=t;return typeof e.signalingAddress!="string"?!1:!e.iceServers||Array.isArray(e.iceServers)},wa=t=>t>0&&Number.isInteger(t),Ea=t=>{if(t instanceof M&&[E.Canceled,E.InvalidArgument,E.NotFound,E.AlreadyExists,E.PermissionDenied,E.FailedPrecondition,E.OutOfRange,E.Unimplemented,E.Unauthenticated].includes(t.code))return!1;if(t instanceof Error){const e=t.message.toLowerCase();if(e.includes("invalid")||e.includes("configuration")||e.includes("cannot dial"))return!1}return!0},Eg=t=>{if(t.credentials&&tt(t.credentials))try{t.credentials.authEntity=new URL(t.credentials.authEntity).host}catch(e){if(!(e instanceof TypeError))throw e}if(t.reconnectMaxAttempts!==void 0&&!wa(t.reconnectMaxAttempts))throw new Error(`Value of max reconnect attempts (${t.reconnectMaxAttempts}) should be a positive integer`);if(t.reconnectMaxWait!==void 0&&!wa(t.reconnectMaxWait))throw new Error(`Value of max reconnect wait (${t.reconnectMaxWait}) should be a positive integer`)},Ra=t=>{if(t instanceof Error&&t.message===He)throw t};class Ke extends Ed{serviceHost="";webrtcOptions={enabled:!1,host:"",signalingAddress:"",rtcConfig:{}};directOptions={};sessionOptions={disabled:!1};gRPCConnectionManager;sessionManager;peerConn;dataChannel;transport;connecting;connectResolve;dialing;currentDialAbortSignal;savedCreds;closed;robotServiceClient;armServiceClient;baseServiceClient;boardServiceClient;encoderServiceClient;gantryServiceClient;genericServiceClient;gripperServiceClient;mlModelServiceClient;movementSensorServiceClient;powerSensorServiceClient;inputControllerServiceClient;motorServiceClient;navigationServiceClient;discoveryServiceClient;motionServiceClient;visionServiceClient;servoServiceClient;slamServiceClient;worldStateStoreServiceClient;currentRetryAttempt=0;onICEConnectionStateChange;onDataChannelClose;onTrack;constructor(e,n,a,s){super(),e!==void 0&&(this.serviceHost=e),n&&(this.webrtcOptions=n),s&&(this.directOptions=s),a&&(this.sessionOptions=a),this.gRPCConnectionManager=new Fp(()=>{if(!this.transport)throw new Error(Ke.notConnectedYetStr);return this.transport},()=>{this.onDisconnect()}),this.sessionManager=new Ve(this.serviceHost,()=>{if(!this.transport)throw new Error(Ke.notConnectedYetStr);return this.transport});for(const r of Object.values(W))this.on(r,()=>{this.emit("connectionstatechange",{eventType:r})});this.closed=!1}cleanupEventListeners(){this.peerConn&&this.onICEConnectionStateChange&&(this.peerConn.removeEventListener("iceconnectionstatechange",this.onICEConnectionStateChange),this.onICEConnectionStateChange=void 0),this.peerConn&&this.onTrack&&(this.peerConn.removeEventListener("track",this.onTrack),this.onTrack=void 0),this.dataChannel&&this.onDataChannelClose&&(this.dataChannel.removeEventListener("close",this.onDataChannelClose),this.onDataChannelClose=void 0)}onDisconnect(e){if(this.emit(W.DISCONNECTED,e??{}),this.noReconnect!==void 0&&this.noReconnect||this.closed)return;console.debug("Connection closed, will try to reconnect");const n={retry:(a,s)=>(console.debug(`Failed to connect, attempt ${s} with backoff`,a),this.currentRetryAttempt=s,this.closed?!1:Ea(a)?!0:(console.debug("Non-retryable error encountered, stopping reconnection attempts",a),!1))};this.reconnectMaxWait!==void 0&&(n.maxDelay=this.reconnectMaxWait),this.reconnectMaxAttempts!==void 0&&(n.numOfAttempts=this.reconnectMaxAttempts),this.currentRetryAttempt=0,dt(async()=>this.connect(),n).then(()=>{console.debug("Reconnected successfully!")}).catch(a=>{if(this.reconnectMaxAttempts!==void 0&&this.currentRetryAttempt>=this.reconnectMaxAttempts){console.debug(`Reached max attempts: ${this.reconnectMaxAttempts}`);return}console.error(a)})}get noReconnect(){return this.webrtcOptions.noReconnect??this.directOptions.noReconnect}get reconnectMaxAttempts(){return this.webrtcOptions.reconnectMaxAttempts??this.directOptions.reconnectMaxAttempts}get reconnectMaxWait(){return this.webrtcOptions.reconnectMaxWait??this.directOptions.reconnectMaxWait}get sessionId(){return this.sessionManager.sessionID}static notConnectedYetStr="not connected yet";get robotService(){if(!this.robotServiceClient)throw new Error(Ke.notConnectedYetStr);return this.robotServiceClient}get armService(){return this.armServiceClient??=this.createServiceClient(Id),this.armServiceClient}get baseService(){return this.baseServiceClient??=this.createServiceClient(Md),this.baseServiceClient}get boardService(){return this.boardServiceClient??=this.createServiceClient(Ud),this.boardServiceClient}get encoderService(){return this.encoderServiceClient??=this.createServiceClient(Dd),this.encoderServiceClient}get gantryService(){return this.gantryServiceClient??=this.createServiceClient(Yd),this.gantryServiceClient}get genericService(){return this.genericServiceClient??=this.createServiceClient(Hd),this.genericServiceClient}get gripperService(){return this.gripperServiceClient??=this.createServiceClient(rl),this.gripperServiceClient}get mlModelService(){return this.mlModelServiceClient??=this.createServiceClient(pg),this.mlModelServiceClient}get movementSensorService(){return this.movementSensorServiceClient??=this.createServiceClient(Cl),this.movementSensorServiceClient}get powerSensorService(){return this.powerSensorServiceClient??=this.createServiceClient(Fl),this.powerSensorServiceClient}get inputControllerService(){return this.inputControllerServiceClient??=this.createServiceClient(ml),this.inputControllerServiceClient}get motorService(){return this.motorServiceClient??=this.createServiceClient(Ml),this.motorServiceClient}get navigationService(){return this.navigationServiceClient??=this.createServiceClient(Ip),this.navigationServiceClient}get discoveryService(){return this.discoveryServiceClient??=this.createServiceClient(wp),this.discoveryServiceClient}get motionService(){return this.motionServiceClient??=this.createServiceClient(Rp),this.motionServiceClient}get visionService(){return this.visionServiceClient??=this.createServiceClient(Gp),this.visionServiceClient}get servoService(){return this.servoServiceClient??=this.createServiceClient(Yl),this.servoServiceClient}get slamService(){return this.slamServiceClient??=this.createServiceClient(Mp),this.slamServiceClient}get worldStateStoreService(){return this.worldStateStoreServiceClient??=this.createServiceClient(bg),this.worldStateStoreServiceClient}createServiceClient(e){return Sg(this.clientTransport,Ke.notConnectedYetStr),qe(e,this.clientTransport)}get peerConnection(){return this.peerConn}get clientTransport(){return this.sessionOptions.disabled?this.transport:this.sessionManager.transport}async dialWebRTC(e,n){if(n?.abort===!0)throw new Error(He);return this.emit(W.DIALING,{method:"webrtc",attempt:this.currentRetryAttempt}),this.serviceHost=e.serviceHost??e.host,this.sessionManager.setHost(this.serviceHost),this.webrtcOptions.enabled=!0,this.webrtcOptions.host=e.host,this.webrtcOptions.signalingAddress=e.signalingAddress,this.webrtcOptions.rtcConfig.iceServers=e.iceServers??[],this.webrtcOptions.noReconnect=e.noReconnect,this.webrtcOptions.reconnectMaxWait=e.reconnectMaxWait,this.webrtcOptions.reconnectMaxAttempts=e.reconnectMaxAttempts,this.sessionOptions.disabled=e.disableSessions??!1,await this.connect({priority:e.priority,dialTimeout:e.dialTimeout??ut,creds:e.credentials,extraHeaders:e.extraHeaders}),this}async dialDirect(e,n){if(n?.abort===!0)throw new Error(He);if(this.emit(W.DIALING,{method:"grpc",attempt:this.currentRetryAttempt}),!e.host.includes("local"))throw new Error(`cannot dial "${e.host}" directly, please use a local url instead.`);return this.serviceHost=e.host,this.sessionManager.setHost(this.serviceHost),this.webrtcOptions.enabled=!1,this.directOptions.noReconnect=e.noReconnect,this.directOptions.reconnectMaxWait=e.reconnectMaxWait,this.directOptions.reconnectMaxAttempts=e.reconnectMaxAttempts,this.sessionOptions.disabled=e.disableSessions??!1,await this.connect({creds:e.credentials,dialTimeout:e.dialTimeout??ut,extraHeaders:e.extraHeaders}),this}resetDialing(e){this.dialing===e&&(this.dialing=void 0,this.currentDialAbortSignal=void 0)}async dial(e){Eg(e),this.dialing&&this.currentDialAbortSignal&&(console.debug("Aborting previous dial attempt due to new dial call"),this.currentDialAbortSignal.abort=!0,this.dialing.catch(()=>{console.debug("Ignored abort error from previous dial")})),this.currentDialAbortSignal={abort:!1};const n=this.performDial(e,this.currentDialAbortSignal,e.reconnectAbortSignal??{abort:!1});this.dialing=n;try{const a=await n;return this.resetDialing(n),a}catch(a){if(this.resetDialing(n),a instanceof Error&&a.message===He)return console.debug(He),this;throw a}}createBackOffOpts({abort:e},{abort:n}){return{retry:(a,s)=>{if(e||n)throw new Error(He);return console.debug(`Failed to connect, attempt ${s} with backoff`,a),this.currentRetryAttempt=s,this.closed?!1:Ea(a)?!0:(console.debug("Non-retryable error encountered, stopping connection attempts",a),!1)}}}async tryWebRTCDial(e,n,a){try{return{dialer:await dt(async()=>this.dialWebRTC(e,n),a)}}catch(s){Ra(s);const r=s instanceof Error?s:new Error(String(s));return console.debug("Failed to connect via WebRTC",r),this.emit(W.DISCONNECTED,{error:r}),{dialer:this,error:r}}}async tryDirectDial(e,n,a){try{return{dialer:await dt(async()=>this.dialDirect(e,n),a)}}catch(s){Ra(s);const r=s instanceof Error?s:new Error(String(s));return console.debug("Failed to connect via gRPC",r),this.emit(W.DISCONNECTED,{error:r}),{dialer:this,error:r}}}async performDial(e,n,a){const s=this.createBackOffOpts(n,a??{abort:!1});e.reconnectMaxWait!==void 0&&(s.maxDelay=e.reconnectMaxWait),s.numOfAttempts=e.noReconnect?1:e.reconnectMaxAttempts,this.currentRetryAttempt=0;const r=[],m=wg(e),c=m?2:1,l=n.abort||a?.abort===!0;if(m&&!l){const{dialer:d,error:p}=await this.tryWebRTCDial(e,n,s);if(!p)return d;r.push(p)}if(this.currentRetryAttempt=0,!(n.abort||a?.abort===!0)){const{dialer:d,error:p}=await this.tryDirectDial(e,n,s);if(!p)return d;r.push(p)}if(r.length===c)throw new Error("Failed to connect via all methods",{cause:r});return this}async disconnect(){for(this.emit(W.DISCONNECTING,{}),this.currentDialAbortSignal&&this.dialing&&(this.currentDialAbortSignal.abort=!0,this.dialing.catch(()=>{console.debug("Ignored abort error from previous dial")}),this.resetDialing(this.dialing));this.connecting;)await this.connecting;this.cleanupEventListeners(),this.peerConn&&(this.peerConn.close(),this.peerConn=void 0),this.dataChannel&&(this.dataChannel.close(),this.dataChannel=void 0),this.sessionManager.reset(),this.closed=!0,this.emit(W.DISCONNECTED,{})}isConnected(){return this.peerConn?.iceConnectionState==="connected"}async connect({creds:e=this.savedCreds,priority:n,dialTimeout:a,extraHeaders:s}={}){if(this.emit(W.CONNECTING,{}),this.closed=!1,this.connecting){for(;this.connecting!==void 0;)await this.connecting;return}this.connecting=new Promise(r=>{this.connectResolve=r}),this.peerConn&&(this.peerConn.close(),this.peerConn=void 0),this.dataChannel&&(this.dataChannel.close(),this.dataChannel=void 0),(!e||e!==this.savedCreds||this.sessionOptions.disabled)&&this.sessionManager.reset();try{const r=new Headers(Et);if(s)for(const[l,d]of Object.entries(s))if(l==="viam_client"&&r.has("viam_client")){const p=r.get("viam_client").replace("typescript;",`typescript(${d});`);r.set("viam_client",p)}else r.set(l,d);const m={webrtcOptions:{disableTrickleICE:!1,rtcConfig:this.webrtcOptions.rtcConfig},dialTimeout:a??ut,extraHeaders:r};if(e&&(tt(e)?m.credentials=e:m.accessToken=e.payload),n!==void 0&&m.webrtcOptions&&(m.webrtcOptions.additionalSdpFields={"x-priority":n}),this.savedCreds=e,this.webrtcOptions.enabled){m.webrtcOptions&&(m.webrtcOptions.signalingCredentials=m.credentials);const l=this.webrtcOptions.signalingAddress||this.serviceHost,d=await fd(l,this.webrtcOptions.host,m,this.serviceHost!==""&&l!==this.serviceHost);this.peerConn=d.peerConnection,this.dataChannel=d.dataChannel,this.cleanupEventListeners(),this.onICEConnectionStateChange=()=>{this.peerConn?.iceConnectionState==="connected"?this.emit(W.CONNECTED,{}):this.peerConn?.iceConnectionState==="closed"&&this.onDisconnect()},this.peerConn.addEventListener("iceconnectionstatechange",this.onICEConnectionStateChange),this.onDataChannelClose=p=>this.onDisconnect(p),this.dataChannel.addEventListener("close",this.onDataChannelClose),this.transport=d.transport,this.onTrack=p=>{const[v]=p.streams;if(!v)throw this.emit("track",p),new Error("expected event stream to exist");const S=v.id.replaceAll("+",":");Object.defineProperty(v,"id",{value:S}),this.emit("track",p)},this.peerConn.addEventListener("track",this.onTrack)}else this.transport=await gs(this.serviceHost,m),await this.gRPCConnectionManager.start();const c=this.sessionOptions.disabled?this.transport:this.sessionManager.transport;this.robotServiceClient=qe(Jt,c),this.emit(W.CONNECTED,{})}catch(r){throw this.emit(W.DISCONNECTED,{}),r}finally{this.connectResolve?.(),this.connectResolve=void 0,this.connecting=void 0}}async getSessions(){return(await this.robotService.getSessions({})).sessions}async getOperations(){return(await this.robotService.getOperations({})).operations}async cancelOperation(e){await this.robotService.cancelOperation({id:e})}async blockForOperation(e){await this.robotService.blockForOperation({id:e})}async stopAll(){await this.robotService.stopAll({})}async frameSystemConfig(e){return(await this.robotService.frameSystemConfig({supplementalTransforms:e})).frameSystemConfigs}async transformPose(e,n,a){const s=new so({source:e,destination:n,supplementalTransforms:a}),r=(await this.robotService.transformPose(s)).pose;if(!r)throw new Error("no pose");return r}async transformPCD(e,n,a){const s=new ro({pointCloudPcd:e,source:n,destination:a});return(await this.robotService.transformPCD(s)).pointCloudPcd}async getModelsFromModules(){const e=new oo({});return(await this.robotService.getModelsFromModules(e)).models}async getCloudMetadata(){return this.robotService.getCloudMetadata({})}async resourceNames(){return(await this.robotService.resourceNames({})).resources}async resourceRPCSubtypes(){return(await this.robotService.resourceRPCSubtypes({})).resourceRpcSubtypes}async getMachineStatus(){return this.robotService.getMachineStatus({})}async getVersion(){return this.robotService.getVersion({})}async restartModule(e,n){const a=new uo;e!==void 0&&(a.idOrName.case="moduleId",a.idOrName.value=e),n!==void 0&&(a.idOrName.case="moduleName",a.idOrName.value=n),await this.robotService.restartModule(a)}async getPose(e,n,a){const s=new po({componentName:e,destinationFrame:n,supplementalTransforms:a}),r=(await this.robotService.getPose(s)).pose;if(!r)throw new Error("no pose");return r}}const Rg=async t=>{const e=await new Ke().dial(t);if(e.isConnected())return e;throw new Error("Failed to connect to robot")};i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.ServerStreaming,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.ClientStreaming,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.ServerStreaming,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;var Pi={},Di={};(function(t){Object.defineProperty(t,"__esModule",{value:!0}),(function(e){var n=(function(){function f(k){this._id=new Uint8Array(k)}return f.prototype.buffer=function(){return this._id},f})();e.UUID=n;var a=(function(){function f(k){this._id=new Uint8Array(k)}return f.prototype.buffer=function(){return this._id},f})();e.ObjectId=a;var s=(function(){function f(k){this._time=typeof k!="string"?new Uint8Array(k||b(Date.now())):b(+new Date(k))}return f.prototype.buffer=function(){return this._time},f.prototype.fromString=function(k){this._time=b(+new Date(k))},f.prototype.toNumber=function(){return w(this._time)},f.prototype.toDate=function(){return new Date(w(this._time))},f})();e.UTC=s;function r(f){var k=5;for(var g in f)k+=m(g,f[g]);return k}function m(f,k){var g=1;if(f&&(g+=P(f)+1),k==null)return g;switch(k.constructor){case String:return g+4+P(k)+1;case Number:return Math.floor(k)===k&&k<=2147483647&&k>=-2147483647?g+4:g+8;case Boolean:return g+1;case Array:case Object:return g+r(k);case Int8Array:case Uint8Array:return g+5+k.byteLength;case Date:case s:return g+8;case n:return g+5+16;case a:return g+12;default:return 0}}function c(f){var k=new Uint8Array(r(f));return l(f,k),k}e.serialize=c;function l(f,k,g){if(g===void 0&&(g=0),g+=p(k.length,k,g),f.constructor===Array)for(var T=0,R=f.length;T>>8&255,k[g++]=f>>>16&255,k[g++]=f>>>24&255,4}function v(f,k,g,T){if(k==null)return g[T++]=10,T+=d(f,g,T),T;switch(k.constructor){case String:g[T++]=2,T+=d(f,g,T);var R=d(k,g,T+4);return T+=p(R,g,T),T+R;case Number:if(Math.floor(k)===k)k<=2147483647&&k>=-2147483647?(g[T++]=16,T+=d(f,g,T),T+=p(k,g,T)):(g[T++]=18,T+=d(f,g,T),g.set(b(k),T),T+=8);else{g[T++]=1,T+=d(f,g,T);var O=new Float64Array([k]),H=new Uint8Array(O.buffer);g.set(H,T),T+=8}return T;case Boolean:return g[T++]=8,T+=d(f,g,T),g[T++]=k?1:0,T;case Array:case Object:g[T++]=k.constructor===Array?4:3,T+=d(f,g,T);var C=l(k,g,T);return p(C-T,g,T),C;case Int8Array:case Uint8Array:return g[T++]=5,T+=d(f,g,T),T+=p(k.byteLength,g,T),g[T++]=0,g.set(k,T),T+=k.byteLength,T;case Date:return g[T++]=9,T+=d(f,g,T),g.set(b(k.getTime()),T),T+=8,T;case s:return g[T++]=9,T+=d(f,g,T),g.set(k.buffer(),T),T+=8,T;case n:return g[T++]=5,T+=d(f,g,T),T+=p(16,g,T),g[T++]=4,g.set(k.buffer(),T),T+=16,T;case a:return g[T++]=7,T+=d(f,g,T),g.set(k.buffer(),T),T+=12,T;case RegExp:return g[T++]=11,T+=d(f,g,T),T+=d(k.source,g,T),k.global&&(g[T++]=115),k.ignoreCase&&(g[T++]=105),k.multiline&&(g[T++]=109),g[T++]=0,T;default:return T}}function S(f,k,g,T){if(k===void 0&&(k=!1),g===void 0&&(g=0),T===void 0&&(T=!1),!(f.length<5)){var R=f[g++]|f[g++]<<8|f[g++]<<16|f[g++]<<24;if(!(R<5||R>f.length)&&f[f.length-1]===0){for(var O=T?[]:{};;){var H=f[g++];if(H===0)break;for(var C=g;f[C]!==0&&C=f.length-1)return;var q=N(f.subarray(g,C));switch(T&&(q=parseInt(q)),g=++C,H){case 1:O[q]=new Float64Array(f.slice(g,g+=8).buffer)[0];break;case 2:R=f[g++]|f[g++]<<8|f[g++]<<16|f[g++]<<24,O[q]=N(f.subarray(g,g+=R-1)),g++;break;case 3:R=f[g]|f[g+1]<<8|f[g+2]<<16|f[g+3]<<24,O[q]=S(f,k,g,!1),g+=R;break;case 4:R=f[g]|f[g+1]<<8|f[g+2]<<16|f[g+3]<<24,O[q]=S(f,k,g,!0),g+=R;break;case 5:if(R=f[g++]|f[g++]<<8|f[g++]<<16|f[g++]<<24,f[g++]===4){if(R!==16)return;O[q]=new n(f.subarray(g,g+=R))}else O[q]=f.slice(g,g+=R);break;case 6:O[q]=null;break;case 7:O[q]=new a(f.subarray(g,g+=12));break;case 8:O[q]=f[g++]===1;break;case 9:O[q]=k?new s(f.subarray(g,g+=8)):new Date(w(f.subarray(g,g+=8)));break;case 10:O[q]=null;break;case 11:for(C=g;C=f.length)return;var rt=N(f.subarray(g,C));for(g=C;C=f.length)return;var qi=N(f.subarray(g,C));g=C,O[q]=new RegExp(rt,qi);break;case 16:O[q]=f[g++]|f[g++]<<8|f[g++]<<16|f[g++]<<24;break;case 18:O[q]=w(f.subarray(g,g+=8));break;default:return}}return O}}}e.deserialize=S;function b(f){var k=new Uint8Array(8);if(Math.floor(f)===f){var g=4294967296,T=f%g|0,R=f/g|0;f<0&&(T=~(-f%g)|0,R=~(-f/g)|0,T=T+1&4294967295,T||R++);var O=0;k[O++]=T&255,k[O++]=T>>>8&255,k[O++]=T>>>16&255,k[O++]=T>>>24&255,k[O++]=R&255,k[O++]=R>>>8&255,k[O++]=R>>>16&255,k[O]=R>>>24&255}else{var H=new Float64Array([f]),C=new Uint8Array(H.buffer);k.set(C)}return k}function w(f,k){k===void 0&&(k=0);var g=4294967296,T=f[k++]|f[k++]<<8|f[k++]<<16|f[k++]<<24,R=f[k++]|f[k++]<<8|f[k++]<<16|f[k]<<24;return R*g+(T>=0?T:g+T)}function _(f){f=f.replace(/\r\n/g,` -`);for(var k=[],g=0,T=0,R=f.length;T>>6|192,k[g++]=O&63|128):(k[g++]=O>>>12|224,k[g++]=O>>>6&63|128,k[g++]=O&63|128)}return new Uint8Array(k)}function N(f){for(var k="",g=f.length,T=0,R,O,H;T191&&R<224?(O=f[T+1],k+=String.fromCharCode((R&31)<<6|O&63),T+=2):(O=f[T+1],H=f[T+2],k+=String.fromCharCode((R&15)<<12|(O&63)<<6|H&63),T+=3);return k}function P(f){return encodeURI(f).split(/%..|./).length-1}})(t.BSON||(t.BSON={}))})(Di);Object.defineProperty(Pi,"__esModule",{value:!0});var Og=Di;Pi.BSON=Og.BSON;i.Unary,i.Unary,i.Unary,i.ServerStreaming,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.ClientStreaming,i.ClientStreaming;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;const{JointPositions:Pg}=Od;i.ServerStreaming,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary;const{GetPropertiesResponse:Dg}=_d,{ReadAnalogReaderResponse:Ag,PowerMode:Gg}=Cd;i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;const{GetPropertiesResponse:xg,PositionType:Fg}=Pd,{Capsule:Lg,GeoGeometry:qg,GeoPoint:Bg,GeometriesInFrame:Jg,Geometry:jg,Orientation:Vg,PointCloud:Wg,Pose:$g,PoseInFrame:Yg,RectangularPrism:Hg,ResourceName:zg,Sphere:Kg,Transform:Xg,Vector3:Zg,WorldState:Qg}=Is,{GetAccuracyResponse:ef,GetPositionResponse:nf,GetPropertiesResponse:tf}=Nl;i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary,i.Unary;i.Unary,i.Unary,i.Unary;const{Event:af}=il,{CollisionSpecification:sf,Constraints:rf,LinearConstraint:of,ListPlanStatusesResponse:mf,MotionConfiguration:cf,ObstacleDetector:df,OrientationConstraint:lf}=Ep;i.Unary,i.Unary,i.Unary;const{GetLocationResponse:uf,GetPropertiesResponse:pf,Path:gf,Waypoint:ff}=Op,{GetPositionResponse:Tf,GetPropertiesResponse:hf}=_p,{Classification:kf,Detection:yf}=Ap,{PointCloudObject:vf}=Is;i.ServerStreaming,i.Unary;i.Unary;const Ai=t=>encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),Gi=t=>encodeURIComponent(t).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent),Wt=decodeURIComponent,$t=t=>(t[0]==='"'&&(t=t.slice(1,-1)),t.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent));function Ig(t){return t=Object.assign({},t),typeof t.expires=="number"&&(t.expires=new Date(Date.now()+t.expires*864e5)),t.expires!=null&&(t.expires=t.expires.toUTCString()),Object.entries(t).filter(([e,n])=>n!=null&&n!==!1).map(([e,n])=>n===!0?`; ${e}`:`; ${e}=${n.split(";")[0]}`).join("")}function xi(t,e,n){const a=/(?:^|; )([^=]*)=([^;]*)/g,s={};let r;for(;(r=a.exec(document.cookie))!=null;)try{const m=n(r[1]);if(s[m]=e(r[2],m),t===m)break}catch{}return t!=null?s[t]:s}const Oa=Object.freeze({decodeName:Wt,decodeValue:$t,encodeName:Ai,encodeValue:Gi}),Yt=Object.freeze({path:"/"});function Fi(t,e,n=Yt,{encodeValue:a=Gi,encodeName:s=Ai}={}){return document.cookie=`${s(t)}=${a(e,t)}${Ig(n)}`}function ze(t,{decodeValue:e=$t,decodeName:n=Wt}={}){return xi(t,e,n)}function _g({decodeValue:t=$t,decodeName:e=Wt}={}){return xi(void 0,t,e)}function Mg(t,e=Yt){Fi(t,"",Object.assign({},e,{expires:-1}))}function Ot(t,e){const n={set:function(s,r,m){return Fi(s,r,Object.assign({},this.attributes,m),{encodeValue:this.converter.write})},get:function(s){if(arguments.length===0)return _g(this.converter.read);if(s!=null)return ze(s,this.converter.read)},remove:function(s,r){Mg(s,Object.assign({},this.attributes,r))},withAttributes:function(s){return Ot(this.converter,Object.assign({},this.attributes,s))},withConverter:function(s){return Ot(Object.assign({},this.converter,s),this.attributes)}},a={attributes:{value:Object.freeze(e)},converter:{value:Object.freeze(t)}};return Object.create(n,a)}Ot({read:Oa.decodeValue,write:Oa.encodeValue},Yt);const Ng="default-host";function Cg(){const t=ze("host"),e=ze("api-key-id"),n=ze("api-key");if(t&&e&&n)return{host:t,credentials:{type:"api-key",payload:n,authEntity:e},machineId:null};const a=window.location.pathname.split("/");if(a&&a.length>=3&&a[1]=="machine"){const r=a[2],m=ze(r);if(m)try{const c=JSON.parse(m),l=c?.apiKey?.id,d=c?.apiKey?.key,p=c?.hostname,v=c?.machineId||null;if(p&&l&&d)return{host:p,credentials:{type:"api-key",payload:d,authEntity:l},machineId:v}}catch{}}const s=ze(Ng);if(s)try{const{host:r,id:m,key:c}=JSON.parse(s);if(r&&m&&c)return{host:r,credentials:{type:"api-key",payload:c,authEntity:m},machineId:null}}catch{}return{host:"",credentials:{type:"api-key",payload:"",authEntity:""},machineId:null}}const vn=document.getElementById("status"),Li=document.getElementById("resources"),Ia=document.getElementById("build-info");Ia&&(Ia.textContent="Build: 2026-04-21T16:36:20.509Z");function V(t){console.log("[viam-app] "+t);const e=document.createElement("li");e.textContent=t,e.style.color="#666",e.style.fontSize="12px",Li.appendChild(e)}async function Ug(){V("Starting...");const{host:t,credentials:e,machineId:n}=Cg();if(V("Host: "+(t||"(empty)")),V("API Key ID: "+(e.authEntity?e.authEntity.slice(0,8)+"...":"(empty)")),V("API Key: "+(e.payload?"***"+e.payload.slice(-4):"(empty)")),V("Machine ID: "+(n||"(none)")),V("Credential type: "+e.type),V("Cookies: "+(document.cookie||"(none)")),!t){vn.textContent="No credentials found. Are you running via the local server or app.viam.com?";return}V("Connecting to "+t+" via signaling at https://app.viam.com:443..."),vn.textContent="Connecting to "+t+"...";try{const a=await Rg({host:t,credentials:e,signalingAddress:"https://app.viam.com:443"});V("Connected successfully"),vn.textContent="Connected to "+t,V("Fetching resource names...");const s=await a.resourceNames();V("Found "+s.length+" resources");for(const r of s){const m=document.createElement("li");m.textContent=`${r.namespace}:${r.type}:${r.subtype}/${r.name}`,Li.appendChild(m)}}catch(a){const s=a;V("Connection error: "+s.message),V("Error name: "+s.name),s.stack&&V("Stack: "+s.stack.split(` -`)[1]?.trim()),vn.textContent="Connection failed: "+s.message}}Ug(); From 4737effaa9fadb3bf99ef459aa485b89fe4edf0c Mon Sep 17 00:00:00 2001 From: Ethan Rodkin Date: Tue, 21 Apr 2026 17:08:23 -0400 Subject: [PATCH 16/27] support for offline app potentially lets find out --- cli/module_generate.go | 16 +++++++++------- cli/module_generate/_templates/app/src/main.ts | 3 ++- .../_templates/app/tmpl-Makefile | 3 ++- .../_templates/app/tmpl-module.go | 17 +++++++++++++++++ 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index 3e3428762e7..9ac39a5f457 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -200,14 +200,15 @@ func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args ge // appTemplateData is the struct passed to app template rendering. type appTemplateData struct { - ModuleName string + ModuleName string ModuleLowercase string - AppName string - AppType string - Namespace string - Visibility string - PackageManager string - SDKVersion string + AppName string + AppType string + Namespace string + Visibility string + PackageManager string + SDKVersion string + LocalServer bool } func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { @@ -263,6 +264,7 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen Namespace: moduleInputs.Namespace, Visibility: shared.Visibility, PackageManager: app.PackageManager, + LocalServer: app.LocalServer, } // Get latest SDK version diff --git a/cli/module_generate/_templates/app/src/main.ts b/cli/module_generate/_templates/app/src/main.ts index 212705a9c3f..182fb010dc9 100644 --- a/cli/module_generate/_templates/app/src/main.ts +++ b/cli/module_generate/_templates/app/src/main.ts @@ -1,4 +1,5 @@ import { createRobotClient } from '@viamrobotics/sdk'; +import { getCookie } from 'typescript-cookie'; import { getHostAndCredentials } from './lib/auth'; const statusEl = document.getElementById('status')!; @@ -15,7 +16,7 @@ async function main() { const machine = await createRobotClient({ host, credentials, - signalingAddress: 'https://app.viam.com:443', + signalingAddress: getCookie('is_local') ? 'http://localhost:8080' : 'https://app.viam.com', }); statusEl.textContent = 'Connected to ' + host; diff --git a/cli/module_generate/_templates/app/tmpl-Makefile b/cli/module_generate/_templates/app/tmpl-Makefile index 83d5c3359f9..8947c6649d3 100644 --- a/cli/module_generate/_templates/app/tmpl-Makefile +++ b/cli/module_generate/_templates/app/tmpl-Makefile @@ -58,7 +58,8 @@ frontend: node_modules dist/index.html: frontend setup: - go get github.com/erh/vmodutils@latest + # CR erodkin: fix this version + go get github.com/erh/vmodutils@v0.3.11-rc3 go mod tidy $(INSTALL_NODE) $(INSTALL_PKG_MGR) diff --git a/cli/module_generate/_templates/app/tmpl-module.go b/cli/module_generate/_templates/app/tmpl-module.go index 0d2b1bdd853..4b9a524c121 100644 --- a/cli/module_generate/_templates/app/tmpl-module.go +++ b/cli/module_generate/_templates/app/tmpl-module.go @@ -4,6 +4,9 @@ import ( "context" "embed" "io/fs" +{{- if .LocalServer }} + "net/http" +{{- end }} "github.com/erh/vmodutils" "go.viam.com/rdk/components/generic" @@ -50,5 +53,19 @@ func NewServer(_ context.Context, _ resource.Dependencies, rawConf resource.Conf port = *conf.Port } +{{- if .LocalServer }} + + isLocalCookie := &http.Cookie{Name: "is_local", Value: "true"} + m, err := vmodutils.NewWebModuleWithCookies(rawConf.ResourceName(), fs, logger, []*http.Cookie{isLocalCookie}) + if err != nil { + return nil, err + } + if err := m.Start(port); err != nil { + return nil, err + } + return m, nil +{{- else }} + return vmodutils.NewWebModuleAndStart(rawConf.ResourceName(), fs, logger, port) +{{- end }} } From 32d54b5914310adbfd5a92dcc1c5eabf7f932901 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 02:48:55 -0400 Subject: [PATCH 17/27] remove front end + local server + initial readme --- cli/app.go | 6 - cli/module_generate.go | 231 ++++++++++++++++-- .../_templates/app/dist/index.html | 5 +- cli/module_generate/_templates/app/index.html | 15 -- .../_templates/app/src/lib/auth.ts | 77 ------ .../_templates/app/src/main.ts | 34 --- .../_templates/app/tmpl-Makefile | 24 +- .../_templates/app/tmpl-README.md | 105 ++++---- .../_templates/app/tmpl-package.json | 18 -- .../_templates/app/tsconfig.json | 11 - .../_templates/app/vite.config.ts | 8 - cli/module_generate_app_test.go | 24 -- 12 files changed, 273 insertions(+), 285 deletions(-) delete mode 100644 cli/module_generate/_templates/app/index.html delete mode 100644 cli/module_generate/_templates/app/src/lib/auth.ts delete mode 100644 cli/module_generate/_templates/app/src/main.ts delete mode 100644 cli/module_generate/_templates/app/tmpl-package.json delete mode 100644 cli/module_generate/_templates/app/tsconfig.json delete mode 100644 cli/module_generate/_templates/app/vite.config.ts diff --git a/cli/app.go b/cli/app.go index d79bddb3e30..bd3725bc4b5 100644 --- a/cli/app.go +++ b/cli/app.go @@ -101,7 +101,6 @@ const ( moduleFlagAppName = "app-name" moduleFlagAppType = "app-type" moduleFlagLocalServer = "local-server" - moduleFlagPackageManager = "package-manager" moduleFlagUpload = "upload" moduleBuildFlagRef = "ref" @@ -3505,11 +3504,6 @@ After creation, use 'viam module update' to push your new module to app.viam.com Usage: "enable local server for serving the app on the local network", Hidden: true, }, - &cli.StringFlag{ - Name: moduleFlagPackageManager, - Usage: formatAcceptedValues("package manager for frontend", "npm", "pnpm", "yarn", "bun"), - Hidden: true, - }, }, Action: createActionCommandWithT[generateModuleArgs](GenerateModuleAction), }, diff --git a/cli/module_generate.go b/cli/module_generate.go index 9ac39a5f457..fccfce0341e 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -74,10 +74,9 @@ type generateModuleArgs struct { ModelName string Register bool DryRun bool - AppName string - AppType string - LocalServer bool - PackageManager string + AppName string + AppType string + LocalServer bool } // GenerateModuleAction runs the module generate cli and generates necessary module templates based on user input. @@ -173,10 +172,9 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, } type appInputs struct { - AppName string - AppType string - LocalServer bool - PackageManager string + AppName string + AppType string + LocalServer bool } func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { @@ -189,13 +187,207 @@ func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args ge newModule.Namespace = shared.Namespace newModule.RegisterOnApp = shared.RegisterOnApp - // App-specific prompts — local server availability depends on module language + // App-specific prompts app := &appInputs{} if err := promptAppUser(app, newModule.Language); err != nil { return err } - return errors.New("combined module + app generation is not yet implemented") + // Set up module inputs for generation + if err := newModule.CheckResourceAndSetType(); err != nil { + return err + } + if err := checkLanguageVersion(newModule.Language); err != nil { + return err + } + if !args.DryRun { + if err := wrapResolveOrg(ctx, cmd, c, newModule); err != nil { + return err + } + } + populateAdditionalInfo(newModule) + + gArgs, err := getGlobalArgs(cmd) + if err != nil { + return err + } + globalArgs := *gArgs + + // Get latest SDK version + version, err := getLatestSDKTag(ctx, cmd, newModule.Language, globalArgs) + if err != nil { + return err + } + newModule.SDKVersion = version[1:] + if idx := strings.LastIndex(newModule.SDKVersion, "/"); idx != -1 { + newModule.SDKVersion = strings.TrimPrefix(newModule.SDKVersion[idx+1:], "v") + } + + // Run the module generation pipeline + if err := setupDirectories(cmd, newModule.ModuleName, globalArgs); err != nil { + return err + } + if _, err := createModuleAndManifest(ctx, cmd, c, *newModule, globalArgs); err != nil { + return err + } + if err := renderCommonFiles(cmd, *newModule, globalArgs); err != nil { + return err + } + if err := copyLanguageTemplate(cmd, newModule.Language, newModule.ModuleName, globalArgs); err != nil { + return err + } + if err := renderTemplate(cmd, *newModule, globalArgs); err != nil { + return err + } + if err := generateStubs(cmd, *newModule, globalArgs); err != nil { + warningf(cmd.Root().ErrWriter, err.Error()) + } + + modulePath := newModule.ModuleName + + // 1. Add applications[] to the generated meta.json + manifestPath := filepath.Join(modulePath, defaultManifestFilename) + manifest, err := loadManifest(manifestPath) + if err != nil { + return errors.Wrap(err, "failed to load manifest to add app") + } + manifest.Apps = []AppComponent{ + { + Name: app.AppName, + Type: app.AppType, + Entrypoint: "dist/index.html", + }, + } + if err := writeManifest(manifestPath, manifest); err != nil { + return errors.Wrap(err, "failed to write manifest with app") + } + + // 2. Add webapp.go (vmodutils server) + webappGo := fmt.Sprintf(`package %s + +import ( + "context" + "embed" + "io/fs" + + "github.com/erh/vmodutils" + "go.viam.com/rdk/components/generic" + "go.viam.com/rdk/logging" + "go.viam.com/rdk/resource" +) + +//go:embed dist/** +var staticFS embed.FS + +func distFS() (fs.FS, error) { + return fs.Sub(staticFS, "dist") +} + +var WebappModel = resource.NewModel("%s", "%s", "webapp") + +type WebappConfig struct { + resource.TriviallyValidateConfig + Port *int `+"`"+`json:"port,omitempty"`+"`"+` +} + +func init() { + resource.RegisterComponent(generic.API, WebappModel, + resource.Registration[resource.Resource, *WebappConfig]{ + Constructor: NewWebappServer, + }, + ) +} + +func NewWebappServer(_ context.Context, _ resource.Dependencies, rawConf resource.Config, logger logging.Logger) (resource.Resource, error) { + conf, err := resource.NativeConfig[*WebappConfig](rawConf) + if err != nil { + return nil, err + } + fs, err := distFS() + if err != nil { + return nil, err + } + port := 8888 + if conf.Port != nil { + port = *conf.Port + } + return vmodutils.NewWebModuleAndStart(rawConf.ResourceName(), fs, logger, port) +} +`, newModule.ModuleLowercase, newModule.Namespace, newModule.ModuleName) + + if err := os.WriteFile(filepath.Join(modulePath, "webapp.go"), []byte(webappGo), 0o644); err != nil { + return errors.Wrap(err, "failed to write webapp.go") + } + + // 3. Create dist/index.html placeholder for go:embed + if err := os.MkdirAll(filepath.Join(modulePath, "dist"), 0o750); err != nil { + return errors.Wrap(err, "failed to create dist directory") + } + placeholder := ` +Viam App +

    Viam App

    Replace this with your own frontend. See README.md for next steps.

    + +` + if err := os.WriteFile(filepath.Join(modulePath, "dist", "index.html"), []byte(placeholder), 0o644); err != nil { + return errors.Wrap(err, "failed to write dist/index.html") + } + + // 4. Update cmd/module/main.go to register webapp model + mainGoPath := filepath.Join(modulePath, "cmd", "module", "main.go") + mainGoBytes, err := os.ReadFile(mainGoPath) + if err != nil { + return errors.Wrap(err, "failed to read main.go") + } + mainGo := string(mainGoBytes) + if !strings.Contains(mainGo, "components/generic") { + mainGo = strings.Replace(mainGo, + "\"go.viam.com/rdk/module\"", + "\"go.viam.com/rdk/components/generic\"\n\t\"go.viam.com/rdk/module\"", + 1) + } + mainGo = strings.Replace(mainGo, + "})", + "},\n\t\tresource.APIModel{API: generic.API, Model: "+newModule.ModuleLowercase+".WebappModel})", + 1) + if err := os.WriteFile(mainGoPath, []byte(mainGo), 0o644); err != nil { + return errors.Wrap(err, "failed to write updated main.go") + } + + // 5. Update Makefile to include dist in tar + makefilePath := filepath.Join(modulePath, "Makefile") + makefileBytes, err := os.ReadFile(makefilePath) + if err != nil { + return errors.Wrap(err, "failed to read Makefile") + } + makefile := string(makefileBytes) + makefile = strings.Replace(makefile, + "tar czf $@ meta.json $(MODULE_BINARY)", + "tar czf $@ meta.json $(MODULE_BINARY) dist", + 1) + if err := os.WriteFile(makefilePath, []byte(makefile), 0o644); err != nil { + return errors.Wrap(err, "failed to write updated Makefile") + } + + // 6. Add vmodutils to go.mod + goModPath := filepath.Join(modulePath, "go.mod") + goModBytes, err := os.ReadFile(goModPath) + if err != nil { + return errors.Wrap(err, "failed to read go.mod") + } + goMod := string(goModBytes) + if !strings.Contains(goMod, "erh/vmodutils") { + goMod = strings.Replace(goMod, "require (", "require (\n\tgithub.com/erh/vmodutils v0.3.11-rc3", 1) + if err := os.WriteFile(goModPath, []byte(goMod), 0o644); err != nil { + return errors.Wrap(err, "failed to write updated go.mod") + } + } + + cwd, err := os.Getwd() + if err != nil { + cwd = "." + } + printf(cmd.Root().Writer, "Module with app successfully generated at %s%s%s", cwd, string(os.PathSeparator), newModule.ModuleName) + return nil } // appTemplateData is the struct passed to app template rendering. @@ -206,20 +398,18 @@ type appTemplateData struct { AppType string Namespace string Visibility string - PackageManager string SDKVersion string LocalServer bool } func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { app := &appInputs{ - AppName: args.AppName, - AppType: args.AppType, - LocalServer: args.LocalServer, - PackageManager: args.PackageManager, + AppName: args.AppName, + AppType: args.AppType, + LocalServer: args.LocalServer, } - if app.AppName == "" || app.AppType == "" || app.PackageManager == "" { + if app.AppName == "" || app.AppType == "" { if err := promptAppUser(app, ""); err != nil { return err } @@ -263,7 +453,6 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen AppType: app.AppType, Namespace: moduleInputs.Namespace, Visibility: shared.Visibility, - PackageManager: app.PackageManager, LocalServer: app.LocalServer, } @@ -440,14 +629,6 @@ func promptAppUser(app *appInputs, moduleLanguage string) error { ). Value(&app.AppType), localServerWidget, - huh.NewSelect[string](). - Title("Package manager:"). - Description("Select the package manager for your web app's frontend dependencies."). - Options( - huh.NewOption("npm", "npm"), - huh.NewOption("pnpm", "pnpm"), - ). - Value(&app.PackageManager), ), ).WithHeight(25).WithWidth(88) if err := form.Run(); err != nil { diff --git a/cli/module_generate/_templates/app/dist/index.html b/cli/module_generate/_templates/app/dist/index.html index e9b3fb29ca9..822d5e69352 100644 --- a/cli/module_generate/_templates/app/dist/index.html +++ b/cli/module_generate/_templates/app/dist/index.html @@ -1 +1,4 @@ - + +Viam App +

    Viam App

    Replace this with your own frontend. See README.md for next steps.

    + diff --git a/cli/module_generate/_templates/app/index.html b/cli/module_generate/_templates/app/index.html deleted file mode 100644 index 4b349d9afe2..00000000000 --- a/cli/module_generate/_templates/app/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - Viam App - - -

    Your Viam app is running

    -

    This is a placeholder. Replace this with your own frontend.

    -

    Connecting...

    -
      - - - diff --git a/cli/module_generate/_templates/app/src/lib/auth.ts b/cli/module_generate/_templates/app/src/lib/auth.ts deleted file mode 100644 index f278a6165d3..00000000000 --- a/cli/module_generate/_templates/app/src/lib/auth.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { Credential } from '@viamrobotics/sdk'; -import { getCookie, setCookie } from 'typescript-cookie'; - -const DEFAULT_HOST = 'default-host'; - -export interface HostAndCredentials { - host: string; - credentials: Credential; - machineId: string | null; -} - -export function getHostAndCredentials(): HostAndCredentials { - const host = getCookie('host'); - const apiKeyId = getCookie('api-key-id'); - const apiKeySecret = getCookie('api-key'); - if (host && apiKeyId && apiKeySecret) { - return { - host, - credentials: { - type: 'api-key', - payload: apiKeySecret, - authEntity: apiKeyId - }, - machineId: null - }; - } - - const parts = window.location.pathname.split('/'); - if (parts && parts.length >= 3 && parts[1] == 'machine') { - const machineCookieKey = parts[2]; - const cookieData = getCookie(machineCookieKey); - if (cookieData) { - try { - const parsed = JSON.parse(cookieData); - const id = parsed?.apiKey?.id; - const key = parsed?.apiKey?.key; - const h = parsed?.hostname; - const machineId = parsed?.machineId || null; - if (h && id && key) { - return { - host: h, - credentials: { type: 'api-key', payload: key, authEntity: id }, - machineId - }; - } - } catch { - // Invalid cookie data - } - } - } - - const savedInputCookie = getCookie(DEFAULT_HOST); - if (savedInputCookie) { - try { - const { host, id: apiKeyId, key: apiKeySecret } = JSON.parse(savedInputCookie); - if (host && apiKeyId && apiKeySecret) { - return { - host, - credentials: { type: 'api-key', payload: apiKeySecret, authEntity: apiKeyId }, - machineId: null - }; - } - } catch { - // Invalid cookie data - } - } - - return { - host: '', - credentials: { type: 'api-key', payload: '', authEntity: '' }, - machineId: null - }; -} - -export function saveHostInfo(host: string, id: string, key: string) { - setCookie(DEFAULT_HOST, JSON.stringify({ host, key, id })); -} diff --git a/cli/module_generate/_templates/app/src/main.ts b/cli/module_generate/_templates/app/src/main.ts deleted file mode 100644 index 182fb010dc9..00000000000 --- a/cli/module_generate/_templates/app/src/main.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { createRobotClient } from '@viamrobotics/sdk'; -import { getCookie } from 'typescript-cookie'; -import { getHostAndCredentials } from './lib/auth'; - -const statusEl = document.getElementById('status')!; -const resourcesEl = document.getElementById('resources')!; - -async function main() { - const { host, credentials } = getHostAndCredentials(); - if (!host) { - statusEl.textContent = 'No credentials found. Are you running via the local server or app.viam.com?'; - return; - } - - try { - const machine = await createRobotClient({ - host, - credentials, - signalingAddress: getCookie('is_local') ? 'http://localhost:8080' : 'https://app.viam.com', - }); - statusEl.textContent = 'Connected to ' + host; - - const names = await machine.resourceNames(); - for (const name of names) { - const li = document.createElement('li'); - li.textContent = `${name.namespace}:${name.type}:${name.subtype}/${name.name}`; - resourcesEl.appendChild(li); - } - } catch (err) { - statusEl.textContent = 'Connection failed: ' + (err as Error).message; - } -} - -main(); diff --git a/cli/module_generate/_templates/app/tmpl-Makefile b/cli/module_generate/_templates/app/tmpl-Makefile index 8947c6649d3..189df936374 100644 --- a/cli/module_generate/_templates/app/tmpl-Makefile +++ b/cli/module_generate/_templates/app/tmpl-Makefile @@ -9,15 +9,6 @@ ifeq ($(VIAM_TARGET_OS), windows) MODULE_BINARY = bin/{{ .ModuleName }}.exe endif -UNAME_S := $(shell uname -s) -ifeq ($(UNAME_S),Darwin) - INSTALL_NODE := which npm > /dev/null 2>&1 || brew install node - INSTALL_PKG_MGR := which {{ .PackageManager }} > /dev/null 2>&1 || npm install -g {{ .PackageManager }} -else - INSTALL_NODE := which npm > /dev/null 2>&1 || curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && apt-get -y install nodejs - INSTALL_PKG_MGR := which {{ .PackageManager }} > /dev/null 2>&1 || npm install -g {{ .PackageManager }} -endif - .DEFAULT_GOAL := all $(MODULE_BINARY): Makefile go.mod *.go cmd/module/*.go dist/index.html @@ -28,6 +19,7 @@ lint: update: go get go.viam.com/rdk@latest + go get github.com/erh/vmodutils@v0.3.11-rc3 go mod tidy test: @@ -48,21 +40,9 @@ module: test module.tar.gz all: test module.tar.gz -node_modules: package.json - {{ .PackageManager }} install - -.PHONY: frontend -frontend: node_modules - {{ .PackageManager }} run build - -dist/index.html: frontend - setup: - # CR erodkin: fix this version go get github.com/erh/vmodutils@v0.3.11-rc3 go mod tidy - $(INSTALL_NODE) - $(INSTALL_PKG_MGR) clean: - rm -rf bin dist module.tar.gz + rm -rf bin module.tar.gz diff --git a/cli/module_generate/_templates/app/tmpl-README.md b/cli/module_generate/_templates/app/tmpl-README.md index ac2573ef8f2..0bf0bdb8035 100644 --- a/cli/module_generate/_templates/app/tmpl-README.md +++ b/cli/module_generate/_templates/app/tmpl-README.md @@ -1,83 +1,100 @@ # {{ .AppName }} -A Viam app module that serves a web app connected to your machine via the Viam SDK. +A Viam app module that serves your web app from your machine via the Viam SDK. -## Setup +## Build your frontend -``` -make setup -``` +This module doesn't provide any frontend - bring your own using whatever framework you like. -This installs Go dependencies, Node.js (if needed), and {{ .PackageManager }}. +Update the `"entrypoint"` in the applications section of `meta.json` to point to your frontend's main HTML file. The default is `dist/index.html`. -## Build +After building your frontend, make sure to run: ``` +make setup make ``` -This builds the frontend (`dist/`) and the Go module binary (`bin/{{ .ModuleName }}`). +This installs dependencies and builds the module. -## Development +## Test during development -For frontend development with hot reload (no rebuild needed between edits): - -1. Start the vite dev server: - ``` - {{ .PackageManager }} run dev - ``` +Test your frontend against a real machine during development: -2. In another terminal, start the local app testing proxy (injects real machine credentials): +1. Start your frontend dev server (e.g. `npm run dev` on port 5173) +2. In another terminal: ``` viam module local-app-testing --app-url=http://localhost:5173 --machine-id= ``` - 3. Open http://localhost:8012/start in your browser -Edit `src/main.ts` or `index.html`, save, and changes appear instantly. No `make` needed during development. +This injects real machine credentials into your dev server so you can test SDK connections without deploying. -## Deploy +To check that your HTML/CSS renders without a machine connection, just open your HTML file directly in a browser. -1. Build the module: - ``` - make - ``` +## Host locally + +Add the module to a machine without uploading to the registry: + +1. Go to app.viam.com → fleet → your machine → configure +2. Add the module as a local module, set executable path to `/bin/{{ .ModuleName }}` +3. Add your webapp as a local component with triplet `{{ .Namespace }}:{{ .ModuleName }}:webapp` + - If you have any other local components your webapp pulls from, they need to be added as well +4. Save your config, and the machine will restart to reconfigure with your module + +## Upload to viamapplications.com -2. Upload `module.tar.gz` (not the binary) to the Viam registry: +1. Upload `module.tar.gz` (not the binary) to the registry: ``` viam module upload --upload=./module.tar.gz --platform=linux/amd64 ``` - Important: upload the tar.gz, not `bin/{{ .ModuleName }}`. The tar contains both the binary and the frontend files (`dist/`). - Note: after re-uploading a new version, use an incognito window or hard-refresh (Cmd+Shift+R) to avoid seeing a cached version of the old page. - -3. Add the module to your machine on app.viam.com: +2. Add the module to your machine on app.viam.com: - Go to app.viam.com → your machine → Config - Add the module by name (`{{ .Namespace }}:{{ .ModuleName }}`) - Add a component: type `generic`, model `{{ .Namespace }}:{{ .ModuleName }}:webapp` - Save config -## Access your app +3. Access your app at: + ``` + https://{{ .AppName }}_{{ .Namespace }}.viamapplications.com + ``` + +**Note:** After re-uploading a new version, you may need to hard-refresh (Cmd+Shift+R / Ctrl+Shift+R) to avoid seeing a cached version. + +## Local server + +When the module is running on a machine (via either host locally or registry upload above), it also serves your app on the local network: -**Viam-hosted:** Go to `https://{{ .AppName }}_{{ .Namespace }}.viamapplications.com` +``` +http://:8888 +``` + +Accessible from any device on the same network. Credentials are injected automatically via cookies. The SDK connects through Viam's cloud for signaling, so internet is required. -**Via local network:** If local server is enabled, open `http://:8888` from any device on the same network. +To find your machine's IP: `ipconfig getifaddr en0` (macOS) or `hostname -I` (Linux). -## Project structure +### Offline mode (no internet) +To use the local server without internet, viam-server needs an HTTP signaling endpoint. Add this to your machine's network config on app.viam.com (Raw JSON): + +```json +{ + "network": { + "bind_address": "0.0.0.0:8081", + "no_tls": true + } +} ``` -src/ - lib/auth.ts - Reads machine credentials from cookies (do not modify) - main.ts - Your app entry point (replace with your own code) -index.html - HTML entry point loaded by vite -dist/ - Build output (generated by make, do not edit) -module.go - Go module that serves dist/ via local HTTP server -meta.json - Viam module manifest with applications[] entry + +Then your frontend needs to detect local mode and use local signaling instead of cloud signaling: + +```js +const isLocal = document.cookie.includes('is_local=true'); +const signalingAddress = isLocal + ? `http://${window.location.hostname}:8081` + : 'https://app.viam.com'; ``` -## Next steps +**Note:** `no_tls` replaces the default HTTPS listener (port 8080) with an HTTP listener on 8081. This means traffic on the local network is unencrypted. This is acceptable for trusted networks (factory floor, home) but not recommended for public networks. -1. Replace `src/main.ts` and `index.html` with your own frontend -2. Install additional dependencies: `{{ .PackageManager }} install ` -3. The `entrypoint` field in `meta.json` applications section points to `dist/index.html` — update if your build outputs elsewhere -4. Run `make` to rebuild after changes diff --git a/cli/module_generate/_templates/app/tmpl-package.json b/cli/module_generate/_templates/app/tmpl-package.json deleted file mode 100644 index d6e32d67569..00000000000 --- a/cli/module_generate/_templates/app/tmpl-package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "{{ .AppName }}", - "private": true, - "version": "0.1.0", - "scripts": { - "dev": "vite dev", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "@viamrobotics/sdk": "^0.66.0", - "typescript-cookie": "^1.0.6" - }, - "devDependencies": { - "vite": "^5.4.0", - "typescript": "~5.9.2" - } -} diff --git a/cli/module_generate/_templates/app/tsconfig.json b/cli/module_generate/_templates/app/tsconfig.json deleted file mode 100644 index f3430ebbfd9..00000000000 --- a/cli/module_generate/_templates/app/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "module": "ESNext", - "moduleResolution": "bundler", - "strict": true, - "esModuleInterop": true, - "skipLibCheck": true - }, - "include": ["src"] -} diff --git a/cli/module_generate/_templates/app/vite.config.ts b/cli/module_generate/_templates/app/vite.config.ts deleted file mode 100644 index 77d22070004..00000000000 --- a/cli/module_generate/_templates/app/vite.config.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { defineConfig } from 'vite'; - -export default defineConfig({ - base: './', - build: { - outDir: 'dist', - }, -}); diff --git a/cli/module_generate_app_test.go b/cli/module_generate_app_test.go index 96c1e4cfbd3..45e091ebc81 100644 --- a/cli/module_generate_app_test.go +++ b/cli/module_generate_app_test.go @@ -21,7 +21,6 @@ func TestAppTemplateCompiles(t *testing.T) { AppType: "single_machine", Namespace: "testorg", Visibility: "private", - PackageManager: "npm", SDKVersion: "0.94.0", } @@ -68,27 +67,4 @@ func TestAppTemplateCompiles(t *testing.T) { if err != nil { t.Fatalf("generated app module does not compile: %v\n%s", err, buildOut) } - - // Verify frontend builds (catches SDK API mismatches like atAddress vs createRobotClient) - npmInstall := exec.Command("npm", "install") - npmInstall.Dir = appPath - npmInstallOut, err := npmInstall.CombinedOutput() - if err != nil { - t.Fatalf("npm install failed: %v\n%s", err, npmInstallOut) - } - - // Type-check TypeScript (catches missing await, wrong method names, type mismatches) - tsc := exec.Command("npx", "tsc", "--noEmit") - tsc.Dir = appPath - tscOut, err := tsc.CombinedOutput() - if err != nil { - t.Fatalf("TypeScript type check failed: %v\n%s", err, tscOut) - } - - npmBuild := exec.Command("npm", "run", "build") - npmBuild.Dir = appPath - npmBuildOut, err := npmBuild.CombinedOutput() - if err != nil { - t.Fatalf("frontend build failed: %v\n%s", err, npmBuildOut) - } } From 79bd0f41754d04064f12228fa559f0b81975965b Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 03:04:33 -0400 Subject: [PATCH 18/27] lint --- cli/module_generate.go | 36 +++++++++++++++++---------------- cli/module_generate_app_test.go | 3 ++- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index fccfce0341e..889bdf0ed3d 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -74,9 +74,9 @@ type generateModuleArgs struct { ModelName string Register bool DryRun bool - AppName string - AppType string - LocalServer bool + AppName string + AppType string + LocalServer bool } // GenerateModuleAction runs the module generate cli and generates necessary module templates based on user input. @@ -149,8 +149,8 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, } shared := &sharedInputs{ - Visibility: args.Visibility, - Namespace: args.PublicNamespace, + Visibility: args.Visibility, + Namespace: args.PublicNamespace, RegisterOnApp: args.Register, } if shared.Visibility == "" || shared.Namespace == "" { @@ -298,7 +298,9 @@ func init() { ) } -func NewWebappServer(_ context.Context, _ resource.Dependencies, rawConf resource.Config, logger logging.Logger) (resource.Resource, error) { +func NewWebappServer( + _ context.Context, _ resource.Dependencies, rawConf resource.Config, logger logging.Logger, +) (resource.Resource, error) { conf, err := resource.NativeConfig[*WebappConfig](rawConf) if err != nil { return nil, err @@ -315,7 +317,7 @@ func NewWebappServer(_ context.Context, _ resource.Dependencies, rawConf resourc } `, newModule.ModuleLowercase, newModule.Namespace, newModule.ModuleName) - if err := os.WriteFile(filepath.Join(modulePath, "webapp.go"), []byte(webappGo), 0o644); err != nil { + if err := os.WriteFile(filepath.Join(modulePath, "webapp.go"), []byte(webappGo), 0o644); err != nil { //nolint:gosec return errors.Wrap(err, "failed to write webapp.go") } @@ -328,13 +330,13 @@ func NewWebappServer(_ context.Context, _ resource.Dependencies, rawConf resourc

      Viam App

      Replace this with your own frontend. See README.md for next steps.

      ` - if err := os.WriteFile(filepath.Join(modulePath, "dist", "index.html"), []byte(placeholder), 0o644); err != nil { + if err := os.WriteFile(filepath.Join(modulePath, "dist", "index.html"), []byte(placeholder), 0o644); err != nil { //nolint:gosec return errors.Wrap(err, "failed to write dist/index.html") } // 4. Update cmd/module/main.go to register webapp model mainGoPath := filepath.Join(modulePath, "cmd", "module", "main.go") - mainGoBytes, err := os.ReadFile(mainGoPath) + mainGoBytes, err := os.ReadFile(mainGoPath) //nolint:gosec if err != nil { return errors.Wrap(err, "failed to read main.go") } @@ -349,13 +351,13 @@ func NewWebappServer(_ context.Context, _ resource.Dependencies, rawConf resourc "})", "},\n\t\tresource.APIModel{API: generic.API, Model: "+newModule.ModuleLowercase+".WebappModel})", 1) - if err := os.WriteFile(mainGoPath, []byte(mainGo), 0o644); err != nil { + if err := os.WriteFile(mainGoPath, []byte(mainGo), 0o644); err != nil { //nolint:gosec return errors.Wrap(err, "failed to write updated main.go") } // 5. Update Makefile to include dist in tar makefilePath := filepath.Join(modulePath, "Makefile") - makefileBytes, err := os.ReadFile(makefilePath) + makefileBytes, err := os.ReadFile(makefilePath) //nolint:gosec if err != nil { return errors.Wrap(err, "failed to read Makefile") } @@ -364,20 +366,20 @@ func NewWebappServer(_ context.Context, _ resource.Dependencies, rawConf resourc "tar czf $@ meta.json $(MODULE_BINARY)", "tar czf $@ meta.json $(MODULE_BINARY) dist", 1) - if err := os.WriteFile(makefilePath, []byte(makefile), 0o644); err != nil { + if err := os.WriteFile(makefilePath, []byte(makefile), 0o644); err != nil { //nolint:gosec return errors.Wrap(err, "failed to write updated Makefile") } // 6. Add vmodutils to go.mod goModPath := filepath.Join(modulePath, "go.mod") - goModBytes, err := os.ReadFile(goModPath) + goModBytes, err := os.ReadFile(goModPath) //nolint:gosec if err != nil { return errors.Wrap(err, "failed to read go.mod") } goMod := string(goModBytes) if !strings.Contains(goMod, "erh/vmodutils") { goMod = strings.Replace(goMod, "require (", "require (\n\tgithub.com/erh/vmodutils v0.3.11-rc3", 1) - if err := os.WriteFile(goModPath, []byte(goMod), 0o644); err != nil { + if err := os.WriteFile(goModPath, []byte(goMod), 0o644); err != nil { //nolint:gosec return errors.Wrap(err, "failed to write updated go.mod") } } @@ -581,7 +583,7 @@ func promptAppUser(app *appInputs, moduleLanguage string) error { if moduleLanguage == "" || moduleLanguage == golang { localServerWidget = huh.NewConfirm(). Title("Enable local server?"). - Description("A local server allows the app to be served directly from the machine\n"+ + Description("A local server allows the app to be served directly from the machine\n" + "on your local network, without requiring internet access."). Value(&app.LocalServer) } else { @@ -804,8 +806,8 @@ func promptSharedInputs(shared *sharedInputs) error { } else { registerWidget = huh.NewConfirm(). Title("Register with Viam"). - Description("Register with Viam.\nIf selected, "+ - "this will associate with your organization.\n"+ + Description("Register with Viam.\nIf selected, " + + "this will associate with your organization.\n" + "Otherwise, this will be local-only.", ). Value(&shared.RegisterOnApp) diff --git a/cli/module_generate_app_test.go b/cli/module_generate_app_test.go index 45e091ebc81..a8989787fdd 100644 --- a/cli/module_generate_app_test.go +++ b/cli/module_generate_app_test.go @@ -43,7 +43,8 @@ func TestAppTemplateCompiles(t *testing.T) { test.That(t, err, test.ShouldBeNil) // Add a replace directive to use the local rdk so we test against the current interface - _, thisFile, _, _ := runtime.Caller(0) + _, thisFile, _, ok := runtime.Caller(0) + test.That(t, ok, test.ShouldBeTrue) rdkRoot := filepath.Dir(filepath.Dir(thisFile)) goModPath := filepath.Join(appPath, "go.mod") goMod, err := os.ReadFile(goModPath) From 05b6b4290499eee9a9c625303fd64ad9e6bac4a2 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 11:40:50 -0400 Subject: [PATCH 19/27] add auth.ts --- .../_templates/app/src/lib/auth.ts | 77 +++++++++++++++++++ .../_templates/app/tmpl-README.md | 21 +++++ 2 files changed, 98 insertions(+) create mode 100644 cli/module_generate/_templates/app/src/lib/auth.ts diff --git a/cli/module_generate/_templates/app/src/lib/auth.ts b/cli/module_generate/_templates/app/src/lib/auth.ts new file mode 100644 index 00000000000..465f06897b9 --- /dev/null +++ b/cli/module_generate/_templates/app/src/lib/auth.ts @@ -0,0 +1,77 @@ +import type { Credential } from '@viamrobotics/sdk'; +import { getCookie, setCookie } from 'typescript-cookie'; + +const DEFAULT_HOST = 'default-host'; + +export interface HostAndCredentials { + host: string; + credentials: Credential; + machineId: string | null; +} + +export function getHostAndCredentials(): HostAndCredentials { + const host = getCookie('host'); + const apiKeyId = getCookie('api-key-id'); + const apiKeySecret = getCookie('api-key'); + if (host && apiKeyId && apiKeySecret) { + return { + host, + credentials: { + type: 'api-key', + payload: apiKeySecret, + authEntity: apiKeyId + }, + machineId: null + }; + } + + const parts = window.location.pathname.split('/'); + if (parts && parts.length >= 3 && parts[1] == 'machine') { + const machineCookieKey = parts[2]; + const cookieData = getCookie(machineCookieKey); + if (cookieData) { + try { + const parsed = JSON.parse(cookieData); + const id = parsed?.apiKey?.id; + const key = parsed?.apiKey?.key; + const h = parsed?.hostname; + const machineId = parsed?.machineId || null; + if (h && id && key) { + return { + host: h, + credentials: { type: 'api-key', payload: key, authEntity: id }, + machineId + }; + } + } catch { + // Invalid cookie data + } + } + } + + const savedInputCookie = getCookie(DEFAULT_HOST); + if (savedInputCookie) { + try { + const { host, id: apiKeyId, key: apiKeySecret } = JSON.parse(savedInputCookie); + if (host && apiKeyId && apiKeySecret) { + return { + host, + credentials: { type: 'api-key', payload: apiKeySecret, authEntity: apiKeyId }, + machineId: null + }; + } + } catch { + // Invalid cookie data + } + } + + return { + host: '', + credentials: { type: 'api-key', payload: '', authEntity: '' }, + machineId: null + }; +} + +export function saveHostInfo(host: string, id: string, key: string) { + setCookie(DEFAULT_HOST, JSON.stringify({ host, key, id })); +} diff --git a/cli/module_generate/_templates/app/tmpl-README.md b/cli/module_generate/_templates/app/tmpl-README.md index 0bf0bdb8035..d4a22bdfca1 100644 --- a/cli/module_generate/_templates/app/tmpl-README.md +++ b/cli/module_generate/_templates/app/tmpl-README.md @@ -6,6 +6,27 @@ A Viam app module that serves your web app from your machine via the Viam SDK. This module doesn't provide any frontend - bring your own using whatever framework you like. +To connect to your machine, install the Viam SDK and cookie helper with your package manager: + +``` +npm install @viamrobotics/sdk typescript-cookie +``` + +A utility file is included at `src/lib/auth.ts` that reads machine credentials from cookies. Use it to connect: + +```js +import { createRobotClient } from '@viamrobotics/sdk'; +import { getHostAndCredentials } from './src/lib/auth'; + +const { host, credentials } = getHostAndCredentials(); +const machine = await createRobotClient({ + host, + credentials, + signalingAddress: 'https://app.viam.com', +}); +const resources = await machine.resourceNames(); +``` + Update the `"entrypoint"` in the applications section of `meta.json` to point to your frontend's main HTML file. The default is `dist/index.html`. After building your frontend, make sure to run: From db01d82d39f4d4489a3f56ac4ae0af47b471225f Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 11:46:00 -0400 Subject: [PATCH 20/27] next steps + test fix --- cli/module_generate.go | 8 ++++++-- cli/module_generate_app_test.go | 8 ++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index 889bdf0ed3d..1806e84f8f2 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -388,7 +388,9 @@ func NewWebappServer( if err != nil { cwd = "." } - printf(cmd.Root().Writer, "Module with app successfully generated at %s%s%s", cwd, string(os.PathSeparator), newModule.ModuleName) + fullPath := filepath.Join(cwd, newModule.ModuleName) + printf(cmd.Root().Writer, "Module with app successfully generated at %s", fullPath) + printf(cmd.Root().Writer, "Time to build your frontend! See %s for next steps.", filepath.Join(fullPath, "README.md")) return nil } @@ -482,7 +484,9 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen if err != nil { cwd = "." } - printf(cmd.Root().Writer, "App module successfully generated at %s%s%s", cwd, string(os.PathSeparator), moduleName) + appPath := filepath.Join(cwd, moduleName) + printf(cmd.Root().Writer, "App module successfully generated at %s", appPath) + printf(cmd.Root().Writer, "Time to build your frontend! See %s for next steps.", filepath.Join(appPath, "README.md")) if registryURL != "" { printf(cmd.Root().Writer, "You can view it here: %s", registryURL) } diff --git a/cli/module_generate_app_test.go b/cli/module_generate_app_test.go index a8989787fdd..f36c1698bea 100644 --- a/cli/module_generate_app_test.go +++ b/cli/module_generate_app_test.go @@ -53,6 +53,14 @@ func TestAppTemplateCompiles(t *testing.T) { err = os.WriteFile(goModPath, goMod, 0o644) test.That(t, err, test.ShouldBeNil) + // Pin vmodutils to rc version that implements Status() + goGet := exec.Command("go", "get", "github.com/erh/vmodutils@v0.3.11-rc3") + goGet.Dir = appPath + goGetOut, err := goGet.CombinedOutput() + if err != nil { + t.Fatalf("go get vmodutils failed: %v\n%s", err, goGetOut) + } + // Run go mod tidy to resolve dependencies tidy := exec.Command("go", "mod", "tidy") tidy.Dir = appPath From 02d922505ff8a38b949389e8f341072d57b16dd0 Mon Sep 17 00:00:00 2001 From: Ethan Rodkin Date: Wed, 22 Apr 2026 12:54:23 -0400 Subject: [PATCH 21/27] fix tests --- cli/module_generate/_templates/app/tmpl-go.mod | 1 + cli/module_generate_app_test.go | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/cli/module_generate/_templates/app/tmpl-go.mod b/cli/module_generate/_templates/app/tmpl-go.mod index 0dee12c4264..d936b1b8ca7 100644 --- a/cli/module_generate/_templates/app/tmpl-go.mod +++ b/cli/module_generate/_templates/app/tmpl-go.mod @@ -3,5 +3,6 @@ module {{ .ModuleLowercase }} go 1.23 require ( + github.com/erh/vmodutils v0.3.11-rc3 go.viam.com/rdk v{{ .SDKVersion }} ) diff --git a/cli/module_generate_app_test.go b/cli/module_generate_app_test.go index 96c1e4cfbd3..7cd63f08a64 100644 --- a/cli/module_generate_app_test.go +++ b/cli/module_generate_app_test.go @@ -12,8 +12,6 @@ import ( ) func TestAppTemplateCompiles(t *testing.T) { - t.Parallel() - testData := appTemplateData{ ModuleName: "testapp", ModuleLowercase: "testapp", From 0029eacc36425d2763c987f447fd50125280f3e4 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 13:32:40 -0400 Subject: [PATCH 22/27] always generate local server --- cli/app.go | 12 ++--- cli/module_generate.go | 47 +++++-------------- .../_templates/app/tmpl-module.go | 8 ---- 3 files changed, 15 insertions(+), 52 deletions(-) diff --git a/cli/app.go b/cli/app.go index bd3725bc4b5..15892f9dee2 100644 --- a/cli/app.go +++ b/cli/app.go @@ -98,10 +98,9 @@ const ( moduleFlagResourceType = "resource-type" moduleFlagRegister = "register" moduleFlagGenerateType = "generate-type" - moduleFlagAppName = "app-name" - moduleFlagAppType = "app-type" - moduleFlagLocalServer = "local-server" - moduleFlagUpload = "upload" + moduleFlagAppName = "app-name" + moduleFlagAppType = "app-type" + moduleFlagUpload = "upload" moduleBuildFlagRef = "ref" moduleBuildFlagWait = "wait" @@ -3499,11 +3498,6 @@ After creation, use 'viam module update' to push your new module to app.viam.com Usage: formatAcceptedValues("app type", "single_machine", "multi_machine"), Hidden: true, }, - &cli.BoolFlag{ - Name: moduleFlagLocalServer, - Usage: "enable local server for serving the app on the local network", - Hidden: true, - }, }, Action: createActionCommandWithT[generateModuleArgs](GenerateModuleAction), }, diff --git a/cli/module_generate.go b/cli/module_generate.go index 1806e84f8f2..48a328a3db7 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -74,9 +74,8 @@ type generateModuleArgs struct { ModelName string Register bool DryRun bool - AppName string - AppType string - LocalServer bool + AppName string + AppType string } // GenerateModuleAction runs the module generate cli and generates necessary module templates based on user input. @@ -172,9 +171,8 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, } type appInputs struct { - AppName string - AppType string - LocalServer bool + AppName string + AppType string } func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { @@ -189,7 +187,7 @@ func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args ge // App-specific prompts app := &appInputs{} - if err := promptAppUser(app, newModule.Language); err != nil { + if err := promptAppUser(app); err != nil { return err } @@ -402,19 +400,17 @@ type appTemplateData struct { AppType string Namespace string Visibility string - SDKVersion string - LocalServer bool + SDKVersion string } func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { app := &appInputs{ - AppName: args.AppName, - AppType: args.AppType, - LocalServer: args.LocalServer, + AppName: args.AppName, + AppType: args.AppType, } if app.AppName == "" || app.AppType == "" { - if err := promptAppUser(app, ""); err != nil { + if err := promptAppUser(app); err != nil { return err } } @@ -455,9 +451,8 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen ModuleLowercase: strings.ReplaceAll(strings.ToLower(moduleName), "-", ""), AppName: app.AppName, AppType: app.AppType, - Namespace: moduleInputs.Namespace, - Visibility: shared.Visibility, - LocalServer: app.LocalServer, + Namespace: moduleInputs.Namespace, + Visibility: shared.Visibility, } // Get latest SDK version @@ -582,24 +577,7 @@ func renderAppTemplate(cmd *cli.Command, moduleName string, data appTemplateData }) } -func promptAppUser(app *appInputs, moduleLanguage string) error { - var localServerWidget huh.Field - if moduleLanguage == "" || moduleLanguage == golang { - localServerWidget = huh.NewConfirm(). - Title("Enable local server?"). - Description("A local server allows the app to be served directly from the machine\n" + - "on your local network, without requiring internet access."). - Value(&app.LocalServer) - } else { - localServerWidget = huh.NewSelect[bool](). - Title("Enable local server?"). - Description("Local server is only available for Go modules. Coming soon for other languages."). - Options( - huh.NewOption("Not available", false), - ). - Value(&app.LocalServer) - } - +func promptAppUser(app *appInputs) error { form := huh.NewForm( huh.NewGroup( huh.NewNote(). @@ -634,7 +612,6 @@ func promptAppUser(app *appInputs, moduleLanguage string) error { huh.NewOption("Multi Machine", "multi_machine"), ). Value(&app.AppType), - localServerWidget, ), ).WithHeight(25).WithWidth(88) if err := form.Run(); err != nil { diff --git a/cli/module_generate/_templates/app/tmpl-module.go b/cli/module_generate/_templates/app/tmpl-module.go index 4b9a524c121..15bc9fe6bb9 100644 --- a/cli/module_generate/_templates/app/tmpl-module.go +++ b/cli/module_generate/_templates/app/tmpl-module.go @@ -4,9 +4,7 @@ import ( "context" "embed" "io/fs" -{{- if .LocalServer }} "net/http" -{{- end }} "github.com/erh/vmodutils" "go.viam.com/rdk/components/generic" @@ -53,8 +51,6 @@ func NewServer(_ context.Context, _ resource.Dependencies, rawConf resource.Conf port = *conf.Port } -{{- if .LocalServer }} - isLocalCookie := &http.Cookie{Name: "is_local", Value: "true"} m, err := vmodutils.NewWebModuleWithCookies(rawConf.ResourceName(), fs, logger, []*http.Cookie{isLocalCookie}) if err != nil { @@ -64,8 +60,4 @@ func NewServer(_ context.Context, _ resource.Dependencies, rawConf resource.Conf return nil, err } return m, nil -{{- else }} - - return vmodutils.NewWebModuleAndStart(rawConf.ResourceName(), fs, logger, port) -{{- end }} } From fb6fdadd66695a095c0a3b25544568eadbad1008 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 13:37:59 -0400 Subject: [PATCH 23/27] move auth.ts our of src/lib --- cli/module_generate/_templates/app/{src/lib => }/auth.ts | 0 cli/module_generate/_templates/app/tmpl-README.md | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) rename cli/module_generate/_templates/app/{src/lib => }/auth.ts (100%) diff --git a/cli/module_generate/_templates/app/src/lib/auth.ts b/cli/module_generate/_templates/app/auth.ts similarity index 100% rename from cli/module_generate/_templates/app/src/lib/auth.ts rename to cli/module_generate/_templates/app/auth.ts diff --git a/cli/module_generate/_templates/app/tmpl-README.md b/cli/module_generate/_templates/app/tmpl-README.md index d4a22bdfca1..9f1af1a2c17 100644 --- a/cli/module_generate/_templates/app/tmpl-README.md +++ b/cli/module_generate/_templates/app/tmpl-README.md @@ -12,11 +12,11 @@ To connect to your machine, install the Viam SDK and cookie helper with your pac npm install @viamrobotics/sdk typescript-cookie ``` -A utility file is included at `src/lib/auth.ts` that reads machine credentials from cookies. Use it to connect: +A utility file is included at `auth.ts` that reads machine credentials from cookies. Use it to connect: ```js import { createRobotClient } from '@viamrobotics/sdk'; -import { getHostAndCredentials } from './src/lib/auth'; +import { getHostAndCredentials } from './auth'; const { host, credentials } = getHostAndCredentials(); const machine = await createRobotClient({ From 38ca9e839c212eba19045e0ca4d6499261b21f82 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 13:40:12 -0400 Subject: [PATCH 24/27] make it easier to update entrypoint --- cli/module_generate/_templates/app/tmpl-Makefile | 5 +++-- cli/module_generate/_templates/app/tmpl-README.md | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/cli/module_generate/_templates/app/tmpl-Makefile b/cli/module_generate/_templates/app/tmpl-Makefile index 189df936374..07e3d7b1bdd 100644 --- a/cli/module_generate/_templates/app/tmpl-Makefile +++ b/cli/module_generate/_templates/app/tmpl-Makefile @@ -2,6 +2,7 @@ GO_BUILD_ENV := GO_BUILD_FLAGS := MODULE_BINARY := bin/{{ .ModuleName }} +ENTRYPOINT := dist/index.html ifeq ($(VIAM_TARGET_OS), windows) GO_BUILD_ENV += GOOS=windows GOARCH=amd64 @@ -11,7 +12,7 @@ endif .DEFAULT_GOAL := all -$(MODULE_BINARY): Makefile go.mod *.go cmd/module/*.go dist/index.html +$(MODULE_BINARY): Makefile go.mod *.go cmd/module/*.go $(ENTRYPOINT) $(GO_BUILD_ENV) go build $(GO_BUILD_FLAGS) -o $(MODULE_BINARY) cmd/module/main.go lint: @@ -25,7 +26,7 @@ update: test: go test ./... -module.tar.gz: meta.json $(MODULE_BINARY) dist/index.html +module.tar.gz: meta.json $(MODULE_BINARY) $(ENTRYPOINT) ifeq ($(VIAM_TARGET_OS), windows) jq '.entrypoint = "./bin/{{ .ModuleName }}.exe"' meta.json > temp.json && mv temp.json meta.json else diff --git a/cli/module_generate/_templates/app/tmpl-README.md b/cli/module_generate/_templates/app/tmpl-README.md index 9f1af1a2c17..6545112e7ec 100644 --- a/cli/module_generate/_templates/app/tmpl-README.md +++ b/cli/module_generate/_templates/app/tmpl-README.md @@ -27,7 +27,9 @@ const machine = await createRobotClient({ const resources = await machine.resourceNames(); ``` -Update the `"entrypoint"` in the applications section of `meta.json` to point to your frontend's main HTML file. The default is `dist/index.html`. +The default entrypoint is `dist/index.html`. If your frontend build outputs to a different location, update both: +- `ENTRYPOINT` in the `Makefile` +- `"entrypoint"` in the applications section of `meta.json` After building your frontend, make sure to run: From 8cb91214323a8c31604fd233e4ad5d69e20bd411 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 14:01:05 -0400 Subject: [PATCH 25/27] use meta.json generator instead of template --- cli/module_generate.go | 55 +++++++++++++++++-- .../_templates/app/tmpl-meta.json | 25 --------- cli/module_generate_test.go | 2 +- 3 files changed, 50 insertions(+), 32 deletions(-) delete mode 100644 cli/module_generate/_templates/app/tmpl-meta.json diff --git a/cli/module_generate.go b/cli/module_generate.go index 48a328a3db7..cba8b4e78ed 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -451,8 +451,8 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen ModuleLowercase: strings.ReplaceAll(strings.ToLower(moduleName), "-", ""), AppName: app.AppName, AppType: app.AppType, - Namespace: moduleInputs.Namespace, - Visibility: shared.Visibility, + Namespace: moduleInputs.Namespace, + Visibility: shared.Visibility, } // Get latest SDK version @@ -467,7 +467,29 @@ func (c *viamClient) generateApp(ctx context.Context, cmd *cli.Command, args gen return err } - // Copy non-template files and render template files + // Generate meta.json using the shared manifest function with app fields + var modID moduleID + if shared.RegisterOnApp { + parsedID, err := parseModuleID(fmt.Sprintf("%s:%s", moduleInputs.Namespace, moduleName)) + if err != nil { + return errors.Wrap(err, "failed to parse module identifier") + } + modID = parsedID + } else { + modID.name = moduleName + modID.prefix = moduleInputs.Namespace + } + appModuleInputs := modulegen.ModuleInputs{ + ModuleName: moduleName, + Language: golang, + Visibility: shared.Visibility, + Namespace: moduleInputs.Namespace, + } + if err := renderManifest(cmd, modID.String(), appModuleInputs, globalArgs, app); err != nil { + return err + } + + // Copy non-template files and render template files (skip meta.json since we generated it above) if err := copyAppTemplate(cmd, moduleName, globalArgs); err != nil { return err } @@ -1526,7 +1548,7 @@ func createModuleAndManifest( moduleID.name = module.ModuleName moduleID.prefix = module.Namespace } - err := renderManifest(cmd, moduleID.String(), module, globalArgs) + err := renderManifest(cmd, moduleID.String(), module, globalArgs, nil) if err != nil { return "", errors.Wrap(err, "failed to render manifest") } @@ -1599,8 +1621,10 @@ func renderModelDoc(module modulegen.ModuleInputs) error { return nil } -// Create the meta.json manifest. -func renderManifest(cmd *cli.Command, moduleID string, module modulegen.ModuleInputs, globalArgs globalArgs) error { +// Create the meta.json manifest. If appInfo is non-nil, app-specific fields are added. +func renderManifest( + cmd *cli.Command, moduleID string, module modulegen.ModuleInputs, globalArgs globalArgs, appInfo *appInputs, +) error { debugf(cmd.Root().Writer, globalArgs.Debug, "Rendering module manifest") visibility := module.Visibility @@ -1616,6 +1640,24 @@ func renderManifest(cmd *cli.Command, moduleID string, module modulegen.ModuleIn Description: fmt.Sprintf("Modular %s %s: %s", module.ResourceSubtype, module.ResourceType, module.ModelName), MarkdownLink: &module.ModuleReadmeLink, } + + if appInfo != nil { + manifest.Description = fmt.Sprintf("%s app", appInfo.AppName) + manifest.Models = []ModuleComponent{ + { + API: "rdk:component:generic", + Model: fmt.Sprintf("%s:%s:webapp", module.Namespace, module.ModuleName), + }, + } + manifest.Apps = []AppComponent{ + { + Name: appInfo.AppName, + Type: appInfo.AppType, + Entrypoint: "dist/index.html", + }, + } + } + switch module.Language { case python: if runtime.GOOS == osWindows { @@ -1669,3 +1711,4 @@ func renderManifest(cmd *cli.Command, moduleID string, module modulegen.ModuleIn return nil } + diff --git a/cli/module_generate/_templates/app/tmpl-meta.json b/cli/module_generate/_templates/app/tmpl-meta.json deleted file mode 100644 index 9fdad3d7e07..00000000000 --- a/cli/module_generate/_templates/app/tmpl-meta.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "module_id": "{{ .Namespace }}:{{ .ModuleName }}", - "visibility": "{{ .Visibility }}", - "description": "{{ .AppName }} app", - "models": [ - { - "api": "rdk:component:generic", - "model": "{{ .Namespace }}:{{ .ModuleName }}:webapp" - } - ], - "applications": [ - { - "name": "{{ .AppName }}", - "type": "{{ .AppType }}", - "entrypoint": "dist/index.html" - } - ], - "entrypoint": "bin/{{ .ModuleName }}", - "build": { - "build": "make module.tar.gz", - "setup": "make setup", - "path": "module.tar.gz", - "arch": ["linux/amd64", "linux/arm64", "darwin/arm64"] - } -} diff --git a/cli/module_generate_test.go b/cli/module_generate_test.go index a75148dd099..e97b7537acb 100644 --- a/cli/module_generate_test.go +++ b/cli/module_generate_test.go @@ -214,7 +214,7 @@ func TestGenerateModuleAction(t *testing.T) { t.Run("test render manifest", func(t *testing.T) { setupDirectories(cCtx, testModule.ModuleName, globalArgs) - err := renderManifest(cCtx, "moduleId", testModule, globalArgs) + err := renderManifest(cCtx, "moduleId", testModule, globalArgs, nil) test.That(t, err, test.ShouldBeNil) _, err = os.Stat(filepath.Join(testDir, testModule.ModuleName, "meta.json")) test.That(t, err, test.ShouldBeNil) From 173bd17e9197297200efbb93ea69dfb519427be6 Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 14:45:49 -0400 Subject: [PATCH 26/27] remove path for generating app in module --- cli/module_generate.go | 222 +---------------------------------------- 1 file changed, 1 insertion(+), 221 deletions(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index cba8b4e78ed..2a4a0413560 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -126,7 +126,6 @@ func promptGenerateType() (string, error) { Options( huh.NewOption("Module", "module"), huh.NewOption("App", "app"), - huh.NewOption("Module and App", "both"), ). Value(&generateType), ), @@ -163,10 +162,8 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, return c.generateModule(ctx, cmd, args, shared) case "app": return c.generateApp(ctx, cmd, args, shared) - case "both": - return c.generateBoth(ctx, cmd, args, shared) default: - return fmt.Errorf("invalid generate type %q: must be module, app, or both", generateType) + return fmt.Errorf("invalid generate type %q: must be module or app", generateType) } } @@ -175,223 +172,6 @@ type appInputs struct { AppType string } -func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { - // Module-specific prompts - newModule := &modulegen.ModuleInputs{} - if err := promptModuleInputs(newModule); err != nil { - return err - } - newModule.Visibility = shared.Visibility - newModule.Namespace = shared.Namespace - newModule.RegisterOnApp = shared.RegisterOnApp - - // App-specific prompts - app := &appInputs{} - if err := promptAppUser(app); err != nil { - return err - } - - // Set up module inputs for generation - if err := newModule.CheckResourceAndSetType(); err != nil { - return err - } - if err := checkLanguageVersion(newModule.Language); err != nil { - return err - } - if !args.DryRun { - if err := wrapResolveOrg(ctx, cmd, c, newModule); err != nil { - return err - } - } - populateAdditionalInfo(newModule) - - gArgs, err := getGlobalArgs(cmd) - if err != nil { - return err - } - globalArgs := *gArgs - - // Get latest SDK version - version, err := getLatestSDKTag(ctx, cmd, newModule.Language, globalArgs) - if err != nil { - return err - } - newModule.SDKVersion = version[1:] - if idx := strings.LastIndex(newModule.SDKVersion, "/"); idx != -1 { - newModule.SDKVersion = strings.TrimPrefix(newModule.SDKVersion[idx+1:], "v") - } - - // Run the module generation pipeline - if err := setupDirectories(cmd, newModule.ModuleName, globalArgs); err != nil { - return err - } - if _, err := createModuleAndManifest(ctx, cmd, c, *newModule, globalArgs); err != nil { - return err - } - if err := renderCommonFiles(cmd, *newModule, globalArgs); err != nil { - return err - } - if err := copyLanguageTemplate(cmd, newModule.Language, newModule.ModuleName, globalArgs); err != nil { - return err - } - if err := renderTemplate(cmd, *newModule, globalArgs); err != nil { - return err - } - if err := generateStubs(cmd, *newModule, globalArgs); err != nil { - warningf(cmd.Root().ErrWriter, err.Error()) - } - - modulePath := newModule.ModuleName - - // 1. Add applications[] to the generated meta.json - manifestPath := filepath.Join(modulePath, defaultManifestFilename) - manifest, err := loadManifest(manifestPath) - if err != nil { - return errors.Wrap(err, "failed to load manifest to add app") - } - manifest.Apps = []AppComponent{ - { - Name: app.AppName, - Type: app.AppType, - Entrypoint: "dist/index.html", - }, - } - if err := writeManifest(manifestPath, manifest); err != nil { - return errors.Wrap(err, "failed to write manifest with app") - } - - // 2. Add webapp.go (vmodutils server) - webappGo := fmt.Sprintf(`package %s - -import ( - "context" - "embed" - "io/fs" - - "github.com/erh/vmodutils" - "go.viam.com/rdk/components/generic" - "go.viam.com/rdk/logging" - "go.viam.com/rdk/resource" -) - -//go:embed dist/** -var staticFS embed.FS - -func distFS() (fs.FS, error) { - return fs.Sub(staticFS, "dist") -} - -var WebappModel = resource.NewModel("%s", "%s", "webapp") - -type WebappConfig struct { - resource.TriviallyValidateConfig - Port *int `+"`"+`json:"port,omitempty"`+"`"+` -} - -func init() { - resource.RegisterComponent(generic.API, WebappModel, - resource.Registration[resource.Resource, *WebappConfig]{ - Constructor: NewWebappServer, - }, - ) -} - -func NewWebappServer( - _ context.Context, _ resource.Dependencies, rawConf resource.Config, logger logging.Logger, -) (resource.Resource, error) { - conf, err := resource.NativeConfig[*WebappConfig](rawConf) - if err != nil { - return nil, err - } - fs, err := distFS() - if err != nil { - return nil, err - } - port := 8888 - if conf.Port != nil { - port = *conf.Port - } - return vmodutils.NewWebModuleAndStart(rawConf.ResourceName(), fs, logger, port) -} -`, newModule.ModuleLowercase, newModule.Namespace, newModule.ModuleName) - - if err := os.WriteFile(filepath.Join(modulePath, "webapp.go"), []byte(webappGo), 0o644); err != nil { //nolint:gosec - return errors.Wrap(err, "failed to write webapp.go") - } - - // 3. Create dist/index.html placeholder for go:embed - if err := os.MkdirAll(filepath.Join(modulePath, "dist"), 0o750); err != nil { - return errors.Wrap(err, "failed to create dist directory") - } - placeholder := ` -Viam App -

      Viam App

      Replace this with your own frontend. See README.md for next steps.

      - -` - if err := os.WriteFile(filepath.Join(modulePath, "dist", "index.html"), []byte(placeholder), 0o644); err != nil { //nolint:gosec - return errors.Wrap(err, "failed to write dist/index.html") - } - - // 4. Update cmd/module/main.go to register webapp model - mainGoPath := filepath.Join(modulePath, "cmd", "module", "main.go") - mainGoBytes, err := os.ReadFile(mainGoPath) //nolint:gosec - if err != nil { - return errors.Wrap(err, "failed to read main.go") - } - mainGo := string(mainGoBytes) - if !strings.Contains(mainGo, "components/generic") { - mainGo = strings.Replace(mainGo, - "\"go.viam.com/rdk/module\"", - "\"go.viam.com/rdk/components/generic\"\n\t\"go.viam.com/rdk/module\"", - 1) - } - mainGo = strings.Replace(mainGo, - "})", - "},\n\t\tresource.APIModel{API: generic.API, Model: "+newModule.ModuleLowercase+".WebappModel})", - 1) - if err := os.WriteFile(mainGoPath, []byte(mainGo), 0o644); err != nil { //nolint:gosec - return errors.Wrap(err, "failed to write updated main.go") - } - - // 5. Update Makefile to include dist in tar - makefilePath := filepath.Join(modulePath, "Makefile") - makefileBytes, err := os.ReadFile(makefilePath) //nolint:gosec - if err != nil { - return errors.Wrap(err, "failed to read Makefile") - } - makefile := string(makefileBytes) - makefile = strings.Replace(makefile, - "tar czf $@ meta.json $(MODULE_BINARY)", - "tar czf $@ meta.json $(MODULE_BINARY) dist", - 1) - if err := os.WriteFile(makefilePath, []byte(makefile), 0o644); err != nil { //nolint:gosec - return errors.Wrap(err, "failed to write updated Makefile") - } - - // 6. Add vmodutils to go.mod - goModPath := filepath.Join(modulePath, "go.mod") - goModBytes, err := os.ReadFile(goModPath) //nolint:gosec - if err != nil { - return errors.Wrap(err, "failed to read go.mod") - } - goMod := string(goModBytes) - if !strings.Contains(goMod, "erh/vmodutils") { - goMod = strings.Replace(goMod, "require (", "require (\n\tgithub.com/erh/vmodutils v0.3.11-rc3", 1) - if err := os.WriteFile(goModPath, []byte(goMod), 0o644); err != nil { //nolint:gosec - return errors.Wrap(err, "failed to write updated go.mod") - } - } - - cwd, err := os.Getwd() - if err != nil { - cwd = "." - } - fullPath := filepath.Join(cwd, newModule.ModuleName) - printf(cmd.Root().Writer, "Module with app successfully generated at %s", fullPath) - printf(cmd.Root().Writer, "Time to build your frontend! See %s for next steps.", filepath.Join(fullPath, "README.md")) - return nil -} - // appTemplateData is the struct passed to app template rendering. type appTemplateData struct { ModuleName string From aedc9f33dfac40348b5f277b5f0062c0bf0489ab Mon Sep 17 00:00:00 2001 From: Allison Chiang Date: Wed, 22 Apr 2026 14:51:12 -0400 Subject: [PATCH 27/27] Revert "remove path for generating app in module" This reverts commit 173bd17e9197297200efbb93ea69dfb519427be6. --- cli/module_generate.go | 222 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 221 insertions(+), 1 deletion(-) diff --git a/cli/module_generate.go b/cli/module_generate.go index 2a4a0413560..cba8b4e78ed 100644 --- a/cli/module_generate.go +++ b/cli/module_generate.go @@ -126,6 +126,7 @@ func promptGenerateType() (string, error) { Options( huh.NewOption("Module", "module"), huh.NewOption("App", "app"), + huh.NewOption("Module and App", "both"), ). Value(&generateType), ), @@ -162,8 +163,10 @@ func (c *viamClient) generateModuleAction(ctx context.Context, cmd *cli.Command, return c.generateModule(ctx, cmd, args, shared) case "app": return c.generateApp(ctx, cmd, args, shared) + case "both": + return c.generateBoth(ctx, cmd, args, shared) default: - return fmt.Errorf("invalid generate type %q: must be module or app", generateType) + return fmt.Errorf("invalid generate type %q: must be module, app, or both", generateType) } } @@ -172,6 +175,223 @@ type appInputs struct { AppType string } +func (c *viamClient) generateBoth(ctx context.Context, cmd *cli.Command, args generateModuleArgs, shared *sharedInputs) error { + // Module-specific prompts + newModule := &modulegen.ModuleInputs{} + if err := promptModuleInputs(newModule); err != nil { + return err + } + newModule.Visibility = shared.Visibility + newModule.Namespace = shared.Namespace + newModule.RegisterOnApp = shared.RegisterOnApp + + // App-specific prompts + app := &appInputs{} + if err := promptAppUser(app); err != nil { + return err + } + + // Set up module inputs for generation + if err := newModule.CheckResourceAndSetType(); err != nil { + return err + } + if err := checkLanguageVersion(newModule.Language); err != nil { + return err + } + if !args.DryRun { + if err := wrapResolveOrg(ctx, cmd, c, newModule); err != nil { + return err + } + } + populateAdditionalInfo(newModule) + + gArgs, err := getGlobalArgs(cmd) + if err != nil { + return err + } + globalArgs := *gArgs + + // Get latest SDK version + version, err := getLatestSDKTag(ctx, cmd, newModule.Language, globalArgs) + if err != nil { + return err + } + newModule.SDKVersion = version[1:] + if idx := strings.LastIndex(newModule.SDKVersion, "/"); idx != -1 { + newModule.SDKVersion = strings.TrimPrefix(newModule.SDKVersion[idx+1:], "v") + } + + // Run the module generation pipeline + if err := setupDirectories(cmd, newModule.ModuleName, globalArgs); err != nil { + return err + } + if _, err := createModuleAndManifest(ctx, cmd, c, *newModule, globalArgs); err != nil { + return err + } + if err := renderCommonFiles(cmd, *newModule, globalArgs); err != nil { + return err + } + if err := copyLanguageTemplate(cmd, newModule.Language, newModule.ModuleName, globalArgs); err != nil { + return err + } + if err := renderTemplate(cmd, *newModule, globalArgs); err != nil { + return err + } + if err := generateStubs(cmd, *newModule, globalArgs); err != nil { + warningf(cmd.Root().ErrWriter, err.Error()) + } + + modulePath := newModule.ModuleName + + // 1. Add applications[] to the generated meta.json + manifestPath := filepath.Join(modulePath, defaultManifestFilename) + manifest, err := loadManifest(manifestPath) + if err != nil { + return errors.Wrap(err, "failed to load manifest to add app") + } + manifest.Apps = []AppComponent{ + { + Name: app.AppName, + Type: app.AppType, + Entrypoint: "dist/index.html", + }, + } + if err := writeManifest(manifestPath, manifest); err != nil { + return errors.Wrap(err, "failed to write manifest with app") + } + + // 2. Add webapp.go (vmodutils server) + webappGo := fmt.Sprintf(`package %s + +import ( + "context" + "embed" + "io/fs" + + "github.com/erh/vmodutils" + "go.viam.com/rdk/components/generic" + "go.viam.com/rdk/logging" + "go.viam.com/rdk/resource" +) + +//go:embed dist/** +var staticFS embed.FS + +func distFS() (fs.FS, error) { + return fs.Sub(staticFS, "dist") +} + +var WebappModel = resource.NewModel("%s", "%s", "webapp") + +type WebappConfig struct { + resource.TriviallyValidateConfig + Port *int `+"`"+`json:"port,omitempty"`+"`"+` +} + +func init() { + resource.RegisterComponent(generic.API, WebappModel, + resource.Registration[resource.Resource, *WebappConfig]{ + Constructor: NewWebappServer, + }, + ) +} + +func NewWebappServer( + _ context.Context, _ resource.Dependencies, rawConf resource.Config, logger logging.Logger, +) (resource.Resource, error) { + conf, err := resource.NativeConfig[*WebappConfig](rawConf) + if err != nil { + return nil, err + } + fs, err := distFS() + if err != nil { + return nil, err + } + port := 8888 + if conf.Port != nil { + port = *conf.Port + } + return vmodutils.NewWebModuleAndStart(rawConf.ResourceName(), fs, logger, port) +} +`, newModule.ModuleLowercase, newModule.Namespace, newModule.ModuleName) + + if err := os.WriteFile(filepath.Join(modulePath, "webapp.go"), []byte(webappGo), 0o644); err != nil { //nolint:gosec + return errors.Wrap(err, "failed to write webapp.go") + } + + // 3. Create dist/index.html placeholder for go:embed + if err := os.MkdirAll(filepath.Join(modulePath, "dist"), 0o750); err != nil { + return errors.Wrap(err, "failed to create dist directory") + } + placeholder := ` +Viam App +

      Viam App

      Replace this with your own frontend. See README.md for next steps.

      + +` + if err := os.WriteFile(filepath.Join(modulePath, "dist", "index.html"), []byte(placeholder), 0o644); err != nil { //nolint:gosec + return errors.Wrap(err, "failed to write dist/index.html") + } + + // 4. Update cmd/module/main.go to register webapp model + mainGoPath := filepath.Join(modulePath, "cmd", "module", "main.go") + mainGoBytes, err := os.ReadFile(mainGoPath) //nolint:gosec + if err != nil { + return errors.Wrap(err, "failed to read main.go") + } + mainGo := string(mainGoBytes) + if !strings.Contains(mainGo, "components/generic") { + mainGo = strings.Replace(mainGo, + "\"go.viam.com/rdk/module\"", + "\"go.viam.com/rdk/components/generic\"\n\t\"go.viam.com/rdk/module\"", + 1) + } + mainGo = strings.Replace(mainGo, + "})", + "},\n\t\tresource.APIModel{API: generic.API, Model: "+newModule.ModuleLowercase+".WebappModel})", + 1) + if err := os.WriteFile(mainGoPath, []byte(mainGo), 0o644); err != nil { //nolint:gosec + return errors.Wrap(err, "failed to write updated main.go") + } + + // 5. Update Makefile to include dist in tar + makefilePath := filepath.Join(modulePath, "Makefile") + makefileBytes, err := os.ReadFile(makefilePath) //nolint:gosec + if err != nil { + return errors.Wrap(err, "failed to read Makefile") + } + makefile := string(makefileBytes) + makefile = strings.Replace(makefile, + "tar czf $@ meta.json $(MODULE_BINARY)", + "tar czf $@ meta.json $(MODULE_BINARY) dist", + 1) + if err := os.WriteFile(makefilePath, []byte(makefile), 0o644); err != nil { //nolint:gosec + return errors.Wrap(err, "failed to write updated Makefile") + } + + // 6. Add vmodutils to go.mod + goModPath := filepath.Join(modulePath, "go.mod") + goModBytes, err := os.ReadFile(goModPath) //nolint:gosec + if err != nil { + return errors.Wrap(err, "failed to read go.mod") + } + goMod := string(goModBytes) + if !strings.Contains(goMod, "erh/vmodutils") { + goMod = strings.Replace(goMod, "require (", "require (\n\tgithub.com/erh/vmodutils v0.3.11-rc3", 1) + if err := os.WriteFile(goModPath, []byte(goMod), 0o644); err != nil { //nolint:gosec + return errors.Wrap(err, "failed to write updated go.mod") + } + } + + cwd, err := os.Getwd() + if err != nil { + cwd = "." + } + fullPath := filepath.Join(cwd, newModule.ModuleName) + printf(cmd.Root().Writer, "Module with app successfully generated at %s", fullPath) + printf(cmd.Root().Writer, "Time to build your frontend! See %s for next steps.", filepath.Join(fullPath, "README.md")) + return nil +} + // appTemplateData is the struct passed to app template rendering. type appTemplateData struct { ModuleName string