boxd 0.2.20.dev929__tar.gz → 0.2.21.dev931__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. {boxd-0.2.20.dev929/src/boxd.egg-info → boxd-0.2.21.dev931}/PKG-INFO +17 -1
  2. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/README.md +16 -0
  3. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/pyproject.toml +1 -1
  4. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/__init__.py +4 -0
  5. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_generated/api_pb2.py +100 -90
  6. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_generated/api_pb2_grpc.py +92 -0
  7. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_mappers.py +32 -0
  8. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/models.py +34 -0
  9. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/orgs.py +78 -0
  10. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931/src/boxd.egg-info}/PKG-INFO +17 -1
  11. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_mappers.py +28 -0
  12. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_namespaces.py +94 -0
  13. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/LICENSE +0 -0
  14. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/setup.cfg +0 -0
  15. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_client.py +0 -0
  16. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_credentials.py +0 -0
  17. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_generated/__init__.py +0 -0
  18. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_requests.py +0 -0
  19. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_streaming.py +0 -0
  20. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_transport.py +0 -0
  21. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_urls.py +0 -0
  22. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_version_check.py +0 -0
  23. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/errors.py +0 -0
  24. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/py.typed +0 -0
  25. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/__init__.py +0 -0
  26. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/account.py +0 -0
  27. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/credentials.py +0 -0
  28. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/disks.py +0 -0
  29. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/domains.py +0 -0
  30. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/fs.py +0 -0
  31. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/machines.py +0 -0
  32. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/snapshots.py +0 -0
  33. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/teams.py +0 -0
  34. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/vars.py +0 -0
  35. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/spec.py +0 -0
  36. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd.egg-info/SOURCES.txt +0 -0
  37. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd.egg-info/dependency_links.txt +0 -0
  38. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd.egg-info/requires.txt +0 -0
  39. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd.egg-info/top_level.txt +0 -0
  40. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_credentials.py +0 -0
  41. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_delete_self.py +0 -0
  42. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_fs.py +0 -0
  43. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_python_versions.py +0 -0
  44. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_requests.py +0 -0
  45. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_spec.py +0 -0
  46. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_streaming.py +0 -0
  47. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_transport.py +0 -0
  48. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_urls.py +0 -0
  49. {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_version_check.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boxd
3
- Version: 0.2.20.dev929
3
+ Version: 0.2.21.dev931
4
4
  Summary: Python SDK for the boxd cloud VM platform
5
5
  Author: Azin
6
6
  License-Expression: MIT
@@ -1121,6 +1121,22 @@ i.platform_enabled # the platform's setting, thi
1121
1121
  boxd.orgs.clear_idle_ignore_outbound_default("acme") # existing machines keep theirs
1122
1122
  ```
1123
1123
 
1124
+ An org has a machine limit: how many machines it may have at once. Any member
1125
+ can read it; the org's owner can ask for a higher one, with their login or an
1126
+ API key of theirs issued for the org. One request is open at a time, and the
1127
+ owner gets an email when the limit changes.
1128
+
1129
+ ```python
1130
+ l = boxd.orgs.get_machine_limit("acme")
1131
+ l.max_vms, l.vm_count # the limit, machines counting against it
1132
+ l.is_owner # True = you may ask for more
1133
+ l.request # the open request, or None
1134
+ r = boxd.orgs.request_machine_limit(100, message="CI runners", org="acme")
1135
+ r.max_vms, r.requested_at # 100 in total, when it was asked
1136
+ # a second one raises ConflictError until the limit changes; a member gets
1137
+ # PermissionDeniedError
1138
+ ```
1139
+
1124
1140
  ```python
1125
1141
  key = boxd.api_keys.create(
1126
1142
  "ci",
@@ -1086,6 +1086,22 @@ i.platform_enabled # the platform's setting, thi
1086
1086
  boxd.orgs.clear_idle_ignore_outbound_default("acme") # existing machines keep theirs
1087
1087
  ```
1088
1088
 
1089
+ An org has a machine limit: how many machines it may have at once. Any member
1090
+ can read it; the org's owner can ask for a higher one, with their login or an
1091
+ API key of theirs issued for the org. One request is open at a time, and the
1092
+ owner gets an email when the limit changes.
1093
+
1094
+ ```python
1095
+ l = boxd.orgs.get_machine_limit("acme")
1096
+ l.max_vms, l.vm_count # the limit, machines counting against it
1097
+ l.is_owner # True = you may ask for more
1098
+ l.request # the open request, or None
1099
+ r = boxd.orgs.request_machine_limit(100, message="CI runners", org="acme")
1100
+ r.max_vms, r.requested_at # 100 in total, when it was asked
1101
+ # a second one raises ConflictError until the limit changes; a member gets
1102
+ # PermissionDeniedError
1103
+ ```
1104
+
1089
1105
  ```python
1090
1106
  key = boxd.api_keys.create(
1091
1107
  "ci",
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "boxd"
3
- version = "0.2.20.dev929"
3
+ version = "0.2.21.dev931"
4
4
  description = "Python SDK for the boxd cloud VM platform"
5
5
  readme = "README.md"
6
6
  license = "MIT"
@@ -88,7 +88,9 @@ from .models import (
88
88
  OrgIdleIgnoreOutboundDefault,
89
89
  OrgIdleIgnoreOutboundDefaultResult,
90
90
  OrgInvite,
91
+ MachineLimitRequest,
91
92
  OrgMachineDefaults,
93
+ OrgMachineLimit,
92
94
  OrgMember,
93
95
  OrgMembers,
94
96
  OrgRef,
@@ -199,7 +201,9 @@ __all__ = [
199
201
  "OrgIdleIgnoreOutboundDefault",
200
202
  "OrgIdleIgnoreOutboundDefaultResult",
201
203
  "OrgInvite",
204
+ "MachineLimitRequest",
202
205
  "OrgMachineDefaults",
206
+ "OrgMachineLimit",
203
207
  "OrgMember",
204
208
  "OrgMembers",
205
209
  "OrgRef",
@@ -24,7 +24,7 @@ _sym_db = _symbol_database.Default()
24
24
 
25
25
 
26
26
 
27
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tapi.proto\x12\x0b\x62oxd.api.v1\"\xfb\x01\n\x08VmConfig\x12\x0c\n\x04vcpu\x18\x01 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x02 \x01(\x04\x12\x12\n\ndisk_bytes\x18\x03 \x01(\x04\x12#\n\x03srf\x18\x04 \x01(\x0b\x32\x16.boxd.api.v1.SrfConfig\x12+\n\x07network\x18\x05 \x01(\x0b\x32\x1a.boxd.api.v1.NetworkConfig\x12)\n\x07volumes\x18\x06 \x03(\x0b\x32\x18.boxd.api.v1.VolumeMount\x12!\n\x14idle_ignore_outbound\x18\x07 \x01(\x08H\x00\x88\x01\x01\x42\x17\n\x15_idle_ignore_outbound\"t\n\tSrfConfig\x12&\n\x19\x61uto_suspend_timeout_secs\x18\x01 \x01(\rH\x00\x88\x01\x01\x12!\n\x19\x61uto_destroy_timeout_secs\x18\x02 \x01(\rB\x1c\n\x1a_auto_suspend_timeout_secs\"S\n\rNetworkConfig\x12\x10\n\x03ssh\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12(\n\x07proxies\x18\x02 \x03(\x0b\x32\x17.boxd.api.v1.ProxyEntryB\x06\n\x04_ssh\"(\n\nProxyEntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\"E\n\x0bVolumeMount\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\x12\n\nmount_path\x18\x02 \x01(\t\x12\x11\n\tread_only\x18\x03 \x01(\x08\"\x8c\x03\n\x0f\x43reateVmRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\timage_ref\x18\x02 \x01(\t\x12 \n\x03\x65nv\x18\x05 \x03(\x0b\x32\x13.boxd.api.v1.EnvVar\x12\x0b\n\x03\x63md\x18\x06 \x03(\t\x12\x16\n\x0erestart_policy\x18\x07 \x01(\t\x12%\n\x06\x63onfig\x18\x08 \x01(\x0b\x32\x15.boxd.api.v1.VmConfig\x12\x0b\n\x03org\x18\t \x01(\t\x12\x0e\n\x06shared\x18\n \x01(\x08\x12\x10\n\x08networks\x18\x0b \x03(\t\x12\x10\n\x08isolated\x18\x0c \x01(\x08\x12\x0c\n\x04team\x18\r \x01(\t\x12\x38\n\x06labels\x18\x0e \x03(\x0b\x32(.boxd.api.v1.CreateVmRequest.LabelsEntry\x12&\n\x04spec\x18\x0f \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05\"=\n\x0fMachineSpecBase\x12\x0e\n\x04team\x18\x01 \x01(\tH\x00\x12\x12\n\x08snapshot\x18\x02 \x01(\tH\x00\x42\x06\n\x04kind\"\x87\x04\n\x0bMachineSpec\x12\x0f\n\x07version\x18\x01 \x01(\r\x12*\n\x04\x62\x61se\x18\x02 \x01(\x0b\x32\x1c.boxd.api.v1.MachineSpecBase\x12\x0c\n\x04size\x18\x03 \x01(\t\x12\x34\n\x06labels\x18\x04 \x03(\x0b\x32$.boxd.api.v1.MachineSpec.LabelsEntry\x12\x10\n\x08networks\x18\x05 \x03(\t\x12\x10\n\x08isolated\x18\x06 \x01(\x08\x12\x0e\n\x06\x65gress\x18\x07 \x03(\t\x12.\n\x03\x65nv\x18\x08 \x03(\x0b\x32!.boxd.api.v1.MachineSpec.EnvEntry\x12>\n\x0b\x63onnections\x18\t \x03(\x0b\x32).boxd.api.v1.MachineSpec.ConnectionsEntry\x12\x0e\n\x06\x61gents\x18\n \x03(\t\x12\x11\n\tassign_to\x18\x0b \x01(\t\x12\x0f\n\x07secrets\x18\x0c \x03(\t\x12\x10\n\x08packages\x18\r \x03(\t\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x32\n\x10\x43onnectionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"$\n\x06\x45nvVar\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xa0\x01\n\x10\x43reateVmResponse\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tpublic_ip\x18\x03 \x01(\t\x12\x0b\n\x03url\x18\x04 \x01(\t\x12\r\n\x05image\x18\x05 \x01(\t\x12\x0e\n\x06status\x18\x06 \x01(\t\x12\x14\n\x0c\x62oot_time_ms\x18\x07 \x01(\x04\x12\x1a\n\x12paused_automations\x18\x08 \x01(\r\"!\n\x10\x44\x65stroyVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x13\n\x11\x44\x65stroyVmResponse\"\x16\n\x14SuggestVmNameRequest\"%\n\x15SuggestVmNameResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"2\n\x0fRenameVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\" \n\x10RenameVmResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"7\n\x14SetVmNetworksRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08networks\x18\x02 \x03(\t\")\n\x15SetVmNetworksResponse\x12\x10\n\x08networks\x18\x01 \x03(\t\"6\n\x17SetVmEgressAllowRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0f\n\x07\x65ntries\x18\x02 \x03(\t\"+\n\x18SetVmEgressAllowResponse\x12\x0f\n\x07\x65ntries\x18\x01 \x03(\t\"\xae\x01\n\x15UpdateVmLabelsRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x38\n\x03set\x18\x02 \x03(\x0b\x32+.boxd.api.v1.UpdateVmLabelsRequest.SetEntry\x12\x0e\n\x06remove\x18\x03 \x03(\t\x12\x13\n\x0breplace_all\x18\x04 \x01(\x08\x1a*\n\x08SetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x88\x01\n\x16UpdateVmLabelsResponse\x12?\n\x06labels\x18\x01 \x03(\x0b\x32/.boxd.api.v1.UpdateVmLabelsResponse.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"U\n\x11\x45xposePortRequest\x12\x11\n\x05vm_id\x18\x01 \x01(\tB\x02\x18\x01\x12\x0f\n\x07vm_port\x18\x02 \x01(\r\x12\x10\n\x08protocol\x18\x03 \x01(\t\x12\n\n\x02vm\x18\x04 \x01(\t\"y\n\x12\x45xposePortResponse\x12\x0f\n\x07vm_name\x18\x01 \x01(\t\x12\x0b\n\x03\x64ns\x18\x02 \x01(\t\x12\x13\n\x0bpublic_port\x18\x03 \x01(\r\x12\x0f\n\x07vm_port\x18\x04 \x01(\r\x12\x10\n\x08protocol\x18\x05 \x01(\t\x12\r\n\x05vm_id\x18\x06 \x01(\t\"E\n\x13UnexposePortRequest\x12\x11\n\x05vm_id\x18\x01 \x01(\tB\x02\x18\x01\x12\x0f\n\x07vm_port\x18\x02 \x01(\r\x12\n\n\x02vm\x18\x03 \x01(\t\"H\n\x14UnexposePortResponse\x12\x30\n\x07\x66orward\x18\x01 \x01(\x0b\x32\x1f.boxd.api.v1.ExposePortResponse\"%\n\x17ListExposedPortsRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"M\n\x18ListExposedPortsResponse\x12\x31\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x1f.boxd.api.v1.ExposePortResponse\"g\n\rSetVarRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05value\x18\x04 \x01(\t\x12\r\n\x05scope\x18\x05 \x01(\t\x12\x0f\n\x07\x64omains\x18\x06 \x03(\t\"\x1b\n\x08VarReply\x12\x0f\n\x07message\x18\x01 \x01(\t\",\n\x0fListVarsRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\"r\n\x07VarItem\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\r\n\x05scope\x18\x03 \x01(\t\x12\r\n\x05value\x18\x04 \x01(\t\x12\x0f\n\x07\x64omains\x18\x06 \x03(\t\x12\x16\n\x0e\x62ound_machines\x18\x07 \x01(\rJ\x04\x08\x05\x10\x06\"2\n\x0cVarListReply\x12\"\n\x04vars\x18\x01 \x03(\x0b\x32\x14.boxd.api.v1.VarItem\"J\n\x10RemoveVarRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05scope\x18\x04 \x01(\t\"L\n\x15SetSecretScopeRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04\x66rom\x18\x03 \x01(\t\x12\n\n\x02to\x18\x04 \x01(\t\"\x1f\n\x0eStartVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x11\n\x0fStartVmResponse\"\x1e\n\rStopVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x10\n\x0eStopVmResponse\" \n\x0fRebootVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x12\n\x10RebootVmResponse\"!\n\x10SuspendVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\'\n\x11SuspendVmResponse\x12\x12\n\nsuspend_us\x18\x01 \x01(\x04\" \n\x0fResumeVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"%\n\x10ResumeVmResponse\x12\x11\n\tresume_us\x18\x01 \x01(\x04\"#\n\x12HibernateVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x15\n\x13HibernateVmResponse\"\x1e\n\rWakeVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x10\n\x0eWakeVmResponse\"\x1d\n\x0cGetVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x88\t\n\rGetVmResponse\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\timage_ref\x18\x03 \x01(\t\x12\x11\n\tpublic_ip\x18\x04 \x01(\t\x12\x0e\n\x06status\x18\x05 \x01(\t\x12\x16\n\x0erestart_policy\x18\x06 \x01(\t\x12\x12\n\ndisk_bytes\x18\x07 \x01(\x04\x12!\n\x19\x61uto_suspend_timeout_secs\x18\x08 \x01(\r\x12\x10\n\x08ssh_port\x18\t \x01(\r\x12\x0b\n\x03org\x18\n \x01(\t\x12\x13\n\x0b\x62illing_org\x18\x0b \x01(\t\x12\x15\n\raccess_domain\x18\x0c \x01(\t\x12#\n\x1b\x61uto_hibernate_timeout_secs\x18\r \x01(\r\x12\x0e\n\x06source\x18\x0e \x01(\t\x12\x0c\n\x04vcpu\x18\x0f \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x10 \x01(\x04\x12\x12\n\ncreated_at\x18\x11 \x01(\x03\x12\x18\n\x10hibernated_at_ms\x18\x12 \x01(\x03\x12!\n\x19\x61uto_destroy_timeout_secs\x18\x13 \x01(\r\x12\x14\n\x0c\x62oot_time_ms\x18\x14 \x01(\x03\x12\x19\n\x11last_connected_ms\x18\x15 \x01(\x03\x12\x0e\n\x06org_id\x18\x16 \x01(\t\x12\x16\n\x0e\x62illing_org_id\x18\x17 \x01(\t\x12*\n\x0bsource_info\x18\x18 \x01(\x0b\x32\x15.boxd.api.v1.VmSource\x12\x10\n\x08networks\x18\x19 \x03(\t\x12\x10\n\x08isolated\x18\x1a \x01(\x08\x12\x35\n\x0e\x63ustom_domains\x18\x1b \x03(\x0b\x32\x1d.boxd.api.v1.CustomDomainInfo\x12\x14\n\x0c\x65gress_allow\x18\x1c \x03(\t\x12\x16\n\x0e\x62ot_protection\x18\x1d \x01(\x08\x12\x14\n\x0c\x64\x65lete_at_ms\x18\x1e \x01(\x03\x12\x19\n\x11\x64\x65lete_after_cron\x18\x1f \x01(\t\x12\x1c\n\x14idle_ignore_outbound\x18 \x01(\x08\x12\x1b\n\x13\x62ot_protection_mode\x18! \x01(\t\x12\x36\n\x06labels\x18\" \x03(\x0b\x32&.boxd.api.v1.GetVmResponse.LabelsEntry\x12&\n\x04spec\x18# \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x12.\n\x0c\x63reated_spec\x18$ \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x12\x12\n\ncreated_by\x18% \x01(\t\x12\x17\n\x0f\x63reated_by_name\x18& \x01(\t\x12\x35\n\x0crequirements\x18\' \x03(\x0b\x32\x1f.boxd.api.v1.MachineRequirement\x12-\n\x08packages\x18( \x03(\x0b\x32\x1b.boxd.api.v1.MachinePackage\x12\x14\n\x0cssh_disabled\x18) \x01(\x08\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x85\x01\n\x18UpdateMachineSpecRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\r\n\x05patch\x18\x02 \x01(\t\x12\x0f\n\x07\x64ry_run\x18\x03 \x01(\x08\x12\x0e\n\x06reboot\x18\x04 \x01(\x08\x12\x16\n\x0eretry_packages\x18\x05 \x01(\x08\x12\x15\n\rexpected_spec\x18\x06 \x01(\t\"\xe2\x01\n\x19UpdateMachineSpecResponse\x12/\n\x07\x63hanges\x18\x01 \x03(\x0b\x32\x1e.boxd.api.v1.MachineSpecChange\x12\x17\n\x0freboot_required\x18\x02 \x01(\x08\x12\x1a\n\x12reboot_recommended\x18\x03 \x01(\x08\x12&\n\x04spec\x18\x04 \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x12\x0f\n\x07\x61pplied\x18\x05 \x01(\x08\x12\x10\n\x08rebooted\x18\x06 \x01(\x08\x12\x14\n\x0cresize_error\x18\x07 \x01(\t\"\xc5\x01\n\x11MachineSpecChange\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\r\n\x05\x61pply\x18\x02 \x01(\t\x12\r\n\x05\x61\x64\x64\x65\x64\x18\x03 \x03(\t\x12\x0f\n\x07removed\x18\x04 \x03(\t\x12\x0f\n\x07\x63hanged\x18\x05 \x03(\t\x12\x0e\n\x06\x62\x65\x66ore\x18\x06 \x01(\t\x12\r\n\x05\x61\x66ter\x18\x07 \x01(\t\x12\x0c\n\x04note\x18\x08 \x01(\t\x12\x10\n\x08warnings\x18\t \x03(\t\x12\x0f\n\x07skipped\x18\n \x03(\t\x12\x11\n\tunskipped\x18\x0b \x03(\t\"\xaa\x01\n\x0eMachinePackage\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\x12\r\n\x05state\x18\x02 \x01(\t\x12\x16\n\texit_code\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x13\n\x0boutput_tail\x18\x04 \x01(\t\x12\x0e\n\x06reason\x18\x05 \x01(\t\x12\x15\n\rstarted_at_ms\x18\x06 \x01(\x03\x12\x16\n\x0e\x66inished_at_ms\x18\x07 \x01(\x03\x42\x0c\n\n_exit_code\"z\n\x12MachineRequirement\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05scope\x18\x03 \x01(\t\x12\x0b\n\x03tag\x18\x04 \x01(\t\x12\x0b\n\x03met\x18\x05 \x01(\x08\x12\x0f\n\x07\x63\x61n_fix\x18\x06 \x01(\x08\x12\x0e\n\x06reason\x18\x07 \x01(\t\"C\n\x08VmSource\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12\n\n\x02id\x18\x04 \x01(\t\"K\n\x0eListVmsRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x14\n\x0c\x61ll_contexts\x18\x02 \x01(\x08\x12\x16\n\x0elabel_selector\x18\x03 \x03(\t\"P\n\x0fListVmsResponse\x12\'\n\x03vms\x18\x01 \x03(\x0b\x32\x1a.boxd.api.v1.GetVmResponse\x12\x14\n\x0cssh_host_key\x18\x02 \x01(\t\"2\n\x11StreamLogsRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0e\n\x06\x66ollow\x18\x02 \x01(\x08\"\x18\n\x08LogChunk\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\xc1\x01\n\tExecChunk\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\r\n\x05stdin\x18\x02 \x01(\x08\x12\x0b\n\x03tty\x18\x03 \x01(\x08\x12\x0f\n\x07\x63ommand\x18\x04 \x01(\t\x12\r\n\x05vm_id\x18\x05 \x01(\t\x12\x11\n\texit_code\x18\x06 \x01(\x05\x12\x0c\n\x04\x63ols\x18\x07 \x01(\r\x12\x0c\n\x04rows\x18\x08 \x01(\r\x12\x15\n\rwindow_change\x18\t \x01(\x08\x12\x11\n\tis_stderr\x18\n \x01(\x08\x12\x11\n\tdevice_id\x18\x0b \x01(\t\"+\n\x0c\x44\x65sktopChunk\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"$\n\x14\x43reateNetworkRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"+\n\x15\x43reateNetworkResponse\x12\x12\n\nnetwork_id\x18\x01 \x01(\t\"\x15\n\x13ListNetworksRequest\"B\n\x14ListNetworksResponse\x12*\n\x08networks\x18\x01 \x03(\x0b\x32\x18.boxd.api.v1.NetworkInfo\"A\n\x0bNetworkInfo\x12\x12\n\nnetwork_id\x18\x01 \x01(\t\x12\x0e\n\x06subnet\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\"7\n\x16\x41\x64\x64\x43ustomDomainRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\"H\n\x17\x41\x64\x64\x43ustomDomainResponse\x12-\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1d.boxd.api.v1.CustomDomainInfo\"\x1a\n\x18ListCustomDomainsRequest\"K\n\x19ListCustomDomainsResponse\x12.\n\x07\x64omains\x18\x01 \x03(\x0b\x32\x1d.boxd.api.v1.CustomDomainInfo\"+\n\x19RemoveCustomDomainRequest\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\"\x1c\n\x1aRemoveCustomDomainResponse\"f\n\x10\x43ustomDomainInfo\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\r\n\x05vm_id\x18\x02 \x01(\t\x12\x0f\n\x07vm_name\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x12\n\nlast_error\x18\x05 \x01(\t\"5\n\x13SetOrgDomainRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\"B\n\x14SetOrgDomainResponse\x12*\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1a.boxd.api.v1.OrgDomainInfo\"%\n\x13GetOrgDomainRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"B\n\x14GetOrgDomainResponse\x12*\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1a.boxd.api.v1.OrgDomainInfo\"\'\n\x15\x43learOrgDomainRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"\x18\n\x16\x43learOrgDomainResponse\"S\n\rOrgDomainInfo\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x12\n\nlast_error\x18\x04 \x01(\t\"\x12\n\x10GetConfigRequest\"8\n\x11GetConfigResponse\x12\x15\n\rdefault_image\x18\x01 \x01(\t\x12\x0c\n\x04zone\x18\x02 \x01(\t\"\x0f\n\rWhoamiRequest\"\x99\x01\n\x0eWhoamiResponse\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x1b\n\x13pubkey_fingerprints\x18\x02 \x03(\t\x12)\n\x07\x62illing\x18\x04 \x01(\x0b\x32\x18.boxd.api.v1.BillingInfo\x12\x14\n\x0c\x64isplay_name\x18\x05 \x01(\tJ\x04\x08\x03\x10\x04R\x12\x64\x65\x66\x61ult_network_id\"\xbb\x02\n\x0b\x42illingInfo\x12\x1b\n\x13subscription_status\x18\x03 \x01(\t\x12\x16\n\x0epast_due_since\x18\x06 \x01(\x03\x12\x0f\n\x07max_vms\x18\x07 \x01(\r\x12\x0c\n\x04vcpu\x18\x08 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\t \x01(\x04\x12\x15\n\rbalance_micro\x18\n \x01(\x03\x12\x14\n\x0c\x62illing_mode\x18\x0b \x01(\t\x12\x10\n\x08\x63urrency\x18\x0c \x01(\t\x12\x14\n\x0c\x63\x65iling_vcpu\x18\r \x01(\r\x12\x1c\n\x14\x63\x65iling_memory_bytes\x18\x0e \x01(\x04J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06R\x04tierR\x05shapeR\x12stripe_customer_idR\x16stripe_subscription_id\"\x12\n\x10ListPlansRequest\"9\n\x11ListPlansResponse\x12$\n\x05plans\x18\x01 \x03(\x0b\x32\x15.boxd.api.v1.PlanInfo\"\x85\x01\n\x08PlanInfo\x12\x13\n\x0bmonthly_eur\x18\x03 \x01(\r\x12\x12\n\nlookup_key\x18\x04 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12\x0c\n\x04vcpu\x18\x06 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x07 \x01(\x04J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03R\x04tierR\x05shape\"\x13\n\x11GetBillingRequest\"?\n\x12GetBillingResponse\x12)\n\x07\x62illing\x18\x01 \x01(\x0b\x32\x18.boxd.api.v1.BillingInfo\"T\n\x1c\x43reateCheckoutSessionRequest\x12\x13\n\x0bsuccess_url\x18\x02 \x01(\t\x12\x12\n\ncancel_url\x18\x03 \x01(\tJ\x04\x08\x01\x10\x02R\x05shape\"5\n\x1d\x43reateCheckoutSessionResponse\x12\x14\n\x0c\x63heckout_url\x18\x01 \x01(\t\"7\n!CreateBillingPortalSessionRequest\x12\x12\n\nreturn_url\x18\x01 \x01(\t\"8\n\"CreateBillingPortalSessionResponse\x12\x12\n\nportal_url\x18\x01 \x01(\t\"-\n\x12\x43reateTokenRequest\x12\x17\n\x0f\x65xpires_in_secs\x18\x01 \x01(\x04\"8\n\x13\x43reateTokenResponse\x12\r\n\x05token\x18\x01 \x01(\t\x12\x12\n\nexpires_at\x18\x02 \x01(\x03\"\x13\n\x11ListTokensRequest\"<\n\x12ListTokensResponse\x12&\n\x06tokens\x18\x01 \x03(\x0b\x32\x16.boxd.api.v1.TokenInfo\"@\n\tTokenInfo\x12\x0b\n\x03jti\x18\x01 \x01(\t\x12\x12\n\ncreated_at\x18\x02 \x01(\x03\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\"!\n\x12RevokeTokenRequest\x12\x0b\n\x03jti\x18\x01 \x01(\t\"\x15\n\x13RevokeTokenResponse\"E\n\x11LinkSshKeyRequest\x12\x0e\n\x06pubkey\x18\x01 \x01(\t\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\"\x14\n\x12LinkSshKeyResponse\"\xf5\x01\n\rForkVmRequest\x12\x14\n\x0csource_vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12%\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x15.boxd.api.v1.VmConfig\x12\x0e\n\x06shared\x18\x04 \x01(\x08\x12\x10\n\x08networks\x18\x05 \x03(\t\x12\x10\n\x08isolated\x18\x06 \x01(\x08\x12\x36\n\x06labels\x18\x07 \x03(\x0b\x32&.boxd.api.v1.ForkVmRequest.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb3\x01\n\x0e\x46orkVmResponse\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tpublic_ip\x18\x03 \x01(\t\x12\x0b\n\x03url\x18\x04 \x01(\t\x12\r\n\x05image\x18\x05 \x01(\t\x12\x0e\n\x06status\x18\x06 \x01(\t\x12\x13\n\x0b\x66orked_from\x18\x07 \x01(\t\x12\x14\n\x0c\x62oot_time_ms\x18\x08 \x01(\x04\x12\x1a\n\x12paused_automations\x18\t \x01(\r\"5\n\x12ListProxiesRequest\x12\x13\n\x07vm_name\x18\x01 \x01(\tB\x02\x18\x01\x12\n\n\x02vm\x18\x02 \x01(\t\">\n\x13ListProxiesResponse\x12\'\n\x07proxies\x18\x01 \x03(\x0b\x32\x16.boxd.api.v1.ProxyInfo\"\xac\x01\n\tProxyInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07vm_name\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\x12\x12\n\nis_default\x18\x05 \x01(\x08\x12\x14\n\x0cport_display\x18\x06 \x01(\t\x12\r\n\x05vm_id\x18\x07 \x01(\t\x12\x11\n\tport_mode\x18\x08 \x01(\t\x12\x16\n\x0e\x65\x66\x66\x65\x63tive_port\x18\t \x01(\r\"\x17\n\x15ListProxyNodesRequest\"E\n\x16ListProxyNodesResponse\x12+\n\x07proxies\x18\x01 \x03(\x0b\x32\x1a.boxd.api.v1.ProxyNodeInfo\"-\n\rProxyNodeInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x02 \x01(\t\"Q\n\x12\x43reateProxyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x07vm_name\x18\x02 \x01(\tB\x02\x18\x01\x12\x0c\n\x04port\x18\x03 \x01(\r\x12\n\n\x02vm\x18\x04 \x01(\t\"R\n\x13\x43reateProxyResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07vm_name\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"C\n\x12\x44\x65leteProxyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x07vm_name\x18\x02 \x01(\tB\x02\x18\x01\x12\n\n\x02vm\x18\x03 \x01(\t\"\x15\n\x13\x44\x65leteProxyResponse\"R\n\x13SetProxyPortRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x07vm_name\x18\x02 \x01(\tB\x02\x18\x01\x12\x0c\n\x04port\x18\x03 \x01(\t\x12\n\n\x02vm\x18\x04 \x01(\t\"\x16\n\x14SetProxyPortResponse\">\n\x11UploadFileRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"+\n\x12UploadFileResponse\x12\x15\n\rbytes_written\x18\x01 \x01(\x04\"P\n\x0fUploadFileChunk\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x12\n\ntotal_size\x18\x03 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"2\n\x13\x44ownloadFileRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"$\n\x14\x44ownloadFileResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"5\n\x11\x44ownloadFileChunk\x12\x12\n\ntotal_size\x18\x01 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"-\n\x0eListDirRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"x\n\x08\x44irEntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06is_dir\x18\x02 \x01(\x08\x12\x12\n\nsize_bytes\x18\x03 \x01(\x04\x12\x13\n\x0bpermissions\x18\x04 \x01(\t\x12\x13\n\x0bmodified_at\x18\x05 \x01(\x03\x12\x10\n\x08\x61\x64\x64\x65\x64_at\x18\x06 \x01(\x03\"L\n\x0fListDirResponse\x12&\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x15.boxd.api.v1.DirEntry\x12\x11\n\ttruncated\x18\x02 \x01(\x08\"+\n\x0cMkdirRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x0f\n\rMkdirResponse\"F\n\x11RenamePathRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08old_path\x18\x02 \x01(\t\x12\x10\n\x08new_path\x18\x03 \x01(\t\"\x14\n\x12RenamePathResponse\"0\n\x11\x44\x65letePathRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x14\n\x12\x44\x65letePathResponse\"D\n\x0f\x43opyPathRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08old_path\x18\x02 \x01(\t\x12\x10\n\x08new_path\x18\x03 \x01(\t\"\x12\n\x10\x43opyPathResponse\"\xe0\x01\n\x07\x46sEntry\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12&\n\x04type\x18\x03 \x01(\x0e\x32\x18.boxd.api.v1.FsEntryType\x12-\n\x0btarget_type\x18\x04 \x01(\x0e\x32\x18.boxd.api.v1.FsEntryType\x12\x0c\n\x04size\x18\x05 \x01(\x04\x12\x0c\n\x04mode\x18\x06 \x01(\r\x12\x14\n\x08mtime_ns\x18\x07 \x01(\x03\x42\x02\x30\x01\x12\x0b\n\x03uid\x18\x08 \x01(\r\x12\x0b\n\x03gid\x18\t \x01(\r\x12\x16\n\x0esymlink_target\x18\n \x01(\x0c\"\\\n\rFsReadRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x13\n\x06length\x18\x04 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_length\"a\n\x0b\x46sReadChunk\x12#\n\x05\x65ntry\x18\x01 \x01(\x0b\x32\x14.boxd.api.v1.FsEntry\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x03 \x01(\x08\x12\x12\n\nbytes_read\x18\x04 \x01(\x04\"\x83\x01\n\x0c\x46sWriteChunk\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x11\n\x04mode\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rexpected_size\x18\x04 \x01(\x04H\x01\x88\x01\x01\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\x42\x07\n\x05_modeB\x10\n\x0e_expected_size\"M\n\x0f\x46sWriteResponse\x12\x15\n\rbytes_written\x18\x01 \x01(\x04\x12#\n\x05\x65ntry\x18\x02 \x01(\x0b\x32\x14.boxd.api.v1.FsEntry\",\n\rFsStatRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\"5\n\x0e\x46sStatResponse\x12#\n\x05\x65ntry\x18\x01 \x01(\x0b\x32\x14.boxd.api.v1.FsEntry\",\n\rFsListRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\"4\n\x0b\x46sListChunk\x12%\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x14.boxd.api.v1.FsEntry\"I\n\x0e\x46sMkdirRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x11\n\x04mode\x18\x03 \x01(\rH\x00\x88\x01\x01\x42\x07\n\x05_mode\"\x11\n\x0f\x46sMkdirResponse\"A\n\x0f\x46sRemoveRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x11\n\trecursive\x18\x03 \x01(\x08\"\x12\n\x10\x46sRemoveResponse\"X\n\x0f\x46sRenameRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08old_path\x18\x02 \x01(\x0c\x12\x10\n\x08new_path\x18\x03 \x01(\x0c\x12\x12\n\nno_replace\x18\x04 \x01(\x08\"\x12\n\x10\x46sRenameResponse\"0\n\x11\x46sRealpathRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\"\"\n\x12\x46sRealpathResponse\x12\x0c\n\x04path\x18\x01 \x01(\x0c\"1\n\x15\x43reateSnapshotRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"x\n\x16\x43reateSnapshotResponse\x12\x13\n\x0bsnapshot_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x1a\n\x12paused_automations\x18\x05 \x01(\r\"#\n\x14ListSnapshotsRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\"E\n\x15ListSnapshotsResponse\x12,\n\tsnapshots\x18\x01 \x03(\x0b\x32\x19.boxd.api.v1.SnapshotInfo\"/\n\x12GetSnapshotRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03org\x18\x02 \x01(\t\"B\n\x13GetSnapshotResponse\x12+\n\x08snapshot\x18\x01 \x01(\x0b\x32\x19.boxd.api.v1.SnapshotInfo\"2\n\x15\x44\x65leteSnapshotRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03org\x18\x02 \x01(\t\"\x18\n\x16\x44\x65leteSnapshotResponse\"\xa0\x02\n\x1b\x43reateVmFromSnapshotRequest\x12\x10\n\x08snapshot\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12%\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x15.boxd.api.v1.VmConfig\x12\x0b\n\x03org\x18\x04 \x01(\t\x12\x10\n\x08isolated\x18\x05 \x01(\x08\x12\x44\n\x06labels\x18\x06 \x03(\x0b\x32\x34.boxd.api.v1.CreateVmFromSnapshotRequest.LabelsEntry\x12&\n\x04spec\x18\x07 \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc6\x02\n\x0cSnapshotInfo\x12\x13\n\x0bsnapshot_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x12\n\nsize_bytes\x18\x07 \x01(\x04\x12\x12\n\nupdated_at\x18\x08 \x01(\x03\x12\x0c\n\x04vcpu\x18\t \x01(\r\x12\x14\n\x0cmemory_bytes\x18\n \x01(\x04\x12\x11\n\tuse_count\x18\x0b \x01(\x04\x12\x12\n\ncreated_at\x18\x0c \x01(\x03\x12\x16\n\x0e\x66\x61iled_version\x18\r \x01(\x04\x12\x16\n\x0e\x66\x61ilure_reason\x18\x0e \x01(\t\x12\x10\n\x08\x61rchived\x18\x0f \x01(\x08\x12\x0f\n\x07storage\x18\x10 \x01(\tJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07R\x0eready_replicasR\x10\x64\x65sired_replicas\"3\n\x17\x43reateCheckpointRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"O\n\x18\x43reateCheckpointResponse\x12\x15\n\rcheckpoint_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\"$\n\x16ListCheckpointsRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"K\n\x17ListCheckpointsResponse\x12\x30\n\x0b\x63heckpoints\x18\x01 \x03(\x0b\x32\x1b.boxd.api.v1.CheckpointInfo\"3\n\x17\x44\x65leteCheckpointRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x1a\n\x18\x44\x65leteCheckpointResponse\"4\n\x18RestoreCheckpointRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x1b\n\x19RestoreCheckpointResponse\"\x94\x01\n\x0e\x43heckpointInfo\x12\x15\n\rcheckpoint_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x12\n\nsize_bytes\x18\x04 \x01(\x04\x12\x12\n\ncreated_at\x18\x05 \x01(\x03\x12\x12\n\ncreated_by\x18\x06 \x01(\t\x12\x11\n\tavailable\x18\x07 \x01(\x08\";\n\x11\x43reateDiskRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nsize_bytes\x18\x02 \x01(\x04J\x04\x08\x03\x10\x04\"]\n\x12\x43reateDiskResponse\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nsize_bytes\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\tJ\x04\x08\x05\x10\x06\"\x12\n\x10ListDisksRequest\"9\n\x11ListDisksResponse\x12$\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x15.boxd.api.v1.DiskInfo\"\xaa\x01\n\x08\x44iskInfo\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nsize_bytes\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x30\n\x0b\x61ttachments\x18\x06 \x03(\x0b\x32\x1b.boxd.api.v1.DiskAttachment\x12\x12\n\ncreated_at\x18\x08 \x01(\x03J\x04\x08\x05\x10\x06J\x04\x08\x07\x10\x08R\tworker_id\"X\n\x0e\x44iskAttachment\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0f\n\x07vm_name\x18\x02 \x01(\t\x12\x12\n\nmount_path\x18\x03 \x01(\t\x12\x12\n\nmount_mode\x18\x04 \x01(\t\"Z\n\x11\x41ttachDiskRequest\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\r\n\x05vm_id\x18\x02 \x01(\t\x12\x12\n\nmount_path\x18\x03 \x01(\t\x12\x11\n\tread_only\x18\x04 \x01(\x08\"\x14\n\x12\x41ttachDiskResponse\"3\n\x11\x44\x65tachDiskRequest\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\r\n\x05vm_id\x18\x02 \x01(\t\"\x14\n\x12\x44\x65tachDiskResponse\"%\n\x12\x44\x65stroyDiskRequest\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\"\x15\n\x13\x44\x65stroyDiskResponse\"C\n\x1cSetAutoSuspendTimeoutRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x14\n\x0ctimeout_secs\x18\x02 \x01(\r\"\x1f\n\x1dSetAutoSuspendTimeoutResponse\"E\n\x1eSetAutoHibernateTimeoutRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x14\n\x0ctimeout_secs\x18\x02 \x01(\r\"!\n\x1fSetAutoHibernateTimeoutResponse\"\\\n\x15SetDeleteAfterRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x19\n\x11\x64\x65lete_after_secs\x18\x02 \x01(\x04\x12\x19\n\x11\x64\x65lete_after_cron\x18\x03 \x01(\t\".\n\x16SetDeleteAfterResponse\x12\x14\n\x0c\x64\x65lete_at_ms\x18\x01 \x01(\x03\"G\n\x17SetBotProtectionRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x12\x0c\n\x04mode\x18\x03 \x01(\t\"\x1a\n\x18SetBotProtectionResponse\">\n\x1cSetIdleIgnoreOutboundRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"\x1f\n\x1dSetIdleIgnoreOutboundResponse\"/\n\rSetSshRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"\x10\n\x0eSetSshResponse\"W\n\x13\x43reateApiKeyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0f\x65xpires_in_secs\x18\x02 \x01(\x04\x12\x0b\n\x03org\x18\x03 \x01(\t\x12\x0c\n\x04kind\x18\x04 \x01(\t\"G\n\x14\x43reateApiKeyResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0f\n\x07\x61pi_key\x18\x02 \x01(\t\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\"\x14\n\x12ListApiKeysRequest\"<\n\x13ListApiKeysResponse\x12%\n\x04keys\x18\x01 \x03(\x0b\x32\x17.boxd.api.v1.ApiKeyInfo\"\xb5\x01\n\nApiKeyInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nkey_prefix\x18\x03 \x01(\t\x12\x12\n\ncreated_at\x18\x04 \x01(\x03\x12\x14\n\x0clast_used_at\x18\x05 \x01(\x03\x12\x12\n\nexpires_at\x18\x06 \x01(\x03\x12\x0b\n\x03org\x18\x07 \x01(\t\x12\x0c\n\x04kind\x18\x08 \x01(\t\x12\x12\n\ncreated_by\x18\t \x01(\t\x12\x0c\n\x04mine\x18\n \x01(\x08\"!\n\x13\x44\x65leteApiKeyRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteApiKeyResponse\"\x1f\n\x0eShareVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x11\n\x0fShareVmResponse\"\x11\n\x0fListOrgsRequest\"W\n\x10ListOrgsResponse\x12%\n\x04orgs\x18\x01 \x03(\x0b\x32\x17.boxd.api.v1.OrgSummary\x12\x16\n\x0e\x64\x65\x66\x61ult_org_id\x18\x03 \x01(\tJ\x04\x08\x02\x10\x03\"F\n\nOrgSummary\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08is_admin\x18\x03 \x01(\x08\x12\x0c\n\x04slug\x18\x04 \x01(\t\"#\n\x14GetOrgBillingRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\"\xd4\x02\n\x15GetOrgBillingResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08is_admin\x18\x03 \x01(\x08\x12\x0f\n\x07max_vms\x18\x04 \x01(\r\x12\x0c\n\x04vcpu\x18\x05 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x06 \x01(\x04\x12\x10\n\x08vm_count\x18\x07 \x01(\r\x12%\n\x03vms\x18\x08 \x03(\x0b\x32\x18.boxd.api.v1.OrgBilledVm\x12\x15\n\rbalance_micro\x18\t \x01(\x03\x12\x14\n\x0c\x62illing_mode\x18\n \x01(\t\x12\x1b\n\x0e\x61\x63\x63ruing_micro\x18\x0b \x01(\x03H\x00\x88\x01\x01\x12\x10\n\x08\x63urrency\x18\x0c \x01(\t\x12\x14\n\x0c\x63\x65iling_vcpu\x18\r \x01(\r\x12\x1c\n\x14\x63\x65iling_memory_bytes\x18\x0e \x01(\x04\x42\x11\n\x0f_accruing_micro\"l\n\x0bOrgBilledVm\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05owner\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x0f\n\x07\x62illing\x18\x05 \x01(\t\x12\x12\n\nowner_name\x18\x06 \x01(\tJ\x04\x08\x04\x10\x05R\x05shape\"^\n\nUsageRates\x12\x17\n\x0fvcpu_hour_micro\x18\x01 \x01(\x03\x12\x1a\n\x12ram_gib_hour_micro\x18\x02 \x01(\x03\x12\x1b\n\x13\x64isk_gib_hour_micro\x18\x03 \x01(\x03\"U\n\x0cStateSeconds\x12\x0f\n\x07running\x18\x01 \x01(\x04\x12\x0f\n\x07standby\x18\x02 \x01(\x04\x12\x12\n\nhibernated\x18\x03 \x01(\x04\x12\x0f\n\x07stopped\x18\x04 \x01(\x04\"\xb7\x02\n\x07VmUsage\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05owner\x18\x03 \x01(\t\x12\x12\n\nowner_name\x18\x04 \x01(\t\x12\x0f\n\x07sharing\x18\x05 \x01(\t\x12\x0e\n\x06status\x18\x06 \x01(\t\x12\x0c\n\x04vcpu\x18\x07 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x08 \x01(\x04\x12\x12\n\ndisk_bytes\x18\t \x01(\x04\x12*\n\x07seconds\x18\n \x01(\x0b\x32\x19.boxd.api.v1.StateSeconds\x12\x12\n\nvcpu_hours\x18\x0b \x01(\x01\x12\x15\n\rram_gib_hours\x18\x0c \x01(\x01\x12\x16\n\x0e\x64isk_gib_hours\x18\r \x01(\x01\x12\x12\n\ncost_micro\x18\x0e \x01(\x03\x12\x10\n\x08\x63omplete\x18\x0f \x01(\x08\"?\n\x12GetOrgUsageRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\r\n\x05since\x18\x02 \x01(\x03\x12\r\n\x05until\x18\x03 \x01(\x03\"\xe5\x01\n\x13GetOrgUsageResponse\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0b\n\x03org\x18\x02 \x01(\t\x12\x14\n\x0cperiod_start\x18\x03 \x01(\x03\x12\x12\n\nperiod_end\x18\x04 \x01(\x03\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12&\n\x05rates\x18\x06 \x01(\x0b\x32\x17.boxd.api.v1.UsageRates\x12\x18\n\x10total_cost_micro\x18\x07 \x01(\x03\x12!\n\x03vms\x18\x08 \x03(\x0b\x32\x14.boxd.api.v1.VmUsage\x12\x10\n\x08\x63omplete\x18\t \x01(\x08\"M\n\x11GetVmUsageRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\r\n\x05since\x18\x02 \x01(\x03\x12\r\n\x05until\x18\x03 \x01(\x03\x12\x0b\n\x03org\x18\x04 \x01(\t\"\x9d\x01\n\x12GetVmUsageResponse\x12\x14\n\x0cperiod_start\x18\x01 \x01(\x03\x12\x12\n\nperiod_end\x18\x02 \x01(\x03\x12\x10\n\x08\x63urrency\x18\x03 \x01(\t\x12&\n\x05rates\x18\x04 \x01(\x0b\x32\x17.boxd.api.v1.UsageRates\x12#\n\x05usage\x18\x05 \x01(\x0b\x32\x14.boxd.api.v1.VmUsage\"n\n\x1aListBillingActivityRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\r\n\x05since\x18\x02 \x01(\x03\x12\r\n\x05until\x18\x03 \x01(\x03\x12\x12\n\npage_token\x18\x04 \x01(\t\x12\x11\n\tpage_size\x18\x05 \x01(\r\"`\n\x14\x42illingActivityEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x14\n\x0c\x61mount_micro\x18\x03 \x01(\x03\x12\x12\n\ncreated_at\x18\x04 \x01(\x03\"\x93\x01\n\x1bListBillingActivityResponse\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x15\n\rbalance_micro\x18\x02 \x01(\x03\x12\x32\n\x07\x65ntries\x18\x03 \x03(\x0b\x32!.boxd.api.v1.BillingActivityEntry\x12\x17\n\x0fnext_page_token\x18\x04 \x01(\t\"!\n\x10UnshareVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x13\n\x11UnshareVmResponse\"m\n\x18SetBackupScheduleRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x15\n\rschedule_kind\x18\x02 \x01(\t\x12\x16\n\x0eschedule_value\x18\x03 \x01(\t\x12\x16\n\x0eretention_secs\x18\x04 \x01(\r\"\x1b\n\x19SetBackupScheduleResponse\"(\n\x1a\x43learBackupScheduleRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"\x1d\n\x1b\x43learBackupScheduleResponse\"&\n\x18GetBackupScheduleRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"\xa3\x01\n\x19GetBackupScheduleResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x15\n\rschedule_kind\x18\x02 \x01(\t\x12\x16\n\x0eschedule_value\x18\x03 \x01(\t\x12\x16\n\x0eretention_secs\x18\x04 \x01(\r\x12\x16\n\x0enext_backup_at\x18\x05 \x01(\x03\x12\x16\n\x0elast_backup_at\x18\x06 \x01(\x03\" \n\x12ListBackupsRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"\x9a\x01\n\nBackupInfo\x12\x11\n\tbackup_id\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x12\n\nsize_bytes\x18\x03 \x01(\x04\x12\x10\n\x08\x63hecksum\x18\x04 \x01(\t\x12\x1b\n\x13points_to_backup_id\x18\x05 \x01(\t\x12\x12\n\ncreated_at\x18\x06 \x01(\x03\x12\x12\n\nexpires_at\x18\x07 \x01(\x03\"?\n\x13ListBackupsResponse\x12(\n\x07\x62\x61\x63kups\x18\x01 \x03(\x0b\x32\x17.boxd.api.v1.BackupInfo\"\"\n\x14TriggerBackupRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"*\n\x15TriggerBackupResponse\x12\x11\n\tbackup_id\x18\x01 \x01(\t\"4\n\x13\x44\x65leteBackupRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x11\n\tbackup_id\x18\x02 \x01(\t\"\x16\n\x14\x44\x65leteBackupResponse\"5\n\x14RestoreBackupRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x11\n\tbackup_id\x18\x02 \x01(\t\"\x17\n\x15RestoreBackupResponse\"\x87\x01\n\x1bSetOrgBackupsDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x18\n\x0bperiod_secs\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x1b\n\x0eretention_secs\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_period_secsB\x11\n\x0f_retention_secs\"\\\n\x1cSetOrgBackupsDefaultResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x13\n\x0bperiod_secs\x18\x02 \x01(\r\x12\x16\n\x0eretention_secs\x18\x03 \x01(\r\"-\n\x1bGetOrgBackupsDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"\\\n\x1cGetOrgBackupsDefaultResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x13\n\x0bperiod_secs\x18\x02 \x01(\r\x12\x16\n\x0eretention_secs\x18\x03 \x01(\r\"v\n\x1cSetOrgMachineDefaultsRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x11\n\x04vcpu\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmemory_bytes\x18\x03 \x01(\x04H\x01\x88\x01\x01\x42\x07\n\x05_vcpuB\x0f\n\r_memory_bytes\"\x1f\n\x1dSetOrgMachineDefaultsResponse\".\n\x1cGetOrgMachineDefaultsRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"D\n\x0fResizeVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04vcpu\x18\x02 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x03 \x01(\x04\"H\n\x10ResizeVmResponse\x12\x0c\n\x04vcpu\x18\x01 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x02 \x01(\x04\x12\x10\n\x08rebooted\x18\x03 \x01(\x08\"\x84\x01\n\x1dGetOrgMachineDefaultsResponse\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0c\n\x04vcpu\x18\x02 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x03 \x01(\x04\x12\x14\n\x0c\x63\x65iling_vcpu\x18\x04 \x01(\r\x12\x1c\n\x14\x63\x65iling_memory_bytes\x18\x05 \x01(\x04\"\x8d\x01\n&SetOrgIdleIgnoreOutboundDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x16\n\x0e\x61pply_existing\x18\x03 \x01(\x08\x12\x19\n\x11new_machines_only\x18\x04 \x01(\x08\x42\n\n\x08_enabled\"x\n\'SetOrgIdleIgnoreOutboundDefaultResponse\x12\x18\n\x10machines_changed\x18\x01 \x01(\r\x12\x18\n\x10machines_skipped\x18\x02 \x01(\r\x12\x19\n\x11snapshots_changed\x18\x03 \x01(\r\"8\n&GetOrgIdleIgnoreOutboundDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"a\n\'GetOrgIdleIgnoreOutboundDefaultResponse\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x12\x18\n\x10platform_enabled\x18\x03 \x01(\x08\"\\\n!SetOrgBotProtectionDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0c\n\x04mode\x18\x02 \x01(\t\x12\x19\n\x11new_machines_only\x18\x03 \x01(\x08\"\x89\x01\n\"SetOrgBotProtectionDefaultResponse\x12\x18\n\x10machines_changed\x18\x01 \x01(\r\x12\x19\n\x11snapshots_changed\x18\x02 \x01(\r\x12\x14\n\x0cmachines_off\x18\x03 \x01(\r\x12\x18\n\x10machines_skipped\x18\x04 \x01(\r\"3\n!GetOrgBotProtectionDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"V\n\"GetOrgBotProtectionDefaultResponse\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0c\n\x04mode\x18\x02 \x01(\t\x12\x15\n\rplatform_mode\x18\x03 \x01(\t\" \n\x10\x43reateOrgRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"-\n\x11\x43reateOrgResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"0\n\x10RenameOrgRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x13\n\x11RenameOrgResponse\"&\n\x14GetOrgMembersRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"q\n\x15GetOrgMembersResponse\x12+\n\x07members\x18\x01 \x03(\x0b\x32\x1a.boxd.api.v1.OrgMemberInfo\x12+\n\x07invites\x18\x02 \x03(\x0b\x32\x1a.boxd.api.v1.OrgInviteInfo\"]\n\rOrgMemberInfo\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x0c\n\x04role\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12\x17\n\x0fgithub_username\x18\x04 \x01(\t\"w\n\rOrgInviteInfo\x12\r\n\x05token\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x12\n\naccept_url\x18\x03 \x01(\t\x12\x12\n\ncreated_at\x18\x04 \x01(\x03\x12\x12\n\nexpires_at\x18\x05 \x01(\x03\x12\x0c\n\x04role\x18\x06 \x01(\t\"E\n\x16InviteOrgMemberRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"d\n\x17InviteOrgMemberResponse\x12\r\n\x05token\x18\x01 \x01(\t\x12\x12\n\naccept_url\x18\x02 \x01(\t\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\x12\x12\n\ncreated_at\x18\x04 \x01(\x03\"\'\n\x16RevokeOrgInviteRequest\x12\r\n\x05token\x18\x01 \x01(\t\"\x19\n\x17RevokeOrgInviteResponse\"9\n\x16RemoveOrgMemberRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"\x19\n\x17RemoveOrgMemberResponse\"H\n\x17SetOrgMemberRoleRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"\x1a\n\x18SetOrgMemberRoleResponse\"\xc1\x01\n\x08TeamInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06org_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1a\n\x12\x63reated_by_user_id\x18\x04 \x01(\t\x12\x12\n\ncreated_at\x18\x05 \x01(\x03\x12\x10\n\x08is_admin\x18\x06 \x01(\x08\x12,\n\x07members\x18\x07 \x03(\x0b\x32\x1b.boxd.api.v1.TeamMemberInfo\x12\x1b\n\x13\x64\x65\x66\x61ult_snapshot_id\x18\x08 \x01(\t\"p\n\x0eTeamMemberInfo\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x0c\n\x04role\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12\x17\n\x0fgithub_username\x18\x04 \x01(\t\x12\x10\n\x08\x61\x64\x64\x65\x64_at\x18\x05 \x01(\x03\"\"\n\x10ListTeamsRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"9\n\x11ListTeamsResponse\x12$\n\x05teams\x18\x01 \x03(\x0b\x32\x15.boxd.api.v1.TeamInfo\"!\n\x0eGetTeamRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\"1\n\x11\x43reateTeamRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"2\n\x11RenameTeamRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x14\n\x12RenameTeamResponse\"%\n\x12\x44\x65stroyTeamRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\"\x15\n\x13\x44\x65stroyTeamResponse\"8\n\x14\x41\x64\x64TeamMemberRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"\x17\n\x15\x41\x64\x64TeamMemberResponse\";\n\x17RemoveTeamMemberRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"\x1a\n\x18RemoveTeamMemberResponse\"J\n\x18SetTeamMemberRoleRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"\x1b\n\x19SetTeamMemberRoleResponse\"E\n\x1dSetTeamDefaultSnapshotRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x13\n\x0bsnapshot_id\x18\x02 \x01(\t\" \n\x1eSetTeamDefaultSnapshotResponse*\x95\x01\n\x0b\x46sEntryType\x12\x1d\n\x19\x46S_ENTRY_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x46S_ENTRY_TYPE_FILE\x10\x01\x12\x1b\n\x17\x46S_ENTRY_TYPE_DIRECTORY\x10\x02\x12\x19\n\x15\x46S_ENTRY_TYPE_SYMLINK\x10\x03\x12\x17\n\x13\x46S_ENTRY_TYPE_OTHER\x10\x04\x32\xa4W\n\x07\x42oxdApi\x12G\n\x08\x43reateVm\x12\x1c.boxd.api.v1.CreateVmRequest\x1a\x1d.boxd.api.v1.CreateVmResponse\x12J\n\tDestroyVm\x12\x1d.boxd.api.v1.DestroyVmRequest\x1a\x1e.boxd.api.v1.DestroyVmResponse\x12G\n\x08RenameVm\x12\x1c.boxd.api.v1.RenameVmRequest\x1a\x1d.boxd.api.v1.RenameVmResponse\x12V\n\rSetVmNetworks\x12!.boxd.api.v1.SetVmNetworksRequest\x1a\".boxd.api.v1.SetVmNetworksResponse\x12_\n\x10SetVmEgressAllow\x12$.boxd.api.v1.SetVmEgressAllowRequest\x1a%.boxd.api.v1.SetVmEgressAllowResponse\x12Y\n\x0eUpdateVmLabels\x12\".boxd.api.v1.UpdateVmLabelsRequest\x1a#.boxd.api.v1.UpdateVmLabelsResponse\x12\x44\n\x07StartVm\x12\x1b.boxd.api.v1.StartVmRequest\x1a\x1c.boxd.api.v1.StartVmResponse\x12\x41\n\x06StopVm\x12\x1a.boxd.api.v1.StopVmRequest\x1a\x1b.boxd.api.v1.StopVmResponse\x12G\n\x08RebootVm\x12\x1c.boxd.api.v1.RebootVmRequest\x1a\x1d.boxd.api.v1.RebootVmResponse\x12>\n\x05GetVm\x12\x19.boxd.api.v1.GetVmRequest\x1a\x1a.boxd.api.v1.GetVmResponse\x12\x44\n\x07ListVms\x12\x1b.boxd.api.v1.ListVmsRequest\x1a\x1c.boxd.api.v1.ListVmsResponse\x12V\n\rSuggestVmName\x12!.boxd.api.v1.SuggestVmNameRequest\x1a\".boxd.api.v1.SuggestVmNameResponse\x12M\n\nExposePort\x12\x1e.boxd.api.v1.ExposePortRequest\x1a\x1f.boxd.api.v1.ExposePortResponse\x12S\n\x0cUnexposePort\x12 .boxd.api.v1.UnexposePortRequest\x1a!.boxd.api.v1.UnexposePortResponse\x12_\n\x10ListExposedPorts\x12$.boxd.api.v1.ListExposedPortsRequest\x1a%.boxd.api.v1.ListExposedPortsResponse\x12;\n\x06SetVar\x12\x1a.boxd.api.v1.SetVarRequest\x1a\x15.boxd.api.v1.VarReply\x12\x43\n\x08ListVars\x12\x1c.boxd.api.v1.ListVarsRequest\x1a\x19.boxd.api.v1.VarListReply\x12\x41\n\tRemoveVar\x12\x1d.boxd.api.v1.RemoveVarRequest\x1a\x15.boxd.api.v1.VarReply\x12K\n\x0eSetSecretScope\x12\".boxd.api.v1.SetSecretScopeRequest\x1a\x15.boxd.api.v1.VarReply\x12\x45\n\nStreamLogs\x12\x1e.boxd.api.v1.StreamLogsRequest\x1a\x15.boxd.api.v1.LogChunk0\x01\x12:\n\x04\x45xec\x12\x16.boxd.api.v1.ExecChunk\x1a\x16.boxd.api.v1.ExecChunk(\x01\x30\x01\x12I\n\rDesktopTunnel\x12\x19.boxd.api.v1.DesktopChunk\x1a\x19.boxd.api.v1.DesktopChunk(\x01\x30\x01\x12V\n\rCreateNetwork\x12!.boxd.api.v1.CreateNetworkRequest\x1a\".boxd.api.v1.CreateNetworkResponse\x12S\n\x0cListNetworks\x12 .boxd.api.v1.ListNetworksRequest\x1a!.boxd.api.v1.ListNetworksResponse\x12\\\n\x0f\x41\x64\x64\x43ustomDomain\x12#.boxd.api.v1.AddCustomDomainRequest\x1a$.boxd.api.v1.AddCustomDomainResponse\x12\x62\n\x11ListCustomDomains\x12%.boxd.api.v1.ListCustomDomainsRequest\x1a&.boxd.api.v1.ListCustomDomainsResponse\x12\x65\n\x12RemoveCustomDomain\x12&.boxd.api.v1.RemoveCustomDomainRequest\x1a\'.boxd.api.v1.RemoveCustomDomainResponse\x12S\n\x0cSetOrgDomain\x12 .boxd.api.v1.SetOrgDomainRequest\x1a!.boxd.api.v1.SetOrgDomainResponse\x12S\n\x0cGetOrgDomain\x12 .boxd.api.v1.GetOrgDomainRequest\x1a!.boxd.api.v1.GetOrgDomainResponse\x12Y\n\x0e\x43learOrgDomain\x12\".boxd.api.v1.ClearOrgDomainRequest\x1a#.boxd.api.v1.ClearOrgDomainResponse\x12\x41\n\x06Whoami\x12\x1a.boxd.api.v1.WhoamiRequest\x1a\x1b.boxd.api.v1.WhoamiResponse\x12P\n\x0b\x43reateToken\x12\x1f.boxd.api.v1.CreateTokenRequest\x1a .boxd.api.v1.CreateTokenResponse\x12M\n\nListTokens\x12\x1e.boxd.api.v1.ListTokensRequest\x1a\x1f.boxd.api.v1.ListTokensResponse\x12P\n\x0bRevokeToken\x12\x1f.boxd.api.v1.RevokeTokenRequest\x1a .boxd.api.v1.RevokeTokenResponse\x12M\n\nLinkSshKey\x12\x1e.boxd.api.v1.LinkSshKeyRequest\x1a\x1f.boxd.api.v1.LinkSshKeyResponse\x12J\n\tGetConfig\x12\x1d.boxd.api.v1.GetConfigRequest\x1a\x1e.boxd.api.v1.GetConfigResponse\x12\x41\n\x06\x46orkVm\x12\x1a.boxd.api.v1.ForkVmRequest\x1a\x1b.boxd.api.v1.ForkVmResponse\x12P\n\x0bListProxies\x12\x1f.boxd.api.v1.ListProxiesRequest\x1a .boxd.api.v1.ListProxiesResponse\x12Y\n\x0eListProxyNodes\x12\".boxd.api.v1.ListProxyNodesRequest\x1a#.boxd.api.v1.ListProxyNodesResponse\x12P\n\x0b\x43reateProxy\x12\x1f.boxd.api.v1.CreateProxyRequest\x1a .boxd.api.v1.CreateProxyResponse\x12P\n\x0b\x44\x65leteProxy\x12\x1f.boxd.api.v1.DeleteProxyRequest\x1a .boxd.api.v1.DeleteProxyResponse\x12S\n\x0cSetProxyPort\x12 .boxd.api.v1.SetProxyPortRequest\x1a!.boxd.api.v1.SetProxyPortResponse\x12M\n\nUploadFile\x12\x1e.boxd.api.v1.UploadFileRequest\x1a\x1f.boxd.api.v1.UploadFileResponse\x12S\n\x10UploadFileStream\x12\x1c.boxd.api.v1.UploadFileChunk\x1a\x1f.boxd.api.v1.UploadFileResponse(\x01\x12S\n\x0c\x44ownloadFile\x12 .boxd.api.v1.DownloadFileRequest\x1a!.boxd.api.v1.DownloadFileResponse\x12X\n\x12\x44ownloadFileStream\x12 .boxd.api.v1.DownloadFileRequest\x1a\x1e.boxd.api.v1.DownloadFileChunk0\x01\x12\x44\n\x07ListDir\x12\x1b.boxd.api.v1.ListDirRequest\x1a\x1c.boxd.api.v1.ListDirResponse\x12>\n\x05Mkdir\x12\x19.boxd.api.v1.MkdirRequest\x1a\x1a.boxd.api.v1.MkdirResponse\x12M\n\nRenamePath\x12\x1e.boxd.api.v1.RenamePathRequest\x1a\x1f.boxd.api.v1.RenamePathResponse\x12M\n\nDeletePath\x12\x1e.boxd.api.v1.DeletePathRequest\x1a\x1f.boxd.api.v1.DeletePathResponse\x12G\n\x08\x43opyPath\x12\x1c.boxd.api.v1.CopyPathRequest\x1a\x1d.boxd.api.v1.CopyPathResponse\x12@\n\x06\x46sRead\x12\x1a.boxd.api.v1.FsReadRequest\x1a\x18.boxd.api.v1.FsReadChunk0\x01\x12\x44\n\x07\x46sWrite\x12\x19.boxd.api.v1.FsWriteChunk\x1a\x1c.boxd.api.v1.FsWriteResponse(\x01\x12\x41\n\x06\x46sStat\x12\x1a.boxd.api.v1.FsStatRequest\x1a\x1b.boxd.api.v1.FsStatResponse\x12@\n\x06\x46sList\x12\x1a.boxd.api.v1.FsListRequest\x1a\x18.boxd.api.v1.FsListChunk0\x01\x12\x44\n\x07\x46sMkdir\x12\x1b.boxd.api.v1.FsMkdirRequest\x1a\x1c.boxd.api.v1.FsMkdirResponse\x12G\n\x08\x46sRemove\x12\x1c.boxd.api.v1.FsRemoveRequest\x1a\x1d.boxd.api.v1.FsRemoveResponse\x12G\n\x08\x46sRename\x12\x1c.boxd.api.v1.FsRenameRequest\x1a\x1d.boxd.api.v1.FsRenameResponse\x12M\n\nFsRealpath\x12\x1e.boxd.api.v1.FsRealpathRequest\x1a\x1f.boxd.api.v1.FsRealpathResponse\x12J\n\tSuspendVm\x12\x1d.boxd.api.v1.SuspendVmRequest\x1a\x1e.boxd.api.v1.SuspendVmResponse\x12G\n\x08ResumeVm\x12\x1c.boxd.api.v1.ResumeVmRequest\x1a\x1d.boxd.api.v1.ResumeVmResponse\x12P\n\x0bHibernateVm\x12\x1f.boxd.api.v1.HibernateVmRequest\x1a .boxd.api.v1.HibernateVmResponse\x12\x41\n\x06WakeVm\x12\x1a.boxd.api.v1.WakeVmRequest\x1a\x1b.boxd.api.v1.WakeVmResponse\x12Y\n\x0e\x43reateSnapshot\x12\".boxd.api.v1.CreateSnapshotRequest\x1a#.boxd.api.v1.CreateSnapshotResponse\x12V\n\rListSnapshots\x12!.boxd.api.v1.ListSnapshotsRequest\x1a\".boxd.api.v1.ListSnapshotsResponse\x12P\n\x0bGetSnapshot\x12\x1f.boxd.api.v1.GetSnapshotRequest\x1a .boxd.api.v1.GetSnapshotResponse\x12Y\n\x0e\x44\x65leteSnapshot\x12\".boxd.api.v1.DeleteSnapshotRequest\x1a#.boxd.api.v1.DeleteSnapshotResponse\x12_\n\x14\x43reateVmFromSnapshot\x12(.boxd.api.v1.CreateVmFromSnapshotRequest\x1a\x1d.boxd.api.v1.CreateVmResponse\x12_\n\x10\x43reateCheckpoint\x12$.boxd.api.v1.CreateCheckpointRequest\x1a%.boxd.api.v1.CreateCheckpointResponse\x12\\\n\x0fListCheckpoints\x12#.boxd.api.v1.ListCheckpointsRequest\x1a$.boxd.api.v1.ListCheckpointsResponse\x12_\n\x10\x44\x65leteCheckpoint\x12$.boxd.api.v1.DeleteCheckpointRequest\x1a%.boxd.api.v1.DeleteCheckpointResponse\x12\x62\n\x11RestoreCheckpoint\x12%.boxd.api.v1.RestoreCheckpointRequest\x1a&.boxd.api.v1.RestoreCheckpointResponse\x12n\n\x15SetAutoSuspendTimeout\x12).boxd.api.v1.SetAutoSuspendTimeoutRequest\x1a*.boxd.api.v1.SetAutoSuspendTimeoutResponse\x12t\n\x17SetAutoHibernateTimeout\x12+.boxd.api.v1.SetAutoHibernateTimeoutRequest\x1a,.boxd.api.v1.SetAutoHibernateTimeoutResponse\x12_\n\x10SetBotProtection\x12$.boxd.api.v1.SetBotProtectionRequest\x1a%.boxd.api.v1.SetBotProtectionResponse\x12n\n\x15SetIdleIgnoreOutbound\x12).boxd.api.v1.SetIdleIgnoreOutboundRequest\x1a*.boxd.api.v1.SetIdleIgnoreOutboundResponse\x12\x41\n\x06SetSsh\x12\x1a.boxd.api.v1.SetSshRequest\x1a\x1b.boxd.api.v1.SetSshResponse\x12Y\n\x0eSetDeleteAfter\x12\".boxd.api.v1.SetDeleteAfterRequest\x1a#.boxd.api.v1.SetDeleteAfterResponse\x12M\n\nCreateDisk\x12\x1e.boxd.api.v1.CreateDiskRequest\x1a\x1f.boxd.api.v1.CreateDiskResponse\x12J\n\tListDisks\x12\x1d.boxd.api.v1.ListDisksRequest\x1a\x1e.boxd.api.v1.ListDisksResponse\x12M\n\nAttachDisk\x12\x1e.boxd.api.v1.AttachDiskRequest\x1a\x1f.boxd.api.v1.AttachDiskResponse\x12M\n\nDetachDisk\x12\x1e.boxd.api.v1.DetachDiskRequest\x1a\x1f.boxd.api.v1.DetachDiskResponse\x12P\n\x0b\x44\x65stroyDisk\x12\x1f.boxd.api.v1.DestroyDiskRequest\x1a .boxd.api.v1.DestroyDiskResponse\x12S\n\x0c\x43reateApiKey\x12 .boxd.api.v1.CreateApiKeyRequest\x1a!.boxd.api.v1.CreateApiKeyResponse\x12P\n\x0bListApiKeys\x12\x1f.boxd.api.v1.ListApiKeysRequest\x1a .boxd.api.v1.ListApiKeysResponse\x12S\n\x0c\x44\x65leteApiKey\x12 .boxd.api.v1.DeleteApiKeyRequest\x1a!.boxd.api.v1.DeleteApiKeyResponse\x12J\n\tListPlans\x12\x1d.boxd.api.v1.ListPlansRequest\x1a\x1e.boxd.api.v1.ListPlansResponse\x12M\n\nGetBilling\x12\x1e.boxd.api.v1.GetBillingRequest\x1a\x1f.boxd.api.v1.GetBillingResponse\x12n\n\x15\x43reateCheckoutSession\x12).boxd.api.v1.CreateCheckoutSessionRequest\x1a*.boxd.api.v1.CreateCheckoutSessionResponse\x12}\n\x1a\x43reateBillingPortalSession\x12..boxd.api.v1.CreateBillingPortalSessionRequest\x1a/.boxd.api.v1.CreateBillingPortalSessionResponse\x12\x44\n\x07ShareVm\x12\x1b.boxd.api.v1.ShareVmRequest\x1a\x1c.boxd.api.v1.ShareVmResponse\x12J\n\tUnshareVm\x12\x1d.boxd.api.v1.UnshareVmRequest\x1a\x1e.boxd.api.v1.UnshareVmResponse\x12G\n\x08ListOrgs\x12\x1c.boxd.api.v1.ListOrgsRequest\x1a\x1d.boxd.api.v1.ListOrgsResponse\x12V\n\rGetOrgBilling\x12!.boxd.api.v1.GetOrgBillingRequest\x1a\".boxd.api.v1.GetOrgBillingResponse\x12P\n\x0bGetOrgUsage\x12\x1f.boxd.api.v1.GetOrgUsageRequest\x1a .boxd.api.v1.GetOrgUsageResponse\x12M\n\nGetVmUsage\x12\x1e.boxd.api.v1.GetVmUsageRequest\x1a\x1f.boxd.api.v1.GetVmUsageResponse\x12h\n\x13ListBillingActivity\x12\'.boxd.api.v1.ListBillingActivityRequest\x1a(.boxd.api.v1.ListBillingActivityResponse\x12\x62\n\x11SetBackupSchedule\x12%.boxd.api.v1.SetBackupScheduleRequest\x1a&.boxd.api.v1.SetBackupScheduleResponse\x12h\n\x13\x43learBackupSchedule\x12\'.boxd.api.v1.ClearBackupScheduleRequest\x1a(.boxd.api.v1.ClearBackupScheduleResponse\x12\x62\n\x11GetBackupSchedule\x12%.boxd.api.v1.GetBackupScheduleRequest\x1a&.boxd.api.v1.GetBackupScheduleResponse\x12P\n\x0bListBackups\x12\x1f.boxd.api.v1.ListBackupsRequest\x1a .boxd.api.v1.ListBackupsResponse\x12V\n\rTriggerBackup\x12!.boxd.api.v1.TriggerBackupRequest\x1a\".boxd.api.v1.TriggerBackupResponse\x12S\n\x0c\x44\x65leteBackup\x12 .boxd.api.v1.DeleteBackupRequest\x1a!.boxd.api.v1.DeleteBackupResponse\x12V\n\rRestoreBackup\x12!.boxd.api.v1.RestoreBackupRequest\x1a\".boxd.api.v1.RestoreBackupResponse\x12k\n\x14SetOrgBackupsDefault\x12(.boxd.api.v1.SetOrgBackupsDefaultRequest\x1a).boxd.api.v1.SetOrgBackupsDefaultResponse\x12k\n\x14GetOrgBackupsDefault\x12(.boxd.api.v1.GetOrgBackupsDefaultRequest\x1a).boxd.api.v1.GetOrgBackupsDefaultResponse\x12n\n\x15SetOrgMachineDefaults\x12).boxd.api.v1.SetOrgMachineDefaultsRequest\x1a*.boxd.api.v1.SetOrgMachineDefaultsResponse\x12n\n\x15GetOrgMachineDefaults\x12).boxd.api.v1.GetOrgMachineDefaultsRequest\x1a*.boxd.api.v1.GetOrgMachineDefaultsResponse\x12\x8c\x01\n\x1fSetOrgIdleIgnoreOutboundDefault\x12\x33.boxd.api.v1.SetOrgIdleIgnoreOutboundDefaultRequest\x1a\x34.boxd.api.v1.SetOrgIdleIgnoreOutboundDefaultResponse\x12\x8c\x01\n\x1fGetOrgIdleIgnoreOutboundDefault\x12\x33.boxd.api.v1.GetOrgIdleIgnoreOutboundDefaultRequest\x1a\x34.boxd.api.v1.GetOrgIdleIgnoreOutboundDefaultResponse\x12}\n\x1aSetOrgBotProtectionDefault\x12..boxd.api.v1.SetOrgBotProtectionDefaultRequest\x1a/.boxd.api.v1.SetOrgBotProtectionDefaultResponse\x12}\n\x1aGetOrgBotProtectionDefault\x12..boxd.api.v1.GetOrgBotProtectionDefaultRequest\x1a/.boxd.api.v1.GetOrgBotProtectionDefaultResponse\x12J\n\tCreateOrg\x12\x1d.boxd.api.v1.CreateOrgRequest\x1a\x1e.boxd.api.v1.CreateOrgResponse\x12J\n\tRenameOrg\x12\x1d.boxd.api.v1.RenameOrgRequest\x1a\x1e.boxd.api.v1.RenameOrgResponse\x12V\n\rGetOrgMembers\x12!.boxd.api.v1.GetOrgMembersRequest\x1a\".boxd.api.v1.GetOrgMembersResponse\x12\\\n\x0fInviteOrgMember\x12#.boxd.api.v1.InviteOrgMemberRequest\x1a$.boxd.api.v1.InviteOrgMemberResponse\x12\\\n\x0fRevokeOrgInvite\x12#.boxd.api.v1.RevokeOrgInviteRequest\x1a$.boxd.api.v1.RevokeOrgInviteResponse\x12\\\n\x0fRemoveOrgMember\x12#.boxd.api.v1.RemoveOrgMemberRequest\x1a$.boxd.api.v1.RemoveOrgMemberResponse\x12_\n\x10SetOrgMemberRole\x12$.boxd.api.v1.SetOrgMemberRoleRequest\x1a%.boxd.api.v1.SetOrgMemberRoleResponse\x12J\n\tListTeams\x12\x1d.boxd.api.v1.ListTeamsRequest\x1a\x1e.boxd.api.v1.ListTeamsResponse\x12=\n\x07GetTeam\x12\x1b.boxd.api.v1.GetTeamRequest\x1a\x15.boxd.api.v1.TeamInfo\x12\x43\n\nCreateTeam\x12\x1e.boxd.api.v1.CreateTeamRequest\x1a\x15.boxd.api.v1.TeamInfo\x12M\n\nRenameTeam\x12\x1e.boxd.api.v1.RenameTeamRequest\x1a\x1f.boxd.api.v1.RenameTeamResponse\x12P\n\x0b\x44\x65stroyTeam\x12\x1f.boxd.api.v1.DestroyTeamRequest\x1a .boxd.api.v1.DestroyTeamResponse\x12V\n\rAddTeamMember\x12!.boxd.api.v1.AddTeamMemberRequest\x1a\".boxd.api.v1.AddTeamMemberResponse\x12_\n\x10RemoveTeamMember\x12$.boxd.api.v1.RemoveTeamMemberRequest\x1a%.boxd.api.v1.RemoveTeamMemberResponse\x12\x62\n\x11SetTeamMemberRole\x12%.boxd.api.v1.SetTeamMemberRoleRequest\x1a&.boxd.api.v1.SetTeamMemberRoleResponse\x12q\n\x16SetTeamDefaultSnapshot\x12*.boxd.api.v1.SetTeamDefaultSnapshotRequest\x1a+.boxd.api.v1.SetTeamDefaultSnapshotResponse\x12G\n\x08ResizeVm\x12\x1c.boxd.api.v1.ResizeVmRequest\x1a\x1d.boxd.api.v1.ResizeVmResponse\x12\x62\n\x11UpdateMachineSpec\x12%.boxd.api.v1.UpdateMachineSpecRequest\x1a&.boxd.api.v1.UpdateMachineSpecResponseb\x06proto3')
27
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\tapi.proto\x12\x0b\x62oxd.api.v1\"\xfb\x01\n\x08VmConfig\x12\x0c\n\x04vcpu\x18\x01 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x02 \x01(\x04\x12\x12\n\ndisk_bytes\x18\x03 \x01(\x04\x12#\n\x03srf\x18\x04 \x01(\x0b\x32\x16.boxd.api.v1.SrfConfig\x12+\n\x07network\x18\x05 \x01(\x0b\x32\x1a.boxd.api.v1.NetworkConfig\x12)\n\x07volumes\x18\x06 \x03(\x0b\x32\x18.boxd.api.v1.VolumeMount\x12!\n\x14idle_ignore_outbound\x18\x07 \x01(\x08H\x00\x88\x01\x01\x42\x17\n\x15_idle_ignore_outbound\"t\n\tSrfConfig\x12&\n\x19\x61uto_suspend_timeout_secs\x18\x01 \x01(\rH\x00\x88\x01\x01\x12!\n\x19\x61uto_destroy_timeout_secs\x18\x02 \x01(\rB\x1c\n\x1a_auto_suspend_timeout_secs\"S\n\rNetworkConfig\x12\x10\n\x03ssh\x18\x01 \x01(\x08H\x00\x88\x01\x01\x12(\n\x07proxies\x18\x02 \x03(\x0b\x32\x17.boxd.api.v1.ProxyEntryB\x06\n\x04_ssh\"(\n\nProxyEntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04port\x18\x02 \x01(\r\"E\n\x0bVolumeMount\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\x12\n\nmount_path\x18\x02 \x01(\t\x12\x11\n\tread_only\x18\x03 \x01(\x08\"\x8c\x03\n\x0f\x43reateVmRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x11\n\timage_ref\x18\x02 \x01(\t\x12 \n\x03\x65nv\x18\x05 \x03(\x0b\x32\x13.boxd.api.v1.EnvVar\x12\x0b\n\x03\x63md\x18\x06 \x03(\t\x12\x16\n\x0erestart_policy\x18\x07 \x01(\t\x12%\n\x06\x63onfig\x18\x08 \x01(\x0b\x32\x15.boxd.api.v1.VmConfig\x12\x0b\n\x03org\x18\t \x01(\t\x12\x0e\n\x06shared\x18\n \x01(\x08\x12\x10\n\x08networks\x18\x0b \x03(\t\x12\x10\n\x08isolated\x18\x0c \x01(\x08\x12\x0c\n\x04team\x18\r \x01(\t\x12\x38\n\x06labels\x18\x0e \x03(\x0b\x32(.boxd.api.v1.CreateVmRequest.LabelsEntry\x12&\n\x04spec\x18\x0f \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01J\x04\x08\x03\x10\x04J\x04\x08\x04\x10\x05\"=\n\x0fMachineSpecBase\x12\x0e\n\x04team\x18\x01 \x01(\tH\x00\x12\x12\n\x08snapshot\x18\x02 \x01(\tH\x00\x42\x06\n\x04kind\"\x87\x04\n\x0bMachineSpec\x12\x0f\n\x07version\x18\x01 \x01(\r\x12*\n\x04\x62\x61se\x18\x02 \x01(\x0b\x32\x1c.boxd.api.v1.MachineSpecBase\x12\x0c\n\x04size\x18\x03 \x01(\t\x12\x34\n\x06labels\x18\x04 \x03(\x0b\x32$.boxd.api.v1.MachineSpec.LabelsEntry\x12\x10\n\x08networks\x18\x05 \x03(\t\x12\x10\n\x08isolated\x18\x06 \x01(\x08\x12\x0e\n\x06\x65gress\x18\x07 \x03(\t\x12.\n\x03\x65nv\x18\x08 \x03(\x0b\x32!.boxd.api.v1.MachineSpec.EnvEntry\x12>\n\x0b\x63onnections\x18\t \x03(\x0b\x32).boxd.api.v1.MachineSpec.ConnectionsEntry\x12\x0e\n\x06\x61gents\x18\n \x03(\t\x12\x11\n\tassign_to\x18\x0b \x01(\t\x12\x0f\n\x07secrets\x18\x0c \x03(\t\x12\x10\n\x08packages\x18\r \x03(\t\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a*\n\x08\x45nvEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x1a\x32\n\x10\x43onnectionsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"$\n\x06\x45nvVar\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"\xa0\x01\n\x10\x43reateVmResponse\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tpublic_ip\x18\x03 \x01(\t\x12\x0b\n\x03url\x18\x04 \x01(\t\x12\r\n\x05image\x18\x05 \x01(\t\x12\x0e\n\x06status\x18\x06 \x01(\t\x12\x14\n\x0c\x62oot_time_ms\x18\x07 \x01(\x04\x12\x1a\n\x12paused_automations\x18\x08 \x01(\r\"!\n\x10\x44\x65stroyVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x13\n\x11\x44\x65stroyVmResponse\"\x16\n\x14SuggestVmNameRequest\"%\n\x15SuggestVmNameResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"2\n\x0fRenameVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08new_name\x18\x02 \x01(\t\" \n\x10RenameVmResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\"7\n\x14SetVmNetworksRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08networks\x18\x02 \x03(\t\")\n\x15SetVmNetworksResponse\x12\x10\n\x08networks\x18\x01 \x03(\t\"6\n\x17SetVmEgressAllowRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0f\n\x07\x65ntries\x18\x02 \x03(\t\"+\n\x18SetVmEgressAllowResponse\x12\x0f\n\x07\x65ntries\x18\x01 \x03(\t\"\xae\x01\n\x15UpdateVmLabelsRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x38\n\x03set\x18\x02 \x03(\x0b\x32+.boxd.api.v1.UpdateVmLabelsRequest.SetEntry\x12\x0e\n\x06remove\x18\x03 \x03(\t\x12\x13\n\x0breplace_all\x18\x04 \x01(\x08\x1a*\n\x08SetEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x88\x01\n\x16UpdateVmLabelsResponse\x12?\n\x06labels\x18\x01 \x03(\x0b\x32/.boxd.api.v1.UpdateVmLabelsResponse.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"U\n\x11\x45xposePortRequest\x12\x11\n\x05vm_id\x18\x01 \x01(\tB\x02\x18\x01\x12\x0f\n\x07vm_port\x18\x02 \x01(\r\x12\x10\n\x08protocol\x18\x03 \x01(\t\x12\n\n\x02vm\x18\x04 \x01(\t\"y\n\x12\x45xposePortResponse\x12\x0f\n\x07vm_name\x18\x01 \x01(\t\x12\x0b\n\x03\x64ns\x18\x02 \x01(\t\x12\x13\n\x0bpublic_port\x18\x03 \x01(\r\x12\x0f\n\x07vm_port\x18\x04 \x01(\r\x12\x10\n\x08protocol\x18\x05 \x01(\t\x12\r\n\x05vm_id\x18\x06 \x01(\t\"E\n\x13UnexposePortRequest\x12\x11\n\x05vm_id\x18\x01 \x01(\tB\x02\x18\x01\x12\x0f\n\x07vm_port\x18\x02 \x01(\r\x12\n\n\x02vm\x18\x03 \x01(\t\"H\n\x14UnexposePortResponse\x12\x30\n\x07\x66orward\x18\x01 \x01(\x0b\x32\x1f.boxd.api.v1.ExposePortResponse\"%\n\x17ListExposedPortsRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"M\n\x18ListExposedPortsResponse\x12\x31\n\x08\x66orwards\x18\x01 \x03(\x0b\x32\x1f.boxd.api.v1.ExposePortResponse\"g\n\rSetVarRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05value\x18\x04 \x01(\t\x12\r\n\x05scope\x18\x05 \x01(\t\x12\x0f\n\x07\x64omains\x18\x06 \x03(\t\"\x1b\n\x08VarReply\x12\x0f\n\x07message\x18\x01 \x01(\t\",\n\x0fListVarsRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\"r\n\x07VarItem\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\r\n\x05scope\x18\x03 \x01(\t\x12\r\n\x05value\x18\x04 \x01(\t\x12\x0f\n\x07\x64omains\x18\x06 \x03(\t\x12\x16\n\x0e\x62ound_machines\x18\x07 \x01(\rJ\x04\x08\x05\x10\x06\"2\n\x0cVarListReply\x12\"\n\x04vars\x18\x01 \x03(\x0b\x32\x14.boxd.api.v1.VarItem\"J\n\x10RemoveVarRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\r\n\x05scope\x18\x04 \x01(\t\"L\n\x15SetSecretScopeRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0c\n\x04\x66rom\x18\x03 \x01(\t\x12\n\n\x02to\x18\x04 \x01(\t\"\x1f\n\x0eStartVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x11\n\x0fStartVmResponse\"\x1e\n\rStopVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x10\n\x0eStopVmResponse\" \n\x0fRebootVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x12\n\x10RebootVmResponse\"!\n\x10SuspendVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\'\n\x11SuspendVmResponse\x12\x12\n\nsuspend_us\x18\x01 \x01(\x04\" \n\x0fResumeVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"%\n\x10ResumeVmResponse\x12\x11\n\tresume_us\x18\x01 \x01(\x04\"#\n\x12HibernateVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x15\n\x13HibernateVmResponse\"\x1e\n\rWakeVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x10\n\x0eWakeVmResponse\"\x1d\n\x0cGetVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x88\t\n\rGetVmResponse\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\timage_ref\x18\x03 \x01(\t\x12\x11\n\tpublic_ip\x18\x04 \x01(\t\x12\x0e\n\x06status\x18\x05 \x01(\t\x12\x16\n\x0erestart_policy\x18\x06 \x01(\t\x12\x12\n\ndisk_bytes\x18\x07 \x01(\x04\x12!\n\x19\x61uto_suspend_timeout_secs\x18\x08 \x01(\r\x12\x10\n\x08ssh_port\x18\t \x01(\r\x12\x0b\n\x03org\x18\n \x01(\t\x12\x13\n\x0b\x62illing_org\x18\x0b \x01(\t\x12\x15\n\raccess_domain\x18\x0c \x01(\t\x12#\n\x1b\x61uto_hibernate_timeout_secs\x18\r \x01(\r\x12\x0e\n\x06source\x18\x0e \x01(\t\x12\x0c\n\x04vcpu\x18\x0f \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x10 \x01(\x04\x12\x12\n\ncreated_at\x18\x11 \x01(\x03\x12\x18\n\x10hibernated_at_ms\x18\x12 \x01(\x03\x12!\n\x19\x61uto_destroy_timeout_secs\x18\x13 \x01(\r\x12\x14\n\x0c\x62oot_time_ms\x18\x14 \x01(\x03\x12\x19\n\x11last_connected_ms\x18\x15 \x01(\x03\x12\x0e\n\x06org_id\x18\x16 \x01(\t\x12\x16\n\x0e\x62illing_org_id\x18\x17 \x01(\t\x12*\n\x0bsource_info\x18\x18 \x01(\x0b\x32\x15.boxd.api.v1.VmSource\x12\x10\n\x08networks\x18\x19 \x03(\t\x12\x10\n\x08isolated\x18\x1a \x01(\x08\x12\x35\n\x0e\x63ustom_domains\x18\x1b \x03(\x0b\x32\x1d.boxd.api.v1.CustomDomainInfo\x12\x14\n\x0c\x65gress_allow\x18\x1c \x03(\t\x12\x16\n\x0e\x62ot_protection\x18\x1d \x01(\x08\x12\x14\n\x0c\x64\x65lete_at_ms\x18\x1e \x01(\x03\x12\x19\n\x11\x64\x65lete_after_cron\x18\x1f \x01(\t\x12\x1c\n\x14idle_ignore_outbound\x18 \x01(\x08\x12\x1b\n\x13\x62ot_protection_mode\x18! \x01(\t\x12\x36\n\x06labels\x18\" \x03(\x0b\x32&.boxd.api.v1.GetVmResponse.LabelsEntry\x12&\n\x04spec\x18# \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x12.\n\x0c\x63reated_spec\x18$ \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x12\x12\n\ncreated_by\x18% \x01(\t\x12\x17\n\x0f\x63reated_by_name\x18& \x01(\t\x12\x35\n\x0crequirements\x18\' \x03(\x0b\x32\x1f.boxd.api.v1.MachineRequirement\x12-\n\x08packages\x18( \x03(\x0b\x32\x1b.boxd.api.v1.MachinePackage\x12\x14\n\x0cssh_disabled\x18) \x01(\x08\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\x85\x01\n\x18UpdateMachineSpecRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\r\n\x05patch\x18\x02 \x01(\t\x12\x0f\n\x07\x64ry_run\x18\x03 \x01(\x08\x12\x0e\n\x06reboot\x18\x04 \x01(\x08\x12\x16\n\x0eretry_packages\x18\x05 \x01(\x08\x12\x15\n\rexpected_spec\x18\x06 \x01(\t\"\xe2\x01\n\x19UpdateMachineSpecResponse\x12/\n\x07\x63hanges\x18\x01 \x03(\x0b\x32\x1e.boxd.api.v1.MachineSpecChange\x12\x17\n\x0freboot_required\x18\x02 \x01(\x08\x12\x1a\n\x12reboot_recommended\x18\x03 \x01(\x08\x12&\n\x04spec\x18\x04 \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x12\x0f\n\x07\x61pplied\x18\x05 \x01(\x08\x12\x10\n\x08rebooted\x18\x06 \x01(\x08\x12\x14\n\x0cresize_error\x18\x07 \x01(\t\"\xc5\x01\n\x11MachineSpecChange\x12\r\n\x05\x66ield\x18\x01 \x01(\t\x12\r\n\x05\x61pply\x18\x02 \x01(\t\x12\r\n\x05\x61\x64\x64\x65\x64\x18\x03 \x03(\t\x12\x0f\n\x07removed\x18\x04 \x03(\t\x12\x0f\n\x07\x63hanged\x18\x05 \x03(\t\x12\x0e\n\x06\x62\x65\x66ore\x18\x06 \x01(\t\x12\r\n\x05\x61\x66ter\x18\x07 \x01(\t\x12\x0c\n\x04note\x18\x08 \x01(\t\x12\x10\n\x08warnings\x18\t \x03(\t\x12\x0f\n\x07skipped\x18\n \x03(\t\x12\x11\n\tunskipped\x18\x0b \x03(\t\"\xaa\x01\n\x0eMachinePackage\x12\x0f\n\x07\x63ommand\x18\x01 \x01(\t\x12\r\n\x05state\x18\x02 \x01(\t\x12\x16\n\texit_code\x18\x03 \x01(\x05H\x00\x88\x01\x01\x12\x13\n\x0boutput_tail\x18\x04 \x01(\t\x12\x0e\n\x06reason\x18\x05 \x01(\t\x12\x15\n\rstarted_at_ms\x18\x06 \x01(\x03\x12\x16\n\x0e\x66inished_at_ms\x18\x07 \x01(\x03\x42\x0c\n\n_exit_code\"z\n\x12MachineRequirement\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05scope\x18\x03 \x01(\t\x12\x0b\n\x03tag\x18\x04 \x01(\t\x12\x0b\n\x03met\x18\x05 \x01(\x08\x12\x0f\n\x07\x63\x61n_fix\x18\x06 \x01(\x08\x12\x0e\n\x06reason\x18\x07 \x01(\t\"C\n\x08VmSource\x12\x0c\n\x04kind\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12\n\n\x02id\x18\x04 \x01(\t\"K\n\x0eListVmsRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\x14\n\x0c\x61ll_contexts\x18\x02 \x01(\x08\x12\x16\n\x0elabel_selector\x18\x03 \x03(\t\"P\n\x0fListVmsResponse\x12\'\n\x03vms\x18\x01 \x03(\x0b\x32\x1a.boxd.api.v1.GetVmResponse\x12\x14\n\x0cssh_host_key\x18\x02 \x01(\t\"2\n\x11StreamLogsRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0e\n\x06\x66ollow\x18\x02 \x01(\x08\"\x18\n\x08LogChunk\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\xc1\x01\n\tExecChunk\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\x12\r\n\x05stdin\x18\x02 \x01(\x08\x12\x0b\n\x03tty\x18\x03 \x01(\x08\x12\x0f\n\x07\x63ommand\x18\x04 \x01(\t\x12\r\n\x05vm_id\x18\x05 \x01(\t\x12\x11\n\texit_code\x18\x06 \x01(\x05\x12\x0c\n\x04\x63ols\x18\x07 \x01(\r\x12\x0c\n\x04rows\x18\x08 \x01(\r\x12\x15\n\rwindow_change\x18\t \x01(\x08\x12\x11\n\tis_stderr\x18\n \x01(\x08\x12\x11\n\tdevice_id\x18\x0b \x01(\t\"+\n\x0c\x44\x65sktopChunk\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"$\n\x14\x43reateNetworkRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"+\n\x15\x43reateNetworkResponse\x12\x12\n\nnetwork_id\x18\x01 \x01(\t\"\x15\n\x13ListNetworksRequest\"B\n\x14ListNetworksResponse\x12*\n\x08networks\x18\x01 \x03(\x0b\x32\x18.boxd.api.v1.NetworkInfo\"A\n\x0bNetworkInfo\x12\x12\n\nnetwork_id\x18\x01 \x01(\t\x12\x0e\n\x06subnet\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\"7\n\x16\x41\x64\x64\x43ustomDomainRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\"H\n\x17\x41\x64\x64\x43ustomDomainResponse\x12-\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1d.boxd.api.v1.CustomDomainInfo\"\x1a\n\x18ListCustomDomainsRequest\"K\n\x19ListCustomDomainsResponse\x12.\n\x07\x64omains\x18\x01 \x03(\x0b\x32\x1d.boxd.api.v1.CustomDomainInfo\"+\n\x19RemoveCustomDomainRequest\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\"\x1c\n\x1aRemoveCustomDomainResponse\"f\n\x10\x43ustomDomainInfo\x12\x0e\n\x06\x64omain\x18\x01 \x01(\t\x12\r\n\x05vm_id\x18\x02 \x01(\t\x12\x0f\n\x07vm_name\x18\x03 \x01(\t\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x12\n\nlast_error\x18\x05 \x01(\t\"5\n\x13SetOrgDomainRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\"B\n\x14SetOrgDomainResponse\x12*\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1a.boxd.api.v1.OrgDomainInfo\"%\n\x13GetOrgDomainRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"B\n\x14GetOrgDomainResponse\x12*\n\x06\x64omain\x18\x01 \x01(\x0b\x32\x1a.boxd.api.v1.OrgDomainInfo\"\'\n\x15\x43learOrgDomainRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"\x18\n\x16\x43learOrgDomainResponse\"S\n\rOrgDomainInfo\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0e\n\x06\x64omain\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x12\n\nlast_error\x18\x04 \x01(\t\"\x12\n\x10GetConfigRequest\"8\n\x11GetConfigResponse\x12\x15\n\rdefault_image\x18\x01 \x01(\t\x12\x0c\n\x04zone\x18\x02 \x01(\t\"\x0f\n\rWhoamiRequest\"\x99\x01\n\x0eWhoamiResponse\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x1b\n\x13pubkey_fingerprints\x18\x02 \x03(\t\x12)\n\x07\x62illing\x18\x04 \x01(\x0b\x32\x18.boxd.api.v1.BillingInfo\x12\x14\n\x0c\x64isplay_name\x18\x05 \x01(\tJ\x04\x08\x03\x10\x04R\x12\x64\x65\x66\x61ult_network_id\"\xbb\x02\n\x0b\x42illingInfo\x12\x1b\n\x13subscription_status\x18\x03 \x01(\t\x12\x16\n\x0epast_due_since\x18\x06 \x01(\x03\x12\x0f\n\x07max_vms\x18\x07 \x01(\r\x12\x0c\n\x04vcpu\x18\x08 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\t \x01(\x04\x12\x15\n\rbalance_micro\x18\n \x01(\x03\x12\x14\n\x0c\x62illing_mode\x18\x0b \x01(\t\x12\x10\n\x08\x63urrency\x18\x0c \x01(\t\x12\x14\n\x0c\x63\x65iling_vcpu\x18\r \x01(\r\x12\x1c\n\x14\x63\x65iling_memory_bytes\x18\x0e \x01(\x04J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03J\x04\x08\x04\x10\x05J\x04\x08\x05\x10\x06R\x04tierR\x05shapeR\x12stripe_customer_idR\x16stripe_subscription_id\"\x12\n\x10ListPlansRequest\"9\n\x11ListPlansResponse\x12$\n\x05plans\x18\x01 \x03(\x0b\x32\x15.boxd.api.v1.PlanInfo\"\x85\x01\n\x08PlanInfo\x12\x13\n\x0bmonthly_eur\x18\x03 \x01(\r\x12\x12\n\nlookup_key\x18\x04 \x01(\t\x12\x13\n\x0b\x64\x65scription\x18\x05 \x01(\t\x12\x0c\n\x04vcpu\x18\x06 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x07 \x01(\x04J\x04\x08\x01\x10\x02J\x04\x08\x02\x10\x03R\x04tierR\x05shape\"\x13\n\x11GetBillingRequest\"?\n\x12GetBillingResponse\x12)\n\x07\x62illing\x18\x01 \x01(\x0b\x32\x18.boxd.api.v1.BillingInfo\"T\n\x1c\x43reateCheckoutSessionRequest\x12\x13\n\x0bsuccess_url\x18\x02 \x01(\t\x12\x12\n\ncancel_url\x18\x03 \x01(\tJ\x04\x08\x01\x10\x02R\x05shape\"5\n\x1d\x43reateCheckoutSessionResponse\x12\x14\n\x0c\x63heckout_url\x18\x01 \x01(\t\"7\n!CreateBillingPortalSessionRequest\x12\x12\n\nreturn_url\x18\x01 \x01(\t\"8\n\"CreateBillingPortalSessionResponse\x12\x12\n\nportal_url\x18\x01 \x01(\t\"-\n\x12\x43reateTokenRequest\x12\x17\n\x0f\x65xpires_in_secs\x18\x01 \x01(\x04\"8\n\x13\x43reateTokenResponse\x12\r\n\x05token\x18\x01 \x01(\t\x12\x12\n\nexpires_at\x18\x02 \x01(\x03\"\x13\n\x11ListTokensRequest\"<\n\x12ListTokensResponse\x12&\n\x06tokens\x18\x01 \x03(\x0b\x32\x16.boxd.api.v1.TokenInfo\"@\n\tTokenInfo\x12\x0b\n\x03jti\x18\x01 \x01(\t\x12\x12\n\ncreated_at\x18\x02 \x01(\x03\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\"!\n\x12RevokeTokenRequest\x12\x0b\n\x03jti\x18\x01 \x01(\t\"\x15\n\x13RevokeTokenResponse\"E\n\x11LinkSshKeyRequest\x12\x0e\n\x06pubkey\x18\x01 \x01(\t\x12\x11\n\tdevice_id\x18\x02 \x01(\t\x12\r\n\x05label\x18\x03 \x01(\t\"\x14\n\x12LinkSshKeyResponse\"\xf5\x01\n\rForkVmRequest\x12\x14\n\x0csource_vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12%\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x15.boxd.api.v1.VmConfig\x12\x0e\n\x06shared\x18\x04 \x01(\x08\x12\x10\n\x08networks\x18\x05 \x03(\t\x12\x10\n\x08isolated\x18\x06 \x01(\x08\x12\x36\n\x06labels\x18\x07 \x03(\x0b\x32&.boxd.api.v1.ForkVmRequest.LabelsEntry\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xb3\x01\n\x0e\x46orkVmResponse\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x11\n\tpublic_ip\x18\x03 \x01(\t\x12\x0b\n\x03url\x18\x04 \x01(\t\x12\r\n\x05image\x18\x05 \x01(\t\x12\x0e\n\x06status\x18\x06 \x01(\t\x12\x13\n\x0b\x66orked_from\x18\x07 \x01(\t\x12\x14\n\x0c\x62oot_time_ms\x18\x08 \x01(\x04\x12\x1a\n\x12paused_automations\x18\t \x01(\r\"5\n\x12ListProxiesRequest\x12\x13\n\x07vm_name\x18\x01 \x01(\tB\x02\x18\x01\x12\n\n\x02vm\x18\x02 \x01(\t\">\n\x13ListProxiesResponse\x12\'\n\x07proxies\x18\x01 \x03(\x0b\x32\x16.boxd.api.v1.ProxyInfo\"\xac\x01\n\tProxyInfo\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07vm_name\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\x12\x12\n\nis_default\x18\x05 \x01(\x08\x12\x14\n\x0cport_display\x18\x06 \x01(\t\x12\r\n\x05vm_id\x18\x07 \x01(\t\x12\x11\n\tport_mode\x18\x08 \x01(\t\x12\x16\n\x0e\x65\x66\x66\x65\x63tive_port\x18\t \x01(\r\"\x17\n\x15ListProxyNodesRequest\"E\n\x16ListProxyNodesResponse\x12+\n\x07proxies\x18\x01 \x03(\x0b\x32\x1a.boxd.api.v1.ProxyNodeInfo\"-\n\rProxyNodeInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x10\n\x08\x65ndpoint\x18\x02 \x01(\t\"Q\n\x12\x43reateProxyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x07vm_name\x18\x02 \x01(\tB\x02\x18\x01\x12\x0c\n\x04port\x18\x03 \x01(\r\x12\n\n\x02vm\x18\x04 \x01(\t\"R\n\x13\x43reateProxyResponse\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07vm_name\x18\x02 \x01(\t\x12\x0e\n\x06\x64omain\x18\x03 \x01(\t\x12\x0c\n\x04port\x18\x04 \x01(\r\"C\n\x12\x44\x65leteProxyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x07vm_name\x18\x02 \x01(\tB\x02\x18\x01\x12\n\n\x02vm\x18\x03 \x01(\t\"\x15\n\x13\x44\x65leteProxyResponse\"R\n\x13SetProxyPortRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x13\n\x07vm_name\x18\x02 \x01(\tB\x02\x18\x01\x12\x0c\n\x04port\x18\x03 \x01(\t\x12\n\n\x02vm\x18\x04 \x01(\t\"\x16\n\x14SetProxyPortResponse\">\n\x11UploadFileRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x0c\n\x04\x64\x61ta\x18\x03 \x01(\x0c\"+\n\x12UploadFileResponse\x12\x15\n\rbytes_written\x18\x01 \x01(\x04\"P\n\x0fUploadFileChunk\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x12\n\ntotal_size\x18\x03 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x04 \x01(\x0c\"2\n\x13\x44ownloadFileRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"$\n\x14\x44ownloadFileResponse\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"5\n\x11\x44ownloadFileChunk\x12\x12\n\ntotal_size\x18\x01 \x01(\x04\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"-\n\x0eListDirRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"x\n\x08\x44irEntry\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06is_dir\x18\x02 \x01(\x08\x12\x12\n\nsize_bytes\x18\x03 \x01(\x04\x12\x13\n\x0bpermissions\x18\x04 \x01(\t\x12\x13\n\x0bmodified_at\x18\x05 \x01(\x03\x12\x10\n\x08\x61\x64\x64\x65\x64_at\x18\x06 \x01(\x03\"L\n\x0fListDirResponse\x12&\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x15.boxd.api.v1.DirEntry\x12\x11\n\ttruncated\x18\x02 \x01(\x08\"+\n\x0cMkdirRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x0f\n\rMkdirResponse\"F\n\x11RenamePathRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08old_path\x18\x02 \x01(\t\x12\x10\n\x08new_path\x18\x03 \x01(\t\"\x14\n\x12RenamePathResponse\"0\n\x11\x44\x65letePathRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\"\x14\n\x12\x44\x65letePathResponse\"D\n\x0f\x43opyPathRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08old_path\x18\x02 \x01(\t\x12\x10\n\x08new_path\x18\x03 \x01(\t\"\x12\n\x10\x43opyPathResponse\"\xe0\x01\n\x07\x46sEntry\x12\x0c\n\x04name\x18\x01 \x01(\x0c\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12&\n\x04type\x18\x03 \x01(\x0e\x32\x18.boxd.api.v1.FsEntryType\x12-\n\x0btarget_type\x18\x04 \x01(\x0e\x32\x18.boxd.api.v1.FsEntryType\x12\x0c\n\x04size\x18\x05 \x01(\x04\x12\x0c\n\x04mode\x18\x06 \x01(\r\x12\x14\n\x08mtime_ns\x18\x07 \x01(\x03\x42\x02\x30\x01\x12\x0b\n\x03uid\x18\x08 \x01(\r\x12\x0b\n\x03gid\x18\t \x01(\r\x12\x16\n\x0esymlink_target\x18\n \x01(\x0c\"\\\n\rFsReadRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x0e\n\x06offset\x18\x03 \x01(\x04\x12\x13\n\x06length\x18\x04 \x01(\x04H\x00\x88\x01\x01\x42\t\n\x07_length\"a\n\x0b\x46sReadChunk\x12#\n\x05\x65ntry\x18\x01 \x01(\x0b\x32\x14.boxd.api.v1.FsEntry\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x12\x0b\n\x03\x65of\x18\x03 \x01(\x08\x12\x12\n\nbytes_read\x18\x04 \x01(\x04\"\x83\x01\n\x0c\x46sWriteChunk\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x11\n\x04mode\x18\x03 \x01(\rH\x00\x88\x01\x01\x12\x1a\n\rexpected_size\x18\x04 \x01(\x04H\x01\x88\x01\x01\x12\x0c\n\x04\x64\x61ta\x18\x05 \x01(\x0c\x42\x07\n\x05_modeB\x10\n\x0e_expected_size\"M\n\x0f\x46sWriteResponse\x12\x15\n\rbytes_written\x18\x01 \x01(\x04\x12#\n\x05\x65ntry\x18\x02 \x01(\x0b\x32\x14.boxd.api.v1.FsEntry\",\n\rFsStatRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\"5\n\x0e\x46sStatResponse\x12#\n\x05\x65ntry\x18\x01 \x01(\x0b\x32\x14.boxd.api.v1.FsEntry\",\n\rFsListRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\"4\n\x0b\x46sListChunk\x12%\n\x07\x65ntries\x18\x01 \x03(\x0b\x32\x14.boxd.api.v1.FsEntry\"I\n\x0e\x46sMkdirRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x11\n\x04mode\x18\x03 \x01(\rH\x00\x88\x01\x01\x42\x07\n\x05_mode\"\x11\n\x0f\x46sMkdirResponse\"A\n\x0f\x46sRemoveRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\x12\x11\n\trecursive\x18\x03 \x01(\x08\"\x12\n\x10\x46sRemoveResponse\"X\n\x0f\x46sRenameRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x10\n\x08old_path\x18\x02 \x01(\x0c\x12\x10\n\x08new_path\x18\x03 \x01(\x0c\x12\x12\n\nno_replace\x18\x04 \x01(\x08\"\x12\n\x10\x46sRenameResponse\"0\n\x11\x46sRealpathRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\x0c\"\"\n\x12\x46sRealpathResponse\x12\x0c\n\x04path\x18\x01 \x01(\x0c\"1\n\x15\x43reateSnapshotRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"x\n\x16\x43reateSnapshotResponse\x12\x13\n\x0bsnapshot_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x1a\n\x12paused_automations\x18\x05 \x01(\r\"#\n\x14ListSnapshotsRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\"E\n\x15ListSnapshotsResponse\x12,\n\tsnapshots\x18\x01 \x03(\x0b\x32\x19.boxd.api.v1.SnapshotInfo\"/\n\x12GetSnapshotRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03org\x18\x02 \x01(\t\"B\n\x13GetSnapshotResponse\x12+\n\x08snapshot\x18\x01 \x01(\x0b\x32\x19.boxd.api.v1.SnapshotInfo\"2\n\x15\x44\x65leteSnapshotRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0b\n\x03org\x18\x02 \x01(\t\"\x18\n\x16\x44\x65leteSnapshotResponse\"\xa0\x02\n\x1b\x43reateVmFromSnapshotRequest\x12\x10\n\x08snapshot\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12%\n\x06\x63onfig\x18\x03 \x01(\x0b\x32\x15.boxd.api.v1.VmConfig\x12\x0b\n\x03org\x18\x04 \x01(\t\x12\x10\n\x08isolated\x18\x05 \x01(\x08\x12\x44\n\x06labels\x18\x06 \x03(\x0b\x32\x34.boxd.api.v1.CreateVmFromSnapshotRequest.LabelsEntry\x12&\n\x04spec\x18\x07 \x01(\x0b\x32\x18.boxd.api.v1.MachineSpec\x1a-\n\x0bLabelsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\"\xc6\x02\n\x0cSnapshotInfo\x12\x13\n\x0bsnapshot_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x12\n\nsize_bytes\x18\x07 \x01(\x04\x12\x12\n\nupdated_at\x18\x08 \x01(\x03\x12\x0c\n\x04vcpu\x18\t \x01(\r\x12\x14\n\x0cmemory_bytes\x18\n \x01(\x04\x12\x11\n\tuse_count\x18\x0b \x01(\x04\x12\x12\n\ncreated_at\x18\x0c \x01(\x03\x12\x16\n\x0e\x66\x61iled_version\x18\r \x01(\x04\x12\x16\n\x0e\x66\x61ilure_reason\x18\x0e \x01(\t\x12\x10\n\x08\x61rchived\x18\x0f \x01(\x08\x12\x0f\n\x07storage\x18\x10 \x01(\tJ\x04\x08\x05\x10\x06J\x04\x08\x06\x10\x07R\x0eready_replicasR\x10\x64\x65sired_replicas\"3\n\x17\x43reateCheckpointRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"O\n\x18\x43reateCheckpointResponse\x12\x15\n\rcheckpoint_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\"$\n\x16ListCheckpointsRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"K\n\x17ListCheckpointsResponse\x12\x30\n\x0b\x63heckpoints\x18\x01 \x03(\x0b\x32\x1b.boxd.api.v1.CheckpointInfo\"3\n\x17\x44\x65leteCheckpointRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x1a\n\x18\x44\x65leteCheckpointResponse\"4\n\x18RestoreCheckpointRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x1b\n\x19RestoreCheckpointResponse\"\x94\x01\n\x0e\x43heckpointInfo\x12\x15\n\rcheckpoint_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x12\n\nsize_bytes\x18\x04 \x01(\x04\x12\x12\n\ncreated_at\x18\x05 \x01(\x03\x12\x12\n\ncreated_by\x18\x06 \x01(\t\x12\x11\n\tavailable\x18\x07 \x01(\x08\";\n\x11\x43reateDiskRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\nsize_bytes\x18\x02 \x01(\x04J\x04\x08\x03\x10\x04\"]\n\x12\x43reateDiskResponse\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nsize_bytes\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\tJ\x04\x08\x05\x10\x06\"\x12\n\x10ListDisksRequest\"9\n\x11ListDisksResponse\x12$\n\x05\x64isks\x18\x01 \x03(\x0b\x32\x15.boxd.api.v1.DiskInfo\"\xaa\x01\n\x08\x44iskInfo\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nsize_bytes\x18\x03 \x01(\x04\x12\x0e\n\x06status\x18\x04 \x01(\t\x12\x30\n\x0b\x61ttachments\x18\x06 \x03(\x0b\x32\x1b.boxd.api.v1.DiskAttachment\x12\x12\n\ncreated_at\x18\x08 \x01(\x03J\x04\x08\x05\x10\x06J\x04\x08\x07\x10\x08R\tworker_id\"X\n\x0e\x44iskAttachment\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0f\n\x07vm_name\x18\x02 \x01(\t\x12\x12\n\nmount_path\x18\x03 \x01(\t\x12\x12\n\nmount_mode\x18\x04 \x01(\t\"Z\n\x11\x41ttachDiskRequest\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\r\n\x05vm_id\x18\x02 \x01(\t\x12\x12\n\nmount_path\x18\x03 \x01(\t\x12\x11\n\tread_only\x18\x04 \x01(\x08\"\x14\n\x12\x41ttachDiskResponse\"3\n\x11\x44\x65tachDiskRequest\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\x12\r\n\x05vm_id\x18\x02 \x01(\t\"\x14\n\x12\x44\x65tachDiskResponse\"%\n\x12\x44\x65stroyDiskRequest\x12\x0f\n\x07\x64isk_id\x18\x01 \x01(\t\"\x15\n\x13\x44\x65stroyDiskResponse\"C\n\x1cSetAutoSuspendTimeoutRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x14\n\x0ctimeout_secs\x18\x02 \x01(\r\"\x1f\n\x1dSetAutoSuspendTimeoutResponse\"E\n\x1eSetAutoHibernateTimeoutRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x14\n\x0ctimeout_secs\x18\x02 \x01(\r\"!\n\x1fSetAutoHibernateTimeoutResponse\"\\\n\x15SetDeleteAfterRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x19\n\x11\x64\x65lete_after_secs\x18\x02 \x01(\x04\x12\x19\n\x11\x64\x65lete_after_cron\x18\x03 \x01(\t\".\n\x16SetDeleteAfterResponse\x12\x14\n\x0c\x64\x65lete_at_ms\x18\x01 \x01(\x03\"G\n\x17SetBotProtectionRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x12\x0c\n\x04mode\x18\x03 \x01(\t\"\x1a\n\x18SetBotProtectionResponse\">\n\x1cSetIdleIgnoreOutboundRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"\x1f\n\x1dSetIdleIgnoreOutboundResponse\"/\n\rSetSshRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\"\x10\n\x0eSetSshResponse\"W\n\x13\x43reateApiKeyRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0f\x65xpires_in_secs\x18\x02 \x01(\x04\x12\x0b\n\x03org\x18\x03 \x01(\t\x12\x0c\n\x04kind\x18\x04 \x01(\t\"G\n\x14\x43reateApiKeyResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0f\n\x07\x61pi_key\x18\x02 \x01(\t\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\"\x14\n\x12ListApiKeysRequest\"<\n\x13ListApiKeysResponse\x12%\n\x04keys\x18\x01 \x03(\x0b\x32\x17.boxd.api.v1.ApiKeyInfo\"\xb5\x01\n\nApiKeyInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\nkey_prefix\x18\x03 \x01(\t\x12\x12\n\ncreated_at\x18\x04 \x01(\x03\x12\x14\n\x0clast_used_at\x18\x05 \x01(\x03\x12\x12\n\nexpires_at\x18\x06 \x01(\x03\x12\x0b\n\x03org\x18\x07 \x01(\t\x12\x0c\n\x04kind\x18\x08 \x01(\t\x12\x12\n\ncreated_by\x18\t \x01(\t\x12\x0c\n\x04mine\x18\n \x01(\x08\"!\n\x13\x44\x65leteApiKeyRequest\x12\n\n\x02id\x18\x01 \x01(\t\"\x16\n\x14\x44\x65leteApiKeyResponse\"\x1f\n\x0eShareVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x11\n\x0fShareVmResponse\"\x11\n\x0fListOrgsRequest\"W\n\x10ListOrgsResponse\x12%\n\x04orgs\x18\x01 \x03(\x0b\x32\x17.boxd.api.v1.OrgSummary\x12\x16\n\x0e\x64\x65\x66\x61ult_org_id\x18\x03 \x01(\tJ\x04\x08\x02\x10\x03\"F\n\nOrgSummary\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08is_admin\x18\x03 \x01(\x08\x12\x0c\n\x04slug\x18\x04 \x01(\t\"#\n\x14GetOrgBillingRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\"\xd4\x02\n\x15GetOrgBillingResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x10\n\x08is_admin\x18\x03 \x01(\x08\x12\x0f\n\x07max_vms\x18\x04 \x01(\r\x12\x0c\n\x04vcpu\x18\x05 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x06 \x01(\x04\x12\x10\n\x08vm_count\x18\x07 \x01(\r\x12%\n\x03vms\x18\x08 \x03(\x0b\x32\x18.boxd.api.v1.OrgBilledVm\x12\x15\n\rbalance_micro\x18\t \x01(\x03\x12\x14\n\x0c\x62illing_mode\x18\n \x01(\t\x12\x1b\n\x0e\x61\x63\x63ruing_micro\x18\x0b \x01(\x03H\x00\x88\x01\x01\x12\x10\n\x08\x63urrency\x18\x0c \x01(\t\x12\x14\n\x0c\x63\x65iling_vcpu\x18\r \x01(\r\x12\x1c\n\x14\x63\x65iling_memory_bytes\x18\x0e \x01(\x04\x42\x11\n\x0f_accruing_micro\"l\n\x0bOrgBilledVm\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05owner\x18\x02 \x01(\t\x12\x0e\n\x06status\x18\x03 \x01(\t\x12\x0f\n\x07\x62illing\x18\x05 \x01(\t\x12\x12\n\nowner_name\x18\x06 \x01(\tJ\x04\x08\x04\x10\x05R\x05shape\"^\n\nUsageRates\x12\x17\n\x0fvcpu_hour_micro\x18\x01 \x01(\x03\x12\x1a\n\x12ram_gib_hour_micro\x18\x02 \x01(\x03\x12\x1b\n\x13\x64isk_gib_hour_micro\x18\x03 \x01(\x03\"U\n\x0cStateSeconds\x12\x0f\n\x07running\x18\x01 \x01(\x04\x12\x0f\n\x07standby\x18\x02 \x01(\x04\x12\x12\n\nhibernated\x18\x03 \x01(\x04\x12\x0f\n\x07stopped\x18\x04 \x01(\x04\"\xb7\x02\n\x07VmUsage\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\r\n\x05owner\x18\x03 \x01(\t\x12\x12\n\nowner_name\x18\x04 \x01(\t\x12\x0f\n\x07sharing\x18\x05 \x01(\t\x12\x0e\n\x06status\x18\x06 \x01(\t\x12\x0c\n\x04vcpu\x18\x07 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x08 \x01(\x04\x12\x12\n\ndisk_bytes\x18\t \x01(\x04\x12*\n\x07seconds\x18\n \x01(\x0b\x32\x19.boxd.api.v1.StateSeconds\x12\x12\n\nvcpu_hours\x18\x0b \x01(\x01\x12\x15\n\rram_gib_hours\x18\x0c \x01(\x01\x12\x16\n\x0e\x64isk_gib_hours\x18\r \x01(\x01\x12\x12\n\ncost_micro\x18\x0e \x01(\x03\x12\x10\n\x08\x63omplete\x18\x0f \x01(\x08\"?\n\x12GetOrgUsageRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\r\n\x05since\x18\x02 \x01(\x03\x12\r\n\x05until\x18\x03 \x01(\x03\"\xe5\x01\n\x13GetOrgUsageResponse\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0b\n\x03org\x18\x02 \x01(\t\x12\x14\n\x0cperiod_start\x18\x03 \x01(\x03\x12\x12\n\nperiod_end\x18\x04 \x01(\x03\x12\x10\n\x08\x63urrency\x18\x05 \x01(\t\x12&\n\x05rates\x18\x06 \x01(\x0b\x32\x17.boxd.api.v1.UsageRates\x12\x18\n\x10total_cost_micro\x18\x07 \x01(\x03\x12!\n\x03vms\x18\x08 \x03(\x0b\x32\x14.boxd.api.v1.VmUsage\x12\x10\n\x08\x63omplete\x18\t \x01(\x08\"M\n\x11GetVmUsageRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\r\n\x05since\x18\x02 \x01(\x03\x12\r\n\x05until\x18\x03 \x01(\x03\x12\x0b\n\x03org\x18\x04 \x01(\t\"\x9d\x01\n\x12GetVmUsageResponse\x12\x14\n\x0cperiod_start\x18\x01 \x01(\x03\x12\x12\n\nperiod_end\x18\x02 \x01(\x03\x12\x10\n\x08\x63urrency\x18\x03 \x01(\t\x12&\n\x05rates\x18\x04 \x01(\x0b\x32\x17.boxd.api.v1.UsageRates\x12#\n\x05usage\x18\x05 \x01(\x0b\x32\x14.boxd.api.v1.VmUsage\"n\n\x1aListBillingActivityRequest\x12\x0b\n\x03org\x18\x01 \x01(\t\x12\r\n\x05since\x18\x02 \x01(\x03\x12\r\n\x05until\x18\x03 \x01(\x03\x12\x12\n\npage_token\x18\x04 \x01(\t\x12\x11\n\tpage_size\x18\x05 \x01(\r\"`\n\x14\x42illingActivityEntry\x12\x10\n\x08\x65ntry_id\x18\x01 \x01(\t\x12\x0c\n\x04kind\x18\x02 \x01(\t\x12\x14\n\x0c\x61mount_micro\x18\x03 \x01(\x03\x12\x12\n\ncreated_at\x18\x04 \x01(\x03\"\x93\x01\n\x1bListBillingActivityResponse\x12\x10\n\x08\x63urrency\x18\x01 \x01(\t\x12\x15\n\rbalance_micro\x18\x02 \x01(\x03\x12\x32\n\x07\x65ntries\x18\x03 \x03(\x0b\x32!.boxd.api.v1.BillingActivityEntry\x12\x17\n\x0fnext_page_token\x18\x04 \x01(\t\"!\n\x10UnshareVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\"\x13\n\x11UnshareVmResponse\"m\n\x18SetBackupScheduleRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x15\n\rschedule_kind\x18\x02 \x01(\t\x12\x16\n\x0eschedule_value\x18\x03 \x01(\t\x12\x16\n\x0eretention_secs\x18\x04 \x01(\r\"\x1b\n\x19SetBackupScheduleResponse\"(\n\x1a\x43learBackupScheduleRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"\x1d\n\x1b\x43learBackupScheduleResponse\"&\n\x18GetBackupScheduleRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"\xa3\x01\n\x19GetBackupScheduleResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x15\n\rschedule_kind\x18\x02 \x01(\t\x12\x16\n\x0eschedule_value\x18\x03 \x01(\t\x12\x16\n\x0eretention_secs\x18\x04 \x01(\r\x12\x16\n\x0enext_backup_at\x18\x05 \x01(\x03\x12\x16\n\x0elast_backup_at\x18\x06 \x01(\x03\" \n\x12ListBackupsRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"\x9a\x01\n\nBackupInfo\x12\x11\n\tbackup_id\x18\x01 \x01(\t\x12\x0e\n\x06status\x18\x02 \x01(\t\x12\x12\n\nsize_bytes\x18\x03 \x01(\x04\x12\x10\n\x08\x63hecksum\x18\x04 \x01(\t\x12\x1b\n\x13points_to_backup_id\x18\x05 \x01(\t\x12\x12\n\ncreated_at\x18\x06 \x01(\x03\x12\x12\n\nexpires_at\x18\x07 \x01(\x03\"?\n\x13ListBackupsResponse\x12(\n\x07\x62\x61\x63kups\x18\x01 \x03(\x0b\x32\x17.boxd.api.v1.BackupInfo\"\"\n\x14TriggerBackupRequest\x12\n\n\x02vm\x18\x01 \x01(\t\"*\n\x15TriggerBackupResponse\x12\x11\n\tbackup_id\x18\x01 \x01(\t\"4\n\x13\x44\x65leteBackupRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x11\n\tbackup_id\x18\x02 \x01(\t\"\x16\n\x14\x44\x65leteBackupResponse\"5\n\x14RestoreBackupRequest\x12\n\n\x02vm\x18\x01 \x01(\t\x12\x11\n\tbackup_id\x18\x02 \x01(\t\"\x17\n\x15RestoreBackupResponse\"\x87\x01\n\x1bSetOrgBackupsDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x18\n\x0bperiod_secs\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x1b\n\x0eretention_secs\x18\x03 \x01(\rH\x01\x88\x01\x01\x42\x0e\n\x0c_period_secsB\x11\n\x0f_retention_secs\"\\\n\x1cSetOrgBackupsDefaultResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x13\n\x0bperiod_secs\x18\x02 \x01(\r\x12\x16\n\x0eretention_secs\x18\x03 \x01(\r\"-\n\x1bGetOrgBackupsDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"\\\n\x1cGetOrgBackupsDefaultResponse\x12\x0f\n\x07\x65nabled\x18\x01 \x01(\x08\x12\x13\n\x0bperiod_secs\x18\x02 \x01(\r\x12\x16\n\x0eretention_secs\x18\x03 \x01(\r\"v\n\x1cSetOrgMachineDefaultsRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x11\n\x04vcpu\x18\x02 \x01(\rH\x00\x88\x01\x01\x12\x19\n\x0cmemory_bytes\x18\x03 \x01(\x04H\x01\x88\x01\x01\x42\x07\n\x05_vcpuB\x0f\n\r_memory_bytes\"\x1f\n\x1dSetOrgMachineDefaultsResponse\".\n\x1cGetOrgMachineDefaultsRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"D\n\x0fResizeVmRequest\x12\r\n\x05vm_id\x18\x01 \x01(\t\x12\x0c\n\x04vcpu\x18\x02 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x03 \x01(\x04\"H\n\x10ResizeVmResponse\x12\x0c\n\x04vcpu\x18\x01 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x02 \x01(\x04\x12\x10\n\x08rebooted\x18\x03 \x01(\x08\"\xbc\x01\n\x1dGetOrgMachineDefaultsResponse\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0c\n\x04vcpu\x18\x02 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x03 \x01(\x04\x12\x14\n\x0c\x63\x65iling_vcpu\x18\x04 \x01(\r\x12\x1c\n\x14\x63\x65iling_memory_bytes\x18\x05 \x01(\x04\x12\x36\n\rgranted_sizes\x18\x06 \x03(\x0b\x32\x1f.boxd.api.v1.GrantedMachineSize\"8\n\x12GrantedMachineSize\x12\x0c\n\x04vcpu\x18\x01 \x01(\r\x12\x14\n\x0cmemory_bytes\x18\x02 \x01(\x04\"\x8d\x01\n&SetOrgIdleIgnoreOutboundDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x14\n\x07\x65nabled\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x16\n\x0e\x61pply_existing\x18\x03 \x01(\x08\x12\x19\n\x11new_machines_only\x18\x04 \x01(\x08\x42\n\n\x08_enabled\"x\n\'SetOrgIdleIgnoreOutboundDefaultResponse\x12\x18\n\x10machines_changed\x18\x01 \x01(\r\x12\x18\n\x10machines_skipped\x18\x02 \x01(\r\x12\x19\n\x11snapshots_changed\x18\x03 \x01(\r\"8\n&GetOrgIdleIgnoreOutboundDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"a\n\'GetOrgIdleIgnoreOutboundDefaultResponse\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0f\n\x07\x65nabled\x18\x02 \x01(\x08\x12\x18\n\x10platform_enabled\x18\x03 \x01(\x08\"\\\n!SetOrgBotProtectionDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0c\n\x04mode\x18\x02 \x01(\t\x12\x19\n\x11new_machines_only\x18\x03 \x01(\x08\"\x89\x01\n\"SetOrgBotProtectionDefaultResponse\x12\x18\n\x10machines_changed\x18\x01 \x01(\r\x12\x19\n\x11snapshots_changed\x18\x02 \x01(\r\x12\x14\n\x0cmachines_off\x18\x03 \x01(\r\x12\x18\n\x10machines_skipped\x18\x04 \x01(\r\"3\n!GetOrgBotProtectionDefaultRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"V\n\"GetOrgBotProtectionDefaultResponse\x12\x0b\n\x03set\x18\x01 \x01(\x08\x12\x0c\n\x04mode\x18\x02 \x01(\t\x12\x15\n\rplatform_mode\x18\x03 \x01(\t\" \n\x10\x43reateOrgRequest\x12\x0c\n\x04name\x18\x01 \x01(\t\"-\n\x11\x43reateOrgResponse\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"0\n\x10RenameOrgRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x13\n\x11RenameOrgResponse\"&\n\x14GetOrgMembersRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"q\n\x15GetOrgMembersResponse\x12+\n\x07members\x18\x01 \x03(\x0b\x32\x1a.boxd.api.v1.OrgMemberInfo\x12+\n\x07invites\x18\x02 \x03(\x0b\x32\x1a.boxd.api.v1.OrgInviteInfo\"]\n\rOrgMemberInfo\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x0c\n\x04role\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12\x17\n\x0fgithub_username\x18\x04 \x01(\t\"\x8d\x01\n\rOrgInviteInfo\x12\r\n\x05token\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x12\n\naccept_url\x18\x03 \x01(\t\x12\x12\n\ncreated_at\x18\x04 \x01(\x03\x12\x12\n\nexpires_at\x18\x05 \x01(\x03\x12\x0c\n\x04role\x18\x06 \x01(\t\x12\x14\n\x0c\x65mail_status\x18\x07 \x01(\t\"E\n\x16InviteOrgMemberRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\r\n\x05\x65mail\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"z\n\x17InviteOrgMemberResponse\x12\r\n\x05token\x18\x01 \x01(\t\x12\x12\n\naccept_url\x18\x02 \x01(\t\x12\x12\n\nexpires_at\x18\x03 \x01(\x03\x12\x12\n\ncreated_at\x18\x04 \x01(\x03\x12\x14\n\x0c\x65mail_status\x18\x05 \x01(\t\"\'\n\x16RevokeOrgInviteRequest\x12\r\n\x05token\x18\x01 \x01(\t\"\x19\n\x17RevokeOrgInviteResponse\"9\n\x16RemoveOrgMemberRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"\x19\n\x17RemoveOrgMemberResponse\"H\n\x17SetOrgMemberRoleRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"\x1a\n\x18SetOrgMemberRoleResponse\"\xc1\x01\n\x08TeamInfo\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06org_id\x18\x02 \x01(\t\x12\x0c\n\x04name\x18\x03 \x01(\t\x12\x1a\n\x12\x63reated_by_user_id\x18\x04 \x01(\t\x12\x12\n\ncreated_at\x18\x05 \x01(\x03\x12\x10\n\x08is_admin\x18\x06 \x01(\x08\x12,\n\x07members\x18\x07 \x03(\x0b\x32\x1b.boxd.api.v1.TeamMemberInfo\x12\x1b\n\x13\x64\x65\x66\x61ult_snapshot_id\x18\x08 \x01(\t\"p\n\x0eTeamMemberInfo\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x0c\n\x04role\x18\x02 \x01(\t\x12\x14\n\x0c\x64isplay_name\x18\x03 \x01(\t\x12\x17\n\x0fgithub_username\x18\x04 \x01(\t\x12\x10\n\x08\x61\x64\x64\x65\x64_at\x18\x05 \x01(\x03\"\"\n\x10ListTeamsRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"9\n\x11ListTeamsResponse\x12$\n\x05teams\x18\x01 \x03(\x0b\x32\x15.boxd.api.v1.TeamInfo\"!\n\x0eGetTeamRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\"1\n\x11\x43reateTeamRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"2\n\x11RenameTeamRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\"\x14\n\x12RenameTeamResponse\"%\n\x12\x44\x65stroyTeamRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\"\x15\n\x13\x44\x65stroyTeamResponse\"8\n\x14\x41\x64\x64TeamMemberRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"\x17\n\x15\x41\x64\x64TeamMemberResponse\";\n\x17RemoveTeamMemberRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\"\x1a\n\x18RemoveTeamMemberResponse\"J\n\x18SetTeamMemberRoleRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x0c\n\x04role\x18\x03 \x01(\t\"\x1b\n\x19SetTeamMemberRoleResponse\"E\n\x1dSetTeamDefaultSnapshotRequest\x12\x0f\n\x07team_id\x18\x01 \x01(\t\x12\x13\n\x0bsnapshot_id\x18\x02 \x01(\t\" \n\x1eSetTeamDefaultSnapshotResponse\"+\n\x19GetOrgMachineLimitRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\"\xa4\x01\n\x1aGetOrgMachineLimitResponse\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x10\n\x08org_name\x18\x02 \x01(\t\x12\x0f\n\x07max_vms\x18\x03 \x01(\r\x12\x10\n\x08vm_count\x18\x04 \x01(\r\x12\x10\n\x08is_owner\x18\x05 \x01(\x08\x12\x14\n\x0crequested_at\x18\x06 \x01(\x03\x12\x19\n\x11requested_max_vms\x18\x07 \x01(\r\"Q\n\x1dRequestOrgMachineLimitRequest\x12\x0e\n\x06org_id\x18\x01 \x01(\t\x12\x0f\n\x07max_vms\x18\x02 \x01(\r\x12\x0f\n\x07message\x18\x03 \x01(\t\"Q\n\x1eRequestOrgMachineLimitResponse\x12\x14\n\x0crequested_at\x18\x01 \x01(\x03\x12\x19\n\x11requested_max_vms\x18\x02 \x01(\r*\x95\x01\n\x0b\x46sEntryType\x12\x1d\n\x19\x46S_ENTRY_TYPE_UNSPECIFIED\x10\x00\x12\x16\n\x12\x46S_ENTRY_TYPE_FILE\x10\x01\x12\x1b\n\x17\x46S_ENTRY_TYPE_DIRECTORY\x10\x02\x12\x19\n\x15\x46S_ENTRY_TYPE_SYMLINK\x10\x03\x12\x17\n\x13\x46S_ENTRY_TYPE_OTHER\x10\x04\x32\xfeX\n\x07\x42oxdApi\x12G\n\x08\x43reateVm\x12\x1c.boxd.api.v1.CreateVmRequest\x1a\x1d.boxd.api.v1.CreateVmResponse\x12J\n\tDestroyVm\x12\x1d.boxd.api.v1.DestroyVmRequest\x1a\x1e.boxd.api.v1.DestroyVmResponse\x12G\n\x08RenameVm\x12\x1c.boxd.api.v1.RenameVmRequest\x1a\x1d.boxd.api.v1.RenameVmResponse\x12V\n\rSetVmNetworks\x12!.boxd.api.v1.SetVmNetworksRequest\x1a\".boxd.api.v1.SetVmNetworksResponse\x12_\n\x10SetVmEgressAllow\x12$.boxd.api.v1.SetVmEgressAllowRequest\x1a%.boxd.api.v1.SetVmEgressAllowResponse\x12Y\n\x0eUpdateVmLabels\x12\".boxd.api.v1.UpdateVmLabelsRequest\x1a#.boxd.api.v1.UpdateVmLabelsResponse\x12\x44\n\x07StartVm\x12\x1b.boxd.api.v1.StartVmRequest\x1a\x1c.boxd.api.v1.StartVmResponse\x12\x41\n\x06StopVm\x12\x1a.boxd.api.v1.StopVmRequest\x1a\x1b.boxd.api.v1.StopVmResponse\x12G\n\x08RebootVm\x12\x1c.boxd.api.v1.RebootVmRequest\x1a\x1d.boxd.api.v1.RebootVmResponse\x12>\n\x05GetVm\x12\x19.boxd.api.v1.GetVmRequest\x1a\x1a.boxd.api.v1.GetVmResponse\x12\x44\n\x07ListVms\x12\x1b.boxd.api.v1.ListVmsRequest\x1a\x1c.boxd.api.v1.ListVmsResponse\x12V\n\rSuggestVmName\x12!.boxd.api.v1.SuggestVmNameRequest\x1a\".boxd.api.v1.SuggestVmNameResponse\x12M\n\nExposePort\x12\x1e.boxd.api.v1.ExposePortRequest\x1a\x1f.boxd.api.v1.ExposePortResponse\x12S\n\x0cUnexposePort\x12 .boxd.api.v1.UnexposePortRequest\x1a!.boxd.api.v1.UnexposePortResponse\x12_\n\x10ListExposedPorts\x12$.boxd.api.v1.ListExposedPortsRequest\x1a%.boxd.api.v1.ListExposedPortsResponse\x12;\n\x06SetVar\x12\x1a.boxd.api.v1.SetVarRequest\x1a\x15.boxd.api.v1.VarReply\x12\x43\n\x08ListVars\x12\x1c.boxd.api.v1.ListVarsRequest\x1a\x19.boxd.api.v1.VarListReply\x12\x41\n\tRemoveVar\x12\x1d.boxd.api.v1.RemoveVarRequest\x1a\x15.boxd.api.v1.VarReply\x12K\n\x0eSetSecretScope\x12\".boxd.api.v1.SetSecretScopeRequest\x1a\x15.boxd.api.v1.VarReply\x12\x45\n\nStreamLogs\x12\x1e.boxd.api.v1.StreamLogsRequest\x1a\x15.boxd.api.v1.LogChunk0\x01\x12:\n\x04\x45xec\x12\x16.boxd.api.v1.ExecChunk\x1a\x16.boxd.api.v1.ExecChunk(\x01\x30\x01\x12I\n\rDesktopTunnel\x12\x19.boxd.api.v1.DesktopChunk\x1a\x19.boxd.api.v1.DesktopChunk(\x01\x30\x01\x12V\n\rCreateNetwork\x12!.boxd.api.v1.CreateNetworkRequest\x1a\".boxd.api.v1.CreateNetworkResponse\x12S\n\x0cListNetworks\x12 .boxd.api.v1.ListNetworksRequest\x1a!.boxd.api.v1.ListNetworksResponse\x12\\\n\x0f\x41\x64\x64\x43ustomDomain\x12#.boxd.api.v1.AddCustomDomainRequest\x1a$.boxd.api.v1.AddCustomDomainResponse\x12\x62\n\x11ListCustomDomains\x12%.boxd.api.v1.ListCustomDomainsRequest\x1a&.boxd.api.v1.ListCustomDomainsResponse\x12\x65\n\x12RemoveCustomDomain\x12&.boxd.api.v1.RemoveCustomDomainRequest\x1a\'.boxd.api.v1.RemoveCustomDomainResponse\x12S\n\x0cSetOrgDomain\x12 .boxd.api.v1.SetOrgDomainRequest\x1a!.boxd.api.v1.SetOrgDomainResponse\x12S\n\x0cGetOrgDomain\x12 .boxd.api.v1.GetOrgDomainRequest\x1a!.boxd.api.v1.GetOrgDomainResponse\x12Y\n\x0e\x43learOrgDomain\x12\".boxd.api.v1.ClearOrgDomainRequest\x1a#.boxd.api.v1.ClearOrgDomainResponse\x12\x41\n\x06Whoami\x12\x1a.boxd.api.v1.WhoamiRequest\x1a\x1b.boxd.api.v1.WhoamiResponse\x12P\n\x0b\x43reateToken\x12\x1f.boxd.api.v1.CreateTokenRequest\x1a .boxd.api.v1.CreateTokenResponse\x12M\n\nListTokens\x12\x1e.boxd.api.v1.ListTokensRequest\x1a\x1f.boxd.api.v1.ListTokensResponse\x12P\n\x0bRevokeToken\x12\x1f.boxd.api.v1.RevokeTokenRequest\x1a .boxd.api.v1.RevokeTokenResponse\x12M\n\nLinkSshKey\x12\x1e.boxd.api.v1.LinkSshKeyRequest\x1a\x1f.boxd.api.v1.LinkSshKeyResponse\x12J\n\tGetConfig\x12\x1d.boxd.api.v1.GetConfigRequest\x1a\x1e.boxd.api.v1.GetConfigResponse\x12\x41\n\x06\x46orkVm\x12\x1a.boxd.api.v1.ForkVmRequest\x1a\x1b.boxd.api.v1.ForkVmResponse\x12P\n\x0bListProxies\x12\x1f.boxd.api.v1.ListProxiesRequest\x1a .boxd.api.v1.ListProxiesResponse\x12Y\n\x0eListProxyNodes\x12\".boxd.api.v1.ListProxyNodesRequest\x1a#.boxd.api.v1.ListProxyNodesResponse\x12P\n\x0b\x43reateProxy\x12\x1f.boxd.api.v1.CreateProxyRequest\x1a .boxd.api.v1.CreateProxyResponse\x12P\n\x0b\x44\x65leteProxy\x12\x1f.boxd.api.v1.DeleteProxyRequest\x1a .boxd.api.v1.DeleteProxyResponse\x12S\n\x0cSetProxyPort\x12 .boxd.api.v1.SetProxyPortRequest\x1a!.boxd.api.v1.SetProxyPortResponse\x12M\n\nUploadFile\x12\x1e.boxd.api.v1.UploadFileRequest\x1a\x1f.boxd.api.v1.UploadFileResponse\x12S\n\x10UploadFileStream\x12\x1c.boxd.api.v1.UploadFileChunk\x1a\x1f.boxd.api.v1.UploadFileResponse(\x01\x12S\n\x0c\x44ownloadFile\x12 .boxd.api.v1.DownloadFileRequest\x1a!.boxd.api.v1.DownloadFileResponse\x12X\n\x12\x44ownloadFileStream\x12 .boxd.api.v1.DownloadFileRequest\x1a\x1e.boxd.api.v1.DownloadFileChunk0\x01\x12\x44\n\x07ListDir\x12\x1b.boxd.api.v1.ListDirRequest\x1a\x1c.boxd.api.v1.ListDirResponse\x12>\n\x05Mkdir\x12\x19.boxd.api.v1.MkdirRequest\x1a\x1a.boxd.api.v1.MkdirResponse\x12M\n\nRenamePath\x12\x1e.boxd.api.v1.RenamePathRequest\x1a\x1f.boxd.api.v1.RenamePathResponse\x12M\n\nDeletePath\x12\x1e.boxd.api.v1.DeletePathRequest\x1a\x1f.boxd.api.v1.DeletePathResponse\x12G\n\x08\x43opyPath\x12\x1c.boxd.api.v1.CopyPathRequest\x1a\x1d.boxd.api.v1.CopyPathResponse\x12@\n\x06\x46sRead\x12\x1a.boxd.api.v1.FsReadRequest\x1a\x18.boxd.api.v1.FsReadChunk0\x01\x12\x44\n\x07\x46sWrite\x12\x19.boxd.api.v1.FsWriteChunk\x1a\x1c.boxd.api.v1.FsWriteResponse(\x01\x12\x41\n\x06\x46sStat\x12\x1a.boxd.api.v1.FsStatRequest\x1a\x1b.boxd.api.v1.FsStatResponse\x12@\n\x06\x46sList\x12\x1a.boxd.api.v1.FsListRequest\x1a\x18.boxd.api.v1.FsListChunk0\x01\x12\x44\n\x07\x46sMkdir\x12\x1b.boxd.api.v1.FsMkdirRequest\x1a\x1c.boxd.api.v1.FsMkdirResponse\x12G\n\x08\x46sRemove\x12\x1c.boxd.api.v1.FsRemoveRequest\x1a\x1d.boxd.api.v1.FsRemoveResponse\x12G\n\x08\x46sRename\x12\x1c.boxd.api.v1.FsRenameRequest\x1a\x1d.boxd.api.v1.FsRenameResponse\x12M\n\nFsRealpath\x12\x1e.boxd.api.v1.FsRealpathRequest\x1a\x1f.boxd.api.v1.FsRealpathResponse\x12J\n\tSuspendVm\x12\x1d.boxd.api.v1.SuspendVmRequest\x1a\x1e.boxd.api.v1.SuspendVmResponse\x12G\n\x08ResumeVm\x12\x1c.boxd.api.v1.ResumeVmRequest\x1a\x1d.boxd.api.v1.ResumeVmResponse\x12P\n\x0bHibernateVm\x12\x1f.boxd.api.v1.HibernateVmRequest\x1a .boxd.api.v1.HibernateVmResponse\x12\x41\n\x06WakeVm\x12\x1a.boxd.api.v1.WakeVmRequest\x1a\x1b.boxd.api.v1.WakeVmResponse\x12Y\n\x0e\x43reateSnapshot\x12\".boxd.api.v1.CreateSnapshotRequest\x1a#.boxd.api.v1.CreateSnapshotResponse\x12V\n\rListSnapshots\x12!.boxd.api.v1.ListSnapshotsRequest\x1a\".boxd.api.v1.ListSnapshotsResponse\x12P\n\x0bGetSnapshot\x12\x1f.boxd.api.v1.GetSnapshotRequest\x1a .boxd.api.v1.GetSnapshotResponse\x12Y\n\x0e\x44\x65leteSnapshot\x12\".boxd.api.v1.DeleteSnapshotRequest\x1a#.boxd.api.v1.DeleteSnapshotResponse\x12_\n\x14\x43reateVmFromSnapshot\x12(.boxd.api.v1.CreateVmFromSnapshotRequest\x1a\x1d.boxd.api.v1.CreateVmResponse\x12_\n\x10\x43reateCheckpoint\x12$.boxd.api.v1.CreateCheckpointRequest\x1a%.boxd.api.v1.CreateCheckpointResponse\x12\\\n\x0fListCheckpoints\x12#.boxd.api.v1.ListCheckpointsRequest\x1a$.boxd.api.v1.ListCheckpointsResponse\x12_\n\x10\x44\x65leteCheckpoint\x12$.boxd.api.v1.DeleteCheckpointRequest\x1a%.boxd.api.v1.DeleteCheckpointResponse\x12\x62\n\x11RestoreCheckpoint\x12%.boxd.api.v1.RestoreCheckpointRequest\x1a&.boxd.api.v1.RestoreCheckpointResponse\x12n\n\x15SetAutoSuspendTimeout\x12).boxd.api.v1.SetAutoSuspendTimeoutRequest\x1a*.boxd.api.v1.SetAutoSuspendTimeoutResponse\x12t\n\x17SetAutoHibernateTimeout\x12+.boxd.api.v1.SetAutoHibernateTimeoutRequest\x1a,.boxd.api.v1.SetAutoHibernateTimeoutResponse\x12_\n\x10SetBotProtection\x12$.boxd.api.v1.SetBotProtectionRequest\x1a%.boxd.api.v1.SetBotProtectionResponse\x12n\n\x15SetIdleIgnoreOutbound\x12).boxd.api.v1.SetIdleIgnoreOutboundRequest\x1a*.boxd.api.v1.SetIdleIgnoreOutboundResponse\x12\x41\n\x06SetSsh\x12\x1a.boxd.api.v1.SetSshRequest\x1a\x1b.boxd.api.v1.SetSshResponse\x12Y\n\x0eSetDeleteAfter\x12\".boxd.api.v1.SetDeleteAfterRequest\x1a#.boxd.api.v1.SetDeleteAfterResponse\x12M\n\nCreateDisk\x12\x1e.boxd.api.v1.CreateDiskRequest\x1a\x1f.boxd.api.v1.CreateDiskResponse\x12J\n\tListDisks\x12\x1d.boxd.api.v1.ListDisksRequest\x1a\x1e.boxd.api.v1.ListDisksResponse\x12M\n\nAttachDisk\x12\x1e.boxd.api.v1.AttachDiskRequest\x1a\x1f.boxd.api.v1.AttachDiskResponse\x12M\n\nDetachDisk\x12\x1e.boxd.api.v1.DetachDiskRequest\x1a\x1f.boxd.api.v1.DetachDiskResponse\x12P\n\x0b\x44\x65stroyDisk\x12\x1f.boxd.api.v1.DestroyDiskRequest\x1a .boxd.api.v1.DestroyDiskResponse\x12S\n\x0c\x43reateApiKey\x12 .boxd.api.v1.CreateApiKeyRequest\x1a!.boxd.api.v1.CreateApiKeyResponse\x12P\n\x0bListApiKeys\x12\x1f.boxd.api.v1.ListApiKeysRequest\x1a .boxd.api.v1.ListApiKeysResponse\x12S\n\x0c\x44\x65leteApiKey\x12 .boxd.api.v1.DeleteApiKeyRequest\x1a!.boxd.api.v1.DeleteApiKeyResponse\x12J\n\tListPlans\x12\x1d.boxd.api.v1.ListPlansRequest\x1a\x1e.boxd.api.v1.ListPlansResponse\x12M\n\nGetBilling\x12\x1e.boxd.api.v1.GetBillingRequest\x1a\x1f.boxd.api.v1.GetBillingResponse\x12n\n\x15\x43reateCheckoutSession\x12).boxd.api.v1.CreateCheckoutSessionRequest\x1a*.boxd.api.v1.CreateCheckoutSessionResponse\x12}\n\x1a\x43reateBillingPortalSession\x12..boxd.api.v1.CreateBillingPortalSessionRequest\x1a/.boxd.api.v1.CreateBillingPortalSessionResponse\x12\x44\n\x07ShareVm\x12\x1b.boxd.api.v1.ShareVmRequest\x1a\x1c.boxd.api.v1.ShareVmResponse\x12J\n\tUnshareVm\x12\x1d.boxd.api.v1.UnshareVmRequest\x1a\x1e.boxd.api.v1.UnshareVmResponse\x12G\n\x08ListOrgs\x12\x1c.boxd.api.v1.ListOrgsRequest\x1a\x1d.boxd.api.v1.ListOrgsResponse\x12V\n\rGetOrgBilling\x12!.boxd.api.v1.GetOrgBillingRequest\x1a\".boxd.api.v1.GetOrgBillingResponse\x12P\n\x0bGetOrgUsage\x12\x1f.boxd.api.v1.GetOrgUsageRequest\x1a .boxd.api.v1.GetOrgUsageResponse\x12M\n\nGetVmUsage\x12\x1e.boxd.api.v1.GetVmUsageRequest\x1a\x1f.boxd.api.v1.GetVmUsageResponse\x12h\n\x13ListBillingActivity\x12\'.boxd.api.v1.ListBillingActivityRequest\x1a(.boxd.api.v1.ListBillingActivityResponse\x12\x62\n\x11SetBackupSchedule\x12%.boxd.api.v1.SetBackupScheduleRequest\x1a&.boxd.api.v1.SetBackupScheduleResponse\x12h\n\x13\x43learBackupSchedule\x12\'.boxd.api.v1.ClearBackupScheduleRequest\x1a(.boxd.api.v1.ClearBackupScheduleResponse\x12\x62\n\x11GetBackupSchedule\x12%.boxd.api.v1.GetBackupScheduleRequest\x1a&.boxd.api.v1.GetBackupScheduleResponse\x12P\n\x0bListBackups\x12\x1f.boxd.api.v1.ListBackupsRequest\x1a .boxd.api.v1.ListBackupsResponse\x12V\n\rTriggerBackup\x12!.boxd.api.v1.TriggerBackupRequest\x1a\".boxd.api.v1.TriggerBackupResponse\x12S\n\x0c\x44\x65leteBackup\x12 .boxd.api.v1.DeleteBackupRequest\x1a!.boxd.api.v1.DeleteBackupResponse\x12V\n\rRestoreBackup\x12!.boxd.api.v1.RestoreBackupRequest\x1a\".boxd.api.v1.RestoreBackupResponse\x12k\n\x14SetOrgBackupsDefault\x12(.boxd.api.v1.SetOrgBackupsDefaultRequest\x1a).boxd.api.v1.SetOrgBackupsDefaultResponse\x12k\n\x14GetOrgBackupsDefault\x12(.boxd.api.v1.GetOrgBackupsDefaultRequest\x1a).boxd.api.v1.GetOrgBackupsDefaultResponse\x12n\n\x15SetOrgMachineDefaults\x12).boxd.api.v1.SetOrgMachineDefaultsRequest\x1a*.boxd.api.v1.SetOrgMachineDefaultsResponse\x12n\n\x15GetOrgMachineDefaults\x12).boxd.api.v1.GetOrgMachineDefaultsRequest\x1a*.boxd.api.v1.GetOrgMachineDefaultsResponse\x12\x8c\x01\n\x1fSetOrgIdleIgnoreOutboundDefault\x12\x33.boxd.api.v1.SetOrgIdleIgnoreOutboundDefaultRequest\x1a\x34.boxd.api.v1.SetOrgIdleIgnoreOutboundDefaultResponse\x12\x8c\x01\n\x1fGetOrgIdleIgnoreOutboundDefault\x12\x33.boxd.api.v1.GetOrgIdleIgnoreOutboundDefaultRequest\x1a\x34.boxd.api.v1.GetOrgIdleIgnoreOutboundDefaultResponse\x12}\n\x1aSetOrgBotProtectionDefault\x12..boxd.api.v1.SetOrgBotProtectionDefaultRequest\x1a/.boxd.api.v1.SetOrgBotProtectionDefaultResponse\x12}\n\x1aGetOrgBotProtectionDefault\x12..boxd.api.v1.GetOrgBotProtectionDefaultRequest\x1a/.boxd.api.v1.GetOrgBotProtectionDefaultResponse\x12\x65\n\x12GetOrgMachineLimit\x12&.boxd.api.v1.GetOrgMachineLimitRequest\x1a\'.boxd.api.v1.GetOrgMachineLimitResponse\x12q\n\x16RequestOrgMachineLimit\x12*.boxd.api.v1.RequestOrgMachineLimitRequest\x1a+.boxd.api.v1.RequestOrgMachineLimitResponse\x12J\n\tCreateOrg\x12\x1d.boxd.api.v1.CreateOrgRequest\x1a\x1e.boxd.api.v1.CreateOrgResponse\x12J\n\tRenameOrg\x12\x1d.boxd.api.v1.RenameOrgRequest\x1a\x1e.boxd.api.v1.RenameOrgResponse\x12V\n\rGetOrgMembers\x12!.boxd.api.v1.GetOrgMembersRequest\x1a\".boxd.api.v1.GetOrgMembersResponse\x12\\\n\x0fInviteOrgMember\x12#.boxd.api.v1.InviteOrgMemberRequest\x1a$.boxd.api.v1.InviteOrgMemberResponse\x12\\\n\x0fRevokeOrgInvite\x12#.boxd.api.v1.RevokeOrgInviteRequest\x1a$.boxd.api.v1.RevokeOrgInviteResponse\x12\\\n\x0fRemoveOrgMember\x12#.boxd.api.v1.RemoveOrgMemberRequest\x1a$.boxd.api.v1.RemoveOrgMemberResponse\x12_\n\x10SetOrgMemberRole\x12$.boxd.api.v1.SetOrgMemberRoleRequest\x1a%.boxd.api.v1.SetOrgMemberRoleResponse\x12J\n\tListTeams\x12\x1d.boxd.api.v1.ListTeamsRequest\x1a\x1e.boxd.api.v1.ListTeamsResponse\x12=\n\x07GetTeam\x12\x1b.boxd.api.v1.GetTeamRequest\x1a\x15.boxd.api.v1.TeamInfo\x12\x43\n\nCreateTeam\x12\x1e.boxd.api.v1.CreateTeamRequest\x1a\x15.boxd.api.v1.TeamInfo\x12M\n\nRenameTeam\x12\x1e.boxd.api.v1.RenameTeamRequest\x1a\x1f.boxd.api.v1.RenameTeamResponse\x12P\n\x0b\x44\x65stroyTeam\x12\x1f.boxd.api.v1.DestroyTeamRequest\x1a .boxd.api.v1.DestroyTeamResponse\x12V\n\rAddTeamMember\x12!.boxd.api.v1.AddTeamMemberRequest\x1a\".boxd.api.v1.AddTeamMemberResponse\x12_\n\x10RemoveTeamMember\x12$.boxd.api.v1.RemoveTeamMemberRequest\x1a%.boxd.api.v1.RemoveTeamMemberResponse\x12\x62\n\x11SetTeamMemberRole\x12%.boxd.api.v1.SetTeamMemberRoleRequest\x1a&.boxd.api.v1.SetTeamMemberRoleResponse\x12q\n\x16SetTeamDefaultSnapshot\x12*.boxd.api.v1.SetTeamDefaultSnapshotRequest\x1a+.boxd.api.v1.SetTeamDefaultSnapshotResponse\x12G\n\x08ResizeVm\x12\x1c.boxd.api.v1.ResizeVmRequest\x1a\x1d.boxd.api.v1.ResizeVmResponse\x12\x62\n\x11UpdateMachineSpec\x12%.boxd.api.v1.UpdateMachineSpecRequest\x1a&.boxd.api.v1.UpdateMachineSpecResponseb\x06proto3')
28
28
 
29
29
  _globals = globals()
30
30
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -63,8 +63,8 @@ if not _descriptor._USE_C_DESCRIPTORS:
63
63
  _globals['_FSENTRY'].fields_by_name['mtime_ns']._serialized_options = b'0\001'
64
64
  _globals['_CREATEVMFROMSNAPSHOTREQUEST_LABELSENTRY']._loaded_options = None
65
65
  _globals['_CREATEVMFROMSNAPSHOTREQUEST_LABELSENTRY']._serialized_options = b'8\001'
66
- _globals['_FSENTRYTYPE']._serialized_start=22621
67
- _globals['_FSENTRYTYPE']._serialized_end=22770
66
+ _globals['_FSENTRYTYPE']._serialized_start=23158
67
+ _globals['_FSENTRYTYPE']._serialized_end=23307
68
68
  _globals['_VMCONFIG']._serialized_start=27
69
69
  _globals['_VMCONFIG']._serialized_end=278
70
70
  _globals['_SRFCONFIG']._serialized_start=280
@@ -578,91 +578,101 @@ if not _descriptor._USE_C_DESCRIPTORS:
578
578
  _globals['_RESIZEVMRESPONSE']._serialized_start=19652
579
579
  _globals['_RESIZEVMRESPONSE']._serialized_end=19724
580
580
  _globals['_GETORGMACHINEDEFAULTSRESPONSE']._serialized_start=19727
581
- _globals['_GETORGMACHINEDEFAULTSRESPONSE']._serialized_end=19859
582
- _globals['_SETORGIDLEIGNOREOUTBOUNDDEFAULTREQUEST']._serialized_start=19862
583
- _globals['_SETORGIDLEIGNOREOUTBOUNDDEFAULTREQUEST']._serialized_end=20003
584
- _globals['_SETORGIDLEIGNOREOUTBOUNDDEFAULTRESPONSE']._serialized_start=20005
585
- _globals['_SETORGIDLEIGNOREOUTBOUNDDEFAULTRESPONSE']._serialized_end=20125
586
- _globals['_GETORGIDLEIGNOREOUTBOUNDDEFAULTREQUEST']._serialized_start=20127
587
- _globals['_GETORGIDLEIGNOREOUTBOUNDDEFAULTREQUEST']._serialized_end=20183
588
- _globals['_GETORGIDLEIGNOREOUTBOUNDDEFAULTRESPONSE']._serialized_start=20185
589
- _globals['_GETORGIDLEIGNOREOUTBOUNDDEFAULTRESPONSE']._serialized_end=20282
590
- _globals['_SETORGBOTPROTECTIONDEFAULTREQUEST']._serialized_start=20284
591
- _globals['_SETORGBOTPROTECTIONDEFAULTREQUEST']._serialized_end=20376
592
- _globals['_SETORGBOTPROTECTIONDEFAULTRESPONSE']._serialized_start=20379
593
- _globals['_SETORGBOTPROTECTIONDEFAULTRESPONSE']._serialized_end=20516
594
- _globals['_GETORGBOTPROTECTIONDEFAULTREQUEST']._serialized_start=20518
595
- _globals['_GETORGBOTPROTECTIONDEFAULTREQUEST']._serialized_end=20569
596
- _globals['_GETORGBOTPROTECTIONDEFAULTRESPONSE']._serialized_start=20571
597
- _globals['_GETORGBOTPROTECTIONDEFAULTRESPONSE']._serialized_end=20657
598
- _globals['_CREATEORGREQUEST']._serialized_start=20659
599
- _globals['_CREATEORGREQUEST']._serialized_end=20691
600
- _globals['_CREATEORGRESPONSE']._serialized_start=20693
601
- _globals['_CREATEORGRESPONSE']._serialized_end=20738
602
- _globals['_RENAMEORGREQUEST']._serialized_start=20740
603
- _globals['_RENAMEORGREQUEST']._serialized_end=20788
604
- _globals['_RENAMEORGRESPONSE']._serialized_start=20790
605
- _globals['_RENAMEORGRESPONSE']._serialized_end=20809
606
- _globals['_GETORGMEMBERSREQUEST']._serialized_start=20811
607
- _globals['_GETORGMEMBERSREQUEST']._serialized_end=20849
608
- _globals['_GETORGMEMBERSRESPONSE']._serialized_start=20851
609
- _globals['_GETORGMEMBERSRESPONSE']._serialized_end=20964
610
- _globals['_ORGMEMBERINFO']._serialized_start=20966
611
- _globals['_ORGMEMBERINFO']._serialized_end=21059
612
- _globals['_ORGINVITEINFO']._serialized_start=21061
613
- _globals['_ORGINVITEINFO']._serialized_end=21180
614
- _globals['_INVITEORGMEMBERREQUEST']._serialized_start=21182
615
- _globals['_INVITEORGMEMBERREQUEST']._serialized_end=21251
616
- _globals['_INVITEORGMEMBERRESPONSE']._serialized_start=21253
617
- _globals['_INVITEORGMEMBERRESPONSE']._serialized_end=21353
618
- _globals['_REVOKEORGINVITEREQUEST']._serialized_start=21355
619
- _globals['_REVOKEORGINVITEREQUEST']._serialized_end=21394
620
- _globals['_REVOKEORGINVITERESPONSE']._serialized_start=21396
621
- _globals['_REVOKEORGINVITERESPONSE']._serialized_end=21421
622
- _globals['_REMOVEORGMEMBERREQUEST']._serialized_start=21423
623
- _globals['_REMOVEORGMEMBERREQUEST']._serialized_end=21480
624
- _globals['_REMOVEORGMEMBERRESPONSE']._serialized_start=21482
625
- _globals['_REMOVEORGMEMBERRESPONSE']._serialized_end=21507
626
- _globals['_SETORGMEMBERROLEREQUEST']._serialized_start=21509
627
- _globals['_SETORGMEMBERROLEREQUEST']._serialized_end=21581
628
- _globals['_SETORGMEMBERROLERESPONSE']._serialized_start=21583
629
- _globals['_SETORGMEMBERROLERESPONSE']._serialized_end=21609
630
- _globals['_TEAMINFO']._serialized_start=21612
631
- _globals['_TEAMINFO']._serialized_end=21805
632
- _globals['_TEAMMEMBERINFO']._serialized_start=21807
633
- _globals['_TEAMMEMBERINFO']._serialized_end=21919
634
- _globals['_LISTTEAMSREQUEST']._serialized_start=21921
635
- _globals['_LISTTEAMSREQUEST']._serialized_end=21955
636
- _globals['_LISTTEAMSRESPONSE']._serialized_start=21957
637
- _globals['_LISTTEAMSRESPONSE']._serialized_end=22014
638
- _globals['_GETTEAMREQUEST']._serialized_start=22016
639
- _globals['_GETTEAMREQUEST']._serialized_end=22049
640
- _globals['_CREATETEAMREQUEST']._serialized_start=22051
641
- _globals['_CREATETEAMREQUEST']._serialized_end=22100
642
- _globals['_RENAMETEAMREQUEST']._serialized_start=22102
643
- _globals['_RENAMETEAMREQUEST']._serialized_end=22152
644
- _globals['_RENAMETEAMRESPONSE']._serialized_start=22154
645
- _globals['_RENAMETEAMRESPONSE']._serialized_end=22174
646
- _globals['_DESTROYTEAMREQUEST']._serialized_start=22176
647
- _globals['_DESTROYTEAMREQUEST']._serialized_end=22213
648
- _globals['_DESTROYTEAMRESPONSE']._serialized_start=22215
649
- _globals['_DESTROYTEAMRESPONSE']._serialized_end=22236
650
- _globals['_ADDTEAMMEMBERREQUEST']._serialized_start=22238
651
- _globals['_ADDTEAMMEMBERREQUEST']._serialized_end=22294
652
- _globals['_ADDTEAMMEMBERRESPONSE']._serialized_start=22296
653
- _globals['_ADDTEAMMEMBERRESPONSE']._serialized_end=22319
654
- _globals['_REMOVETEAMMEMBERREQUEST']._serialized_start=22321
655
- _globals['_REMOVETEAMMEMBERREQUEST']._serialized_end=22380
656
- _globals['_REMOVETEAMMEMBERRESPONSE']._serialized_start=22382
657
- _globals['_REMOVETEAMMEMBERRESPONSE']._serialized_end=22408
658
- _globals['_SETTEAMMEMBERROLEREQUEST']._serialized_start=22410
659
- _globals['_SETTEAMMEMBERROLEREQUEST']._serialized_end=22484
660
- _globals['_SETTEAMMEMBERROLERESPONSE']._serialized_start=22486
661
- _globals['_SETTEAMMEMBERROLERESPONSE']._serialized_end=22513
662
- _globals['_SETTEAMDEFAULTSNAPSHOTREQUEST']._serialized_start=22515
663
- _globals['_SETTEAMDEFAULTSNAPSHOTREQUEST']._serialized_end=22584
664
- _globals['_SETTEAMDEFAULTSNAPSHOTRESPONSE']._serialized_start=22586
665
- _globals['_SETTEAMDEFAULTSNAPSHOTRESPONSE']._serialized_end=22618
666
- _globals['_BOXDAPI']._serialized_start=22773
667
- _globals['_BOXDAPI']._serialized_end=33945
581
+ _globals['_GETORGMACHINEDEFAULTSRESPONSE']._serialized_end=19915
582
+ _globals['_GRANTEDMACHINESIZE']._serialized_start=19917
583
+ _globals['_GRANTEDMACHINESIZE']._serialized_end=19973
584
+ _globals['_SETORGIDLEIGNOREOUTBOUNDDEFAULTREQUEST']._serialized_start=19976
585
+ _globals['_SETORGIDLEIGNOREOUTBOUNDDEFAULTREQUEST']._serialized_end=20117
586
+ _globals['_SETORGIDLEIGNOREOUTBOUNDDEFAULTRESPONSE']._serialized_start=20119
587
+ _globals['_SETORGIDLEIGNOREOUTBOUNDDEFAULTRESPONSE']._serialized_end=20239
588
+ _globals['_GETORGIDLEIGNOREOUTBOUNDDEFAULTREQUEST']._serialized_start=20241
589
+ _globals['_GETORGIDLEIGNOREOUTBOUNDDEFAULTREQUEST']._serialized_end=20297
590
+ _globals['_GETORGIDLEIGNOREOUTBOUNDDEFAULTRESPONSE']._serialized_start=20299
591
+ _globals['_GETORGIDLEIGNOREOUTBOUNDDEFAULTRESPONSE']._serialized_end=20396
592
+ _globals['_SETORGBOTPROTECTIONDEFAULTREQUEST']._serialized_start=20398
593
+ _globals['_SETORGBOTPROTECTIONDEFAULTREQUEST']._serialized_end=20490
594
+ _globals['_SETORGBOTPROTECTIONDEFAULTRESPONSE']._serialized_start=20493
595
+ _globals['_SETORGBOTPROTECTIONDEFAULTRESPONSE']._serialized_end=20630
596
+ _globals['_GETORGBOTPROTECTIONDEFAULTREQUEST']._serialized_start=20632
597
+ _globals['_GETORGBOTPROTECTIONDEFAULTREQUEST']._serialized_end=20683
598
+ _globals['_GETORGBOTPROTECTIONDEFAULTRESPONSE']._serialized_start=20685
599
+ _globals['_GETORGBOTPROTECTIONDEFAULTRESPONSE']._serialized_end=20771
600
+ _globals['_CREATEORGREQUEST']._serialized_start=20773
601
+ _globals['_CREATEORGREQUEST']._serialized_end=20805
602
+ _globals['_CREATEORGRESPONSE']._serialized_start=20807
603
+ _globals['_CREATEORGRESPONSE']._serialized_end=20852
604
+ _globals['_RENAMEORGREQUEST']._serialized_start=20854
605
+ _globals['_RENAMEORGREQUEST']._serialized_end=20902
606
+ _globals['_RENAMEORGRESPONSE']._serialized_start=20904
607
+ _globals['_RENAMEORGRESPONSE']._serialized_end=20923
608
+ _globals['_GETORGMEMBERSREQUEST']._serialized_start=20925
609
+ _globals['_GETORGMEMBERSREQUEST']._serialized_end=20963
610
+ _globals['_GETORGMEMBERSRESPONSE']._serialized_start=20965
611
+ _globals['_GETORGMEMBERSRESPONSE']._serialized_end=21078
612
+ _globals['_ORGMEMBERINFO']._serialized_start=21080
613
+ _globals['_ORGMEMBERINFO']._serialized_end=21173
614
+ _globals['_ORGINVITEINFO']._serialized_start=21176
615
+ _globals['_ORGINVITEINFO']._serialized_end=21317
616
+ _globals['_INVITEORGMEMBERREQUEST']._serialized_start=21319
617
+ _globals['_INVITEORGMEMBERREQUEST']._serialized_end=21388
618
+ _globals['_INVITEORGMEMBERRESPONSE']._serialized_start=21390
619
+ _globals['_INVITEORGMEMBERRESPONSE']._serialized_end=21512
620
+ _globals['_REVOKEORGINVITEREQUEST']._serialized_start=21514
621
+ _globals['_REVOKEORGINVITEREQUEST']._serialized_end=21553
622
+ _globals['_REVOKEORGINVITERESPONSE']._serialized_start=21555
623
+ _globals['_REVOKEORGINVITERESPONSE']._serialized_end=21580
624
+ _globals['_REMOVEORGMEMBERREQUEST']._serialized_start=21582
625
+ _globals['_REMOVEORGMEMBERREQUEST']._serialized_end=21639
626
+ _globals['_REMOVEORGMEMBERRESPONSE']._serialized_start=21641
627
+ _globals['_REMOVEORGMEMBERRESPONSE']._serialized_end=21666
628
+ _globals['_SETORGMEMBERROLEREQUEST']._serialized_start=21668
629
+ _globals['_SETORGMEMBERROLEREQUEST']._serialized_end=21740
630
+ _globals['_SETORGMEMBERROLERESPONSE']._serialized_start=21742
631
+ _globals['_SETORGMEMBERROLERESPONSE']._serialized_end=21768
632
+ _globals['_TEAMINFO']._serialized_start=21771
633
+ _globals['_TEAMINFO']._serialized_end=21964
634
+ _globals['_TEAMMEMBERINFO']._serialized_start=21966
635
+ _globals['_TEAMMEMBERINFO']._serialized_end=22078
636
+ _globals['_LISTTEAMSREQUEST']._serialized_start=22080
637
+ _globals['_LISTTEAMSREQUEST']._serialized_end=22114
638
+ _globals['_LISTTEAMSRESPONSE']._serialized_start=22116
639
+ _globals['_LISTTEAMSRESPONSE']._serialized_end=22173
640
+ _globals['_GETTEAMREQUEST']._serialized_start=22175
641
+ _globals['_GETTEAMREQUEST']._serialized_end=22208
642
+ _globals['_CREATETEAMREQUEST']._serialized_start=22210
643
+ _globals['_CREATETEAMREQUEST']._serialized_end=22259
644
+ _globals['_RENAMETEAMREQUEST']._serialized_start=22261
645
+ _globals['_RENAMETEAMREQUEST']._serialized_end=22311
646
+ _globals['_RENAMETEAMRESPONSE']._serialized_start=22313
647
+ _globals['_RENAMETEAMRESPONSE']._serialized_end=22333
648
+ _globals['_DESTROYTEAMREQUEST']._serialized_start=22335
649
+ _globals['_DESTROYTEAMREQUEST']._serialized_end=22372
650
+ _globals['_DESTROYTEAMRESPONSE']._serialized_start=22374
651
+ _globals['_DESTROYTEAMRESPONSE']._serialized_end=22395
652
+ _globals['_ADDTEAMMEMBERREQUEST']._serialized_start=22397
653
+ _globals['_ADDTEAMMEMBERREQUEST']._serialized_end=22453
654
+ _globals['_ADDTEAMMEMBERRESPONSE']._serialized_start=22455
655
+ _globals['_ADDTEAMMEMBERRESPONSE']._serialized_end=22478
656
+ _globals['_REMOVETEAMMEMBERREQUEST']._serialized_start=22480
657
+ _globals['_REMOVETEAMMEMBERREQUEST']._serialized_end=22539
658
+ _globals['_REMOVETEAMMEMBERRESPONSE']._serialized_start=22541
659
+ _globals['_REMOVETEAMMEMBERRESPONSE']._serialized_end=22567
660
+ _globals['_SETTEAMMEMBERROLEREQUEST']._serialized_start=22569
661
+ _globals['_SETTEAMMEMBERROLEREQUEST']._serialized_end=22643
662
+ _globals['_SETTEAMMEMBERROLERESPONSE']._serialized_start=22645
663
+ _globals['_SETTEAMMEMBERROLERESPONSE']._serialized_end=22672
664
+ _globals['_SETTEAMDEFAULTSNAPSHOTREQUEST']._serialized_start=22674
665
+ _globals['_SETTEAMDEFAULTSNAPSHOTREQUEST']._serialized_end=22743
666
+ _globals['_SETTEAMDEFAULTSNAPSHOTRESPONSE']._serialized_start=22745
667
+ _globals['_SETTEAMDEFAULTSNAPSHOTRESPONSE']._serialized_end=22777
668
+ _globals['_GETORGMACHINELIMITREQUEST']._serialized_start=22779
669
+ _globals['_GETORGMACHINELIMITREQUEST']._serialized_end=22822
670
+ _globals['_GETORGMACHINELIMITRESPONSE']._serialized_start=22825
671
+ _globals['_GETORGMACHINELIMITRESPONSE']._serialized_end=22989
672
+ _globals['_REQUESTORGMACHINELIMITREQUEST']._serialized_start=22991
673
+ _globals['_REQUESTORGMACHINELIMITREQUEST']._serialized_end=23072
674
+ _globals['_REQUESTORGMACHINELIMITRESPONSE']._serialized_start=23074
675
+ _globals['_REQUESTORGMACHINELIMITRESPONSE']._serialized_end=23155
676
+ _globals['_BOXDAPI']._serialized_start=23310
677
+ _globals['_BOXDAPI']._serialized_end=34700
668
678
  # @@protoc_insertion_point(module_scope)
@@ -594,6 +594,16 @@ class BoxdApiStub(object):
594
594
  request_serializer=api__pb2.GetOrgBotProtectionDefaultRequest.SerializeToString,
595
595
  response_deserializer=api__pb2.GetOrgBotProtectionDefaultResponse.FromString,
596
596
  _registered_method=True)
597
+ self.GetOrgMachineLimit = channel.unary_unary(
598
+ '/boxd.api.v1.BoxdApi/GetOrgMachineLimit',
599
+ request_serializer=api__pb2.GetOrgMachineLimitRequest.SerializeToString,
600
+ response_deserializer=api__pb2.GetOrgMachineLimitResponse.FromString,
601
+ _registered_method=True)
602
+ self.RequestOrgMachineLimit = channel.unary_unary(
603
+ '/boxd.api.v1.BoxdApi/RequestOrgMachineLimit',
604
+ request_serializer=api__pb2.RequestOrgMachineLimitRequest.SerializeToString,
605
+ response_deserializer=api__pb2.RequestOrgMachineLimitResponse.FromString,
606
+ _registered_method=True)
597
607
  self.CreateOrg = channel.unary_unary(
598
608
  '/boxd.api.v1.BoxdApi/CreateOrg',
599
609
  request_serializer=api__pb2.CreateOrgRequest.SerializeToString,
@@ -1535,6 +1545,24 @@ class BoxdApiServicer(object):
1535
1545
  context.set_details('Method not implemented!')
1536
1546
  raise NotImplementedError('Method not implemented!')
1537
1547
 
1548
+ def GetOrgMachineLimit(self, request, context):
1549
+ """The org's machine limit (how many machines it may have at once) and
1550
+ asking for a higher one. Get is readable by any member, with a login or
1551
+ an API key issued for the org. Request is the org owner's: with their
1552
+ login, or an API key of theirs issued for the org; a token minted inside
1553
+ a machine can't make one. One request may be open per org at a time; the
1554
+ owner gets an email when the limit changes.
1555
+ """
1556
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1557
+ context.set_details('Method not implemented!')
1558
+ raise NotImplementedError('Method not implemented!')
1559
+
1560
+ def RequestOrgMachineLimit(self, request, context):
1561
+ """Missing associated documentation comment in .proto file."""
1562
+ context.set_code(grpc.StatusCode.UNIMPLEMENTED)
1563
+ context.set_details('Method not implemented!')
1564
+ raise NotImplementedError('Method not implemented!')
1565
+
1538
1566
  def CreateOrg(self, request, context):
1539
1567
  """Org creation, roster, and membership (self-serve, same business rules as
1540
1568
  the console). Any signed-in
@@ -2246,6 +2274,16 @@ def add_BoxdApiServicer_to_server(servicer, server):
2246
2274
  request_deserializer=api__pb2.GetOrgBotProtectionDefaultRequest.FromString,
2247
2275
  response_serializer=api__pb2.GetOrgBotProtectionDefaultResponse.SerializeToString,
2248
2276
  ),
2277
+ 'GetOrgMachineLimit': grpc.unary_unary_rpc_method_handler(
2278
+ servicer.GetOrgMachineLimit,
2279
+ request_deserializer=api__pb2.GetOrgMachineLimitRequest.FromString,
2280
+ response_serializer=api__pb2.GetOrgMachineLimitResponse.SerializeToString,
2281
+ ),
2282
+ 'RequestOrgMachineLimit': grpc.unary_unary_rpc_method_handler(
2283
+ servicer.RequestOrgMachineLimit,
2284
+ request_deserializer=api__pb2.RequestOrgMachineLimitRequest.FromString,
2285
+ response_serializer=api__pb2.RequestOrgMachineLimitResponse.SerializeToString,
2286
+ ),
2249
2287
  'CreateOrg': grpc.unary_unary_rpc_method_handler(
2250
2288
  servicer.CreateOrg,
2251
2289
  request_deserializer=api__pb2.CreateOrgRequest.FromString,
@@ -5371,6 +5409,60 @@ class BoxdApi(object):
5371
5409
  metadata,
5372
5410
  _registered_method=True)
5373
5411
 
5412
+ @staticmethod
5413
+ def GetOrgMachineLimit(request,
5414
+ target,
5415
+ options=(),
5416
+ channel_credentials=None,
5417
+ call_credentials=None,
5418
+ insecure=False,
5419
+ compression=None,
5420
+ wait_for_ready=None,
5421
+ timeout=None,
5422
+ metadata=None):
5423
+ return grpc.experimental.unary_unary(
5424
+ request,
5425
+ target,
5426
+ '/boxd.api.v1.BoxdApi/GetOrgMachineLimit',
5427
+ api__pb2.GetOrgMachineLimitRequest.SerializeToString,
5428
+ api__pb2.GetOrgMachineLimitResponse.FromString,
5429
+ options,
5430
+ channel_credentials,
5431
+ insecure,
5432
+ call_credentials,
5433
+ compression,
5434
+ wait_for_ready,
5435
+ timeout,
5436
+ metadata,
5437
+ _registered_method=True)
5438
+
5439
+ @staticmethod
5440
+ def RequestOrgMachineLimit(request,
5441
+ target,
5442
+ options=(),
5443
+ channel_credentials=None,
5444
+ call_credentials=None,
5445
+ insecure=False,
5446
+ compression=None,
5447
+ wait_for_ready=None,
5448
+ timeout=None,
5449
+ metadata=None):
5450
+ return grpc.experimental.unary_unary(
5451
+ request,
5452
+ target,
5453
+ '/boxd.api.v1.BoxdApi/RequestOrgMachineLimit',
5454
+ api__pb2.RequestOrgMachineLimitRequest.SerializeToString,
5455
+ api__pb2.RequestOrgMachineLimitResponse.FromString,
5456
+ options,
5457
+ channel_credentials,
5458
+ insecure,
5459
+ call_credentials,
5460
+ compression,
5461
+ wait_for_ready,
5462
+ timeout,
5463
+ metadata,
5464
+ _registered_method=True)
5465
+
5374
5466
  @staticmethod
5375
5467
  def CreateOrg(request,
5376
5468
  target,
@@ -59,7 +59,9 @@ from .models import (
59
59
  OrgIdleIgnoreOutboundDefault,
60
60
  OrgIdleIgnoreOutboundDefaultResult,
61
61
  OrgInvite,
62
+ MachineLimitRequest,
62
63
  OrgMachineDefaults,
64
+ OrgMachineLimit,
63
65
  OrgMember,
64
66
  OrgMembers,
65
67
  OrgRef,
@@ -550,6 +552,34 @@ def org_machine_defaults(msg) -> OrgMachineDefaults:
550
552
  )
551
553
 
552
554
 
555
+ def machine_limit_request(requested_at: int, max_vms: int) -> MachineLimitRequest | None:
556
+ """`requested_at` 0 = no request open; `max_vms` 0 = it named no number."""
557
+ if requested_at <= 0:
558
+ return None
559
+ return MachineLimitRequest(
560
+ requested_at=_epoch_always(requested_at), max_vms=max_vms or None
561
+ )
562
+
563
+
564
+ def opened_machine_limit_request(msg) -> MachineLimitRequest:
565
+ """A `RequestOrgMachineLimit` answer: the request just opened."""
566
+ return MachineLimitRequest(
567
+ requested_at=_epoch_always(msg.requested_at),
568
+ max_vms=msg.requested_max_vms or None,
569
+ )
570
+
571
+
572
+ def org_machine_limit(msg) -> OrgMachineLimit:
573
+ return OrgMachineLimit(
574
+ org_id=msg.org_id,
575
+ org_name=msg.org_name,
576
+ max_vms=msg.max_vms,
577
+ vm_count=msg.vm_count,
578
+ is_owner=msg.is_owner,
579
+ request=machine_limit_request(msg.requested_at, msg.requested_max_vms),
580
+ )
581
+
582
+
553
583
  def org_idle_ignore_outbound_default(msg) -> OrgIdleIgnoreOutboundDefault:
554
584
  # `set` on the wire; `is_set` here, like `OrgMachineDefaults`.
555
585
  return OrgIdleIgnoreOutboundDefault(
@@ -605,6 +635,7 @@ def org_invite(msg) -> OrgInvite:
605
635
  created_at=_epoch_always(msg.created_at),
606
636
  expires_at=_epoch_always(msg.expires_at),
607
637
  role=msg.role,
638
+ email_status=msg.email_status,
608
639
  )
609
640
 
610
641
 
@@ -626,6 +657,7 @@ def invited_org_member(msg, email: str, role: str) -> OrgInvite:
626
657
  created_at=_epoch_always(msg.created_at),
627
658
  expires_at=_epoch_always(msg.expires_at),
628
659
  role=role,
660
+ email_status=msg.email_status,
629
661
  )
630
662
 
631
663
 
@@ -760,6 +760,32 @@ class OrgMachineDefaults(BaseModel):
760
760
  ceiling_memory_bytes: int
761
761
 
762
762
 
763
+ class MachineLimitRequest(BaseModel):
764
+ """An open request for a higher machine limit."""
765
+
766
+ requested_at: datetime
767
+ max_vms: int | None
768
+ """The machine limit asked for, in total. None for a request that named
769
+ no number."""
770
+
771
+
772
+ class OrgMachineLimit(BaseModel):
773
+ """How many machines an org may have at once, how many it has, and the
774
+ open request for more."""
775
+
776
+ org_id: str
777
+ org_name: str
778
+ max_vms: int
779
+ """The machine limit."""
780
+ vm_count: int
781
+ """Machines that count against it now."""
782
+ is_owner: bool
783
+ """True when you are the org's owner, who may ask for more."""
784
+ request: MachineLimitRequest | None
785
+ """The open request for a higher limit, or None. The owner's message is
786
+ never shown back."""
787
+
788
+
763
789
  class OrgIdleIgnoreOutboundDefault(BaseModel):
764
790
  """Whether new machines in an org start with ``idle_ignore_outbound`` on."""
765
791
 
@@ -841,6 +867,14 @@ class OrgInvite(BaseModel):
841
867
  expires_at: datetime
842
868
  role: Literal["admin", "member"] | str
843
869
  """The role the invitee lands with on accept."""
870
+ email_status: str = ""
871
+ """What happened to the invite email. From :meth:`Orgs.invite`:
872
+ ``"sent"``, ``"failed"`` (the send was refused) or ``"not_configured"``
873
+ (the cluster sends no email). From :meth:`Orgs.get_members`, also the
874
+ mail provider's delivery reports: ``"delivered"``, ``"delivery_delayed"``,
875
+ ``"bounced"``, ``"complained"``, ``"opened"``, ``"clicked"``. ``""`` =
876
+ unknown (an older server or invite). ``accept_url`` works either way, so
877
+ share it yourself when the email didn't arrive."""
844
878
 
845
879
 
846
880
  class OrgMembers(BaseModel):
@@ -20,7 +20,9 @@ from ..models import (
20
20
  OrgIdleIgnoreOutboundDefault,
21
21
  OrgIdleIgnoreOutboundDefaultResult,
22
22
  OrgInvite,
23
+ MachineLimitRequest,
23
24
  OrgMachineDefaults,
25
+ OrgMachineLimit,
24
26
  OrgMembers,
25
27
  OrgUsage,
26
28
  )
@@ -81,6 +83,7 @@ class Orgs(Namespace):
81
83
  Best-effort emails the invite link (when the cluster has email
82
84
  configured) — `accept_url` on the result always works regardless, so
83
85
  delivery failing (or not being configured) never loses the invite.
86
+ `email_status` on the result says whether the email went out.
84
87
  """
85
88
  resp = self._transport.call(
86
89
  "InviteOrgMember",
@@ -315,6 +318,43 @@ class Orgs(Namespace):
315
318
  api_pb2.SetOrgBotProtectionDefaultRequest(org_id=org, mode=""),
316
319
  )
317
320
 
321
+ def get_machine_limit(self, org: str = "") -> OrgMachineLimit:
322
+ """The org's machine limit, how many machines count against it, and
323
+ the open request for a higher one.
324
+
325
+ Readable by any member, with a login or an API key issued for the
326
+ org; not from a token minted inside a machine.
327
+ """
328
+ return m.org_machine_limit(
329
+ self._transport.call(
330
+ "GetOrgMachineLimit",
331
+ api_pb2.GetOrgMachineLimitRequest(org_id=org),
332
+ )
333
+ )
334
+
335
+ def request_machine_limit(
336
+ self, max_vms: int, *, message: str | None = None, org: str = ""
337
+ ) -> MachineLimitRequest:
338
+ """Ask boxd for a higher machine limit. The org's owner only, with
339
+ their login or an API key of theirs issued for the org.
340
+
341
+ ``max_vms`` is the new total wanted: above the current limit, at most
342
+ 1000. ``message`` (optional, at most 1000 characters) says why. The
343
+ owner gets an email when the limit changes; until then the request
344
+ stays open and another one raises `ConflictError`. Anyone else gets
345
+ `PermissionDeniedError`, an out-of-range limit or message
346
+ `BoxdError` with code ``invalid_argument``.
347
+ """
348
+ if isinstance(max_vms, bool) or not isinstance(max_vms, int) or max_vms < 1:
349
+ raise ValueError(f"max_vms must be a whole number above 0, not {max_vms!r}")
350
+ resp = self._transport.call(
351
+ "RequestOrgMachineLimit",
352
+ api_pb2.RequestOrgMachineLimitRequest(
353
+ org_id=org, max_vms=max_vms, message=message or ""
354
+ ),
355
+ )
356
+ return m.opened_machine_limit_request(resp)
357
+
318
358
  def usage(
319
359
  self,
320
360
  *,
@@ -446,6 +486,7 @@ class AsyncOrgs(Namespace):
446
486
  Best-effort emails the invite link (when the cluster has email
447
487
  configured) — `accept_url` on the result always works regardless, so
448
488
  delivery failing (or not being configured) never loses the invite.
489
+ `email_status` on the result says whether the email went out.
449
490
  """
450
491
  resp = await self._transport.call(
451
492
  "InviteOrgMember",
@@ -643,6 +684,43 @@ class AsyncOrgs(Namespace):
643
684
  api_pb2.SetOrgBotProtectionDefaultRequest(org_id=org, mode=""),
644
685
  )
645
686
 
687
+ async def get_machine_limit(self, org: str = "") -> OrgMachineLimit:
688
+ """The org's machine limit, how many machines count against it, and
689
+ the open request for a higher one.
690
+
691
+ Readable by any member, with a login or an API key issued for the
692
+ org; not from a token minted inside a machine.
693
+ """
694
+ return m.org_machine_limit(
695
+ await self._transport.call(
696
+ "GetOrgMachineLimit",
697
+ api_pb2.GetOrgMachineLimitRequest(org_id=org),
698
+ )
699
+ )
700
+
701
+ async def request_machine_limit(
702
+ self, max_vms: int, *, message: str | None = None, org: str = ""
703
+ ) -> MachineLimitRequest:
704
+ """Ask boxd for a higher machine limit. The org's owner only, with
705
+ their login or an API key of theirs issued for the org.
706
+
707
+ ``max_vms`` is the new total wanted: above the current limit, at most
708
+ 1000. ``message`` (optional, at most 1000 characters) says why. The
709
+ owner gets an email when the limit changes; until then the request
710
+ stays open and another one raises `ConflictError`. Anyone else gets
711
+ `PermissionDeniedError`, an out-of-range limit or message
712
+ `BoxdError` with code ``invalid_argument``.
713
+ """
714
+ if isinstance(max_vms, bool) or not isinstance(max_vms, int) or max_vms < 1:
715
+ raise ValueError(f"max_vms must be a whole number above 0, not {max_vms!r}")
716
+ resp = await self._transport.call(
717
+ "RequestOrgMachineLimit",
718
+ api_pb2.RequestOrgMachineLimitRequest(
719
+ org_id=org, max_vms=max_vms, message=message or ""
720
+ ),
721
+ )
722
+ return m.opened_machine_limit_request(resp)
723
+
646
724
  async def usage(
647
725
  self,
648
726
  *,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boxd
3
- Version: 0.2.20.dev929
3
+ Version: 0.2.21.dev931
4
4
  Summary: Python SDK for the boxd cloud VM platform
5
5
  Author: Azin
6
6
  License-Expression: MIT
@@ -1121,6 +1121,22 @@ i.platform_enabled # the platform's setting, thi
1121
1121
  boxd.orgs.clear_idle_ignore_outbound_default("acme") # existing machines keep theirs
1122
1122
  ```
1123
1123
 
1124
+ An org has a machine limit: how many machines it may have at once. Any member
1125
+ can read it; the org's owner can ask for a higher one, with their login or an
1126
+ API key of theirs issued for the org. One request is open at a time, and the
1127
+ owner gets an email when the limit changes.
1128
+
1129
+ ```python
1130
+ l = boxd.orgs.get_machine_limit("acme")
1131
+ l.max_vms, l.vm_count # the limit, machines counting against it
1132
+ l.is_owner # True = you may ask for more
1133
+ l.request # the open request, or None
1134
+ r = boxd.orgs.request_machine_limit(100, message="CI runners", org="acme")
1135
+ r.max_vms, r.requested_at # 100 in total, when it was asked
1136
+ # a second one raises ConflictError until the limit changes; a member gets
1137
+ # PermissionDeniedError
1138
+ ```
1139
+
1124
1140
  ```python
1125
1141
  key = boxd.api_keys.create(
1126
1142
  "ci",
@@ -665,3 +665,31 @@ def test_desktop_url_is_the_console_origin_plus_the_name():
665
665
  "https://app.boxd.sh/desktop/box"
666
666
  )
667
667
  assert m.machine(vm).access.desktop_url == ""
668
+
669
+
670
+ def test_invites_carry_their_email_status():
671
+ """`Orgs.invite` and `Orgs.get_members` both say what became of the
672
+ email; an older server's empty field stays empty, not a guess."""
673
+ invited = m.invited_org_member(
674
+ api_pb2.InviteOrgMemberResponse(
675
+ token="tok",
676
+ accept_url="https://app.example.com/accept?token=tok",
677
+ created_at=1_700_000_000,
678
+ expires_at=1_700_172_800,
679
+ email_status="failed",
680
+ ),
681
+ "new@example.com",
682
+ "member",
683
+ )
684
+ assert invited.email_status == "failed"
685
+ assert invited.accept_url.endswith("token=tok")
686
+
687
+ members = m.org_members(
688
+ api_pb2.GetOrgMembersResponse(
689
+ invites=[
690
+ api_pb2.OrgInviteInfo(token="a", email="a@example.com", email_status="bounced"),
691
+ api_pb2.OrgInviteInfo(token="b", email="b@example.com"),
692
+ ]
693
+ )
694
+ )
695
+ assert [i.email_status for i in members.invites] == ["bounced", ""]
@@ -1952,3 +1952,97 @@ async def test_async_orgs_billing_activity_walks_every_page():
1952
1952
 
1953
1953
  transport = FakeAsyncTransport([_billing_activity_page(["a"], "tok"), _billing_activity_page(["b"])])
1954
1954
  assert [e.id async for e in AsyncOrgs(transport).billing_activity()] == ["a", "b"]
1955
+
1956
+
1957
+ def test_orgs_get_and_request_machine_limit():
1958
+ from boxd.resources.orgs import Orgs
1959
+
1960
+ transport = FakeTransport(
1961
+ [
1962
+ api_pb2.GetOrgMachineLimitResponse(
1963
+ org_id="org-1", org_name="acme", max_vms=50, vm_count=48, is_owner=True
1964
+ ),
1965
+ api_pb2.RequestOrgMachineLimitResponse(
1966
+ requested_at=1_790_000_000, requested_max_vms=80
1967
+ ),
1968
+ api_pb2.GetOrgMachineLimitResponse(
1969
+ org_id="org-1",
1970
+ org_name="acme",
1971
+ max_vms=50,
1972
+ vm_count=48,
1973
+ requested_at=1_790_000_000,
1974
+ requested_max_vms=80,
1975
+ ),
1976
+ ]
1977
+ )
1978
+ ns = Orgs(transport)
1979
+
1980
+ limit = ns.get_machine_limit("acme")
1981
+ assert transport.calls[0] == (
1982
+ "GetOrgMachineLimit",
1983
+ api_pb2.GetOrgMachineLimitRequest(org_id="acme"),
1984
+ )
1985
+ assert (limit.org_id, limit.max_vms, limit.vm_count) == ("org-1", 50, 48)
1986
+ assert limit.is_owner is True
1987
+ assert limit.request is None
1988
+
1989
+ opened = ns.request_machine_limit(80, message="CI runners")
1990
+ method, request = transport.calls[1]
1991
+ assert method == "RequestOrgMachineLimit"
1992
+ assert (request.org_id, request.max_vms, request.message) == ("", 80, "CI runners")
1993
+ assert opened.max_vms == 80
1994
+ assert opened.requested_at == datetime(2026, 9, 21, 14, 13, 20, tzinfo=timezone.utc)
1995
+
1996
+ # Every member sees the open request; only the owner is told they own it.
1997
+ limit = ns.get_machine_limit()
1998
+ assert limit.is_owner is False
1999
+ assert limit.request is not None
2000
+ assert (limit.request.max_vms, limit.request.requested_at) == (80, opened.requested_at)
2001
+
2002
+
2003
+ def test_request_machine_limit_refuses_a_non_positive_limit_locally():
2004
+ from boxd.resources.orgs import Orgs
2005
+
2006
+ transport = FakeTransport([])
2007
+ for bad in (0, -5, True, 2.5, "80"):
2008
+ with pytest.raises(ValueError, match="max_vms"):
2009
+ Orgs(transport).request_machine_limit(bad) # type: ignore[arg-type]
2010
+ assert transport.calls == []
2011
+
2012
+
2013
+ def test_machine_limit_refusals_map_to_the_sdk_errors():
2014
+ # What the server answers a second request, a member, and a bad limit.
2015
+ from boxd.errors import BoxdError, ConflictError, PermissionDeniedError, from_grpc_error
2016
+
2017
+ conflict = from_grpc_error(
2018
+ FakeRpcError(
2019
+ grpc.StatusCode.ALREADY_EXISTS,
2020
+ "You've already asked for more machines. We'll email you when your limit changes.",
2021
+ )
2022
+ )
2023
+ assert isinstance(conflict, ConflictError)
2024
+ assert "already asked" in str(conflict)
2025
+ assert isinstance(
2026
+ from_grpc_error(FakeRpcError(grpc.StatusCode.PERMISSION_DENIED, "owner only")),
2027
+ PermissionDeniedError,
2028
+ )
2029
+ invalid = from_grpc_error(FakeRpcError(grpc.StatusCode.INVALID_ARGUMENT, "at most 1000"))
2030
+ assert isinstance(invalid, BoxdError) and invalid.code == "invalid_argument"
2031
+
2032
+
2033
+ async def test_async_machine_limit_matches_sync():
2034
+ from boxd.resources.orgs import AsyncOrgs
2035
+
2036
+ transport = FakeAsyncTransport(
2037
+ [
2038
+ api_pb2.GetOrgMachineLimitResponse(org_id="org-1", max_vms=50, is_owner=True),
2039
+ api_pb2.RequestOrgMachineLimitResponse(requested_at=1_790_000_000, requested_max_vms=60),
2040
+ ]
2041
+ )
2042
+ ns = AsyncOrgs(transport)
2043
+ limit = await ns.get_machine_limit()
2044
+ assert (limit.max_vms, limit.is_owner, limit.request) == (50, True, None)
2045
+ opened = await ns.request_machine_limit(60, org="org-1")
2046
+ assert transport.calls[1][0] == "RequestOrgMachineLimit"
2047
+ assert (transport.calls[1][1].org_id, transport.calls[1][1].message) == ("org-1", "")
2048
+ assert opened.max_vms == 60
File without changes
File without changes