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.
- {boxd-0.2.20.dev929/src/boxd.egg-info → boxd-0.2.21.dev931}/PKG-INFO +17 -1
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/README.md +16 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/pyproject.toml +1 -1
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/__init__.py +4 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_generated/api_pb2.py +100 -90
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_generated/api_pb2_grpc.py +92 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_mappers.py +32 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/models.py +34 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/orgs.py +78 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931/src/boxd.egg-info}/PKG-INFO +17 -1
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_mappers.py +28 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_namespaces.py +94 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/LICENSE +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/setup.cfg +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_client.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_credentials.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_generated/__init__.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_requests.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_streaming.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_transport.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_urls.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/_version_check.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/errors.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/py.typed +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/__init__.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/account.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/credentials.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/disks.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/domains.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/fs.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/machines.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/snapshots.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/teams.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/resources/vars.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd/spec.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd.egg-info/SOURCES.txt +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd.egg-info/dependency_links.txt +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd.egg-info/requires.txt +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/src/boxd.egg-info/top_level.txt +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_credentials.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_delete_self.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_fs.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_python_versions.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_requests.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_spec.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_streaming.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_transport.py +0 -0
- {boxd-0.2.20.dev929 → boxd-0.2.21.dev931}/tests/test_urls.py +0 -0
- {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.
|
|
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",
|
|
@@ -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=
|
|
67
|
-
_globals['_FSENTRYTYPE']._serialized_end=
|
|
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=
|
|
582
|
-
_globals['
|
|
583
|
-
_globals['
|
|
584
|
-
_globals['
|
|
585
|
-
_globals['
|
|
586
|
-
_globals['
|
|
587
|
-
_globals['
|
|
588
|
-
_globals['
|
|
589
|
-
_globals['
|
|
590
|
-
_globals['
|
|
591
|
-
_globals['
|
|
592
|
-
_globals['
|
|
593
|
-
_globals['
|
|
594
|
-
_globals['
|
|
595
|
-
_globals['
|
|
596
|
-
_globals['
|
|
597
|
-
_globals['
|
|
598
|
-
_globals['
|
|
599
|
-
_globals['
|
|
600
|
-
_globals['
|
|
601
|
-
_globals['
|
|
602
|
-
_globals['
|
|
603
|
-
_globals['
|
|
604
|
-
_globals['
|
|
605
|
-
_globals['
|
|
606
|
-
_globals['
|
|
607
|
-
_globals['
|
|
608
|
-
_globals['
|
|
609
|
-
_globals['
|
|
610
|
-
_globals['
|
|
611
|
-
_globals['
|
|
612
|
-
_globals['
|
|
613
|
-
_globals['
|
|
614
|
-
_globals['
|
|
615
|
-
_globals['
|
|
616
|
-
_globals['
|
|
617
|
-
_globals['
|
|
618
|
-
_globals['
|
|
619
|
-
_globals['
|
|
620
|
-
_globals['
|
|
621
|
-
_globals['
|
|
622
|
-
_globals['
|
|
623
|
-
_globals['
|
|
624
|
-
_globals['
|
|
625
|
-
_globals['
|
|
626
|
-
_globals['
|
|
627
|
-
_globals['
|
|
628
|
-
_globals['
|
|
629
|
-
_globals['
|
|
630
|
-
_globals['
|
|
631
|
-
_globals['
|
|
632
|
-
_globals['
|
|
633
|
-
_globals['
|
|
634
|
-
_globals['
|
|
635
|
-
_globals['
|
|
636
|
-
_globals['
|
|
637
|
-
_globals['
|
|
638
|
-
_globals['
|
|
639
|
-
_globals['
|
|
640
|
-
_globals['
|
|
641
|
-
_globals['
|
|
642
|
-
_globals['
|
|
643
|
-
_globals['
|
|
644
|
-
_globals['
|
|
645
|
-
_globals['
|
|
646
|
-
_globals['
|
|
647
|
-
_globals['
|
|
648
|
-
_globals['
|
|
649
|
-
_globals['
|
|
650
|
-
_globals['
|
|
651
|
-
_globals['
|
|
652
|
-
_globals['
|
|
653
|
-
_globals['
|
|
654
|
-
_globals['
|
|
655
|
-
_globals['
|
|
656
|
-
_globals['
|
|
657
|
-
_globals['
|
|
658
|
-
_globals['
|
|
659
|
-
_globals['
|
|
660
|
-
_globals['
|
|
661
|
-
_globals['
|
|
662
|
-
_globals['
|
|
663
|
-
_globals['
|
|
664
|
-
_globals['
|
|
665
|
-
_globals['
|
|
666
|
-
_globals['
|
|
667
|
-
_globals['
|
|
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.
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|